如何为Vosk英文大模型(vosk-model-en-us-0.22)添加词典词汇
给Vosk英文模型(vosk-model-en-us-0.22)添加自定义词汇的正确方法
只改words.txt为啥不行?
完全没用。words.txt只是模型编译好后的词汇-ID对照表,真正决定识别逻辑的是graph目录下的HCLG.fst等识别图文件——这些文件是预编译好的,根本没包含你新加的词汇路径,直接改words.txt只会让模型加载时出现校验不匹配的异常。
正确的操作步骤
要成功加自定义词汇,得重新构建模型的识别图部分,步骤如下:
- 搞定词汇发音
- 先查看模型目录
graph/phones.txt,里面列了模型能识别的所有音素。 - 给新词汇编写符合这些音素的发音,比如
NBD可以写成n b d(必须用phones.txt里存在的音素,不能自行编造)。
- 先查看模型目录
- 更新原始词典
- 获取该模型的源码包(可从Vosk官方模型仓库获取),里面包含未编译的原始词典文件。
- 在原始词典末尾添加新词汇的发音条目,格式为「词汇 音素1 音素2 ...」,比如
NBD n b d。
- 重新编译识别图
- 使用Kaldi工具链(Vosk基于Kaldi构建)重新编译语言模型和词典,生成新的
HCLG.fst、words.txt等文件。核心命令大致如下(需适配模型的具体配置):# 准备语言环境与词汇映射 utils/prepare_lang.sh data/local/dict "<UNK>" data/local/lang data/lang # 格式化语言模型 utils/format_lm.sh data/lang data/local/lm/lm.arpa.gz data/local/dict/lexicon.txt data/lang_test # 构建新识别图 utils/mkgraph.sh data/lang_test exp/tri4b data/graph - 将新生成的
graph目录下所有文件,替换原模型目录中的graph文件。
- 使用Kaldi工具链(Vosk基于Kaldi构建)重新编译语言模型和词典,生成新的
- 验证模型
- 重新运行Python代码加载模型,测试新词汇的识别效果。
词汇ID的正确赋值方法
words.txt里的编号是词汇的唯一内部ID,只需满足两个条件:
- 编号为未被使用过的整数;
- 编号值大于现有词汇的最大ID(比如原文件最大ID是368706,新词汇就用368707即可)。
不需要特殊编码,核心还是要保证发音符合模型的音素集,且识别图中已包含该词汇的路径。
内容的提问来源于stack exchange,提问作者user522913
相关产品推荐
相关产品推荐

