作者:冷燚冲、谭旭
编者按:语音识别支持着许多生活中的常见服务,比如手机端的语音转文字功能、视频网站的字幕自动生成等等。但语音识别模型往往并不完美,需要纠错模型来纠正语音识别中的错误。目前,大部分纠错模型采用了基于注意力机制的自回归模型结构,虽然能够提升语音识别的准确率,但是延迟较高,这也成为了纠错模型在实际应用中的瓶颈。一个直接的做法是利用非自回归模型来提升速度,但是简单利用当前的非自回归模型不能降低错误率。为此,微软亚洲研究院机器学习组与微软 Azure 语音团队合作,推出了 FastCorrect 系列工作,提出了低延迟的纠错模型,相关研究论文已被 NeurIPS 2021 和 EMNLP 2021 收录。
纠错是语音识别中的一个重要后处理方法,旨在检测并纠正语音识别结果中存在的错误,从而进一步提升语音识别的准确率。许多纠错模型采用的是延迟较高的自回归解码模型,但是语音识别服务对模型的延迟有着严格的要求,在一些实时语音识别场景中(如会议同步语音识别),纠错模型无法上线应用。为了加速语音识别中的纠错模型,微软亚洲研究院的研究员们提出了一种基于编辑对齐(Edit Alignment)的非自回归纠错模型——FastCorrect,FastCorrect 在几乎不损失纠错能力的情况下,将自回归模型加速了6-9倍。考虑到语音识别模型往往可以给出多个备选识别结果,研究员们还进一步提出了 FastCorrect 2 来利用这些识别结果相互印证,从而得到了更好的性能。FastCorrect 1和2的相关研究论文已被 NeurIPS 2021 和 EMNLP 2021 收录。当前,研究员们还在研发 FastCorrect 3,在保证低延迟的情况下,进一步降低语音识别的错误率。
FastCorrect :快速纠错模型
语音识别的纠错实际上是一个文本到文本的任务,模型训练的输入为语音识别结果文本,输出为真实文本。在自然语言处理领域(如机器翻译和文本编辑),已经有一些非自回归的快速模型被提出。但初步实验结果(如图一)显示,简单地将这些模型应用到语音识别的纠错任务中,并不能取得令人满意的结果。经过对语音识别的分析,研究员们发现语音识别中的错误比较稀疏,通常错误的单词数不到总单词数的10%,而模型必须精准地找到并修改这些错误,同时还要避免修改正确的单词,这是语音识别的纠错任务中最大的挑战。而机器翻译中非自回归模型的主要问题是修改了太多原本是正确的单词,模型修改了原有错误的同时又引入了较多新的错误,因此无法提升语音识别的精度。
考虑到语音识别的纠错输入输出的对应关系是单调的,所以如果可以在词的级别对齐输入和输出,就可以得到细粒度的错误信息:哪些词是错误的,这些错误的单词应该怎样修改。基于两个文本序列的编辑距离,研究员们设计了编辑对齐(Edit Alignment)算法(如图二)。给定输入(语音识别结果)和输出(真实文本),第一步是计算两个文本的编辑距离,然后可以得到数条编辑路径(Edit Path),路径中的元素为增加/删除/替换/不变四种操作之一。为了避免修改正确单词,包含“不变”操作最多的编辑路径会被选择。最终,基于编辑路径可以得到:对于每个输入的单词,哪些输出的单词与之对应。如果对应的输入输出单词不同,那么就表明输入单词是错误单词。
基于细粒度的输入输出对应关系,研究员们针对性地设计了快速纠错模型 FastCorrect。模型包含了三个主要部分——编码器、长度预测器和解码器(如图三):
1. 编码器可以学习输入文本的特征,这些特征会被长度预测器和解码器利用。
2. 长度预测器基于编码器的输出,预测每个输入单词有多少个输出单词与之对应,即 Duration。如果输入单词 Duration 为0,那么没有输出单词与之对应,它也将被删除,如果 Duration 大于1,那么有多个输出单词与之对应,意味着解码器需要插入数个单词。
3. 解码器除了利用编码器的输出之外,还会基于长度预测器的结果,调整输入文本的长度,使之和输出文本长度一致。将长度调整一致后,解码器可以并行地同时解码出所有单词。
实验表明(如图四),在开源学术数据集 AISHELL-1 和微软内部的产品数据集上,FastCorrect 都取得了跟自回归模型几乎相同的纠错能力。模型的衡量准则为纠错后的词错误率(Word Error Rate,WER)和相对错误率下降(WER Reduction)。相比于自回归的模型,FastCorrect 的解码速度可以提升7-8倍。相比于其它非自回归的基线模型,FastCorrect 取得了更好的纠错精度。从实验结果可以看出,FastCorrect 很好地解决了语音识别模型中纠错模型的高延迟问题。
FastCorrect 2 :基于多输入的快速纠错模型
FastCorrect 已经取得了不错的性能和较大的加速比,那么还有没有进一步的提升空间呢?由于语音识别模型往往会在语音模糊不清或者存在同(近)音字的情况下出错,所以如果纠错模型能够得到这方面的信息,那么就可以在很大程度上帮助纠错模型进行错误检测。
通过分析语音识别模型的输出,研究员们发现语音识别模型在进行 BeamSearch 解码的时候,会得到多个相似的结果,这些结果的大部分文本相同,只在有限的几个位置不同,而这些位置正是语音识别模型不确定的位置,也往往是模型比较容易出错的位置。通过多个识别结果的相互印证不仅能够得到语音识别错误位置的信息,还能得到正确单词的读音信息(例如,从不同的词 cat、hat、mat 可以推断出纠错后的词大概率会以 /æt/ 这个音结尾)。
为了能够让纠错模型更好地利用多输入(多个语音识别结果)信息,研究员们对 FastCorrect 的对齐算法和模型结构进行了一系列调整。
首先是对齐算法。考虑到语音模型的多个输出可能长短不一,如果简单地通过补零来让这些输出拥有同样的长度,那么会导致每一个对齐的位置,单词不相同(如图五),读音也不相同。这样的话,模型将很难从“错位”的输入中得到错误位置和正确单词读音的信息。为了解决上述问题,FastCorrect 2 在计算编辑对齐的时候考虑了输入输出的读音相似度,在选择“不变”操作最多的编辑路径的基础上,选择读音相似度最高的编辑路径,并根据读音相似度来插入“空”单词。这样得到的对齐结果在每个位置上的单词相似度和读音相似度都很高,可以很大程度上帮助模型进行错误检测(如果一个位置上包含不同的单词)和估计正确单词的读音(如果一个位置上的不同单词读音相同)。
可以看出 FastCorrect 2 在每个位置上的单词一致性更高。
对于模型结构,研究员们也进行了改动,并引入了一个新模块:选择器(如图六)。
1. 在编码器之前,新引入了一个 PreNet,用来融合每个位置上不同单词的信息。
2. 长度预测器需要对每个位置上的每一个单词,预测 Duration。
3. 选择器则用来选择一个输入,这个输入会被调整(基于 Duration)并被送进解码器,选择器的训练目标是预测解码器的损失,因此选择器选择的是解码器损失最小的,也就是最容易被解码器修改的输入。
实验表明,在开源学术数据集 AISHELL-1 和微软内部的产品数据集上,FastCorrect 2 相对于 FastCorrect 都取得了较大的提升(如图七),而且模型的提升会随着输入的增多而不断增大。
FastCorrect 系列工作的代码已经开源,开源链接:
https://github.com/microsoft/NeuralSpeech (opens in new tab)
https://github.com/microsoft/NeuralSpeech/tree/master/FastCorrect (opens in new tab)
https://github.com/microsoft/NeuralSpeech/tree/master/FastCorrect2 (opens in new tab)
目前,研究员们正在研发 FastCorrect 3,在保证低延迟的情况下,进一步降低语音识别的错误率。同时,FastCorrect 系列工作也将被应用于微软 Azure 的语音识别技术中,为用户构建更好的语音识别服务。
论文链接:
FastCorrect:Fast Error Correction with Edit Alignment for Automatic Speech Recognition
https://arxiv.org/abs/2105.03842 (opens in new tab)
FastCorrect 2:Fast Error Correction on Multiple Candidates for Automatic Speech Recognition