【技术揭秘】任务型语音对话中的纠错系统

来源 阿里语音AI 公众号

1.背景

任务型语音对话系统主要由以下的模块组成,分别是语音识别(ASR)、自然语言理解(语义理解, NLU)、对话管理(DM)、自然语言生成(NLG)和语音合成(TTS)。

【技术揭秘】任务型语音对话中的纠错系统
图 1任务型语音对话系统交互流程

语音识别是任务型对话系统交互任务唤醒后的首要环节,也是后续模块处理的基础。然而在语音交互过程中,说话人的口音、环境噪音,或者语句内容本身的同音多词等因素,会造成语音识别错误。图1展示的串行流程的语音对话系统中,识别错误会逐级传递放大,并累积至后续链路,最终造成对话任务的失败。

【技术揭秘】任务型语音对话中的纠错系统
图 2错误累积图示

本文主要详细介绍语音对话中的纠错系统。纠错系统旨在对错误的语音识别结果进行鲁棒理解和修正,给业务后续搜索提供更准确的输入,以及改善识别展示结果。

【技术揭秘】任务型语音对话中的纠错系统
图 3纠错示例

纠错系统将主要应用在以下业务中:

智能语音电视,使得人们可以通过语音对话技术来控制电视机,包括使用语音来搜索播放歌曲、视频、进行各种命令控制以及查询信息服务等,从繁琐的遥控器文字输入中解脱出来。

高德语音助手,秉承AI赋能出行业务的目标,通过语音交互的方式高效搜索地点规划路线、查询多种内容服务、操作各种出行设置,让用户在导航过程中解放双手,降低行驶过程中操作屏幕的风险。

2.研究现状

在文本纠错任务上, 学术界目前的主流是使用端到端模型, 输入是原始文本,输出是纠错后的文本。最近ICASSP2020的论文[1], 使用基于BERT的神经网络翻译(NMT)模型对语音识别结果进行纠正。这样的方式避免了人工特征提取的步骤,依靠端到端模型“直接”完成纠错任务。ACL2020的论文 [2],通过联合训练基于BiGRU的检测网络和基于BERT的修正网络,预测输入序列每个位置对应的纠正词。这些模型都需要大量高质量的训练数据保障模型效果。同时,端到端的模型无法直接更新纠错词库,需要重新训练模型或增加额外模块。

另一个方向是工业界普遍采用的分阶段纠错架构,通常分为错误检测、候选召回、纠错排序、纠错结果评估等多个阶段。分阶段模块化的设计,方便各模块单独优化,落地的效果比较好。友商的纠错系统,有的是基于通用领域的纠错,有的是针对文法、拼写错误场景的纠错,而我们的纠错任务面向任务型对话垂直领域的语音识别文本,需要针对我们实际的业务需求设计纠错架构。

3.问题和痛点

在系统的分析了我们的纠错任务面临的问题和痛点之后, 我们做了相应的纠错系统设计, 如下表总结。我们的目标是构建高效、易复用、可闭环的纠错系统,解决系统和业务上的问题和痛点。

【技术揭秘】任务型语音对话中的纠错系统

4.纠错系统介绍

4.1整体框架

整体上我们采用分阶段的纠错架构,来解决任务型语音对话中的识别错误问题。纠错系统主要有三个模块组成,分别是实体词抽取、纠错候选召回和纠错候选排序。纠错系统的最终输出,可以用于后续链路的搜索,以及修正语音识别回显文字。

【技术揭秘】任务型语音对话中的纠错系统
图 4纠错系统整体架构

4.2实体词抽取

实体词抽取模块负责抽取句子中的实体词, 完成错误定位。任务型对话系统的语音识别输入通常是短文本,意图都是限定领域的。一个常见的用户输入通常包含多个组成部分,包括动词、实体词、语气词等。其中,动词和实体词是句子中的关键信息。动词变化少,ASR识别较少出错,而实体词量级巨大,往往是ASR识别错误最多的部分。所以,我们可以将错误定位的任务转化为实体词抽取任务。

【技术揭秘】任务型语音对话中的纠错系统
图 5实体词抽取模块输入输出

我们使用BERT模型作为实体词抽取模型。具体的,我们首先采用AliNLP工具对输入语句进行分词和词性标注,并引入业务相关的词典信息,对每个词标注词典信息。BERT的输入特征包含词信息、词性信息、词典信息以及位置信息。

