引言: 数据瓶颈

在深度学习的世界里,数据就是燃料。多年来,自动语音识别 (ASR) 的引擎一直由数千小时的转录音频驱动——人类煞费苦心地聆听录音并打出每一个字。虽然这种监督方法催生了 Siri 和 Alexa 这样的系统,但它有一个根本性的缺陷: 无法扩展。

全世界大约有 7,000 种语言。对于绝大多数语言来说,收集数千小时的转录音频是不可能的。即使对于主要语言,依赖标注数据也是低效的。想一想人类婴儿是如何学习语言的。他们不是从阅读文字记录开始的;他们从聆听开始。早在将意义赋予词语之前,他们就已经学会了语音的结构——节奏、音素、语调。

这篇博客文章将探讨 wav2vec 2.0 , 这是 Facebook AI 研究人员的一篇开创性论文,它模仿了这种人类学习过程。通过使用 自监督学习 (SSL) , 作者创建了一个仅从原始音频中就能学习强大语音表示的模型。

结果令人震惊。通过在未标注音频上进行预训练,wav2vec 2.0 在仅使用 少 100 倍的标注数据 的情况下,性能就能超越之前最先进的方法。在一项实验中,该模型仅使用 10 分钟 的转录语音就达到了可观的准确率。

背景: 从 BERT 到音频

要理解 wav2vec 2.0,我们必须简要回顾一下自然语言处理 (NLP) 。NLP 的革命是由像 BERT 这样的模型推动的,它们使用了“掩码语言建模 (Masked Language Modeling) ”。在 BERT 中,你取一个句子,隐藏 (掩码) 其中的一些词,然后让神经网络根据上下文猜测缺失的词。这迫使模型在不需要显式标签的情况下理解语法、句法和语义。

将这一点应用于语音是困难的。在文本中,词是离散单元 (“cat”永远是“cat”) 。在语音中,音频是连续的。音素或词之间没有清晰的界限,而且同一个词每次说出来的声音都不同。

wav2vec 2.0 通过弥合连续音频和离散单元之间的差距解决了这个问题。它学会了将音频数据本身离散化,创建一个学习到的语音单元“码本 (codebook) ”,然后解决一个类似于 BERT 的掩码任务。

wav2vec 2.0 架构

该模型分两个不同阶段运行: 预训练 (从未标注音频中学习) 和 微调 (从标注音频中学习识别单词) 。该架构旨在将原始波形转换为丰富的、上下文化的表示。

图 1: 我们的框架示意图,该框架联合学习上下文语音表示和离散化语音单元清单。

图 1 所示,该架构由三个协同工作的主要组件组成:

  1. 特征编码器 (CNN) : 过程始于原始音频波形,表示为 \(\mathcal{X}\)。这被输入到一个多层卷积神经网络 (CNN) 中。这个编码器 \(f(x)\) 将原始声音转换为一系列潜在语音表示,表示为 \(\mathbf{z}_1, \ldots, \mathbf{z}_T\)。你可以将这些 \(Z\) 向量视为每个时间步 (每 20 毫秒) 声音的压缩数学摘要。

  2. 上下文网络 (Transformer) : 潜在表示 (\(Z\)) 被掩码 (稍后详述) 并输入到 Transformer 网络 \(g(z)\) 中。就像在 NLP 中一样,Transformer 使用自注意力机制同时查看整个序列。它产生上下文化的表示 \(\mathbf{c}_1, \ldots, \mathbf{c}_T\)。虽然 \(Z\) 代表局部声音特征,但 \(C\) 捕捉全局上下文——理解某个特定的声音可能是“p”,因为它的前面是“a”和“p”。

  3. 量化模块: 这是允许对连续音频进行 BERT 风格训练的创新贡献。模型获取特征编码器的连续输出 (\(Z\)) 并将其离散化为量化表示 (\(Q\)) 。这有效地将连续声波转化为有限的“语音词汇表”。

量化过程

我们如何将无限变化的声音转化为有限的离散单元集?作者使用了 乘积量化 (Product Quantization)

想象一本包含各种声音模式的码本 (字典) 。乘积量化不是将声音向量与单个条目匹配,而是将向量分成 \(G\) 个组 (子向量) 。然后,它在特定的码本中为每个子向量找到最佳匹配并将其拼接起来。

