从零训练专属语音识别模型:Vosk API 训练流水线实操

发布时间:2026/9/11 13:16:46
从零训练专属语音识别模型:Vosk API 训练流水线实操 从零训练专属语音识别模型Vosk API 训练流水线实操【免费下载链接】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 API 的 training 目录在自有语料上训练一个定制离线语音识别模型同一测试集上字错误率从 14.10% 降到语言模型重打分后的 12.67%training/RESULTS.txt 中的官方参考值产出模型可直接在服务端与终端离线加载。方案概览这条流水线面向需要自定义词汇、定制声学效果的开发者基于 Kaldi 工具链覆盖从原始音频到可评测模型的完整流程最终产出一个 Vosk 兼容模型目录Python、Java、Node、Android、iOS 各端都能直接离线加载。维度数据备注字错误率 WER14.10% → 12.67%rescore 后LibriSpeech 测试集官方参考值见 training/RESULTS.txt训练流程0~5 共 6 个 stagetraining/run.sh 按阶段切分可断点续跑特征配置40 维 MFCCtraining/conf/mfcc.conf16k 音频输入部署形态Vosk 模型目录各语言绑定均离线运行无云端依赖数据集格式转换与校验语料需遵循 LibriSpeech 目录结构每层是读取者编号/chapter 编号两级目录内含.flac音频与同目录的读取者-chapter.trans.txt转写文件顶层放SPEAKERS.TXT记录说话人性别。training/local/data_prep.sh 一次完成转换为每个音频写flac -c -d流式解码命令到wav.scp第 55~56 行合并转写文件生成text第 58~60 行并按 chapter 粒度产出utt2spk/spk2utt说话人映射。git clone https://gitcode.com/GitHub_Trending/vo/vosk-api cd vosk-api/training # 需先安装 Kaldi 并配好 path.sh 中的路径 bash local/data_prep.sh /path/to/train-clean-5 data/train转换完成后执行校验utils/validate_data_dir.sh --no-feats data/train # 输出 All OK 即目录格式通过脚本校验很严格读取者与 chapter 目录名必须是纯数字SPEAKERS.TXT性别字段只接受 m/f转写行数必须与 utt2spk 行数一致第 76~79 行否则直接报错退出把格式问题拦在训练之前。分阶段训练命令执行与关键参数先看 training/cmd.sh 的执行方式默认全部跑在本地 CPUexport train_cmdrun.pl # 训练任务本地执行 export decode_cmdrun.pl # 解码任务本地执行用 training/run.sh 按 stage 依次执行每阶段独立可重跑bash run.sh --stage 1 --stop_stage 1 # 词典与语言模型准备 bash run.sh --stage 2 --stop_stage 2 # MFCC 特征提取 bash run.sh --stage 3 --stop_stage 3 # GMM 基线模型为 TDNN 提供对齐 bash run.sh --stage 4 --stop_stage 4 # TDNN 链式模型训练最耗时 bash run.sh --stage 5 --stop_stage 5 # 测试集解码、LM 重打分、输出 WER特征配置 training/conf/mfcc.conf 里两个关键参数--num-mel-bins40 # 40 维 Mel 滤波器组 --num-ceps40 # 输出 40 维 MFCC即神经网络输入维度stage 4 由 training/local/chain/run_tdnn.sh 执行先跑run_ivector_common.sh训练 i-vector 提取器用于说话人自适应再构建 chain 拓扑与 TDNN 网络结构xconfig 中含 spec-augment 数据增强层、12 层 TDNNF最后用train.py训练约 20 个 epoch第 154 行。机器有 GPU 时可把cmd.sh里的cuda_cmd改成对应队列命令来加速这一阶段。验收读取 WER 报告stage 5 完成解码与打分后运行bash RESULTS %WER 14.10 [ 2839 / 20138, 214 ins, 487 del, 2138 sub ] exp/chain/tdnn/decode_test/wer_11_0.0 %WER 12.67 [ 2552 / 20138, 215 ins, 406 del, 1931 sub ] exp/chain/tdnn/decode_test_rescore/wer_11_0.0各字段含义%WER 14.10字错误率 14.10%即 20138 个参考词中错 2839 处ins/del/sub插入、删除、替换错误计数。sub 偏高说明模型听得到但猜错词补词汇和语言模型收益最大第二行来自decode_test_rescore经语言模型重打分后降了 1.4 个点体现 LM 的纠偏能力可立即落地的三个优化动作扩充领域语料重训——WER 下降幅度主要取决于语料对目标场景的覆盖度更换更大的语言模型——training/local/download_lm.sh 支持下载不同规模的 arpa 文件也可把自训练 arpa 放入 data/local/lm按错误结构定位——del 偏高查音频质量与特征归一化sub 偏高查词汇表与 LM模型集成到应用最小示例与性能参考将 exp/chain/tdnn 训练出的声学模型与 LM 整理为 Vosk 模型目录后最小集成代码如下from vosk import Model, KaldiRecognizer import wave model Model(model_your_domain) wf wave.open(meeting.wav, rb) rec KaldiRecognizer(model, wf.getframerate()) while True: data wf.readframes(4000) if not data: break rec.AcceptWaveform(data) print(rec.FinalResult())性能参考典型值随硬件差异较大实时率约 0.3x~1x单核 CPU 处理 10 秒音频约需 3~10 秒内存数百 MB 量级随声学模型体积浮动首响应流式模式下输入约 1 秒音频即可得到首段结果复盘关键成果对应位置Kaldi 数据目录wav.scp/text/utt2spkdata/train/由 training/local/data_prep.sh 生成训练好的 TDNN 链式模型exp/chain/tdnn/training/run.sh stage 4 产出WER 14.10%rescore 后 12.67%training/RESULTS.txt后续可探索的方向用 python/vosk/transcriber/ 的命令行工具做批量文件转录建立回归测试集把模型接入 Android/iOS 工程做端上离线识别基于训练中的 i-vector 提取器扩展说话人区分能力如果跑 Kaldi 脚本报错或数据校验失败欢迎把具体报错贴出来帮你定位是哪一环的问题。【免费下载链接】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),仅供参考