音频课程文档

Seq2Seq 架构

Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验的访问权限

开始

Seq2Seq 架构

在上一节中讨论的 CTC 模型仅使用了 Transformer 架构的编码器部分。当我们也添加解码器以创建编码器-解码器模型时,这被称为**序列到序列**模型或简称 seq2seq。该模型将一种类型的数据序列映射到另一种类型的数据序列。

对于仅编码器的 Transformer 模型,编码器对输入序列中的每个元素进行预测。因此,输入和输出序列的长度始终相同。在 CTC 模型(例如 Wav2Vec2)中,输入波形首先被下采样,但每 20 毫秒的音频仍然有一个预测。

使用 seq2seq 模型,没有这种一对一的对应关系,并且输入和输出序列可以具有不同的长度。这使得 seq2seq 模型适用于自然语言处理任务(例如文本摘要或不同语言之间的翻译),也适用于语音识别等音频任务。

解码器的架构与编码器的架构非常相似,两者都使用类似的层,其中自注意力是主要特征。但是,解码器执行的任务与编码器不同。为了了解它是如何工作的,让我们检查一下 seq2seq 模型如何进行自动语音识别。

自动语音识别

**Whisper** 的架构如下(图片由OpenAI Whisper 博客提供)

Whisper is a transformer encoder-decoder model

这看起来应该很熟悉。左侧是**Transformer 编码器**。它以对数梅尔谱图作为输入,并对该谱图进行编码以形成一系列编码器隐藏状态,这些状态从口语语音中提取重要特征。这个隐藏状态张量代表了整个输入序列,并有效地编码了输入语音的“含义”。

💡 这些 seq2seq 模型通常使用谱图作为输入。但是,也可以设计 seq2seq 模型直接处理音频波形。

然后,编码器的输出通过称为**交叉注意力**的机制传递到右侧所示的**Transformer 解码器**。这类似于自注意力,但关注编码器输出。从这一点开始,不再需要编码器。

解码器以**自回归**的方式预测一系列文本标记,一次一个标记,从仅包含“开始”标记的初始序列开始(在 Whisper 的情况下为SOT)。在每个后续时间步长,将先前的输出序列反馈到解码器作为新的输入序列。通过这种方式,解码器一次发出一个新标记,稳步增长输出序列,直到预测“结束”标记或达到最大时间步长。

虽然解码器的架构与编码器的架构基本相同,但有两个主要区别

  1. 解码器具有交叉注意力机制,允许它查看编码器对输入序列的表示
  2. 解码器的注意力是因果的——解码器不允许查看未来。

在此设计中,解码器充当**语言模型**的角色,处理来自编码器的隐藏状态表示并生成相应的文本转录。即使 CTC 模型与外部语言模型相结合,这仍然比 CTC 更强大的方法,因为 seq2seq 系统可以使用相同的训练数据和损失函数进行端到端训练,从而提供更大的灵活性并通常具有更好的性能。

💡 CTC 模型输出一系列单个字符,而 Whisper 预测的标记是完整的单词或单词的一部分。它使用 GPT-2 的标记器,并且有 50k+ 个唯一标记。因此,对于相同的转录,seq2seq 模型可以输出比 CTC 模型短得多的序列。

seq2seq ASR 模型的典型损失函数是交叉熵损失,因为模型的最后一层预测了可能的标记上的概率分布。这通常与诸如束搜索生成最终序列之类的技术相结合。语音识别的指标是 WER 或单词错误率,它衡量将预测文本转换为目标文本(即正确的文本)需要多少替换、插入和删除——越少,分数越好。

文本到语音

这可能并不奇怪:用于 TTS 的 seq2seq 模型的工作原理与上面描述的基本上相同,但输入和输出交换了!Transformer 编码器接收一系列文本标记,并提取一系列隐藏状态,这些状态表示输入文本。Transformer 解码器将交叉注意力应用于编码器输出并预测谱图。

💡 回想一下,谱图是通过获取音频波形的连续时间片段的频率谱并将其堆叠在一起而创建的。换句话说,谱图是一个序列,其中元素是(对数梅尔)频率谱,每个时间步长一个。

在 ASR 模型中,解码器使用仅包含特殊“开始”标记的序列启动。对于 TTS 模型,我们可以使用长度为 1 且全为零的谱图作为“开始标记”来启动解码。给定此初始谱图以及对编码器隐藏状态表示的交叉注意力,解码器然后预测此谱图的下一个时间片,一次一个时间片地稳步增长谱图。

The audio waveform gets mapped to a shorter sequence of hidden-states

但是解码器如何知道何时停止呢?在**SpeechT5** 模型中,这是通过使解码器预测第二个序列来处理的。此序列包含当前时间步长是最后一个时间步长的概率。在推理时生成音频时,如果此概率超过某个阈值(例如 0.5),则解码器表示谱图已完成,并且生成循环应结束。

解码完成后,我们得到了一个包含谱图的输出序列,SpeechT5 使用所谓的**后网络**(由几个卷积层组成)来细化谱图。

在 TTS 模型的训练过程中,目标也是谱图,损失为 L1 或 MSE。在推理时,我们希望将输出谱图转换为音频波形,以便我们可以实际听到它。为此,使用外部模型,即**声码器**。此声码器不是 seq2seq 架构的一部分,而是单独训练的。

TTS 难以实现的原因在于它是一种多对一的映射关系。对于语音识别,只有一个正确的输出文本与输入语音相对应,但对于文本转语音,输入文本可以映射到许多可能的语音声音。例如,不同的说话者可能会选择强调句子的不同部分。这使得 TTS 模型难以评估。正因为如此,L1 或 MSE 损失值实际上并没有多大意义——有多种方法可以将相同的文本表示为频谱图。这就是为什么 TTS 模型通常由人类听众进行评估,并使用称为 MOS 或平均意见得分(mean opinion score)的指标的原因。

结论

Seq2seq 方法比仅编码器模型更强大。通过将输入序列的编码与输出序列的解码分离,音频和文本的对齐问题就不那么突出了。

然而,编码器-解码器模型也更慢,因为解码过程一次只进行一步,而不是一次完成所有步骤。序列越长,预测速度越慢。自回归模型也可能陷入重复或跳过单词。诸如集束搜索(beam search)之类的技术可以帮助提高预测质量,但也使解码速度进一步降低。