例如,如果模型使用 \(G=2\) 个码本,每个码本有 \(V=320\) 个条目,它理论上可以表示 \(320 \times 320 = 102,400\) 个独特的语音单元。

Gumbel Softmax

从码本中选择离散条目通常是一个不可微的操作 (你无法通过像 argmax 这样的硬“选择”来计算梯度) 。为了端到端地训练这个模型,研究人员使用了 Gumbel Softmax 技巧。这允许模型在训练期间做出“软”选择 (可微) ,而在推理期间变为“硬”选择,同时仍允许梯度向后流动以更新编码器。

选择第 \(g\) 个码本中第 \(v\) 个条目的概率计算如下:

公式 1: Gumbel Softmax 概率分布。

这里,\(\tau\) 是一个温度参数。当 \(\tau\) 很大时,分布是均匀的。随着 \(\tau\) 接近 0,分布变成一个“one-hot”向量,有效地选择单个条目。作者在训练过程中逐渐退火 (降低) 这个温度。

训练目标

wav2vec 2.0 的核心魔力在于它是如何学习的。该模型并没有被训练去转录语音 (暂时还不是) 。它被训练去解决一个 对比任务 (Contrastive Task)

1. 掩码 (Masking)

首先,模型遮蔽部分输入。它随机采样起始时间步,并在潜在空间 (\(Z\)) 中掩码随后的 \(M\) 个时间步。

图 2: 15 秒样本的掩码长度分布。

图 2 显示了掩码长度的分布。大约 49% 的总时间步被掩码。Transformer 可以看到掩码周围的上下文,但看不到掩码片段本身。它的工作是弄清楚被隐藏的是什么声音。

2. 对比损失 (\(\mathcal{L}_m\))

与标准的重建 (模型试图重建确切的输入值) 不同,wav2vec 2.0 只需要从一组选项中识别出正确的离散单元 (\(q_t\)) 。

对于一个被掩码的时间步,模型查看上下文向量 \(c_t\) 并将其与真实的量化向量 \(q_t\) 进行比较。然而,为了增加难度,模型还将 \(c_t\) 与 \(K\) 个 干扰项 (distractors) 进行比较——这些干扰项是从同一音频文件的其他掩码部分采样的量化向量。

目标是最大化上下文向量与真实量化向量之间的相似度,同时最小化与干扰项的相似度。

公式 4: 对比损失函数。

这个方程表示识别真实潜在表示的负对数似然。\(\text{sim}\) 表示余弦相似度。

3. 多样性损失 (\(\mathcal{L}_d\))

这种设置存在一个风险: “码本坍塌 (Codebook Collapse) ”。模型可能会变懒,只使用其可用码本条目的一小部分来表示所有语音,而忽略其余部分。为了防止这种情况,研究人员添加了多样性损失。

公式 5: 多样性损失函数。

该损失最大化了码本条目上的平均 softmax 分布的熵。简单来说,它迫使模型在一批数据中同等频率地使用字典中的所有“词”。

总目标

最终的损失函数结合了对比损失和多样性损失:

公式 3: 总训练目标。

实验设置

研究人员测试了两种模型规模:

  • BASE: 12 个 Transformer 块 (9500 万参数) 。
  • LARGE: 24 个 Transformer 块 (3.17 亿参数) 。

数据来源:

  • 无监督预训练: 他们使用了 Librispeech 语料库 (960 小时) 和巨大的 LibriVox 数据集 (53,200 小时) 。
  • 有监督微调: 他们在 Librispeech 的子集上进行微调,数据量从全部 960 小时到仅仅 10 分钟 的标注数据不等。

在微调期间,量化模块被丢弃。一个简单的线性投影层被添加到 Transformer 之上,以预测实际的字符类别 (词汇表) ,并使用连接时序分类 (CTC) 损失来训练模型。

结果: 重新定义最先进技术

wav2vec 2.0 的结果证明了数据效率的巨大飞跃。

10 分钟的力量

也许最引人注目的结果是在极低资源环境下的表现。

表 1: 使用低资源标注数据在 Librispeech 上的 WER。

表 1 所示,当仅使用 10 分钟 的标注数据 (大约 48 个句子) 进行微调时,在 LibriVox 上预训练的 LARGE 模型在干净测试集上实现了 4.8% 的词错误率 (WER) 。

相比之下, Discrete BERT (以前的方法) 使用相同数量的数据,错误率为 16.3%。wav2vec 2.0 模型在预训练期间非常有效地学习了语言结构,以至于它几乎不需要老师就能学会到文本的映射。

