首页
/ 基于Flashlight/Wav2letter的WSJ语音识别实验全流程指南

基于Flashlight/Wav2letter的WSJ语音识别实验全流程指南

2025-07-07 06:26:41作者:邓越浪Henry

项目概述

本文将详细介绍如何使用Flashlight/Wav2letter框架在WSJ(金融时报)语音数据集上实现完整的语音识别流程。WSJ作为语音识别领域的经典基准数据集,包含约80小时的英语语音数据,被广泛用于评估语音识别系统性能。

环境准备

在开始实验前,需要准备以下环境:

  1. 已安装Flashlight/Wav2letter框架
  2. 获取WSJ数据集(LDC93S6A和LDC94S13A)
  3. 准备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.*   # 词级语言模型数据

声学模型训练

训练配置

  1. 修改train.cfg文件中的路径配置
  2. 使用单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模型训练方案:

  1. 14B词级模型

    • 使用inverse_sqrt学习率策略
    • 在75k次更新后会出现过拟合
    • 关键参数:decoder-embed-dim=128, dropout=0.3
  2. 14B字符级模型

    • 两阶段训练:前30epoch lr=0.5,后30epoch lr=0.05
    • 关键参数:decoder-embed-dim=128, dropout=0.15
  3. 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]

解码流程

  1. 修改decoder*.cfg文件中的路径配置
  2. 运行解码器:
[wav2letter_path]/build/Decoder --flagsfile [config_file] --minloglevel=0 --logtostderr=1

预训练模型

声学模型

提供基于WSJ nov93dev集的预训练模型:

  • 架构文件:am.arch
  • Token列表:tokens.lst
  • 解码词典:lexicon.lst

语言模型

提供多种预训练语言模型:

  1. 卷积语言模型

    • 20B字符级ConvLM
    • 14B词级ConvLM
  2. n-gram语言模型

    • 15-gram字符级(剪枝)
    • 20-gram字符级(剪枝)
    • 4-gram词级

实验建议

  1. 对于初次实验,建议从4-gram词级语言模型开始,它训练速度快且资源消耗少
  2. 追求最佳效果时,可尝试20B字符级ConvLM,但需要更多计算资源
  3. 注意监控验证集困惑度,防止过拟合
  4. 不同模型组合可能产生不同效果,建议尝试多种组合

通过本指南,您可以完整复现WSJ上的语音识别实验,从数据准备到最终解码,全面了解Flashlight/Wav2letter框架的工作流程。