我们首先采用中文维基数据进行BERT预训练,任务分别是句子填空和下一句预测,再使用标注语料在我们的任务上进行fine-tune。虽然BERT是命名实体抽取任务的state-of-the-art (SOTA) 模型,但是在我们的实体词抽取任务中,最初只达到了83.04% F1 score。分析错误case,发现问题主要集中在语音识别错误的情况下,而这恰恰是纠错系统需要解决的场景。因此,针对这个问题,我们对训练数据进行增强。我们使用业务NLU语法规则 (JSGF) 展开 (图7) 来丰富训练数据,将训练数据量级提升至百万级别。然后我们模拟真实语音识别的错误分布,引入了约20%包含识别错误的数据。识别错误的样本中,替换错误约占77%,删除错误占18%,插入错误占5%。进行数据增强后,我们的训练数据分布基本与线上实际分布一致,重新训练调优后,实体词抽取F1 score从 83.04% 优化至95.58%。

【技术揭秘】任务型语音对话中的纠错系统
图 6实体词抽取实验结果

【技术揭秘】任务型语音对话中的纠错系统
图 7使用业务规则生成训练数据

【技术揭秘】任务型语音对话中的纠错系统
图 8语音识别错误分布

4.3纠错候选召回

纠错候选召回模块用来召回可能的纠错结果。根据不同业务的需求,我们建立了三种可选的召回链路。

第一种是基于本地自建的召回方式。经典的召回算法有基于编辑距离和基于倒排索引的方式。基于编辑距离的算法需要遍历词库中的所有词条,非常耗时。即使使用基于优化搜索空间的BK-tree算法[3],在选取编辑距离等于2的条件下,仍需要计算约20%词条的编辑距离。而业务实体词库中的词条数量基本都是百万以上级别的,这样的算法远远达不到接入的性能要求。基于倒排索引的算法可以有效解决效率问题,传统方法使用分词后的词汇作为索引来存储。但是纠错系统中的召回步骤,搜索串往往是包含错误的,分词后查询难以匹配正确的词条。所以,我们采用基于拼音索引的方式来存储,即使包含错误,查询操作仍具有泛化性。为了保证召回数量可控,我们提出了一种基于可回退的拼音n-gram倒排索引算法,如图9所示,建立索引时使用各阶拼音n-gram作为键值,召回时优先查询高阶键值,无法满足数量阈值时回退到低阶键值查询,保证召回数量。图9展示了建立索引时的流程:获取词典条目后,使用业务规则 (例如图10)对词条进行泛化以及获取别名,随后通过我们提出的基于可回退的拼音n-gram倒排序算法,以各阶拼音n-gram作为键值存储词条。

【技术揭秘】任务型语音对话中的纠错系统
图 9可回退的拼音n-gram倒排索引算法建立索引流程

【技术揭秘】任务型语音对话中的纠错系统
图 10业务泛化规则

对比经典的搜索算法,我们的算法在召回速度和数量上均达到了最优。

【技术揭秘】任务型语音对话中的纠错系统
图 11召回算法对比。视频名词库约50万条,query=小猪倍琦

第二种召回方式是使用开源的Elastic Search引擎进行召回。我们采用词条的拼音名作为索引项,按照词条长度以及城市信息对索引表进行分片,多机房部署服务,降低网络开销。最终在保证召回效果的情况下,我们将ES搜索耗时降低到10ms以内,满足了业务接入需求。

第三种召回方式是使用业务方自带的搜索接口,比如高德地名查询、虾米音乐查询、优酷视频查询等。在不增加额外开发工作的情况下,可以进一步丰富我们的召回链路。

【技术揭秘】任务型语音对话中的纠错系统
图 12搜索召回处理流程

图12展示了处理搜索召回的流程。对于实体词抽取结果,我们根据一定的业务规则进行预处理,生成多个候选结果,提供给纠错排序模块处理。

4.4纠错候选排序

纠错候选排序模块,根据各种特征,对所有召回结果做一个排序,得到最终匹配结果提供给后续业务使用。

【技术揭秘】任务型语音对话中的纠错系统
图 13纠错候选排序模块流程

图13展示了纠错候选排序的整体流程。纠错系统上线前,最大的问题是数据冷启动。对此,我们首先构建了一种基于规则的pointwise排序算法。核心思想是定义一系列匹配先验规则,综合构成匹配计算函数,对每一个召回结果计算得分,并根据得分进行整体排序。

给定用户语音识别结果【技术揭秘】任务型语音对话中的纠错系统,对每个召回结果【技术揭秘】任务型语音对话中的纠错系统,我们计算匹配度

【技术揭秘】任务型语音对话中的纠错系统

其中【技术揭秘】任务型语音对话中的纠错系统是手工调整的匹配系数, 【技术揭秘】任务型语音对话中的纠错系统是根据众包数据总结出来的匹配先验规则,主要有以下层面:

  • 拼音层面:声母近似(平翘舌等)、韵母近似(前后鼻音等)、整体近音、方言等
  • 字层面:编辑距离、公共子串、公共子序列等
  • 业务层面:PV、城市信息等

