音频课程文档

第三单元. 音频Transformer架构

Hugging Face's logo
加入Hugging Face社区

并获得增强的文档体验

开始使用

第三单元. 音频Transformer架构

在本课程中,我们将主要考虑Transformer模型以及它们如何应用于音频任务。虽然你不需要了解这些模型的内部细节,但理解使它们工作的核心概念是很有用的,所以这里是一个快速回顾。要深入了解Transformer,请查看我们的NLP课程

Transformer是如何工作的?

最初的Transformer模型被设计用于将书面文本从一种语言翻译成另一种语言。它的架构看起来像这样

Original transformer architecture

左边是编码器,右边是解码器

  • 编码器接收输入(在本例中是文本标记序列),并构建其表示(其特征)。模型的这部分经过训练,以获取对输入的理解。

  • 解码器使用编码器的表示(特征)以及其他输入(先前预测的标记)来生成目标序列。模型的这部分经过训练以生成输出。在最初的设计中,输出序列由文本标记组成。

也有一些基于Transformer的模型仅使用编码器部分(适用于需要理解输入的任务,例如分类),或仅使用解码器部分(适用于文本生成等任务)。编码器模型的示例是BERT;解码器模型的示例是GPT2。

Transformer模型的关键特征是它们是用称为注意力层的特殊层构建的。这些层告诉模型在计算特征表示时,要特别注意输入序列中的某些元素而忽略其他元素。

将Transformer用于音频

我们将在本课程中介绍的音频模型通常具有如上所示的标准Transformer架构,但在输入或输出端略作修改,以允许使用音频数据而不是文本。由于所有这些模型的核心都是Transformer,因此它们的大部分架构都是相同的,主要区别在于它们的训练和使用方式。

The transformer with audio input and output

对于音频任务,输入和/或输出序列可能是音频而不是文本

  • 自动语音识别 (ASR): 输入是语音,输出是文本。

  • 语音合成 (TTS): 输入是文本,输出是语音。

  • 音频分类:输入是音频,输出是类别概率 — 序列中每个元素的概率或整个序列的单个类别概率。

  • 声音转换或语音增强:输入和输出都是音频。

有几种不同的方法来处理音频,以便它可以与Transformer一起使用。主要的考虑因素是使用原始形式的音频(作为波形)还是将其处理为频谱图。

模型输入

音频模型的输入可以是文本或声音。目标是将此输入转换为可以由Transformer架构处理的嵌入向量。

文本输入

文本到语音模型以文本作为输入。这与原始Transformer或任何其他NLP模型的工作方式相同:首先对输入文本进行标记化,得到文本标记序列。此序列通过输入嵌入层发送,以将标记转换为512维向量。然后,这些嵌入向量被传递到Transformer编码器中。

波形输入

自动语音识别模型以音频作为输入。为了能够将Transformer用于ASR,我们首先需要以某种方式将音频转换为嵌入向量序列。

诸如Wav2Vec2HuBERT之类的模型直接使用音频波形作为模型的输入。正如你在关于音频数据的章节中看到的那样,波形是浮点数的一维序列,其中每个数字表示给定时间的采样幅度。首先将此原始波形归一化为零均值和单位方差,这有助于标准化不同音量(幅度)的音频样本。

Wav2Vec2 uses a CNN to create embeddings from the input waveform

归一化后,音频样本序列使用小型卷积神经网络(称为特征编码器)转换为嵌入。此网络中的每个卷积层都处理输入序列,对音频进行子采样以减少序列长度,直到最终卷积层输出一个512维向量,其中包含每25毫秒音频的嵌入。一旦输入序列被转换为这种嵌入序列,Transformer将像往常一样处理数据。

频谱图输入

使用原始波形作为输入的缺点之一是它们往往具有较长的序列长度。例如,采样率为16 kHz的30秒音频产生的输入长度为30 * 16000 = 480000。更长的序列长度需要在Transformer模型中进行更多计算,从而导致更高的内存使用率。

因此,原始音频波形通常不是表示音频输入的最有效形式。通过使用频谱图,我们可以获得相同数量的信息,但形式更压缩。

Whisper uses a CNN to create embeddings from the input spectrogram

诸如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频谱图中。所谓的后处理网络(由附加的线性层和卷积层组成)通过减少噪声来细化频谱图。然后,声码器生成最终的音频波形。

SpeechT5 outputs a spectrogram and uses a vocoder to create the waveform
💡 如果你采用现有的波形并应用短时傅里叶变换或STFT,则可以执行逆运算ISTFT,以再次获得原始波形。这是可行的,因为STFT创建的频谱图包含幅度和相位信息,而两者都是重建波形所必需的。但是,将其输出生成为频谱图的音频模型通常仅预测幅度信息,而不预测相位。要将这样的频谱图转换为波形,我们必须以某种方式估计相位信息。这就是声码器的作用。

波形输出

模型也可以直接输出波形,而不是将频谱图作为中间步骤,但我们在🤗 Transformers中目前没有任何模型这样做。

结论

总结:大多数音频Transformer模型之间的相似之处多于不同之处 — 它们都建立在相同的Transformer架构和注意力层之上,尽管某些模型仅使用Transformer的编码器部分,而另一些模型则同时使用编码器和解码器。

你还了解了如何将音频数据输入和输出Transformer模型。为了执行ASR、TTS等不同的音频任务,我们可以简单地替换将输入预处理为嵌入的层,并替换将预测的嵌入后处理为输出的层,而Transformer主干保持不变。

接下来,让我们看看训练这些模型进行自动语音识别的几种不同方法。

< > 在GitHub上更新