首页 > 干货分享 | BIGO的端到端语音识别技术
头像
BIGO校招助手
编辑于 2020-12-25 15:44
+ 关注

干货分享 | BIGO的端到端语音识别技术

BIGO的端到端语音识别技术



1 BIGO直播的语音识别

BIGO致力于成为影响10亿人生活的内容平台,为提供用户安全且优质的内容,持续探索音频理解技术涉及声音事件检测、语种识别、语音属性、声纹识别、语音识别等。其中语音识别能用来将语音转化成文字,再透过文字理解视频内容,或是为短视频添加字幕提高用户体验。目前语音识别支持中文、英语、日语、阿拉伯语、俄罗斯、印尼语和印地语,内容涵盖游戏、时尚、娱乐或新闻等。为提供近4亿的月活用户高效高质量服务,我们利用动态剪枝技术和two-pass改良端到端语音识别系统以提升解码速度及识别率。

2 端到端语音识别

2.1 序列到序列模型

自动语音识别(Automatic Speech Recognition,ASR) 起源于上世纪 50 年代。但直到80年代才发展出可用于大词汇量连续语音识别的GMM-HMM技术。虽然 GMM-HMM识别系统得到广泛研究也完成诸多改进,但在电话、广播、口语等日常交流场景表现依旧不理想。到了2010年前后,由于深度神经网络 (Deep Neural Network,DNN) 有强大的建模能力,与HMM组成划时代的DNN-HMM框架才让语音识别大范围地普及在日常生活。虽然DNN-HMM有优异的识别率,但需先透过GMM-HMM提取对齐信息导致训练流程复杂,且制作发音词典需语言学知识,阻碍将技术快速且低成本地应用至全球语种。

近年由于人工智能技术及硬件性能的提升,序列到序列(sequence to sequence,S2S) 的端到端建模成了研究焦点。相较主流的DNN-HMM 框架,端到端语音识别(end-to-end ASR,E2E ASR) 仅需声学模型,排除了需专家设计的发音词典使其具备结构简洁的特点,除了能缩短开发周期,在有大数据下识别率也能优于传统方法。


2.2 CTC/attention架构

构建端到端语音识别面临以下问题:输入语音序列和输出字符的长度不一致且位置不确定。Connectionist Temporal Classification (CTC) 技术为对特征序列和字符序列建模的主流技术之一能有效处理语音识别中模糊边界及静音问题。但CTC的缺点是: 时间步之间的输出为条件独立,导致对上下文信息利用不充分。因此单纯基于CTC的系统识别率无法超越传统DNN-HMM。

另一个广泛用于E2E ASR的技术是带注意力机制的编解码 (Encoder-Decoder with Attention)。编码器将特征序列转为高层特征,注意力解码器根据之前解的序列和高层特征序列再解码出目标序列。但S2S模型有着非单调的左到右对齐和收敛较慢的缺点。因此目前主流做法是将S2S与CTC结合为任务学习。此训练方式可保留S2S结构的优势并改善收敛速度慢与对齐错误的问题。

其中一个结合CTC和S2S的实现为ESPNet [1, 2]。CTC-ATT框架表达如图1:

图1: CTC-ATT 结构

结构包含三部分: Encoder、Attention-Decoder和CTC。在Encoder 对x进行编码得到h

h = fenc(x)    (1)

fenc 表征encoder 的编码函数。

2.3 解码器和语言模型融合

虽然S2S语音识别系统同时训练声学和语言模型 (LM) 简化了训练过程,但由于解码器代替了传统架构中的LM,训练时又仅用有限成对的音频文本数据,不足以完整覆盖BIGO端内带有稀有单词和短语的全方位场景。因此若要将上下文信息包含到识别过程得借助外部LM。BIGO在不同小语料语音识别任务上实验确认融合技术能有效提升识别率。

融合机制有浅层融合及深度融合两种策略,它们的差异在于S2S模型集成外部LM的时机。

1. 浅层融合: 为弥补S2S解码器上下文感知能力不足,仅在推理时将S2S解码器与外部LM一起使用的。在集束搜索的每个步骤中,使用经过单独训练的LM进行线性插值。

2. 深度融合: 同样先预训练S2S模型和外部LM,但集成时在隐层融合微调,共同计算softmax。

深度融合机制性能略好但实现起来较繁琐,因此浅层融合为目前的主流技术,如图二。具体实现方式如下,分别训练S2S模型和外部LM,在解码时候每个时间步它们都会输出一个维度和词表大小一样的概率向量,把这两个向量加权求和作为最终的概率向量。然后不断循环最终得到候选序列。

2: 浅层融合 (shallow fusion) 结构

浅层融合的前馈过程可以表示为:


(2)

其中y∗,y,x分别为识别解码后语言学单位序列,解码前语言学单位序列,语音特征序列。