击败 100 小时基准

在标准的 100 小时标注子集上,wav2vec 2.0 优于之前的最先进技术 Noisy Student , 同时使用的资源显著减少。

  • Noisy Student: WER 4.2% (Test Clean)
  • wav2vec 2.0 (Large): WER 2.3% (Test Clean)

这相当于相对减少了 45% 的错误。即使只有 10 小时的标签 (十分之一的数据) ,wav2vec 2.0 (3.2% WER) 仍然优于在 100 小时数据上训练的 Noisy Student 模型。

高资源性能

当我们将数据量增加时,该方法是否能扩展?是的。

表 10: 使用全部 960 小时标注数据在 Librispeech 上的 WER。

表 10 显示,当在全部 960 小时的 Librispeech 上进行微调时,该模型在干净测试集上实现了 1.8% 的 WER。它优于监督基线 (2.1%) 和其他半监督方法,如 ContextNet。

音素识别 (TIMIT)

为了证明模型学习了细粒度的语音细节,作者在 TIMIT 数据集上对其进行了测试,该数据集要求识别音素 (区分一个词与另一个词的独特声音单元) 。

表 3: TIMIT 音素识别准确率。

表 3 所示,wav2vec 2.0 创造了新的最先进技术,音素错误率 (PER) 为 8.3% , 比之前的最佳成绩 (11.6%) 有了显著提高。

分析: 模型学到了什么?

自监督学习的一个迷人之处在于检查“黑盒”,看看涌现出了什么表示。

离散单元 \(\approx\) 音素

作者分析了学习到的量化单元与人类标注的音素之间的对齐情况。

图 3: 离散潜在表示与音素之间共现的可视化。

图 3 可视化了给定特定离散潜在代码 (\(q_t\)) 时音素的条件概率。清晰的横条表明特定的量化单元已经专门用于表示特定的音素。例如,特定的代码与静音音素 (“bcl”) 或特定元音有很强的相关性。模型基本上是自己重新发现了音素的概念,而没有被告知它们的存在。

错误分析

尽管性能令人印象深刻,但模型并不完美。论文中的 表 11表 12 强调了常见的错误,特别是当模型在没有语言模型 (LM) 的情况下使用时。

表 11: 在不同数据量上训练的模型的最高词错误。

表 12: 转录错误的例子。

表 12 中,我们看到在 10 分钟的设置中,模型产生的转录在语音上是正确的,但在拼写上是错误的 (例如,将 “CHRISTOPHER” 写成 “CRESTIFER”) 。这证实了声学模型很强——它听到的声音是正确的——但如果没有语言模型或足够的标注数据,它不知道英语的正确拼写规则。随着更多标注数据的加入 (1小时,10小时) ,这些拼写错误会减少。

消融研究: 连续 vs. 量化

最后,研究人员提出了一个问题: 向 Transformer 提供量化数据好还是连续数据好?

表 4: 关于输入和目标量化的消融研究。

表 4 揭示了一个关键的设计选择。最佳性能来自于使用 连续输入 (将 \(Z\) 馈送给 Transformer) 但使用 量化目标 (将 \(Q\) 用于损失函数) 。

  • 如果量化输入,你会丢失信息,性能会下降 (WER 上升到 12.18) 。
  • 如果保持目标连续,任务会变得过于关注细节伪影 (如背景噪音) ,模型无法学习通用的语音表示 (WER 8.58) 。
  • 混合方法 (连续输入,量化目标) 达到了完美的平衡 (WER 7.97) 。

结论与启示

wav2vec 2.0 代表了语音处理的一个分水岭时刻。通过量化成功地将“掩码和预测”范式从 NLP 移植到音频,作者解锁了海量未标注数据的潜力。

其影响是深远的,特别是对于“长尾”语言。

  1. 民主化: 高质量的语音识别不再是英语、普通话或西班牙语的专利。
  2. 效率: 我们可以用几分钟而不是几个月的转录工作来构建有效的模型。
  3. 简单性: 该框架是端到端可微的,并且在概念上比以前的多阶段管道更简单。

随着我们向前发展,像 wav2vec 2.0 这样的技术为这样一个世界铺平了道路: 无论说什么语言或有什么资源来记录它,技术都能理解每一个声音。该模型不仅学会了识别语音;它学会了如何倾听。