对每个匹配先验规则【技术揭秘】任务型语音对话中的纠错系统,我们将其得分归一化至0-1区间,系数【技术揭秘】任务型语音对话中的纠错系统求和值为1,最后得到的匹配度得分【技术揭秘】任务型语音对话中的纠错系统分布于0-1区间。

由于规则算法需要构建大量的匹配规则并手工调整系数,我们接下来使用了基于模型的pointwise排序算法,对每个召回样本进行二分类,选取正例结果对应概率作为置信度,参与整体样本排序。同样的,由于上线前我们没有真实的训练数据,我们采样选取了数百万条实体词条,模拟语音识别错误,生成对应的模拟用户输入结果。通过规则排序算法进行自动标注,按照正负例1:10的比例选取约十万条数据用于最终的模型训练。

我们将上述匹配先验规则作为模型的特征输入,分别对比了LR、SVR、MLP、Wide & Deep等模型。由于整体数据量数据偏少,在我们的测试集上,深度模型的效果并不佳,相比之下SVR模型取得了最好的效果,并且显著优于规则算法。

【技术揭秘】任务型语音对话中的纠错系统
图 14纠错候选排序算法对比

4.5 语音识别回显优化

纠错后的实体词,一方面可以用于业务搜索,另一方面可以优化语音识别的回显结果。在与用户实际发音差异较小的情况下,改写语音识别回显内容,能够提高结果的一致性,削弱用户对语音识别错误的感知。

在纠错排序模块中获得最终top1结果后,我们并不能直接将其替换语音识别的原始内容,因为原始语音和纠错词条的发音可能未必一一对应,我们可以看一个例子。

【技术揭秘】任务型语音对话中的纠错系统
图 15语音识别回显优化的例子

在这个例子中,用户的语音输入是“菏泽鲁星医院”,而匹配的词条是“菏泽市鲁心医院”。识别的错误是将“心”识别成了“星”,但是匹配词条中还有被用户省略的“市”这个字。使用词条直接替换会导致识别结果和用户真实发音不一致,这是回显优化需要尽量避免的情况。在这里,我们提出了一种基于拼音相似的公共子序列算法,通过查询原始串和替换串的拼音,找出拼音相似的最长连续路径。在实际业务中,我们应用了这个算法,相比直接限制原始串和替换串拼音需一一对应的方式,提升了相对约10%的识别回显改写率。

5.业务结果

纠错系统已经在多个业务上落地,均取得了不错的效果。

电视线业务,是将语音对话技术应用于电视机,避免繁琐的大屏遥控器文字输入,可以直接用语音搜索歌曲、视频,进行命令控制等。在这个项目中,歌手名、演员名、音乐名、视频名都是百万乃至千万级的数据。我们支持了人名、视频名、歌曲名等多个槽位的纠错能力,提升了绝对1.3%的全链路对话成功率。

高德语音助手,顾名思义,是高德地图app中的语音助手。在app中可以通过语音交互的方式查询地点、规划路线、查询限号、天气等。在高德语音助手项目中,每天90%的用户请求是查询地点和规划路线,而全国的地点名量级上亿,地名识别很容易发生错误。在这个项目中,我们支持了地名的纠错能力,提升了绝对1.0%的全链路对话成功率。在语音识别回显优化上,提升了绝对2.1%的语音识别回显准确率。

钉钉找人项目,是在钉钉上通过语音找人,比如说“打电话给xxx”,可以方便进行沟通。集团中人名、花名、备注名等说法复杂,语音识别也往往不准确。我们支持了人名类等纠错能力,使得在亲密度列表(top200)人名的识别准确率由88.1%提升至94.5%。

6.未来展望

接下来我们会继续优化纠错系统,主要包括以下几个方向的工作:
1.新业务的快速领域迁移能力,例如使用一些few-shot learning算法。

2.尝试引入更多特征,例如语音识别的声学特征以及用户个性化的特征。

3.尝试研究结合END2END模型,增强纠错系统的整体性能。

参考文献

[1] Oleksii Hrinchuk and Mariya Popova and Boris Ginsburg. “Correction of Automatic Speech Recognition with Transformer Sequence-to-sequence Model”. In Proceedings of IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP), 2020.

[2] Shaohua Zhang, Haoran Huang, Jicong Liu, Hang Li. “Spelling Error Correction with Soft-Masked BERT“. In Proceedings of Annual Meeting of the Association for
Computational Linguistics (ACL) , 2020.

[3] https://en.wikipedia.org/wiki/BK-tree

智能语音产品官网链接:
https://ai.aliyun.com/nls

【技术揭秘】任务型语音对话中的纠错系统

上一篇:MPLS+BGP+静态引入CE路由的双层标签详解


下一篇:BGP基础实验