而在使用浅层融合架构后,能在不依赖成对的音频文本数据下借助只需文本训练的语言模型,针对BIGO面向不同用户的特定领域有效地提升命名实体准确率。

2.4 动态剪枝解码

虽然融合技术大幅提升语言模型能力,但也同时增加解码复杂度。为缓解融合造成的解码延迟,我们利用动态剪枝技术,在几乎不降低识别率下自适应缩小集束搜索范围达到加快解码速度的目标。

S2S解码则使用集束搜索 (Beam Search) 算法找出词表所构成的最佳路径,如图3。词表所构成的搜索空间是所有可能的token。从根节点<sos>开始选取所有可能中概率最大的k个拓展为下一层节点。然后在这k个节点里面其可能拓展的节点中,再选取概率最大的k个累乘拓展。以此类推形成一棵每层都是k节点的树状结构。最后选出路径分数最高者回溯得到概率最高的字符序列。集束搜索是范围有限的搜索策略,因此集束大小k值必须足够大才能接近最优解,但代价是较大的计算量。

3: 集束搜索

传统上集束大小k值是根据先验知识预先决定的定值。虽然增大集束大小可提高识别率但代价是降低解码速度。这种固定搜索范围的方式效率较差,因为它的搜索范围扩及置信度远低于当前最佳置信度的候选。因此我们在每个时间步动态变化搜索范围来达到增快解码速度的目标。其中包含以下三项策略,

1. 相对阈值修剪: 保留置信度接近于最佳置信度的候选,丢弃低信置度的候选。如果满足以下条件才被保留:


2. 绝对阈值修剪: 只保留绝对置信度高的候选,若比最佳置信度差超过阈值的候选者则被丢弃。条件如下:

3. 维持单节点的最大候选数: 由于观察到得分高的候选往往来自相同的历史路径,如果某token过于强势下一层的备选token可能都只来源于此,因此有必要为其他的分数较低的token预留备选位置,避免集中在单一节点的后代。我们透过限制了来自相同节点的最大候选数量,在不增加集束大小下达到增加分支多样性的目标。

使用此技术后在BIGO多国语言场景皆可实现解码速度提升40%而词错率无损或仅上升1%,大幅降低服务全球用户的语音识别开销。

2.5 Two-pass解码

在缺乏成对语音文本数据的任务中,浅层融合对识别率提升有很大的帮助。但一般的融合技术仅会选用一种外部LM,RNNLM (Recurrent Neural Network, RNNLM) 或n-gram LM。由于n-gram LM和RNNLM的固有特性不同,对不同场景的建模能力也不同。为了让模型更好地学习不同场景的上下文信息,BIGO设计two-pass机制汲取RNNLM及n-gram LM两者各自优势在不同场景彼此互补。

当有大量训练数据可用时,使用n-gram LM可以获得良好的泛化性能。但统计语言建模的关键问题是,对远程上下文相关性进行建模时往往会伴随数据稀疏问题。为解决此问题,可用基于连续和较低维向量空间中表示较长跨度历史环境的语言建模技术,例如RNNLM。

基于统计信息的语言模型用固定长度上下文,但是递归神经网络不使用有限的上下文。通过使用循环连接,信息可以在这些网络中循环任意长时间。基于递归神经网络的语言模型 (RNNLM)提供了进一步的概括:代替仅考虑几个先前的单词,具有来自递归连接的输入的神经元被认为代表了短期记忆。这种神经网络方法可以解决稀疏问题,并且与n元语法模型相比,在困惑方面也能很好地概括。 但是,这种方法的主要缺点是训练和测试时间很长。这个实际问题限制了RNNLM的数据量和可能的应用区域数量。

由于n-gram LM和RNNLM的固有特性不同的, BIGO设计two-pass机制汲取两者各自优势在不同场景可彼此互补。在第一遍解码中,解码器仅使用通用模型来生成多个识别假设,从中提取n-best列表。在第二遍解码中,使用特定领域的LM(例如高阶n-gram LM或RNNLM)对n-最佳列表的假设进行重新评分,然后获得最佳新假设。使用 n-gram 作为 E2E ASR 重打分。n-gram 作为一个统计模型,其最大的好处是,权重作为显式的表征,可以方便的做灵活的微调以适应各个不同的场景,以及实现不同用户的个性化识别结果。

而后基于CTC-ATT结构实现的Two-pass的框架如下图4所示:

图4: 基于 RNNLM 和 n-gram 的 Two pass 结构 (省略了 CTC)

集束搜索算法的每个解码步上,Attention-Decoder 和 CTC 根据编码结果h和之前的解码结果y<给出当前解码步的语言学单位的后验概率,而RNNLM也根据之前的解码结果y<给出当前解码步的语言学单位的后验概率,而后这两者的结果根据浅层融合架构结合。其过程表示为:


(3)

其中wi 为各个部件的解码权重超参,而y<为之前解码步的1-best 序列。

