用 Hugging Face Transformers 微调 Wav2Vec2 以进行英语 ASR
概述
Hugging Face 已经证明,Wav2Vec2 模型可以使用非常少量的标注数据进行微调,以获得竞争力的英语自动语音识别(ASR)结果。通过利用预训练检查点并使用连接时序分类(CTC)进行微调,开发者可以构建端到端的 ASR 系统,而无需立即添加单独的语言模型。
Wav2Vec2 架构与预训练
Wav2Vec2 是一个专为 ASR 设计的预训练模型,它从原始音频中学习语音表示。该模型由 Alexei Baevski、Michael Auli 和 Alex Conneau 在 2020 年 9 月发布。
对比预训练
Wav2Vec2 使用对比预训练目标从无标签语音(超过 50,000 小时)中学习。类似于 BERT 的掩码语言建模,该模型在将特征向量传递到 transformer 网络之前会随机掩码这些向量,以学习上下文语音表示。
数据效率
预训练使得模型在极少的标注数据下即可达到高性能。例如,仅使用 10 分钟的标注数据,Wav2Vec2 在 LibriSpeech 的干净测试集上可以达到低于 5% 的词错误率(WER)。
英语 ASR 的微调过程
微调 Wav2Vec2 涉及将预训练的上下文表示映射到特定的转录词汇表,使用添加在 transformer 块顶部的线性层。
分词和词汇表
由于最终线性层的输出大小取决于标注数据集而非预训练任务,因此必须创建自定义词汇表。对于 Timit 数据集,这包括:
- 将文本归一化为小写。
- 删除不代表不同声音单元的特殊字符(例如
,.?!;:)。 - 从训练集和测试集中提取所有不同的字母。
- 添加一个词分隔符标记(
|)、一个未知标记([UNK])和一个填充标记([PAD]),它们作为 CTC 的“空白标记”。
特征提取
语音信号必须通过采样进行离散化。Wav2Vec2 期望输入采样率为 16kHz,这与 LibriSpeech 和 LibriVox 的采样率相匹配。Wav2Vec2FeatureExtractor 处理原始语音信号,确保其零均值单位方差归一化。
数据准备
使用 Wav2Vec2Processor,音频文件被加载并重采样至 16kHz。该处理器同时处理音频输入的特征提取和目标文本标记的分词。
使用连接时序分类(CTC)进行训练
Wav2Vec2 使用 CTC 进行微调,CTC 是一种专为序列到序列问题设计的算法,其中输入长度(音频帧)显著大于输出长度(文本字符)。
训练配置
为了优化训练,采用以下技术配置:
- Data Collator: 使用专门的
DataCollatorCTCWithPadding来动态地分别填充input_values和labels,因为它们属于不同的模态。 - Frozen Feature Extractor: 用于初始特征提取的 CNN 层被冻结(
model.freeze_feature_extractor()),因为它们在预训练期间已经得到充分训练。 - Gradient Checkpointing: 已启用以节省 GPU 内存。
- Group by Length: 将长度相似的训练样本分组,以减少填充标记的数量并提高效率。
评估指标
主要使用的指标是词错误率(WER)。模型为每个时间步预测 logit 向量,并取 argmax 以确定最可能的字符。在 CTC 解码过程中,连续相同的标记会被分组,并且空白标记用于将单词中相同的字符分隔开。
结果与影响
在对 Timit 数据集(5 小时训练数据)上的 "base" Wav2Vec2 模型进行微调的演示中,模型在测试集上达到了 22.1% 的 WER。
错误分析
预测通常在声学上与目标文本相似,但包含拼写或语法错误。在仅使用声学模型而没有语言模型来限制输出为有效语言模式时,这种情况是可以预见的。
CTC 性能
该模型对语速表现出不变性。由于 CTC 允许模型在多个帧上重复相同的标记或插入空白标记,因此转录结果在音频信号长度变化时保持一致。