单元 3. 用于音频的 Transformer 架构
在本课程中,我们将主要讨论 Transformer 模型以及如何将其应用于音频任务。虽然您不需要了解这些模型的内部细节,但了解使它们运作的主要概念很有用,因此这里快速复习一下。有关 Transformer 的深入探讨,请查看我们的 自然语言处理课程。
Transformer 如何工作?
最初的 Transformer 模型旨在将书面文本从一种语言翻译成另一种语言。它的架构如下所示
左侧是**编码器**,右侧是**解码器**。
编码器接收输入,在本例中是文本标记序列,并构建其表示(其特征)。模型的这一部分经过训练,可以从输入中获取理解。
解码器使用编码器的表示(特征)以及其他输入(先前预测的标记)来生成目标序列。模型的这一部分经过训练,可以生成输出。在最初的设计中,输出序列由文本标记组成。
还有一些基于 Transformer 的模型,它们只使用编码器部分(适用于需要理解输入的任务,例如分类),或者只使用解码器部分(适用于文本生成等任务)。BERT 是编码器专用模型的一个例子;GPT2 是解码器专用模型的一个例子。
Transformer 模型的一个关键特征是它们使用名为**注意力层**的特殊层构建。这些层告诉模型在计算特征表示时,要注意输入序列中的某些元素,而忽略其他元素。
将 Transformer 用于音频
我们将在本课程中介绍的音频模型通常具有如上所示的标准 Transformer 架构,但在输入或输出端略有修改,以允许使用音频数据而不是文本。由于所有这些模型本质上都是 Transformer,因此它们的大部分架构将是通用的,主要区别在于它们的训练和使用方式。
对于音频任务,输入和/或输出序列可能是音频,而不是文本
自动语音识别 (ASR):输入是语音,输出是文本。
语音合成 (TTS):输入是文本,输出是语音。
音频分类:输入是音频,输出是类别概率——每个序列元素一个,或者整个序列一个类别概率。
语音转换或语音增强:输入和输出都是音频。
有几种不同的方法可以处理音频,以便将其与 Transformer 一起使用。主要考虑因素是使用原始形式的音频(作为波形)还是将其处理为频谱图。
模型输入
音频模型的输入可以是文本或声音。目标是将此输入转换为可以由 Transformer 架构处理的嵌入向量。
文本输入
文本到语音模型以文本作为输入。这与原始 Transformer 或任何其他 NLP 模型的工作原理相同:输入文本首先被标记化,生成文本标记序列。此序列通过输入嵌入层发送,将标记转换为 512 维向量。然后将这些嵌入向量传递到 Transformer 编码器中。
波形输入
自动语音识别模型以音频作为输入。为了能够使用 Transformer 进行 ASR,我们需要先将音频转换为嵌入向量序列。
诸如**Wav2Vec2** 和**HuBERT** 等模型直接使用音频波形作为模型的输入。正如您在有关音频数据的章节中所见,波形是一维浮点数序列,其中每个数字代表给定时间点的采样幅度。此原始波形首先被归一化为零均值和单位方差,这有助于跨不同音量(幅度)标准化音频样本。
在归一化之后,音频样本序列使用一个小的卷积神经网络(称为特征编码器)转换为嵌入。该网络中的每个卷积层都处理输入序列,对音频进行下采样以缩短序列长度,直到最后的卷积层输出一个 512 维向量,其中包含每个 25 毫秒音频的嵌入。一旦输入序列被转换为此类嵌入序列,Transformer 将像往常一样处理数据。
频谱图输入
使用原始波形作为输入的一个缺点是它们往往具有很长的序列长度。例如,以 16 kHz 的采样率录制 30 秒的音频会产生长度为 30 * 16000 = 480000
的输入。更长的序列长度需要在 Transformer 模型中进行更多计算,因此需要更高的内存使用量。
因此,原始音频波形通常不是表示音频输入最有效的方式。通过使用频谱图,我们获得相同的信息量,但以更压缩的形式。
像 Whisper 这样的模型首先将波形转换为对数梅尔频谱图。Whisper 总是将音频分成 30 秒的片段,每个片段的对数梅尔频谱图的形状为 (80, 3000)
,其中 80 是梅尔频段的数量,3000 是序列长度。通过转换为对数梅尔频谱图,我们减少了输入数据的数量,但更重要的是,这比原始波形短得多。然后,对数梅尔频谱图由一个小型的 CNN 处理成一系列嵌入,这些嵌入像往常一样进入 Transformer。
在这两种情况下,无论是波形还是频谱图输入,在 Transformer 前面都有一个小网络将输入转换为嵌入,然后 Transformer 接手完成它的工作。
模型输出
Transformer 架构输出一系列隐藏状态向量,也称为输出嵌入。我们的目标是将这些向量转换为文本或音频输出。
文本输出
自动语音识别模型的目标是预测文本标记序列。这是通过在 Transformer 的输出之上添加一个语言建模头(通常是一个线性层)以及一个 softmax 来实现的。这预测了词汇表中文本标记的概率。
频谱图输出
对于生成音频的模型,例如文本到语音 (TTS) 模型,我们将不得不添加可以生成音频序列的层。通常的做法是生成一个频谱图,然后使用一个额外的神经网络(称为声码器)将这个频谱图转换为波形。
例如,在 SpeechT5 TTS 模型中,Transformer 网络的输出是一系列 768 元素的向量。一个线性层将该序列投影到对数梅尔频谱图。一个所谓的后网络,由额外的线性层和卷积层组成,通过减少噪声来细化频谱图。然后声码器生成最终的音频波形。
波形输出
模型也可以直接输出波形,而不是作为中间步骤输出频谱图,但我们目前在 🤗 Transformers 中没有执行此操作的任何模型。
结论
总结:大多数音频 Transformer 模型比不同之处更相似——它们都建立在相同的 Transformer 架构和注意力层之上,尽管某些模型只使用 Transformer 的编码器部分,而另一些模型则使用编码器和解码器。
你已经了解了如何将音频数据输入和输出 Transformer 模型。为了执行 ASR、TTS 等不同的音频任务,我们可以简单地交换将输入预处理成嵌入的层,以及交换将预测的嵌入后处理成输出的层,而 Transformer 骨干保持不变。
接下来,让我们看看这些模型可以用来进行自动语音识别的几种不同方法。