基于Flashlight/Wav2letter的WSJ语音识别实验全流程指南
2025-07-07 06:26:41作者:邓越浪Henry
项目概述
本文将详细介绍如何使用Flashlight/Wav2letter框架在WSJ(金融时报)语音数据集上实现完整的语音识别流程。WSJ作为语音识别领域的经典基准数据集,包含约80小时的英语语音数据,被广泛用于评估语音识别系统性能。
环境准备
在开始实验前,需要准备以下环境:
- 已安装Flashlight/Wav2letter框架
- 获取WSJ数据集(LDC93S6A和LDC94S13A)
- 准备sph2pipe工具用于音频格式转换
数据处理流程
数据预处理
首先需要运行数据准备脚本,生成训练所需的音频列表、词典和token集合:
python3 prepare.py --wsj0 [path_to_wsj0] --wsj1 [path_to_wsj1] \
--wsj1_type LDC94S13A --data_dst [data_output_path] \
--model_dst [model_output_path] --sph2pipe [path_to_sph2pipe]
该脚本会生成以下目录结构:
├── am/ # 声学模型相关文件
│ ├── lexicon_si284+nov93dev.txt # 合并词典
│ ├── si284.lst.remap # 训练数据列表
│ └── tokens.lst # 音素token列表
└── decoder/ # 解码器相关文件
├── char_lm_data.* # 字符级语言模型数据
├── dict-remap.txt # 字典映射
└── word_lm_data.* # 词级语言模型数据
声学模型训练
训练配置
- 修改train.cfg文件中的路径配置
- 使用单GPU进行训练:
[wav2letter_path]/build/Train train --flagsfile train.cfg --minloglevel=0 --logtostderr=1
建议使用001_model_nov93dev.bin
模型快照进行后续解码实验。
语言模型训练
数据准备
首先为ConvLM训练准备数据:
source prepare_fairseq_data.sh [DATA_DST] [MODEL_DST] [FAIRSEQ_PATH]
N-gram语言模型训练
使用KenLM工具训练n-gram模型:
./train_ngram_lms.sh [DATA_DST] [MODEL_DST] [KENLM_PATH]/build/bin
卷积语言模型(ConvLM)训练
提供三种ConvLM模型训练方案:
-
14B词级模型:
- 使用inverse_sqrt学习率策略
- 在75k次更新后会出现过拟合
- 关键参数:decoder-embed-dim=128, dropout=0.3
-
14B字符级模型:
- 两阶段训练:前30epoch lr=0.5,后30epoch lr=0.05
- 关键参数:decoder-embed-dim=128, dropout=0.15
-
20B字符级模型:
- 固定学习率lr=0.1
- 关键参数:decoder-embed-dim=256, dropout=0.2
所有模型均在8GPU机器上使用fp16精度训练。
语言模型评估
困惑度计算
评估n-gram和ConvLM模型的困惑度:
# n-gram模型评估
source eval_ngram_lms.sh [MODEL_DST]
# ConvLM模型评估
source eval_convlm_lms.sh [DATA_DST] [MODEL_DST]
模型转换
将ConvLM模型转换为wav2letter格式:
source convert_convlm.sh [MODEL_DST] [WAV2LETTER_PATH]
解码流程
- 修改decoder*.cfg文件中的路径配置
- 运行解码器:
[wav2letter_path]/build/Decoder --flagsfile [config_file] --minloglevel=0 --logtostderr=1
预训练模型
声学模型
提供基于WSJ nov93dev集的预训练模型:
- 架构文件:am.arch
- Token列表:tokens.lst
- 解码词典:lexicon.lst
语言模型
提供多种预训练语言模型:
-
卷积语言模型:
- 20B字符级ConvLM
- 14B词级ConvLM
-
n-gram语言模型:
- 15-gram字符级(剪枝)
- 20-gram字符级(剪枝)
- 4-gram词级
实验建议
- 对于初次实验,建议从4-gram词级语言模型开始,它训练速度快且资源消耗少
- 追求最佳效果时,可尝试20B字符级ConvLM,但需要更多计算资源
- 注意监控验证集困惑度,防止过拟合
- 不同模型组合可能产生不同效果,建议尝试多种组合
通过本指南,您可以完整复现WSJ上的语音识别实验,从数据准备到最终解码,全面了解Flashlight/Wav2letter框架的工作流程。