音频课程文档

第 3 单元. 用于音频的 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,我们首先需要以某种方式将音频转换为嵌入向量序列。

诸如**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主干保持不变。

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

< > 在 GitHub 上更新