音频课程文档
第三单元. 音频Transformer架构
并获得增强的文档体验
开始使用
第三单元. 音频Transformer架构
在本课程中,我们将主要考虑Transformer模型以及它们如何应用于音频任务。虽然你不需要了解这些模型的内部细节,但理解使它们工作的核心概念是很有用的,所以这里是一个快速回顾。要深入了解Transformer,请查看我们的NLP课程。
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之类的模型首先将波形转换为log-mel频谱图。Whisper始终将音频分成30秒的片段,每个片段的log-mel频谱图的形状为(80, 3000)
,其中80是mel bins的数量,3000是序列长度。通过转换为log-mel频谱图,我们减少了输入数据的量,但更重要的是,这是一个比原始波形短得多的序列。然后,log-mel频谱图由小型CNN处理成嵌入序列,然后像往常一样进入Transformer。
在这两种情况下,无论是波形输入还是频谱图输入,Transformer前面都有一个小网络,用于将输入转换为嵌入,然后Transformer接管并执行其操作。
模型输出
Transformer架构输出隐藏状态向量序列,也称为输出嵌入。我们的目标是将这些向量转换为文本或音频输出。
文本输出
自动语音识别模型的目标是预测文本标记序列。这是通过在Transformer的输出之上添加一个语言建模头(通常是单个线性层),然后添加一个softmax来完成的。这预测词汇表中文本标记的概率。
频谱图输出
对于生成音频的模型,例如文本到语音(TTS)模型,我们将不得不添加可以生成音频序列的层。通常的做法是生成频谱图,然后使用称为声码器的附加神经网络将此频谱图转换为波形。
例如,在SpeechT5 TTS模型中,来自Transformer网络的输出是768元素向量的序列。线性层将该序列投影到log-mel频谱图中。所谓的后处理网络(由附加的线性层和卷积层组成)通过减少噪声来细化频谱图。然后,声码器生成最终的音频波形。

波形输出
模型也可以直接输出波形,而不是将频谱图作为中间步骤,但我们在🤗 Transformers中目前没有任何模型这样做。
结论
总结:大多数音频Transformer模型之间的相似之处多于不同之处 — 它们都建立在相同的Transformer架构和注意力层之上,尽管某些模型仅使用Transformer的编码器部分,而另一些模型则同时使用编码器和解码器。
你还了解了如何将音频数据输入和输出Transformer模型。为了执行ASR、TTS等不同的音频任务,我们可以简单地替换将输入预处理为嵌入的层,并替换将预测的嵌入后处理为输出的层,而Transformer主干保持不变。
接下来,让我们看看训练这些模型进行自动语音识别的几种不同方法。
< > 在GitHub上更新