十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Vosk语音识别准确率提升指南:3个抓手,从“认错词“到稳定批量转写

Vosk语音识别准确率提升指南:3个抓手,从“认错词“到稳定批量转写 Vosk语音识别准确率提升指南3个抓手从认错词到稳定批量转写【免费下载链接】vosk-apiOffline speech recognition API for Android, iOS, Raspberry Pi and servers with Python, Java, C# and Node项目地址: https://gitcode.com/GitHub_Trending/vo/vosk-api这篇文章面向 Vosk 离线语音识别准确率优化用词表约束、ITN 文本规范化和词级时间戳解决命令词误识别、口语数字直出、结果无法评估这三类常见问题。三个操作一个下午能做完效果可以用错误率直接验证。先定位问题 Vosk 的大词表模型在通用对话上够用落到具体业务里常栽三个跟头命令词被带偏说打开空调回来一句打开空凋。自由解码时模型从全词汇挑候选命令域里的候选面太大同音异形词就混进来了。口语格式直出说八点零五结果原样给出八点零五下游程序还得自己再解析一遍文本。没法验证也没法定位识别结果看起来差不多但错在哪一句说不清更谈不上量化优化到底提升了多少。三个问题都有对应抓手。先泼一盆冷水src/language_model.h 里的ngram_order默认 3和discount默认 0.5这类语言模型参数是随模型构建时定死的你真正能拧的是下面识别与后处理阶段的三个旋钮。动手改 环境只需一行pip install vosk首次运行Model(langen-us)会自动下载对应语言模型。用词表约束命令词识别原理一句话给识别器传一个 JSON 短语列表src/recognizer.cc 会把它编译成 FST有限状态机与解码网络做交集结果里只可能出现你给的词。完整可跑脚本见 python/example/test_words.py。rec KaldiRecognizer(model, wf.getframerate(), [打开空调, 关闭灯光, 设置温度二十度, [unk]]) # 当前句解码完成后可动态切换词表 rec.SetGrammar([调高音量, 降低亮度, [unk]])列表里务必保留[unk]兜底用户说了表外内容时输出空分支而不是硬凑出一个错的短语。短语表内词序不必严格匹配说关闭灯光或灯光关闭都能命中。几十条短语的命令场景域内命中率可从约 80% 提到接近 100%示例数值以你的语料为准。用 ITN 后处理器规范化口语文本原理一句话src/postprocessor.h 的Processor类先打标签识别数字、时间等实体再口语转书面对应 src/postprocessor.cc 里的Tag→Verbalize→Normalize两级流水线。官方示例 python/example/test_itn.py 以俄语演示from vosk import Processor proc Processor(ru_itn_tagger.fst, ru_itn_verbalizer.fst) print(proc.process(мы пришли в восемь часов пять минут))口语八点零五分直接输出成8:05这类机器可直读格式下游不再需要为时间、数字手写解析分支。注意示例读取的是同目录下一对 tagger/verbalizer FST需自备与识别语言同套的规则文件。用词级时间戳先定位错误点原理一句话SetWords(True)让结果 JSON 在整句之外逐词带出 text 与起止时间示例见 python/example/test_simple.py。rec KaldiRecognizer(model, wf.getframerate()) rec.SetWords(True) rec.SetPartialWords(True)效果很具体遇到北京被识别成北惊不用再整句回放找问题按词级时间戳直接剪出可疑片段对比单个错误点的定位时间从听完整段降到秒级示例。效果验证 ✅改完别靠感觉。项目自带 python/test/transcribe_scp.py输入一份音频ID 音频文件路径清单内部用 8 线程并行转写逐文件输出一行文本p Pool(8) texts p.map(recognize, open(sys.argv[1], encodingutf-8).readlines())把输出和参考文本逐行对齐即可统计字错误率CER并行线程数可按 CPU 核数调整。前后对比看两个指标就够指标优化前优化后示例域内命令命中率约 80%接近 100%词表约束8:05类口语时间需人工二次解析直读解析分支 0 处ITN100 条错误定位耗时约 2 小时人工听分钟级词级时间戳数值仅供参照基线务必用你自己的语料跑一遍。避坑清单 ⚠️音频一打开程序就退出→ 输入不是单声道 16-bit PCM示例脚本会直接校验失败 → 先用 ffmpeg 转成 16kHz 单声道再喂给识别器。设了词表结果全是[unk]→ 短语语言与模型语言不一致或词表过长过窄 → 短语与模型同语言、控制在数百条以内并保留[unk]。新词表不生效→SetGrammar只影响下一句解码句中切换无效 → 在Result()返回之后再调用。ITN 输出乱码→ tagger 与 verbalizer 版本或语言不配套 → 用同一语言、同一来源的一对 FST。结果里找不到词级时间→SetWords默认关闭 → 构造识别器后立刻调用rec.SetWords(True)。写在最后词表、ITN、词级时间戳三个抓手都是 Vosk 的标准能力再配上并行批量转写就形成识别 → 规范化 → 评估的完整闭环。延伸阅读README.md、python/example/test_itn.py、python/test/transcribe_scp.py。【免费下载链接】vosk-apiOffline speech recognition API for Android, iOS, Raspberry Pi and servers with Python, Java, C# and Node项目地址: https://gitcode.com/GitHub_Trending/vo/vosk-api创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表