前言
「语音解决」是实时互动畛域中十分重要的一个场景,在声网发动的「RTC Dev Meetup 丨语音解决在实时互动畛域的技术实际和利用」流动中,来自百度、寰宇科技和依图的技术专家,围绕该话题进行了相干分享。
本文基于微软亚洲研究院主管研究员谭旭在流动中分享内容整顿。关注公众号「声网开发者」,回复关键词「DM0428」即可下载流动相干 PPT 材料。
语音辨认纠错通过检测并纠正语音辨认后果中存在的谬误,进一步晋升辨认准确率。目前,大部分纠错模型采纳了基于注意力机制的自回归构造,提早较高,影响模型线上部署。
本文将介绍一种低提早、高精度的纠错模型 FastCorrect,通过利用编辑对齐以及多个候选后果,在获得 10% 的词错误率降落的同时,将模型减速 6-9 倍,相干钻研论文已被 NeurIPS 2021 和 EMNLP 2021 收录。
01 背景材料
1、ASR(Automatic Speech Recognition 主动语音辨认)
语音辨认的准确率是影响语音辨认广泛应用的最关键因素,如何升高语音辨认在辨认过程中的错误率对 ASR 来说十分重要。晋升语音辨认的精度、升高错误率存在很多不同的路径,传统形式是晋升语音辨认的外围模型。在以往的钻研过程中,次要关注点在于如何改良语音辨认的训练模型建典范式以及训练数据等。其实,除了晋升语音辨认模型自身的准确率,还能够对语音辨认的辨认后果进行后处理,进一步升高辨认错误率。
2、ASR 后处理
在语音辨认后处理场景下能够进行哪些操作呢?首先是 reranking,也就是重排序,通常在语音辨认生成文字的时候会生成多个候选,咱们能够通过对模型进行排序,从多个候选中抉择较好的后果作为最终的辨认后果以晋升准确率。第二种办法是对语音辨认的后果进行谬误纠正,这样能进一步升高错误率。这两种办法都是语音辨认后处理的可选办法,也是当初大家宽泛采纳的升高错误率的方法,而明天的分享次要聚焦于纠错伎俩。
3、为什么抉择纠错
抉择纠错伎俩的起因是,咱们认为纠错是基于已有的语音辨认的后果进行改过,能产生更好的语音辨认后果。而 reranking 是从已有的语音辨认返回的后果中产生一个较好的候选,如果纠错成果足够好,则会比 reranking 更有劣势。
02 ASR 纠错工作的模式
上文介绍了技术计划选型,为什么要抉择纠错伎俩。接下来定义 ASR 纠错工作(error correction)的模式。首先给定一个训练数据汇合(S,T),其中 S 代表语音辨认的输出语音,T 是对应的文本标注。而后 ASR 模型会将语音辨认成文本,最终失去 M(S)。M(S) 和 T 两个数据配对组成了一个训练集,error correction 模型次要是在这个训练集中训练。训练实现当前,咱们给定 ASR 辨认的后果,也就是 M(S),返回正确后果。
Error correction 模型的工作是典型的序列到序列学习工作,输出是一个语音辨认生成的后果,而输入是纠错当前的正确后果。既然是序列到序列的模型,以前的工作会很天然地将其当成一个序列建模的工作,通过 encoder- attention-decoder 自回归解码的形式进行纠错,输出是谬误的句子,输入是正确的句子。
在解码的过程当中采纳自回归形式,比方生成 A,而后生成下一个词 B,再顺次生成 C 和 D。这种形式存在一个问题,就是解码速度会比较慢。咱们进行过实测,比方线上的 ASR 模型在 CPU 上的均匀 latency 是 500 毫秒,如果再加一个自回归的纠错模型,则会带来额定的 660 毫秒的时延,使线上辨认速度升高两倍以上,如图 1 所示。
■图 1
这种计划在理论部署的时候显然是不可取的,因而咱们的指标是升高时延并放弃纠错的精度。咱们采纳非自回归的办法来进行减速,后面提到的是自回归的形式,而非自回归不是每次生成一个 token,而是一次性生成所有 token,它能晋升解码速度。
因为非自回归解码模型广泛应用于机器翻译中,所以咱们间接利用典型的机器翻译中的非自回归模型进行尝试,发现它岂但不能升高语音辨认的错误率,反而还会使其减少,为什么会这样呢?首先咱们发现,语音辨认文本纠错的非自回归的训练任务和机器翻译是不一样的。比方机器翻译时输出是中文,而输入是英文,则输出序列中的所有 token 都须要被批改,使中文翻译为英文。然而在纠错工作中,输出的句子大部分是正确的,也就是说,输出的句子中大部分词是不须要批改的。
如果还是采纳传统的办法,就很容易引发两个问题:漏改和错改。这给纠错工作带来了挑战,如何检测谬误,以及如何批改谬误,成为晋升精度的要害。
03 Naive NAR solution fails
咱们对这个问题进行了粗疏的剖析,冀望从工作中发现特点以设计具体的非自归建模办法。首先,机器翻译不同的语言(比方中文到英文)有语序替换的特点,因为中文的表达方式和英文的表达方式在语序上是不一样的,然而在谬误纠正工作中,识语音辨认生成的文本和最初正确的文本,实际上不会产生词的替换谬误,而是枯燥的对齐关系。
其次,词自身谬误的可能性有很多,比方插入谬误、删除谬误和替换谬误。基于这两种先验常识,就能给纠错过程提供更粗疏的错误模式,以领导谬误检测和谬误纠正操作,咱们针对这个问题进行了剖析来启发设计相应的模型。
04 FastCorrect 系列模型介绍
微软针对 FastCorrect 模型发展了一些系列工作,包含 FastCorrect 1、FastCorrect 2 和 FastCorrect 3。每一项工作都针对不同的问题和场景。FastCorrect 1 在 NeurIPS 2021 会议上发表,次要是基于后面剖析的工作的先验常识,通过文本的编辑间隔提供增删改的领导信号,来对语音辨认的后果进行纠错。而纠错的时候只针对语音辨认最好的后果,因为语音辨认能够得出一个后果,也能够通过 beam search 解码得出多个后果。FastCorrect 1 能实现 7~9 倍的减速,同时能达到 8% 的 WERR,也就是词错误率的缩小。WERR 尽管看起来很小,然而在目前语音辨认的精度曾经十分高的状况下,能实现 8% 的 WERR 实际上也是比拟不容易的。
尽管通常状况下语音辨认最终会返回一个 candidate,然而在语音辨认解码的过程中,也会保留多个 candidate。如果多个待选之间可能提供相互印证的信息,能帮忙咱们更好地实现纠错。所以咱们设计了 FastCorrect 2,它发表于 EMNLP 2021 findings,利用多个 candidate 协同作用,进一步升高词错误率。相比 FastCorrect 1,错误率能进一步升高,同时维持比拟好的减速比。
这两个工作目前在 Microsoft 的 GitHub(https://github.com/microsoft/…)下开源,大家有趣味的话能够尝试应用。接下来将具体介绍两个工作的技术实现细节。
1、FastCorrect
FastCorrect 的外围是利用文本纠错中的先验常识,也就是增删改操作的信息,所以咱们先将谬误的文本和正确的文本进行了对齐操作,通过文本的编辑间隔来领导对齐的逻辑,通过对齐就能够晓得哪些词要删掉、哪些词要减少、哪些词要替换等。有了这些细粒度的监督信号,模型的建模就会更加容易。比方在删除操作中咱们应用了 duration 的概念,duration 是指,为每一个输出的词提前给出信息,指明改到 target 的正确句子中,这个词会变成几个词,比方变成零个词就示意被删掉,变成一个词示意不变或者被替换,变成两个词以上示意进行了插入或者替换的操作。
有了这样的细粒度监督信号,模型的成果将会晋升,而不是像机器翻译那样,是一个端到端的通过数据学习的伎俩。同时,非自归的模型设计也分为三局部,encoder 把谬误的文本作为输出以提取信息;duration 预测器预测每个 source token 应该被改成多少个 target token;而 decoder 最终生成 target token。
(1) Edit alignment
接下来介绍 FastCorrect 中的编辑对齐操作,图 2 中右边的序列是语音辨认输入的后果 BBDEF,Target 序列是理论的正确后果 ABCDF,这表明语音辨认出错了,咱们对它进行编辑间隔对齐,向上的箭头示意删除,向左示意插入,指向斜对角示意替换。
■图 2
编辑间隔对齐当前能够失去几条不同的门路,每条门路的编辑间隔都是一样的,针对每条门路,咱们能够晓得 source 的每个 token 和 target 的每个 token 的对齐关系。之后,能够选出一些 match 水平比拟高的门路。比方 path a 和 path b 两条门路的 match 水平比 path c 要高,所以咱们基于 path a 和 path b 两条门路再抉择适合的对齐关系。从这两个 path 能够失去三个不同的对齐,比方在 Align a 中 B 的 token 对应 A 和 B,而 B 对应 C 等。同时 path 也会有不同的可能性,比方在 Align b1 中 B 也有可能对应 B 和 C,在 Align b2 中 D 也可能对应 C 和 D。接下来能够从文本语料中发现哪种是常见的组合,而后通过词的搭配频率来选出正当的对齐关系。
从图 2 下方的 BBDEF 和 ABCDF 能够晓得每一个 source token 应该被改成几个 token,比方 Align b1 中第一个 B 会改成 2 个,第二个 B 改成 1 个,D 改成 1 个,E 改成 0 个,F 改成 1 个。有了这些信号当前,就能够分明地晓得每一个 source token 应该被改成几个 token。
(2) NAR model
如图 3 所示,Encoder 输出是谬误的句子,预测每一个句子要改成多少个词,再依据这个把句子铺开。比如说你看第一个 B 会改成两个词,咱们就把 B 铺两遍。而这个 B 是一个词,咱们就把它放在这。那如果它会被删掉,咱们就把它删掉。而后最初作为 Decoder 的输出,而后并行的去解码进去。这就是模型的外围办法的设计。
■图 3
(3) Pre-training
在纠错模型训练中,因为 ASR 词错误率比拟低,谬误的 case 个别 较少,无效训练数据不够,模型的训练成果也会升高,所以咱们额定结构了一些谬误的配对数据,也就是输出谬误但输入正确的句子。因为以往仅靠语音辨认的模型来提供数据是不够的,所以咱们大规模伪造了这样的数据来进行预训练,再微调到真正的语音辨认数据集上。咱们在伪造数据的时候模仿了删除、插入和替换操作,因为这些操作要靠近实在的语音辨认产生错误率的模式,所以增删改的概率都和已有的语音辨认的模型比拟靠近。同时,咱们在做替换的时候会优先应用同音字,因为语音辨认个别都是呈现同音字谬误,找到了这样的数据当前,就能很好地帮忙模型进行训练。
(4) Experiments
接下来介绍一些试验细节,咱们在一些学术数据以及微软外部的语音辨认数据集中,聚焦于中文的语音辨认纠错,同时抉择了大概四亿条来自预训练模型的句子。
■图 4
试验后果如图 4 所示,可知原始的语音辨认大略失去了 4.83 的词错误率,而如果用刚刚提到的自回归模型,也就是 encoder attention decoder,能实现 15% 的词错误率的降落,然而它的 latency 比拟高。这是以往采纳的办法,包含机器翻译中的非自归办法和文本编辑的一些办法。而咱们的办法相比原始的语音辨认谬误,能达到 13% ~14% 的词错率的降落,靠近于自回归模型,也就是说纠错能力简直没有损失。然而 latency 相比自回归模型减速了 7 倍。能够看出 FastCorrect 办法能很好地维持词错误率降落,同时晋升速度,实现线上部署的规范。
咱们也 study 每个模块预训练结构数据的办法,以及通过编辑间隔做 alignment 的办法的有效性。从图 5 所示的两个数据集能够看到,如果去掉 FastCorrect 的相干模块,还是会导致精度的降落,表明 FastCorrect 的这些模块是比拟有用的。
■图 5
自回归模型是一个 encoder decoder,decoder 比拟耗时,须要自回归一个词的解码。可能大家会有疑难,为了晋升自回归模型的速度,是否能够使 encoder 加深,decoder 变浅,实现同样的减速比并且维持精度呢?对此咱们将 FastCorrect 和自回归模型的不同变体进行了比照试验,如图 6 所示,AR 6-6 代表 6 层 encoder 和 6 层 decoder,而 AR 11 -1 代表 11 层 encoder 和 1 层 decoder。能够看到,FastCorrect 办法成果更好,或者词错误率差不多,然而减速比成果晋升更显著,这也打消了刚刚的疑难。
■图 6
前文提到,在文本纠错中怎么检测和纠正错误是十分重要的,咱们对此也比拟了检测的 precision 和 recall,以及纠错能力。通过比照发现,FastCorrect 办法的成果的确比以前的办法更好,这也验证了之前的一些猜测:通过先验常识提供一些细粒度的增删改领导信号,能帮忙咱们更好地检测和纠错。
2 FastCorrect 2
(1) Multiple candidates
FastCorrect 2 是 FastCorrect 1 的扩大版,因为 ASR 语音辨认的模型得出的后果个别是多个句子,其中会提供一些额定的信息,叫作 voting effect。假如一段语音通过辨认模型失去三个可能的句子,别离是“I have cat”“I have hat”“I have bat”,这三个句子相互印证能给咱们提供额定的信息。首先,大概率来说前两个词的辨认是正确的,因为三个后果都辨认出了 I have,然而前面三个词都不一样,阐明其中可能有多个是谬误的或者都错了。然而大概率来说,这个词是以 at 发音结尾。失去这样的信息当前,纠错和改过的难度会大大降低。批改的时候能够从其中选一个更正当的词,帮忙咱们放大问题的空间。这就是 FastCorrect 2 的设计思维。
(2) Model structure
设计模型的后果如图 7 所示,首先,在输出之前把语音辨认的多个待选句子对齐,因为对齐后能力提供相互印证的信息。比方在后面的例子中,咱们须要让 cat、hat 和 bat 对齐,依照这个思维把输出的句子进行对齐,而后 encoder 会把这些待选句子连结起来作为模型的输出,并预测每个句子的 duration,也就是批改后会改成几个词。还会用一个选择器来抉择一个较好的待选,通过 loss 监督抉择哪些 candidate 比拟好,而后基于较好的 candidate 进行批改。图 7 中的第三个 candidate 较好,咱们就把它作为 decoder 输出。这就是整个 FastCorrect 2 的 high level 的设计办法。
■图 7
(3) Align multiple candidates
这里有一个细节,就是如何将多个句子 Align 起来,使它有更精确的对应关系,对此咱们任意找一个 anchor 的 candidate,而后使其余的句子都与该句进行对齐,这里的细节不过多介绍。这个对齐办法实际上和 FastCorrect 1 中介绍的一样,就是先计算编辑间隔,而后失去编辑的 path 并从这个 path 中抉择比拟正当的对齐关系。也就是说,使每一个句子都和 anchor 句子 align 起来之后,就会失去所有句子和这个 anchor 句子的对齐关系,最初把这个 candidate merge 起来,就造成了一个多路的对齐。对齐当前就能够作为模型的输出。
这里有一个比照,就是如果不采纳 FastCorrect 2 的对齐办法,而是采纳 Naive Padding,就会看到图 8(b) 的状况,这里 B 都汇集在一起,然而 C 和 D 则是混合的。这一点很奇怪,因为就模型来说 C 和 D 实际上没有任何关系。然而因为咱们用了一个很简略的办法,使其处在同一个地位,模型就不能取得相互验证的信号了,这就会呈现 D、E 和 F 也混合在一起的景象,导致 cat、hat 和 bat 无奈相互印证以帮忙咱们纠错。
■图 8
(4) Results
接下来展现后果,如图 9 所示,第一行是语音辨认后果的错误率,第二行是用自回归模型纠错当前的错误率,第三行是 FastCorrect 1 的后果。同时咱们还进行了一些设置,之前提到语音辨认的后处理有两种形式,一种是 reranking,另一种是纠错。既然这里波及到多个 candidate,而 reranking 是基于多个 candidate 进行抉择,所以咱们就把两种办法叠加起来,先从多个 candidate 中通过 reranking 进行抉择,再利用 FastCorrect 1 进行纠错。假如有 4 个 candidate,就对每一个 candidate 别离纠错,并从中抉择较好的作为最终后果。FastCorrect 2 办法间接把多个 candidate 通过 align 当前相互对齐作为输出。
■图 9
最初能够看到,FastCorrect 2 的成果比 FastCorrect 1 好,因为它利用了更多的信息,在词错误率方面,FastCorrect 2 能持续降落两个多 WERR,同时速度也能失去比拟好的维持。从图 9 中能够看出,R+FC 的办法更有劣势,然而代价较大,因为要对多个 candidate 别离进行纠错,再进行 reranking,所以不能选用这样的办法,最终还是抉择 FastCorrect 2 的策略。
在数据集中进行 Align 的过程中,能够思考将发音比拟近的词 Align 在一起,比方在之前提到的例子中,如何将 I have hat 和 I have cat 中的 cat 和 hat Align 在一起呢?此时有一个很重要的因素,就是发音音标的类似度。hat 和 cat 的发音是很靠近的,优先思考这样的发音类似度相近的词,能更好地结构 Align 关系。那么如果不思考发音类似度,WER 是否会降落呢?如图 10 所示,发现去掉发音类似度当前,WER 的确略有降落。可见,如果语言模型中的词容易搭配,能够优先将这些词放在一起进行 Align,另外,留神到应用 Naive padding 形式此时是不合理的。
■图 10
咱们将多个 candidate 作为输出进行纠错,那么是不是利用的 candidate 越多越好呢?试验证实 candidate 越多,时延会越差。从图 9 能够看到,candidate 增多,最终会面临 accuracy 和 latency 的 trade off。
有人可能会质疑这是不是因为数据变多造成的?因为相比以前的 one best correction 额定利用了多个 candidate 的句子输出作为模型的训练。为此,咱们做了一个比照,就是把句子拆散,比方四个 candidate 对应一个正确的句子,将其拆成四个 pair,每个 pair 都是有一个 candidate 对应正确的句子,这样数据量就加大了四倍。但理论发现这种办法并不能升高错误率,反而会减少错误率。表明数据增多不是导致这种后果的起因,而是通过正当的 alignment 提供信号后使纠错成果更好了。
针对语音辨认中如何升高错误率并晋升精度的问题,在线上时延可能承受的状况下,咱们发展了 FastCorrect 系列工作,如图 11 所示,FastCorrect 1 和 FastCorrect 2 别离在学术数据集和微软的外部产品数据集中,获得了比拟好的成果,同时绝对自回归纠错模型的错误率升高。大家如果感兴趣能够关注咱们的 GitHub,咱们以后还在基于这个问题进行一些剖析设计,利用办法相干的 insight 构建 FastCorrect 3 模型,实现更好的谬误检测和谬误纠正能力。
■图 11
05 微软在语音畛域的研究成果和我的项目介绍
微软在整个语音方面还发展了一系列的钻研,如图 12 所示,包含语音合成的前端文本剖析、语音合成低资源数据的建模,以及如何在线上部署时晋升 inference 的速度、如何晋升语音合成中的鲁棒性、如何推广语音合成能力等。
■图 12
此外,咱们还对语音合成场景进行了扩大,比方 talking face generation,输出语音,输入则是谈话人脸以及手势等视频;咱们还进行人声和器乐的声音合成,并在 TTS 畛域发展了具体的 survey 工作,同时举办了 tutorial 演讲教程。近期,咱们开发了一个语音合成零碎 NaturalSpeech,生成的语音能达到人类程度,如果大家对语音合成感兴趣,能够多多交换。
微软在 AI 音乐方面也发展了一些工作,比方传统的音乐信息检索了解工作,以及音乐生成工作(包含词曲创作、伴奏生成、编曲、音色合成以及混音)等。如果大家对 AI 音乐感兴趣,也能够关注咱们的开源我的项目,具体如图 13 所示。微软在语音 Azure 方面提供了语音合成、语音辨认、语音翻译等服务,如果大家感兴趣,也能够通过图 14 所示的网站进行应用。
■图 13
■图 14
微软亚洲研究院机器学习组目前正在招聘正式的研究员和钻研实习生,招聘方向包含语音、NLP、机器学习以及生成模型等,欢送大家退出咱们!
06 问答环节
1、FastCorrect 与 BART 的关系和区别
BART 是 NLP 中的预训练模型,用于序列到序列工作,它能够进行机器翻译,利用于任何与文本相干的序列到序列学习的工作。文本纠错工作自身也属于序列到序列学习,它是传统的自回归办法。在传统办法畛域,BART 能够间接应用,因为它也是通过自回归的形式解码。而 FastCorrect 解决了自回归办法的解码速度较慢的问题,它是一个非自回归模型,不像 BART 一样逐字读取,而是一次性读取整个句子,这样晋升了线上 inference 速度,这也是咱们的设计外围,所以从这个角度来说两者有较大的不同。
2、对于纠错有没有针对性的设计?
除了通用的语音辨认模型,咱们还有很多定制化的场景,对于这些场景来说,其中的数据蕴含大量业余词汇。为了获得更好的辨认成果,在纠错的时候能够引入加强的知识库或者适配的操作。假如通用的语音辨认模型要利用在法律、医疗等场景,这些畛域蕴含的专业术语是很少见的,那么能够为语音辨认模型提供主题,告知以后辨认段落的场景波及主题的关联词,供模型参考以进行辨认。纠错就能够应用这种机制。另外,在中文纠错场景,对齐绝对比拟容易,但在英文或其余语言中,一个词可能对应另一个词的局部字符,如何针对这些语言设计办法是在适配过程中须要思考的问题。
对于声网云市场
声网云市场是声网推出的实时互动一站式解决方案,通过集成技术合作伙伴的能力,为开发者提供一站式开发体验,解决实时互动模块的选型、比价、集成、账号买通和购买,帮忙开发者疾速增加各类 RTE 性能,疾速将利用推向市场,节约 95% 集成 RTE 性能工夫。
微软实时语音辨认(多语种)服务目前曾经上架声网云市场。借助该服务,可将音频流实时听录为文本,并可与语音服务的翻译和文本转语音产品 / 服务无缝地协同工作。
大家能够点击 此处 立刻体验。