FunASR + speech_ngram_lm_zh-cn 构建高精度中文语音转写方案
1. 背景与技术选型
1.1 中文语音识别的挑战
在实际应用中,中文语音识别面临诸多挑战:口音差异、背景噪声、语速变化以及专业术语识别困难等问题严重影响了识别准确率。尤其是在会议记录、客服录音、教育听写等对文本质量要求较高的场景下,仅依赖基础ASR模型难以满足需求。
传统端到端模型虽然具备较强的泛化能力,但在长句处理、标点恢复和语言流畅性方面仍存在明显短板。为此,构建一个融合声学模型、语言模型与后处理模块的完整系统成为提升识别质量的关键路径。
1.2 FunASR 框架优势
FunASR 是由阿里云推出的一套开源语音识别工具包,支持离线/在线/混合模式识别,具备以下核心优势:
- 多模型协同架构:支持 Paraformer、SenseVoice 等先进模型
- 灵活部署方式:提供 Docker 镜像、SDK 和 WebUI 多种接入形式
- 全流程覆盖:集成 VAD(语音活动检测)、ASR、PUNC(标点恢复)、ITN(文本规整)等模块
- 高性能推理引擎:基于 ONNX Runtime 实现 CPU/GPU 加速
1.3 引入 N-gram 语言模型的重要性
尽管现代 ASR 模型已广泛采用 Transformer 结构并结合 CTC/Auxiliary Loss 进行训练,但其内部隐式学习的语言知识仍然有限。特别是在专业领域或低资源语料条件下,容易出现语法错误、同音错别字等问题。
speech_ngram_lm_zh-cn是基于大规模中文文本训练的 FST(Finite State Transducer)格式 N-gram 语言模型,能够有效补充声学模型的上下文理解能力。通过将其与 Paraformer-Large 模型联合解码,可在不增加显著延迟的前提下显著提升识别准确率。
2. 系统架构与工作流程
2.1 整体架构设计
本方案基于科哥二次开发的 FunASR WebUI 镜像,整合了如下核心技术组件:
| 组件 | 功能说明 |
|---|---|
speech_fsmn_vad_zh-cn-16k-common-onnx | 语音活动检测,自动切分语音段落 |
speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx | 主识别模型,支持VAD+标点一体化输出 |
punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx | 标点预测模型 |
speech_ngram_lm_zh-cn-ai-wesp-fst | 外部N-gram语言模型,用于 rescoring |
fst_itn_zh | 文本规整模型,将数字、单位等转换为可读形式 |
该系统采用两阶段识别策略(2pass),兼顾实时性与准确性。
2.2 工作流程解析
整个语音转写流程可分为以下几个步骤:
- 音频输入:支持上传文件或浏览器实时录音
- 前端预处理:采样率归一化至 16kHz,声道合并为单声道
- VAD 分段:使用 FSMN-VAD 检测语音活跃区域,去除静音片段
- 第一遍识别(Online Pass):
- 使用轻量级在线模型进行流式识别
- 输出初步文本结果,用于低延迟展示
- 第二遍识别(Offline Pass):
- 使用 Paraformer-Large 模型结合 N-gram LM 进行全局重打分
- 引入外部语言模型优化候选序列
- 后处理增强:
- 添加标点符号
- 执行 ITN 数字规整(如“1998年” → “一九九八年”)
- 结果输出:生成带时间戳的文本、JSON 和 SRT 字幕
3. 部署与使用实践
3.1 环境准备
基础依赖
- 操作系统:Ubuntu 20.04 / CentOS 7+
- Python >= 3.8
- Docker(推荐方式)
- GPU 支持(CUDA 11.7+,非必需但强烈建议)
安装 Docker(若未安装)
curl -O https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/shell/install_docker.sh sudo bash install_docker.sh3.2 启动镜像服务
拉取并运行科哥定制化的 FunASR 镜像:
sudo docker pull registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.12 mkdir -p ./funasr-runtime-resources/models sudo docker run -p 7860:7860 -it --privileged=true \ -v $PWD/funasr-runtime-resources/models:/workspace/models \ registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.12注:此命令映射了模型存储目录,便于后续热词更新与模型替换。
3.3 启动 WebUI 服务
进入容器后执行启动脚本:
cd /workspace/FunASR/runtime nohup bash run_server_2pass.sh \ --download-model-dir /workspace/models \ --vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \ --model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx \ --online-model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online-onnx \ --punc-dir damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx \ --lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \ --itn-dir thuduj12/fst_itn_zh \ --hotword /workspace/models/hotwords.txt > log.txt 2>&1 &服务成功启动后,可通过浏览器访问:
http://<服务器IP>:78603.4 关键参数详解
| 参数 | 说明 |
|---|---|
--model-dir | 主识别模型路径,决定是否启用VAD/PUNC |
--lm-dir | 外部N-gram语言模型路径,直接影响识别流畅度 |
--hotword | 热词文件路径,每行格式:关键词 权重(如“人工智能 20”) |
--port | 服务监听端口,默认为10095(WebSocket) |
--decoder-thread-num | 并发解码线程数,建议设置为CPU核心数 |
4. 性能优化与调优建议
4.1 提升识别准确率的核心手段
(1)合理配置 N-gram 语言模型
speech_ngram_lm_zh-cn-ai-wesp-fst是针对 AI 场景优化的语言模型,尤其擅长处理科技类词汇。对于特定领域(如医疗、金融),建议微调或替换为领域适配的 FST 模型。
验证语言模型效果的方法:
from funasr import AutoModel model = AutoModel( model="damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx", lm_model="damo/speech_ngram_lm_zh-cn-ai-wesp-fst" ) res = model.generate(input="test.wav") print(res["text"]) # 对比开启/关闭LM的结果差异(2)热词增强机制
在/workspace/models/hotwords.txt中添加关键术语可显著改善专有名词识别效果:
大模型 30 Transformer 25 深度学习 20权重范围建议为 1~100,过高可能导致过度偏向热词而忽略上下文。
(3)音频预处理优化
- 推荐使用 16kHz 单声道 WAV 格式
- 若原始音频为立体声,请先合并为单声道
- 对于低信噪比录音,建议提前使用降噪工具(如 RNNoise)处理
4.2 降低延迟与提升吞吐量
| 优化方向 | 具体措施 |
|---|---|
| 模型选择 | 实时场景优先使用SenseVoice-Small |
| 批量处理 | 设置batch_size_s=300以支持最长5分钟音频 |
| 硬件加速 | 启用 CUDA 模式,避免使用 CPU 推理 |
| 并发控制 | 调整decoder-thread-num匹配硬件资源 |
5. 应用案例与输出示例
5.1 实际识别效果对比
输入音频内容(口语表达):
“最近我在研究大模型的应用,特别是如何用transformer来做语音识别。”
基础模型输出(无 N-gram LM):
“最近我在研究大磨心的应用,特别是如何用transfomer来做语音识别。”
启用 speech_ngram_lm_zh-cn 后输出:
“最近我在研究大模型的应用,特别是如何用Transformer来做语音识别。”
可见,在专业术语和同音词纠正方面,N-gram LM 表现出明显优势。
5.2 输出格式多样化支持
识别完成后,系统自动生成三种格式结果:
(1)纯文本(.txt)
你好,欢迎使用语音识别系统。这是一个基于 FunASR 的中文语音识别 WebUI。(2)SRT 字幕(.srt)
1 00:00:00,000 --> 00:00:02,500 你好 2 00:00:02,500 --> 00:00:05,000 欢迎使用语音识别系统(3)JSON 详细信息
{ "text": "欢迎使用语音识别系统", "sentences": [ { "text": "欢迎使用语音识别系统", "start": 2500, "end": 5000, "confidence": 0.98 } ] }所有文件保存于outputs/outputs_YYYYMMDDHHMMSS/目录下,便于批量管理。
6. 常见问题与解决方案
6.1 识别不准的排查清单
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 出现大量错别字 | 未启用 N-gram LM | 确保--lm-dir正确配置 |
| 专业术语识别错误 | 缺少热词 | 在hotwords.txt中添加术语及权重 |
| 音频无法上传 | 文件过大或格式不支持 | 转换为 MP3/WAV,大小控制在 100MB 内 |
| 录音无声 | 浏览器权限未授权 | 检查麦克风权限并刷新页面 |
| GPU 未生效 | CUDA 驱动异常 | 检查nvidia-smi输出状态 |
6.2 日志分析技巧
查看服务日志定位问题:
tail -f log.txt重点关注以下关键字:
ERROR:严重错误,需立即处理WARNING:潜在风险,可能影响性能Model loaded:确认各模块加载成功Connection closed:客户端连接异常
7. 总结
本文围绕 FunASR 框架与speech_ngram_lm_zh-cn语言模型的集成,详细介绍了构建高精度中文语音转写系统的完整方案。通过结合 Paraformer-Large 声学模型与 N-gram 语言模型,实现了在保持较低延迟的同时大幅提升识别准确率的目标。
该方案已在多个实际项目中验证其有效性,适用于会议纪要生成、教学录音转写、客服质检等多种高要求场景。配合科哥开发的 WebUI 界面,进一步降低了使用门槛,使非技术人员也能快速上手。
未来可探索的方向包括:
- 替换为更大规模的 RNN-T 或 Conformer 模型
- 引入个性化语言模型(PLM)进行用户习惯建模
- 结合 Whisper-Finetune 模型实现跨语种混合识别
只要合理配置模型组合与参数调优,即可打造一套稳定、高效、精准的本地化语音转写平台。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。