人工智能
序列到序列模型在端到端语音处理中被广泛应用,例如自动语音识别(ASR)、语音翻译(ST)和文本转语音(TTS)。本文着重研究一种新兴的序列到序列模型,称为变压器(Transformer),它在神经机器翻译和其他自然语言处理应用中取得了最先进的性能。我们进行了深入的研究,通过实验比较和分析了变压器和传统的循环神经网络(RNN)在总共15个自动语音识别(ASR)、一个多语种ASR、一个语音翻译(ST)和两个文本转语音(TTS)基准任务中的表现。我们的实验揭示了各种训练技巧以及变压器在每个任务中所取得的显著性能优势,其中包括与RNN相比在13/15个ASR基准任务中的出人意料的优越性。我们正在准备发布Kaldi风格的可重现配方,使用开源和公开可用的数据集,为所有的ASR、ST和TTS任务提供给社区,以便能够在我们激动人心的成果基础上取得成功。
1. 引言
Transformer是一种序列到序列(S2S)架构,最初用于神经机器翻译(NMT)[1],并在自然语言处理任务中迅速取代了循环神经网络(RNN)。本文对其在语音应用领域(自动语音识别(ASR)、语音翻译(ST)和文本转语音(TTS))的性能与RNN进行了深入比较。
将Transformer应用于语音应用的一个主要困难在于,它需要比传统基于RNN的模型更复杂的配置(例如,优化器、网络结构、数据增强)。我们的目标是分享有关在语音任务中使用变压器的知识,以便社区可以借助可重现的开源工具和配方充分取得我们激动人心的成果。
目前,现有的基于Transformer的语音应用[2]–[4]仍缺乏开源工具包和可重现的实验,而在之前的神经机器翻译研究[5]、[6]中已经提供了这些资源。因此,我们正在进行一个开放的社区驱动项目,使用变压器和循环神经网络,为端到端语音应用提供支持,借鉴了基于隐马尔可夫模型(HMM)的ASR领域的Kaldi的成功经验[7]。具体而言,我们的实验提供了实用指南,用于调整语音任务中的变压器,以实现最先进的结果。
在我们的语音应用实验中,我们研究了变压器和基于循环神经网络的系统的几个方面。例如,我们测量了与参考标准相比的词/字符/回归误差,训练曲线以及在多个GPU上的可扩展性。这项工作的贡献包括:
• 我们进行了一项大规模的比较研究,对比了变压器和循环神经网络,在ASR相关任务中取得了显著的性能提升。
• 我们解释了在语音应用(ASR、TTS和ST)中使用变压器的训练技巧。
• 我们在我们的开源工具包ESPnet [8]中提供了可重现的端到端配方和在大量公开可用数据集上预训练的模型。
相关研究
由于变压器最初被提出作为NMT系统[1],它已经在NMT任务中得到广泛研究,包括超参数搜索[9]、并行实现[5]以及与RNN的比较[10]。然而,语音处理任务在ASR [2]、ST [3]和TTS [4]方面只提供了初步的结果。因此,本文旨在汇集以前的基础研究,并在我们的实验中探索更广泛的主题(例如准确性、速度、训练技巧)。
2.序列到序列循环神经网络
2.1 序列到序列的统一公式
S2S(序列到序列)是一种神经网络的变种,它学习将源序列X转换为目标序列Y [12]。在图1中,我们展示了用于ASR、TTS和ST任务的常见S2S结构。S2S包括两个神经网络:一个编码器(encoder)
(1)
(2)
和一个解码器
(3)
(4)
(5)
其中,X是源序列(例如,语音特征序列(用于ASR和ST)或字符序列(用于TTS)),e是EncBody中的层数,d是DecBody中的层数,t是目标帧的索引,上述方程中的所有函数都由神经网络实现。对于解码器的输入Y [1 : t - 1],在训练阶段我们使用了一个基于真实数据的前缀,而在解码阶段我们使用了一个生成的前缀。在训练过程中,S2S模型学习最小化标量损失值。
(6)
在生成的序列和目标序列之间的损失值。
图1 在语音应用中的序列到序列架构
本节的其余部分描述了基于RNN的通用模块:“EncBody”和“DecBody”。我们将“EncPre”、“DecPre”、“DecPost”和“Loss”视为特定任务的模块,并在后面的部分中对它们进行描述。
2.2 循环神经网络解码器
在方程(4)中,DecBody(·)使用编码序列和目标前缀生成下一个目标帧。在序列生成中,解码器通常是单向的。例如,基于循环神经网络的DecBody(·)实现中经常使用带有注意力机制的单向LSTM [13]。该注意力机制通过发出源帧权重,将编码的源帧 按目标帧进行求和,得到一个与前缀一起进行转换的目标帧向量。我们将这种类型的注意力称为“编码器-解码器注意力”。
3. 变压器
变压器通过自注意力机制学习序列信息,而不是RNN中使用的循环连接。本节详细描述了变压器中基于自注意力的模块。
3.1 多头注意力
变压器由多个点注意力层[18]组成。
(7)
其中 和 是这个注意力层的输入, 是特征维度的数量, 是 的长度, 是 和 的长度。我们将 称为 “注意力矩阵" 。Vaswani等人[1]将这些输入 和 分别视为查询 (query) 和一组键值对 (key-value pairs)。
此外,为了使模型能够并行处理多个注意力,Vaswani等人[1]将方程(7)中的注意力层扩展为多头注意力(MHA):
(8)
(9)
其中 和 是这个多头注意力层的输入, 是第 个注意力层的输出和是可学习的权重矩阵, 是该层中的注意力数目。
3.2 自注意力编码器
我们定义了基于变压器的EncBody(·),用于方程(2),与第2.2节中的RNN编码器不同,定义如下:
(10)
其中, 是编码器层的索引,而 是第 个双层前馈网络:
(11)
其中 是输入序列 的第帧,是可学习的权重矩阵,而是可学习的偏置向量。我们将方程 中的 称为 "自注意力" (self attention)。
3.3 自注意力解码器
用于方程(4)的基于变压器的DecBody(·)由两个注意力模块组成:
(12)
其中,是解码器层的索引。我们将中解码器输入和编码器输出之间的注意力矩阵称为“编码器-解码器注意力”,与第2.3节中的RNN中的注意力相同。由于单向解码器在序列生成中很有用,因此在第t个目标帧处,将其注意力矩阵进行掩码处理,以防止它们与后续帧(大于t)发生连接。可以使用逐元素乘法与一个三角形二进制矩阵并行地对序列进行掩码操作。由于它不需要顺序操作,因此比RNN提供更快的实现。
3.4 位置编码
为了在非循环模型中表示时间位置,变压器采用了正弦位置编码:
在应用EncBody(.)和DecBody(()模块之前,输入序列会与 进行拼接。
4. ASR扩展
在我们的ASR框架中,序列到序列(S2S)模型从输入序列(使用对数梅尔滤波器组成的语音特征)中预测出目标字符序列或SentencePiece [19]序列。
4.1 ASR编码器架构
在ASR中,源序列 被表示为一个由83维对数梅尔滤波器帧和音高特征[20]组成的序列。首先,EncPre(.)使用具有256个通道、步幅为2和卷积核大小为 3 的两层CNN或类似于VGG的最大池化[21],将源序列 转换为一个子采 样序列 。这里, 是CNN输出序列的长度。这个CNN对应于方程 (1) 中的 EncPre 。然后,EncBody 将 转换为一系列编码特征 ,用于CTC和解码器网络。
4.2 ASR解码器架构
解码器网络接收编码序列Xe和目标序列Y [1:t−1]的前缀,这些前缀由令牌ID(字符或SentencePiece [19])组成。首先,方程(3)中的DecPre(·)将令牌嵌入到可学习的向量中。接下来,DecBody(·)和单线性层DecPost(·)使用Xe和Y [1:t−1]预测下一个令牌Ypost[t]的后验分布。
4.3 ASR训练和解码
在ASR训练过程中,解码器和CTC模块分别预测给定相应源序列 的 的逐帧后验分布:和。我们简单地使用这些负对数似然值的加权和:
其中,α是一个超参数。
在解码阶段,解码器使用束搜索(beam search)预测给定语音特征和先前预测的令牌的下一个令牌。在束搜索中,结合S2S、CTC和RNN语言模型(LM)[22]的得分,计算如下:
其中,是目标序列的一组假设,而和是超参数。
5. ST扩展
在语音翻译(ST)中,S2S接收与ASR相同的源语音特征和目标令牌序列,但源语言和目标语言不同。它的模块定义方式与ASR中的相同。然而,ST无法与第4.3节介绍的CTC模块合作,因为与ASR不同,翻译任务不能保证源序列和目标序列的单调对齐[23]。
6. TTS扩展
在TTS框架中,序列到序列(S2S)模型生成一系列对数梅尔滤波器特征,并预测给定输入字符序列的序列结束(EOS)的概率[15]。
6.1 TTS编码器架构
在TTS中,编码器的输入是与输入字符和EOS符号对应的ID序列。首先,字符ID序列通过嵌入层转换为字符向量序列,然后通过一个可学习的标量参数对向量进行缩放的位置编码被添加到向量中[4]。这个过程是方程(1)中EncPre(·)的TTS实现。最后,编码器EncBody(·)在方程(2)中将这个输入序列转换为解码器网络的一系列编码特征。
6.2 TTS解码器架构
在TTS中,解码器的输入是一系列编码器特征和一系列对数梅尔滤波器特征。在训练中,采用了“teacher-forcing”方式使用真实的对数梅尔滤波器特征,而在推理阶段,采用了自回归(autoregressive)的方式使用预测的特征。
首先,将80维对数梅尔滤波器特征的目标序列通过Prenet [15]转换为一系列隐藏特征,作为方程(3)中DecPre(·)的TTS实现。该网络由两个具有256个单元的线性层、一个ReLU激活函数、以及dropout层组成,最后是一个具有个单元的投影线性层。由于预期Prenet转换的隐藏表示与编码器特征的特征空间类似,Prenet有助于学习到一个对角的编码器-解码器注意力[4]。然后,方程(4)中的解码器DecBody(·),其架构与编码器相同,将编码器特征序列和隐藏特征序列转换为解码器特征序列。对于的每一帧,应用了两个线性层,分别用于计算目标特征和EOS的概率。最后,将预测的目标特征序列应用于Postnet [15],以详细预测其各个组成部分。Postnet是一个五层CNN,每一层都是一个具有256个通道和大小为5的卷积核的1D卷积层,随后进行批量归一化、tanh激活函数和dropout处理。这些模块是方程(5)中DecPost(·)的TTS实现。
6.3 TTS训练和解码
在TTS训练中,整个网络被优化以最小化两个损失函数:1)目标特征的L1损失和2)EOS概率的二元交叉熵(BCE)损失。为了解决BCE计算中的类别不平衡问题,对于正样本,使用一个常数权重(例如5)[4]。
此外,我们应用了引导式注意力损失(guided attention loss)[24],以加速对只有两个头部的两个层的对角注意力的学习。这是因为已知编码器-解码器注意力矩阵仅在来自目标侧的少数头部中呈对角形式[4]。我们没有引入任何用于平衡这三个损失值的超参数,只是将它们简单地相加。
在推理阶段,网络以自回归的方式预测下一帧的目标特征。如果EOS的概率超过了一定阈值(例如0.5),网络将停止预测。
7. ASR实验
7.1 数据集
在表格1中,我们总结了我们在ASR实验中使用的15个数据集。我们的实验涵盖了ASR中的各种主题,包括录音(清晰的、嘈杂的、远场的等)、语言(英语、日语、普通话、西班牙语、意大利语)和规模(10-960小时)。除了JSUT [25]和Fisher-CALLHOME西班牙语外,我们的数据准备脚本基于Kaldi的“s5x”配方[7]。在技术上,我们调整了所有配置(例如特征提取、SentencePiece [19]、语言建模、解码、数据增强[26],[27]),除了训练阶段的配置,使其达到现有基于RNN的系统的最佳性能。我们对几个语料库使用了数据增强。例如,我们对CSJ、CHiME4、Fisher CALLHOME西班牙语、HKUST和TED-LIUM2/3应用了速度扰动[27],扰动比率为0.9、1.0和1.1;我们还对Aurora4、LibriSpeech、TED-LIUM2/3和WSJ应用了SpecAugment [26]。
表1 ASR数据集描述。在“测试集”中列出的名称对应于表2中的ASR结果。我们通过外部的WSJ train si284数据集(81小时)扩大了标有(*)的语料库。
7.2 设置
我们采用了与[41]中相同的变压器架构,适用于除最大的LibriSpeech外的每个语料库。对于RNN,我们遵循先前研究[17],[42]中针对每个语料库配置的最佳架构。
由于Transformer的训练迭代速度是RNN的八倍,更新更精细,因此Transformer需要与RNN不同的优化器配置。对于RNN,我们采用了Adadelta [43]并使用早停策略的每个语料库的最佳系统配置。为了训练Transformer,我们基本上遵循了先前的文献[2](例如,dropout、学习率、热身步骤)。在Transformer中,我们没有使用开发集进行早停策略。我们只是运行了20-200个epoch(大多数为100个epoch),并将最后10个epoch存储的模型参数取平均作为最终模型。
我们在单个GPU上对较大的语料库(如LibriSpeech、CSJ和TED-LIUM3)进行了训练。我们还确认了使用多个前向/后向步骤上的梯度累积[5]来模拟多个GPU的效果,可以获得与这些语料库相似的性能。在解码阶段,Transformer和RNN在每个语料库上共享相同的配置,例如束搜索大小(例如,20-40),CTC权重λ(例如,0.3)和LM权重γ(例如,0.3-1.0),这些在第4.3节中介绍。
7.3 结果
表2总结了每个语料库的ASR结果,以字符错误率(CER)和词错误率(WER)衡量。结果显示,在我们的实验中,Transformer在13个语料库中优于RNN。虽然我们的系统不像Kaldi那样具有发音字典、词性标记和基于对齐的数据清理,但我们的Transformer在7个语料库上提供了与基于HMM的系统Kaldi可比的CER/WER。我们得出结论,Transformer在低资源(JSUT)、大资源(LibriSpeech、CSJ)、嘈杂(AURORA4)和远场(REVERB)任务中,甚至能够超越基于RNN的端到端系统和基于DNN/HMM的系统。表3还总结了LibriSpeech ASR基准测试的结果,包括我们的结果和其他报告,因为这是一个最具竞争力的任务。我们的Transformer结果与[26]、[44]、[45]中的最佳表现可媲美。
表2 字符/词错误率的ASR结果。带有(*)标记的结果是在我们的环境中进行评估的,因为没有提供官方结果。Kaldi的官方结果是从版本“c7876a33”中提取的。
表3 Librispeech ASR基准测试的比较如表所示
图2展示了在LibriSpeech上使用多个GPU训练得到的ASR训练曲线。我们观察到,使用较大的小批量训练的Transformer的准确性更高,而RNN则没有这种趋势。另一方面,当我们对Transformer使用较小的小批量时,在热身步骤之后通常会出现欠拟合的情况。在这个任务中,相比使用单个GPU的RNN,Transformer以大约八倍的速度实现了与RNN相当的最佳准确性。
图2. 使用LibriSpeech数据集进行ASR训练的曲线。在GPU上,每个模型的小批量中包含最大数量的语音段。
7.4 讨论
我们总结了我们在实验中观察到的训练技巧:
当Transformer出现欠拟合时,我们建议增加小批量的大小,因为这不仅可以加快训练速度,同时也可以提高准确性,这与其他超参数不同。
如果没有多个GPU可用,可以采用梯度累积策略[5]来模拟较大的小批量。
虽然对于RNN并没有改善结果,但对于Transformer来说,使用dropout是必不可少的,可以避免过拟合的问题。
我们尝试了几种数据增强方法[26],[27]。它们极大地改善了Transformer和RNN的性能。
对于RNN而言,最佳的解码超参数γ和λ通常也适用于Transformer。
Transformer在解码方面存在一些弱点。它比Kaldi系统要慢得多,这是因为自注意力机制在朴素实现中的时间复杂度为,其中n是语音的长度。为了直接与基于DNN-HMM的ASR系统进行性能比较,我们需要为Transformer开发一种更快的解码算法。
8. 多语种ASR实验
这一部分在多语种设置中比较了RNN和Transformer在ASR性能上的表现,考虑到Transformer在前一部分的单语种ASR任务中的成功。根据[46]的方法,我们准备了10种不同的语言,包括WSJ(英语)、CSJ(日语)[30]、HKUST(普通话)[33]和VoxForge(德语、西班牙语、法语、意大利语、荷兰语、葡萄牙语、俄语)。模型基于一个单一的多语种模型,其中参数在所有语言之间共享,输出单元包括所有10种语言的字母(共计5,297个字母和特殊符号)。我们在RNN和Transformer上都使用了本节介绍的默认设置,没有使用RNNLM浅融合[21]。
图3清楚地显示出我们的Transformer在9种语言中明显优于我们的RNN。它在8种语言中实现了超过10%的相对改进,其中在VoxForge意大利语中的相对改进最大,达到了28.0%。与[46]中使用了更深的BLSTM(7层)和RNNLM的RNN结果相比,我们的Transformer在9种语言中仍然提供了更优秀的性能。从这个结果可以得出结论,Transformer在多语种端到端ASR中也优于RNN。
图3 多语种端到端ASR与Watanabe等人的RNN[46]、ESPnet RNN和ESPnet Transformer的比较。
9. 语音翻译实验
我们基线的端到端ST RNN基于[23],它与我们ASR系统中使用的RNN结构类似,但我们没有在原始论文中使用卷积LSTM层。我们的ST Transformer的配置与我们的ASR系统相同。
我们在Fisher-CALLHOME英西语语料库[47]上进行了语音翻译实验。我们的Transformer将BLEU分数从我们的RNN基准值16.5提高到了17.2,应用于CALLHOME的“evltest”数据集上。在训练Transformer时,我们观察到比RNN更严重的欠拟合问题。解决这个问题的方法是使用我们在ASR实验中使用的预训练编码器,因为ST数据集中包含了我们在ASR实验中使用的Fisher-CALLHOME西班牙语语料库。
10. TTS实验
10.1 设置
我们的基准线是基于RNN的TTS模型Tacotron 2 [15]。我们按照其模型和优化器的设置进行实验。我们重新使用现有的TTS配方,包括数据准备和波形生成,这些配方我们已经配置为最适合RNN。我们在第3节中介绍的Transformer配置如下:。两个系统的输入都是字符序列。
10.2 结果
我们使用两个语料库进行了Transformer和基于RNN的TTS的比较:M-AILABS [48](意大利语,16 kHz,31小时)和LJSpeech [49](英语,22 kHz,24小时)。在M-AILABS的情况下,我们使用了一位意大利男性发音者(Riccardo)。图4和图5显示了这两个语料库中的训练曲线。从这些图中可以看出,Transformer和RNN在L1损失收敛方面提供了类似的结果。与ASR中观察到的情况类似,我们发现较大的迷你批处理对于Transformer来说可以获得更好的验证集L1损失和更快的训练速度,而对于RNN来说对L1损失会产生负面影响。我们还在图6和 7中提供了生成的语音梅尔频谱图。我们得出结论,基于Transformer的TTS几乎可以达到与基于RNN的TTS相同的性能水平。
图4 M-AILABS数据集上的TTS训练曲线。
图5 LJSpeech数据集上的TTS训练曲线。
图6 M-AILABs数据集上的梅尔频谱图样本。(顶部) 真实值,(中间) Tacotron 2样本,(底部) Transformer样本。输入文本为“E PERCHE SUBITO VIENE IN MENTE CHE 'IDDIO NON PUO AVER FATTO UNA COSA INGIUSTA”。
图7 LJSpeech数据集上的梅尔频谱图样本。(顶部) 真实值,(中间) Tacotron 2样本,(底部) Transformer样本。输入文本为“IS NOT CONSISTENT WITH THE STANDARDS WHICH THE RESPONSIBILITIES OF THE SECRET SERVICE REQUIRE IT TO MEET.”
10.3 讨论
我们在TTS中训练Transformer的经验教训如下:
如果有大量的GPU可用,使用大批量训练可以加快TTS的训练速度,就像在ASR中一样。
对于Transformer,验证损失值,特别是BCE损失,更容易出现过拟合。我们建议在检查其收敛性时监控注意力图而不是损失值。
在Transformer中,注意力图的某些头部并不总是像Tacotron 2中那样是对角线的。因此,我们需要选择在哪些位置应用引导性注意力损失[24]。-使用Transformer进行解码的速度也比使用RNN慢(每帧6.5毫秒 vs 单线程CPU上每帧78.5毫秒)。我们还尝试了FastSpeech [50],它实现了基于Transformer的非自回归TTS。它极大地提高了解码速度(每帧0.6毫秒,单线程CPU上),并生成了与自回归Transformer相媲美的语音质量。-在Transformer中,引入的减少因子[51]也是有效的。它可以极大地减少训练和推理时间,但会稍微降低质量。
未来的工作,我们需要进一步研究训练速度和质量之间的权衡,并引入ASR技术(例如数据增强、语音增强)来改进TTS系统。
11. 总结
我们在语音应用中对Transformer和RNN进行了比较性研究,使用了各种语料库,包括ASR(15个单语种+一个多语种)、ST(一个语料库)和TTS(两个语料库)。在这些任务的实验中,我们取得了令人期待的结果,包括在许多ASR任务中的巨大改进,并解释了我们如何改进模型。我们相信本文中描述的可重现的配方、预训练模型和训练技巧将加速Transformer在语音应用中的研究方向。
编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !