音频课程文档

单元 3. 用于音频的 Transformer 架构

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始使用

单元 3. 用于音频的 Transformer 架构

在本课程中,我们将主要讨论 Transformer 模型以及如何将其应用于音频任务。虽然您不需要了解这些模型的内部细节,但了解使它们运作的主要概念很有用,因此这里快速复习一下。有关 Transformer 的深入探讨,请查看我们的 自然语言处理课程

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,我们需要先将音频转换为嵌入向量序列。

诸如**Wav2Vec2** 和**HuBERT** 等模型直接使用音频波形作为模型的输入。正如您在有关音频数据的章节中所见,波形是一维浮点数序列,其中每个数字代表给定时间点的采样幅度。此原始波形首先被归一化为零均值和单位方差,这有助于跨不同音量(幅度)标准化音频样本。

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 这样的模型首先将波形转换为对数梅尔频谱图。Whisper 总是将音频分成 30 秒的片段,每个片段的对数梅尔频谱图的形状为 (80, 3000),其中 80 是梅尔频段的数量,3000 是序列长度。通过转换为对数梅尔频谱图,我们减少了输入数据的数量,但更重要的是,这比原始波形短得多。然后,对数梅尔频谱图由一个小型的 CNN 处理成一系列嵌入,这些嵌入像往常一样进入 Transformer。

在这两种情况下,无论是波形还是频谱图输入,在 Transformer 前面都有一个小网络将输入转换为嵌入,然后 Transformer 接手完成它的工作。

模型输出

Transformer 架构输出一系列隐藏状态向量,也称为输出嵌入。我们的目标是将这些向量转换为文本或音频输出。

文本输出

自动语音识别模型的目标是预测文本标记序列。这是通过在 Transformer 的输出之上添加一个语言建模头(通常是一个线性层)以及一个 softmax 来实现的。这预测了词汇表中文本标记的概率。

频谱图输出

对于生成音频的模型,例如文本到语音 (TTS) 模型,我们将不得不添加可以生成音频序列的层。通常的做法是生成一个频谱图,然后使用一个额外的神经网络(称为声码器)将这个频谱图转换为波形。

例如,在 SpeechT5 TTS 模型中,Transformer 网络的输出是一系列 768 元素的向量。一个线性层将该序列投影到对数梅尔频谱图。一个所谓的后网络,由额外的线性层和卷积层组成,通过减少噪声来细化频谱图。然后声码器生成最终的音频波形。

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

波形输出

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

结论

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

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

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