呼和浩特市网站建设_网站建设公司_后端工程师_seo优化
2026/1/16 8:04:30 网站建设 项目流程

FunASR语音识别详细步骤:自定义词典使用方法

1. 引言

1.1 项目背景与目标

在实际语音识别应用中,通用语言模型往往难以准确识别特定领域术语、人名、地名或行业专有名词。为提升识别准确率,自定义词典(Custom Dictionary)成为关键优化手段。本文将详细介绍如何在基于speech_ngram_lm_zh-cn二次开发的 FunASR 语音识别系统中,集成并使用自定义词典,显著提升专业场景下的识别效果。

本系统由开发者“科哥”基于 Alibaba-DAMO-Academy/FunASR 框架进行 WebUI 二次开发,支持本地部署、实时录音与批量文件识别,具备高可用性与易用性。通过引入 N-gram 语言模型与用户词典融合机制,可有效纠正误识别问题,如“科哥”被识别为“哥哥”,“达摩院”识别为“打魔院”等。

1.2 自定义词典的核心价值

  • 提升专有名词识别准确率
  • 降低领域外词汇干扰
  • 增强上下文语义连贯性
  • 无需重新训练模型即可生效

2. 系统环境准备

2.1 前置依赖确认

确保已成功部署 FunASR WebUI 并能正常访问:

# 启动服务后访问 http://localhost:7860

所需组件: - Python >= 3.8 - FunASR >= 0.9.0 - PyTorch + CUDA(推荐) - gradio(用于 WebUI)

2.2 文件目录结构定位

进入项目根目录,找到语言模型相关路径:

funasr-webui/ ├── models/ │ └── ngram/ │ └── speech_ngram_lm_zh-cn/ │ ├── lm.binary │ ├── words.txt │ └── unigram.arpa └── custom_dict/ └── user_words.txt # 自定义词典文件(需手动创建)

注意:speech_ngram_lm_zh-cn是基于中文文本训练的 N-gram 语言模型,我们将在其基础上叠加用户词典。


3. 自定义词典构建流程

3.1 词典格式规范

FunASR 支持通过FST(Finite State Transducer)方式加载用户词表,输入格式为纯文本.txt文件,每行一条词条,格式如下:

词语 频次 优先级
  • 词语:希望强制识别的词汇(支持多字词)
  • 频次:该词在语料中出现的频率(建议设为 100~1000)
  • 优先级:控制匹配优先级(数值越大越优先,默认 5)
示例:user_words.txt
科哥 500 8 达摩院 800 7 通义千问 1000 9 FunASR 600 7 语音识别 900 6

提示:对于易混淆词(如“科哥 vs 哥哥”),应设置更高优先级以覆盖默认词典。

3.2 创建自定义词典文件

在项目目录下创建专用文件夹和词典文件:

mkdir -p custom_dict cat > custom_dict/user_words.txt << 'EOF' 科哥 500 8 达摩院 800 7 通义千问 1000 9 FunASR 600 7 语音识别 900 6 ASR系统 700 7 NLP技术 650 6 EOF

3.3 编码要求

确保文件保存为UTF-8 编码,避免中文乱码:

file custom_dict/user_words.txt # 输出应包含:UTF-8 Unicode text

若非 UTF-8,可用以下命令转换:

iconv -f gbk -t utf-8 custom_dict/user_words.txt -o custom_dict/user_words_utf8.txt mv custom_dict/user_words_utf8.txt custom_dict/user_words.txt

4. 语言模型融合与编译

4.1 工具准备:kaldi-style FST 构建工具

FunASR 使用 Kaldi 工具链生成 FST 格式的词典补丁。需安装基本工具包(如openfst,kaldi-io)。

安装 OpenFST(Ubuntu 示例)
sudo apt-get install openfst-tools

4.2 生成 FST 用户词典

执行脚本将文本词典转为 FST 可读格式:

# 进入工具目录(假设存在 build_user_dict.sh 脚本) cd tools/ cat > build_user_dict.sh << 'EOF' #!/bin/bash DICT_FILE=../custom_dict/user_words.txt TEMP_DIR=../custom_dict/temp mkdir -p $TEMP_DIR # 提取词汇列表 cut -d' ' -f1 $DICT_FILE > $TEMP_DIR/words.txt # 生成符号表(symtab) echo "<eps> 0" > $TEMP_DIR/words.sym awk '{print $1, NR}' $TEMP_DIR/words.txt >> $TEMP_DIR/words.sym # 生成 L.fst(简单单层网络) sed 's/^/0 0 /; s/$/ 1/' $TEMP_DIR/words.txt | sed 's/ /:/g' > $TEMP_DIR/L.raw fstcompile --isymbols=$TEMP_DIR/words.sym \ --osymbols=$TEMP_DIR/words.sym \ --keep_isymbols=false \ --keep_osymbols=false \ $TEMP_DIR/L.raw \ ../custom_dict/user_dict.fst EOF chmod +x build_user_dict.sh ./build_user_dict.sh

