mirror of
https://github.com/modelscope/FunASR.git
synced 2026-10-12 02:19:18 +00:00
docs: add vehicle plate fine-tuning guide (#3616)
Co-authored-by: LauraGPT <[email protected]>
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
- **应该用哪个安装命令、模型 id 或 hub?** 看[安装或 import 失败](#安装或-import-失败)和[模型下载慢或失败](#模型下载慢或失败)。对应 #3321、#3045、#3042、#2973、#2976 等问题。
|
- **应该用哪个安装命令、模型 id 或 hub?** 看[安装或 import 失败](#安装或-import-失败)和[模型下载慢或失败](#模型下载慢或失败)。对应 #3321、#3045、#3042、#2973、#2976 等问题。
|
||||||
- **CPU、CUDA、Vulkan、GGUF 应该下载哪个 runtime 包?** 看[llama.cpp 或 GGUF runtime 无法启动](#llamacpp-或-gguf-runtime-无法启动)。对应 #3298、#3297、#3296、#3289、#3243 等问题。
|
- **CPU、CUDA、Vulkan、GGUF 应该下载哪个 runtime 包?** 看[llama.cpp 或 GGUF runtime 无法启动](#llamacpp-或-gguf-runtime-无法启动)。对应 #3298、#3297、#3296、#3289、#3243 等问题。
|
||||||
- **实时服务、VAD、vLLM 或 server 输出为什么延迟、为空,或和本地 Python 不一致?** 看[`funasr-server` 启动后 OpenAI 兼容接口请求失败](#funasr-server-启动后-openai-兼容接口请求失败)和[WebSocket 实时输出为空或延迟很大](#websocket-实时输出为空或延迟很大)。对应 #3101、#3109、#3038、#3031、#2968、#2965 等问题。
|
- **实时服务、VAD、vLLM 或 server 输出为什么延迟、为空,或和本地 Python 不一致?** 看[`funasr-server` 启动后 OpenAI 兼容接口请求失败](#funasr-server-启动后-openai-兼容接口请求失败)和[WebSocket 实时输出为空或延迟很大](#websocket-实时输出为空或延迟很大)。对应 #3101、#3109、#3038、#3031、#2968、#2965 等问题。
|
||||||
|
- **电话车牌、方言、重复确认语音怎么微调和评测?** 看[电话车牌语音的微调与评测](./vehicle_plate_finetuning_zh.md)。热词是软提示,不是确定性车牌纠错。
|
||||||
|
|
||||||
## 安装或 import 失败
|
## 安装或 import 失败
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# 电话车牌语音的微调与评测
|
||||||
|
|
||||||
|
电话挪车、客服确认和方言口音中的车牌识别,应把逐字 ASR 与最终车牌提取分成两个任务。本文适用于 Fun-ASR-Nano 的离线推理或 LoRA 微调;它不承诺热词能够对车牌做字符级纠错。
|
||||||
|
|
||||||
|
## 先建立基础模型基线
|
||||||
|
|
||||||
|
在训练前,对同一批脱敏音频固定模型 revision、运行路径、GPU、语言提示和 `itn=True`,至少保存三组原始输出:无热词、仅省份前缀热词、以及省份前缀加业务词的热词。`hotwords` 是提示词偏置,**不是确定性纠错**;它可能影响局部文本,却不能保证恢复重复确认、中文数字与字母混读里的完整车牌。
|
||||||
|
|
||||||
|
不要只记录最终业务系统选出的车牌。保存原始 ASR 文本、热词列表、推理日志和音频 SHA-256,才能区分声学漏转、ITN 规整和下游提取错误。
|
||||||
|
|
||||||
|
## 切分与标注
|
||||||
|
|
||||||
|
训练样本以一次完整播报或确认轮次为单位,建议切成 **2-12 秒** 的语义片段,并在两端保留约 0.2-0.5 秒自然上下文。不要把整段客服通话随机拼成一条训练样本,也不要只截取孤立的 7 个车牌字符。
|
||||||
|
|
||||||
|
ASR 标签写实际听到的内容,即**逐字转写**:保留重复、修正、停顿词、中文数字和确认语气。不要把“鄂A六T R零七......六T六G R零七”直接标成一个业务系统选择的最终车牌。最终车牌属于下游规则或结构化模型的任务;把两类标签混用会导致模型学到不可预测的删改。
|
||||||
|
|
||||||
|
保留原始整通电话只用于端到端回归。训练、开发和测试集应按通话或说话人划分,避免同一通话的相邻片段跨集合泄漏。脱敏后再保存数据,删除手机号、姓名和非必要对话内容。
|
||||||
|
|
||||||
|
## 数据量与迭代
|
||||||
|
|
||||||
|
先准备约 **1,000** 条高质量切分片段,留出 15%-20% 的通话级独立验证/测试集。确认相对基础模型存在稳定增益后,再扩到 **3,000-5,000** 条;优先补充当前失败最多的方言、男女声、电话压缩、噪声、字母/数字混读、重复与纠正样本,而不是机械复制相近音频。
|
||||||
|
|
||||||
|
LoRA 前后必须在同一份冻结集上对照,并记录 checkpoint、训练/验证样本数、随机种子和完整启动日志。若 LoRA 前后的原始输出完全一致,先检查 adapter 是否加载、训练是否收敛,以及标签是否真正进入数据集。
|
||||||
|
|
||||||
|
## 三项评测
|
||||||
|
|
||||||
|
每次实验同时报告:
|
||||||
|
|
||||||
|
1. 逐字 **CER**,用于观察基础转写质量;
|
||||||
|
2. 车牌片段 exact match,衡量目标字符是否完整;
|
||||||
|
3. **整通话** 的最终车牌准确率,衡量下游规则或小模型是否正确处理重复确认。
|
||||||
|
|
||||||
|
只看 CER 会掩盖一个字符错位导致的业务失败;只看最终车牌又会掩盖 ASR 漏转。将三项指标和失败样例一起保存,才能决定下一轮应补数据、调整后处理,还是回归模型质量。
|
||||||
|
|
||||||
|
## 推理边界
|
||||||
|
|
||||||
|
对 Fun-ASR-Nano vLLM 推理,使用仓库文档中的 `language="中文"`,并把 `itn=True` 传给 `generate()`。ITN 只能规整已识别的文本,无法补回声学模型没有转出的字符,也不会自动在多次确认语音中选择最终车牌。
|
||||||
|
|
||||||
|
生产链路应先保存 ASR 原始候选,再以省份简称、字母和数字规则生成候选;必要时让下游结构化模型在固定 JSON schema 和合法性校验下选择最终值。详细的 vLLM 参数和热词接口见 [vLLM 中文指南](./vllm_guide_zh.md)。
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
DOC = Path("docs/vehicle_plate_finetuning_zh.md")
|
||||||
|
|
||||||
|
|
||||||
|
def test_vehicle_plate_guide_keeps_asr_and_extraction_boundaries_explicit():
|
||||||
|
text = DOC.read_text(encoding="utf-8")
|
||||||
|
|
||||||
|
for expected in (
|
||||||
|
"2-12 秒",
|
||||||
|
"逐字转写",
|
||||||
|
"不是确定性纠错",
|
||||||
|
"1,000",
|
||||||
|
"3,000-5,000",
|
||||||
|
"CER",
|
||||||
|
"车牌片段 exact match",
|
||||||
|
"整通话",
|
||||||
|
):
|
||||||
|
assert expected in text
|
||||||
Reference in New Issue
Block a user