在CTC-ATT 实现的基础之上,得到的的 shallow fusion 的 N-best 结果送入 n-gram 做 context bias re-score,然后得到 1-best,故式3可以重写为:

其中y∗∗ 为N-best列表。在利用n-gram re-score 得到 1-best 的y∗。

这个其中需要特别指出的是,CTC和传统的HMM系统其实都是时间对齐的模型,也就是说输出的语言学序列标签长度是正比于特征序列长度的。但是attention-decoder 和 RNNLM 输出确是标签对齐的模型,输出的语言学序列的期望长度确是等于语言学序列长度的。故这两个联合模型需要统一CTC这个时间对齐的输出到标签对齐。这个算法在[3] 给出过完整的解释,如何将CTC给出的标签分类,然后前向结合变成标签对齐的。

我们截取部份关于n-gram  LM的改进贡献给知名的E2E ASR框架。已提交的Merged Pull Request于 [4, 5, 6] 。在比对了KenLM [7] 和openfst_python之后,在espnet提供的解码接口ScorerInterface和PartcialScorerInterface上通过KenLM实现了n-gram的打分,每个解码步只需要对前一步缓存的state进行下一步的打分而不需对整句重新迭代运行。在 espnet 中的 egs 中,通过 espnet/tools 下的

而如果n-gram 作为 shallow fusion 的一部分,而不需要 Re-score,这个重新在 ESPNet 上实现的 shallow Fusion 可以表达为:


仅仅需要将Listing 1中的Ngram scorer 的“part”改为“full”即可。而同时也意味着需要对所有的语言学单位进行打分,根据在 aishell 验证集的测试,在表格1中可以看出, “full” scorer会大大减慢解码速度,且未见准确率提升。不管是 Ngram score 作为 “part” 或者 “full” ,此项改进都可以可以在 aishell 的测试集上实压低 Character Error rate (CER) 从 6.7% 到 6.6% 的。


scorer

CER

decoding time(s)

full

6.0%

9860

part

6.0%

4090

Table 1: “full” 和 “part” n-gram scorer 的解码速度和结果对比

3 总结

BIGO服务全球4亿的月活用户,生产的内容涵盖多语言多领域。为了让语音识别模型的训练数据与实际使用场景适配,过去端到端语音识别需要大量成对的声学文本数据才能学习到能完整覆盖使用场景的单词声学映射。为了避免依赖大量成对的音频文本,BIGO使用外部LM弥补S2S解码器的不足。这种架构更适合用于标注资源匮乏的语言,帮助BIGO快速部署服务全球用户的语音识别系统,最终证明能在字幕生成或视频理解任务上实现更低词错率。

同时为了贡献E2E ASR社区我们也提交了其他的 merged pull request [8, 9, 10, 11]。

References

[1] S. Watanabe, T. Hori, S. Karita, T. Hayashi, J. Nishitoba, Y. Unno, N. Enrique Yalta Soplin, J. Heymann, M. Wiesner, N. Chen, A. Renduchintala, and T. Ochiai, “Espnet: End-to-end speech processing toolkit,” in Interspeech, 2018, pp. 2207–2211. [Online]. Available: http://dx.doi.org/10.21437/Interspeech.2018-1456

[2] H. Inaguma, S. Kiyono, K. Duh, S. Karita, N. E. Y. Soplin, T. Hayashi, and S. Watanabe, “Espnet-st: All-in-one speech translation toolkit,” arXiv preprint arXiv:2004.10234, 2020.

[3] S. Watanabe, T. Hori, S. Kim, J. R. Hershey, and T. Hayashi, “Hybrid ctc/attention architecture for end-to-end speech recognition,” IEEE Journal of Selected Topics in Signal Processing, vol. 11, no. 8, pp. 1240–1253, 2017.

[4] H. Tang, “Implement ngram scorer,” https://github.com/espnet/espnet/ pull/1946, BIGO speech.

[5] ——, “Ngram scorer update,” https://github.com/espnet/espnet/pull/ 1992, BIGO speech.

[6] ——, “ngram batch implement,” https://github.com/espnet/espnet/pull/ 2066, BIGO speech.

[7] K. Heafield, “Kenlm: Faster and smaller language model queries,” in WMT@EMNLP, 2011.

[8] H. Tang, “ru_open_stt recipe bug fix,” https://github.com/espnet/ espnet/pull/1589, BIGO speech.

[9]  ——,       “Update run_rnnt.sh,” https://github.com/espnet/espnet/pull/ 1602, BIGO speech.

[10] ——, “Embed defaultlm,” https://github.com/espnet/espnet/pull/1623, BIGO speech.

[11] ——, “fix built in ctc conflict with apex,” https://github.com/espnet/ espnet/pull/1779, BIGO speech.

全部评论

(1) 回帖
加载中...
话题 回帖