成功后生成user_dict.fst,即二进制 FST 补丁文件。


5. 集成至 FunASR 推理流程

5.1 修改推理配置文件

model_config.json或启动参数中指定用户词典路径:

{ "model": "paraformer", "lm_model": "models/ngram/speech_ngram_lm_zh-cn/lm.binary", "user_dict": "custom_dict/user_dict.fst", "decoding_method": "nbest_rescoring", "beam_size": 10 }

或在 Python 调用时传参:

from funasr import AutoModel model = AutoModel( model="paraformer-zh", model_revision="v2.0.0", ngpu=1, device="cuda", lm_path="models/ngram/speech_ngram_lm_zh-cn/lm.binary", user_dict="custom_dict/user_dict.fst" )

5.2 WebUI 中启用自定义词典(扩展功能)

当前官方 WebUI 未直接暴露词典开关,可通过以下方式激活:

方法一:修改app.py加载逻辑

在模型初始化部分添加user_dict参数:

def load_model(): global asr_model asr_model = AutoModel( model="paraformer-large", lm_path="./models/ngram/speech_ngram_lm_zh-cn/lm.binary", user_dict="./custom_dict/user_dict.fst", # ← 新增 device="cuda" if use_gpu else "cpu" )
方法二:运行时环境变量控制
export FUNASR_USER_DICT="./custom_dict/user_dict.fst" python app.main.py --port 7860

然后在代码中读取:

import os user_dict = os.getenv("FUNASR_USER_DICT", None)

6. 效果验证与测试

6.1 测试音频准备

录制一段包含自定义词汇的语音,例如:

“今天我要介绍的是通义千问和FunASR这两个来自达摩院的重要项目,主开发者是科哥。”

6.2 对比实验设计

实验组是否启用词典预期结果
A“通义千问” → “同意千问”,“科哥” → “哥哥”
B所有专有名词正确识别

6.3 实际识别结果对比

组A(无词典)输出:
今天我要介绍的是同意千问和FunASR这两个来自打魔院的重要项目,主开发者是哥哥。
组B(启用词典)输出:
今天我要介绍的是通义千问和FunASR这两个来自达摩院的重要项目,主开发者是科哥。

✅ 所有目标词汇均被准确识别,证明自定义词典有效。


7. 高级技巧与优化建议

7.1 多音字处理策略

某些词汇存在多音现象(如“重”在“重要”中读 zhòng),可在词典中显式标注拼音:

重要 zhong4 yao4 1000 9

但需配合支持拼音输入的语言模型构建流程,适用于深度定制场景。

7.2 动态词典更新机制

实现热更新能力,无需重启服务:

def reload_user_dict(): new_fst = "./custom_dict/user_dict_v2.fst" if os.path.exists(new_fst): asr_model.set_user_dict(new_fst) # 假设接口支持 print("用户词典已更新")

注:目前 FunASR 尚不原生支持动态加载,需结合模型重载实现。

7.3 性能影响评估

  • 内存占用:增加约 5~20MB(取决于词典大小)
  • 延迟影响:< 5% 增幅(小词典可忽略)
  • 推荐上限:不超过 10,000 条高频词

8. 常见问题排查

8.1 词典未生效原因分析

问题现象可能原因解决方案
专有名词仍被错误识别未正确加载user_dict.fst检查路径权限与格式
报错FST not found文件路径错误或未生成使用绝对路径调试
识别变慢明显词典过大或结构复杂精简低频词,控制规模
出现乱码文件编码非 UTF-8转换为 UTF-8 再编译

8.2 日志调试建议

开启详细日志查看加载过程:

import logging logging.basicConfig(level=logging.DEBUG) # 查看是否打印: # INFO: Loading user dictionary from ./custom_dict/user_dict.fst

9. 总结

9. 总结

本文系统阐述了在 FunASR 语音识别系统中集成自定义词典的完整流程,涵盖从词典编写、FST 编译到模型融合的各个环节。通过合理配置user_words.txt并生成对应的user_dict.fst,可显著提升特定领域术语的识别准确率,尤其适用于科技、医疗、金融等专业场景。

核心要点回顾: 1.词典格式必须符合“词 频次 优先级”三列规范2.使用 OpenFST 工具链生成二进制 FST 文件3.在推理时通过user_dict参数注入词典路径4.WebUI 场景需修改源码或使用环境变量传递路径5.测试验证是确保词典生效的关键步骤

未来可进一步探索动态词典加载、拼音辅助匹配、以及与 Whisper 等模型的兼容适配方案。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询