首页
/ Flashlight/wav2letter 中 VoxPopuli 语音识别模型的联合训练指南

Flashlight/wav2letter 中 VoxPopuli 语音识别模型的联合训练指南

2025-07-07 06:22:32作者:秋泉律Samson

概述

本文将详细介绍如何在 Flashlight/wav2letter 框架中使用 VoxPopuli 数据集进行语音识别模型的联合训练。VoxPopuli 是一个大规模多语言语音语料库,可用于表示学习、半监督学习和模型解释。

模型背景

本教程涉及的模型基于 wav2vec 架构,具体实现参考了相关论文。该模型采用联合训练策略,结合了无监督的 CPC(Contrastive Predictive Coding)损失和有监督的 CTC(Connectionist Temporal Classification)损失。

准备工作

1. 获取预训练模型

提供两种预训练模型:

  • 小型 wav2vec 模型(推荐)
  • 旧版模型(已弃用)

模型使用 fl::ext::Serializer 序列化保存,包含以下组件:

  • 网络配置信息
  • 神经网络结构(fl::Sequential)
  • 无监督 CPC 损失函数
  • 有监督 CTC 损失函数
  • 对应的优化器(Adam)

2. 准备数据集

建议使用 Common Voice 数据集,目录结构应如下:

[COMMON_VOICE_DIR]
├──[语言代码]/
    ├── clips/         # 音频文件
    |__ dev.tsv        # 开发集
    |__ test.tsv       # 测试集
    |__ train.tsv      # 训练集
    |__ validated.tsv  # 已验证数据

数据预处理

执行以下命令准备数据:

export COMMON_VOICE_DIR=数据集目录路径
cd prepare_data
bash build_cc_data.sh 语言代码

该脚本将生成:

  • 训练/开发/测试集的清单文件
  • 词典文件
  • 标记文件

模型微调

1. 特征提取

微调时需要加载网络但不包括最后一层:

void LoadFeatures(std::shared_ptr<fl::Sequential> net0, 
                 std::shared_ptr<fl::Sequential> net) {
    auto modules_0 = net0->modules();
    int n_layers = modules_0.size() - 1;
    for (int i =0; i< n_layers; i++){
        net->add(modules_0[i]);
    }
}

2. 启动训练

export COMMON_VOICE_DIR=数据集目录路径
export WAV2LETTERDIR=wav2letter根目录
bash train_lang.sh 检查点目录 语言代码

模型解码

对开发集进行解码:

export COMMON_VOICE_DIR=数据集目录路径
export WAV2LETTERDIR=wav2letter根目录
bash decode_lang.sh 检查点目录 语言代码

性能表现

无语言模型结果

语言 微调数据量 开发集(CER/WER) 测试集(CER/WER)
德语 314小时 3.83/15.0 4.70/17.0
西语 203小时 3.49/10.7 4.04/11.9
法语 364小时 4.9/16.9 5.89/18.8

使用语言模型结果

语言 微调数据量 开发集(CER/WER) 测试集(CER/WER)
德语 314小时 2.36/6.76 2.98/7.82
西语 203小时 3.11/8.93 3.60/10.0
法语 364小时 2.73/8.31 3.57/9.56

自定义预训练

要进行自定义预训练,需要准备:

  1. 包含所有音频序列的 .lst 文件
  2. 验证集
  3. 标记文件
  4. 有效词典

示例 .lst 文件格式:

ID 音频路径 时长(ms) 任意文本

执行预训练脚本:

sh_voxpopuli/pretrain.sh

技术要点

  1. 联合训练结合了无监督和有监督学习
  2. 模型架构包含特征提取网络和分类器
  3. 微调时建议冻结底层特征提取层
  4. 可灵活调整监督和无监督损失的比例

引用

如需在学术研究中使用,请引用相关论文。该工作由 Changhan Wang 等人在 2021 年发表,提出了 VoxPopuli 大规模多语言语音语料库。

通过本教程,您可以充分利用 Flashlight/wav2letter 框架和 VoxPopuli 数据集,构建高性能的多语言语音识别系统。