“
作者:FunAudio 团队
适用人群:计算机、电子、通信、人工智能及相关专业毕业生;对“大模型+语音”落地感兴趣的产品经理与工程团队
阅读收益:30 min 搞懂一套可直接上线的大模型语音识别方案,知道它为什么准、为什么稳、怎么部署、哪里还差点意思。
1. 先回答你最想问的 6 个问题
2. 为什么“大模型+语音”突然火了?
传统 ASR pipeline:音频→声学模型→发音词典→语言模型→文本。
大模型范式:音频→(编码器→适配层)→大语言模型→直接文本。
好处显而易见
-
语言模型参数量暴涨,上下文理解能力一并送给 ASR。 -
训练数据可复用文本 LLM 的海量语料,不再受“语音-文本平行数据”瓶颈。 -
端到端,少一个模块少一堆人工特征。
隐忧也同步放大
- ◉
幻觉:LLM 天生“爱编故事”,没声音时也能给你蹦两行字。 - ◉
噪声:LLM 没见过“地铁+鸣笛+广播”三重奏,照 hallucinate 不误。 - ◉
延迟:自回归解码,不做流式优化,用户说完一句话 3 s 后才蹦字,体验直接翻车。
FunAudio-ASR 的核心卖点就是“把大模型优势留下,把幻觉与延迟压下去”。
3. 系统全景:4 个模块怎么拼?
(图中文字即原文 caption,不再翻译)
4. 数据:多少小时?怎么洗?
5. 训练流程:5 个 Stage 一张表看懂
6. 生产级优化:为什么上线后不掉链子?
-
流式能力
- ◉
训练侧:把整句切成 80 ms 小块,强制模型只看“过去”。 - ◉
推理侧:SGLang 批解码,延迟 < 200 ms,RTF≈0.015。
- ◉
-
噪声鲁棒
- ◉
离线:110 k 小时干净语音 + 10 k 小时噪声→10 dB 平均混噪。 - ◉
在线:训练时 30% 样本随机混噪,相对错误率再降 13%。
- ◉
-
中英混说(Code-switching)
- ◉
4 万条英文关键词→Qwen3 生成中英混杂句子→TTS 合成→再人工核验。 - ◉
测试集 A 的 WER 从 4.53% 降到 1.59%。
- ◉
-
热词自定义
- ◉
用 CTC 一刷→音素/子词编辑距离召回→RAG 方式喂给 LLM。 - ◉
名字、品牌、专业术语召回率从 0.75 提到 1.0,但误召可控。
- ◉
-
幻觉抑制
- ◉
训练时故意喂“纯噪声”片段,标签为空。 - ◉
RL 奖励里加“幻觉长度惩罚”,真实场景误触率降 35%。
- ◉
7. 实验结果:数字说话
表 1 开源集(%WER)
表 2 工业集(%WER)
流式 vs 离线:平均只牺牲 1.3 个百分点,但延迟从整句 2-3 s 降到 0.2 s。
多语言:越南语 CommonVoice 上 WER 13.49%,低于 Whisper 的 13.51%;泰语 1.44%,全场最低。
8. 局限 & 未来
9. FAQ(对话式)
Q1:我想在自己服务器上跑,一定要 A100 吗?
A:轻量版 nano 在 RTX3060 16 GB 实测可跑 200 ms 延迟的流式,单卡吞吐量≈并发 30 路。
Q2:热词列表可以动态更新吗?
A:可以。热词 vocabulary 是外挂 TSV,推理时直接读内存,无需重训模型;更新后 1 分钟内生效。
Q3:领域术语覆盖率怎么评估?
A:官方用“召回率+准确率”双指标:召回看是否命中,准确看是否多命中。表 6 给出 8 个学科平均召回 0.98。
Q4:为什么 RL 后,哲学/宗教领域召回反而掉一点?
A:RL 奖励函数里“关键词”从真实转写里自动挖,不再用人工 prompt,个别抽象词汇被过滤掉,导致召回略降;但 WER 仍降,整体体验更好。
Q5:还需要传统 VAD 吗?
A:目前建议保留。长段静音时 LLM 仍有小概率“写小作文”,VAD 可把纯噪声段提前剪掉。
10. 快速上手:从 Hugging Face 到第一条流式识别
(以下命令完全取自官方仓库示例,无外部补充)
-
拉镜像
docker pull funaudio/pytorch:2.1.0-cuda12.1-devel
-
起容器
docker run -it --gpus all -p 7860:7860 -v $PWD:/workspace funaudio/pytorch:2.1.0-cuda12.1-devel
-
装依赖
pip install -r requirements.txt
-
下载预训练权重
from huggingface_hub import snapshot_download
snapshot_download(repo_id="FunAudio/FunAudio-ASR-nano", local_dir="./model")
-
流式推理脚本(节选自官方 streaming_demo.py)
from funaudio import StreamingRecognizer
rec = StreamingRecognizer("./model", chunk_size=80, # 80 ms
hotword_file="./my_hotwords.tsv")
for pcm_chunk in microphone_stream(): # 16 kHz, 16-bit
text, done = rec.accept(pcm_chunk)
if done:
print("Final:", text)
-
热词文件格式(TSV)
biology 生物
CRISPR 基因编辑
-
起服务
python -m funaudio.service --port 7860 --model ./model --hotword ./my_hotwords.tsv
浏览器打开 http://localhost:7860
即可看到实时字幕。
11. 结论:一句话带走
FunAudio-ASR 把“大模型幻觉”这个老大难拆成四个具体任务——噪声、流式、热词、长下文——然后用数据、模型、强化学习各打各的靶子。
最终交付的是一套开源可商用、中文友好、延迟可控、热词可插拔的工业级方案。
如果你正打算把语音识别从“实验室 Demo”搬到“生产线”,它值得一次 A/B Test。