Press "Enter" to skip to content

崔世起:小米小爱同学无效Query识别

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

 

分享嘉宾:崔世起 小米科技 小爱同学连续对话算法负责人

 

编辑整理:修媛媛 58

 

出品平台:DataFunTalk

 

导读: 大家好,今天我分享的题目是语音交互中的无效query识别,主要包括以下几部分内容:

 

无效query介绍

 

非人机交互识别

 

意图不明识别

 

01

 

无效query介绍

 

1.用户query的类型划分

 

 

我们先看一下无效query的概念。语音交互系统的研究对象是用户的query,在小爱内部会根据query是否可以进行结果满足,把query分成有效query和无效query两类。

 

① 有效query

 

有效query主要包括三种类型,具体如下

 

单轮意图明确 :根据当前轮的query的文本就能够明确用户表达的意图

例如:打开客厅空调,是智能家居垂域下的打开设备意图。

 

场景意图明确 :根据当前的场景,可以确定query的所属意图。

这里的场景包含了query、上文、设备、应用状态或者用户的访问历史等。

例如:千与千寻,既是电影名也是歌曲名。如果当前前台应用是音乐类App,就可以确定它是播放音乐的意图。

 

多意图 :从文本上看有多个候选意图,并且缺乏场景信息用来消歧。

例如:灰姑娘,既可能是听电台故事的意图,也可能是看电影视频的意图,没有场景信息的情况下,会认为是多意图。

 

② 无效query

 

无效query是指无法进行结果满足的query,主要包括两种类型:非人机交互和意图不明。

 

2.无效query介绍

 

① 非人机交互query

 

 

非人机交互query不是用户给设备下发的指令。用户与设备进行对话的过程中,设备会进行录音,环境中所有的人声都会被录入并进行语音识别,包括周围不相关的人声。尤其是在开启了全双工对话的情况下,设备处于持续录音的状态,这种问题更为明显。如果设备无法将不相关人声过滤掉,而是当成正常的指令进行响应,会对用户产生很大的打扰。 右图展示了非人机交互识别的效果对全双工语音交互体验的影响。

 

② 意图不明query

 

 

意图不明的query是人机交互的指令,但根据query无法判断用户的意图。意图不明query主要有三种类型:

 

乱序无意义 :从文本上看是不可理解的,大多是由于音频不清晰或者ASR错误导致。比方说query“播放吴楚丽江穿个”实际为“播放乌苏丽江船歌”的ASR识别错误。如果未能纠错的话,无法识别出正确的歌名槽位,可能会播放不满足用户预期的结果。

 

表达不完整 :由于用户表达的原因,一句话没有讲完;或者设备录音的原因,造成了声音截断。

 

query意图模糊 :query缺少明确的意思词,不知用户所云。

 

小米的各种智能设备包括手机、音箱和电视,都内置了“小爱同学”语音助手。通过对各类设备的请求统计分析可知,非人机交互+意图不明的请求占比在5%到20%之间,占比不小,因此对无效query的体验优化还是很有意义的。

 

③ 无效query体验优化

 

 

对于无效query的交互体验,小爱同学采用的是如下策略:

 

对于非人机交互的query,不响应。在有屏设备上,在UI上有特殊的交互设计。

 

对于意图不明的query,默认会给出兜底的回复,或者在话术上对用户进行引导。

 

实现上述交互体验的前提,是能够对非人机交互和意图不明的query进行识别。

 

02

 

非人机交互识别

 

1.非人机交互识别-难点

 

 

非人机交互识别是一个很难的问题,目前业界也没有解决得非常成熟。这里总结有三点的原因:

 

它是一个信息不完备的机器学习任务

我们如果要判断用户是不是在跟设备交互,需要多维度的信息:用户的声音特点,有没有在对着设备讲话,用户周围有没有其他人等,这需要根据用户的语气、语调、语速等声学信息,以及用户位置、用户眼神等视觉信息辅助判别。但是在实际语音交互场景中,参考的主要是音频信息,识别任务就会产生很大的歧义性,从而对模型的学习带来很大的挑战。

 

语音变化的多样性

声音信号具备动态易变的特点。同样一句话,会由于人的语气、语调、音色、语速不同,或者环境背景声音不同,产生不同的音频。而在数据样本中想覆盖到每种类型的音频是比较困难的,这对模型的泛化能力提出了非常大的挑战。

 

鸡尾酒会效应

鸡尾酒会效应是说在一个嘈杂的鸡尾酒会中,讲话人众多、背景音杂乱,人可以很容易地区分出目标说话人的声音并进行识别,但是对机器来说就很难。对于非人机交互识别任务,在类似的环境下,也面临着同样的问题。

 

2.非人机交互识别-问题建模

 

 

我们看一下这个问题是如何建模的。根据上述分析可知,这不是一个单纯NLU(自然语言理解)的问题。最初我们尝试只依赖Query文本,也就是从语义理解的角度进行非人机交互识别,发现存在很大的困难。首先,如果只依赖文本的话,会缺失掉音频中包含的丰富信号,而人去判断的话,其实很依赖这些信号。其次,对于无效的语音,ASR有可能误识别为正常的意图明确的query,从NLU的角度来判断就会产生偏差。

 

 

其次是建模中是否需要依赖上文。通过实验可知,把当前query的上文信息(包括上一轮的语义特征、是否非人机交互等)加入到模型中,没有明显的效果提升。猜测可能的原因是由于非人机Query产生的随机性,导致各轮Query之间的依赖比较弱,引入对上文的依赖,会增大建模难度。

 

3.非人机交互识别-解决方案

 

 

最终将其定义为一个针对单轮语音的二分类任务。对于一个分类任务,关键的事情是数据集的构建以及模型和特征的选择。

 

① 非人机交互识别-数据集构造

 

 

非人机交互数据标注成本很高

非人机交互识别的数据需要根据音频人工标注,有些边界case辨别起来比较困难,相对于文本标注,成本高很多。以我们的标注经验,一个熟练的标注人员一天最多能标注1000条的样本,构建一个十万的训练集的话,需要耗费100人日。

 

提升数据的标注质量

在听取录音的过程中发现,非人机识别的样本中存在着各种音频类型,其中会存在大量的模糊样本,对于同一种类型的语音,不同的标注人员给的是不同的标签,这样会对模型学习产生很大的误导。

我们具体的做法是制定比较详细的标注规范,针对于各类音频提供示例和说明,需要标注人员严格按照规范标注,同时引入多人标注进行校验,经过多轮的数据迭代,能够最终得到标签一致性非常高的数据。

 

 

样本挖掘

在待标注样本的挖掘上,重点考虑到提升样本的多样性和有效性。

a. 提升样本的多样性

随机采样: 随机采样的挖掘方式在系统冷启动阶段会比较有效,它能够覆盖到尽量多类型的样本。

正样本挖掘: 正样本在这里指的是非人机的样本。 由于该任务的正负样本比例悬殊,正样本占比很小,我们需要对正样本进行定向挖掘,提升正样本的声音类型覆盖。 正样本的挖掘可以基于各类场景的数据特性设计挖掘策略。 比如基于ASR置信度打分或者误唤醒检测等。

b. 提升样本的有效性

根据模型打分挖掘困难样本,即打分位于分类边界的样本。

通过用户的session行为,挖掘用户的负向反馈,挖掘系统误识的样本。

这两类样本对于模型的效果提升会比较有效。

 

② 非人机交互-模型

 

 

模型采用的是基于语音和语义特征的深度神经网络模型,主要用到了四类特征:

 

语音特征 : 通过对原始音频进行声学信号处理,包括分帧、加窗、FFT,得到一个二维向量,作为语音Encoder的输入。

 

文本特征 : 文本特征方面, 将ASR得到的query的word embedding,输入文本Encoder进行编码。

 

两类 高阶特征 : 一类是ASR解码输出的置信度等特征,一类是NLU输出的结构化垂域意图和槽位信息。

 

语音Encoder采用的是CNN+LSTM+Attention的网络,文本Encoder采用的是TextCNN网络,两个Encoder的输出合并上高阶特征,输入到分类层。在分类层的设计上针对两种类型的请求,一种是首轮的请求,一种是非首轮的请求,分别设置输出层。不同输出层是因为对于首轮和非首轮的请求,非人机交互的分布是不一样的,通过单独为每类请求设置独立的参数空间,可以让模型对于每类请求学习到最佳的参数。

 

 

下面是模型消融实验的一些主要结论。

 

首先在语音特征方面,在ASR任务中其实常用的特征是MFCC或者 fbank,但在非人机交互识别任务中,实验得出频谱特征更加有效。我们分析,频谱特征更为原始,其中包含了更丰富的信息,神经网络可以很有效的从中提取特征。实验中尝试加入一些声学信号特征比如音量、语速、信噪比等,效果不明显,可能通过神经网络已经能充分的提取到这些声学信号。

 

语音Encoder的部分,采用多层CNN神经网络,效果还是不错的,鲁棒性很好。这说明CNN对于声音特征的提取能力还是很强的。在这个结构基础上进行修改,将CNN从大的卷积核改成小的卷积核,让CNN提取局部特征,然后加上LSTM层+Attention层提取序列全局特征,效果会有明显的提升。

 

 

文本Encoder采用CNN、Transformer和BERT,效果差异并不明显。对于语音Encoder和文本Encoder输出表示的融合,简单的拼接比做Attention表现效果更好。

 

4.用户行为反馈

 

 

除了利用模型进行识别,系统还引入了用户的行为反馈。

 

用户反馈类型

第一类是误拒识的反馈,指的是系统拒识后,用户又重 复说了一遍。 这是一个很强的信号,表明系统可能发生了误拒识; 第二类反馈是欠拒识的反馈,一个无效音被系统响应了,用户说闭嘴。

 

反馈生效方式

针对这两类反馈类型,优化的方式有两种: 一种是在在线阶段,主要是对于误拒识的反馈,系统会动态调整策略,不再继续拒识; 一种是在离线阶段,会把这两种反馈通过挖掘的方式进入到模型离线迭代的流程。

 

个性化策略

引入context的信息,如果用户在历史上经常说某一些query,系统会倾向于不拒识。 通过这种策略上的优化,对线上用户真实的体验是有明显的改善的。

 

5.非人机交互识别-能力现状评估

 

 

非人机交互识别任务上,机器能做到的准确率在90%左右,召回率在70%到80%之间,远远达不到准召率双90%的水平,这与很多NLU任务的差距还是比较大的。

 

基于语音做非人机交互识别,它的天花板在哪里?我们做了一个普通人在这个任务上的能力评估。我们选三个没有经过专业训练的标注人员,让他们判断一段音频是不是非人机交互。结果是三个标注人员的识别准确率和召回率差异是非常大的,准确率最高的是93%,召回率只有77%;召回率最高的是95.85%,但是准确率非常低,但是三个人的F1值比较接近的,约为0.86。

 

可以看出,只基于音频的话,非人机交互识别任务对于人来说也是很难的,很多边界样本很难判断。

 

03

 

意图不明识别

 

下面介绍一下意图不明识别。

 

1.乱序无意义识别

 

 

首先看一下问题的划分。query意图不明,主要有三类,乱序无意义、表达不完整和意图模糊。

 

 

乱序无意义识别:任务的目标是能将有序的query和无序query区分开。有序query表达比较规范、符合正常语法,但是乱序query看上去不是一个正常句子。在NLP里一般用困惑度衡量一个句子的有序性,困惑度越高,表明一个句子越混乱。

 

 

句子的困惑度一般是基于语言模型来计算。为了让训练得到的语言模型计算出更合理的困惑度,需要注意以下两点:

 

足够多的训练数据,数据量要大而且覆盖范围要广。 在小爱的用户query中存在着很多对长尾知识的查询,比如古诗词、小众话题以及新出现的流行语等。 如果训练集没有覆盖这些类型的数据,模型在这类数据上的表现就会不太理想。

 

足够大的语言模型, 语言模型的参数规模越大越好,越大的模型有越强的表征能力。

 

 

基于语言模型的方案,早期是采用LSTM,后来改为基于BERT预训练模型。基于LSTM计算困惑度,采用的是自左向右依次计算token概率的传统方式,而基于BERT计算困惑度则有些区别。BERT是一种masked语言模型,计算每一个token的概率会依赖token的上下文。在预测阶段,BERT计算一个句子的困惑度,需要每次mask掉一个token来计算交叉熵损失,这样会导致预测的时间复杂度比较高,因此会影响在线预测的性能。

 

 

降低预测复杂度的方法是改用类似GPT的自回归语言模型。采用UNILM的做法,通过对self-attention mask矩阵的设定,即可以训练出从左向右的语言模型。相对于BERT,模型规模相当,预测复杂度降低了N倍。在乱序无意义识别任务上,precision/recall跟BERT效果相当。

 

2.乱序无意义识别-语言模型方案面临的挑战

 

 

基于语言模型的方案,缺点在于对处于有序和乱序边界的样本,没有有效的方式进行优化。有些边界Query,存在着部分错误,但基本可以判断出用户意图。从产品体验的角度,希望系统具备一定的容错性,能对这类Query的意图进行满足。但由于Query存在错误,困惑度也偏高,容易误识别。

 

这里的解决思路是在语言模型基础上增加分类模型,对于困惑度位于边界的Query,引入更丰富的特征,构造训练集训练二分类模型,通过分类模型来识别。分类模型相对于语言模型的优点是,对于某些特定类型的问题,可以通过增广数据和特征,方便的进行迭代优化。分类模型采用的是Transformer,Transformer在文本分类上用的比较多,效果也不错,关键在于特征的选取。特征方面,我们借鉴了文本纠错任务常用的一些特征,比如bigram/互信息等。

 

3.表达不完整识别

 

 

表达不完整识别任务的目标是,判断一句话是否语义完整。从解决方案上来说,其实这个任务是跟上一个任务是比较像的,都是从语言模型和分类模型的角度来看。因此这个任务主要分享一下建模的思路,以及主要解决哪些特殊的问题。

 

这里有两种解决思路:

 

第一种是把它简化为判断一个句子是否说完,也就是预测query的下一个token是不是句尾,这个任务是语言模型比较擅长的

 

第二种是从分类的角度,把query和各种特征输入模型,做二分类。

 

 

语言模型擅长处理的是正常的表达少了后半句,但是在用户的真实query中,存在很多口语化、很随意的表达方式,比如常见的倒装、省略现象。语言模型一般是根据规范的书面语料训练的,对于没有见过的口语化表达方式,就很容易识别错。还有一些容易产生歧义的特殊实体,比如“我以为”是一首歌,在语言模型缺少领域知识的情况下,会倾向认为它不是一个句子的结束。对这些特殊的表达,从语言模型角度优化成本是很高的,倾向于从分类模型的角度去解决。

 

 

有些query如果不在上下文语境中,它的语义是不完整的。例如单个Query“明天早上八点”,看上去是用户话还没有说完,但是如果是在一次连续对话中,上一轮用户是在订闹钟,系统反问“明天早上几点”让用户确认,这种情况下,它就是一个语义完整的query。所以这个任务的建模需要引入上文信息。

 

最终的方案是采用了两个模型:

 

单轮模型,判断当前query是否完整,通过单轮query去判断。

 

多轮模型 ,是对于单轮判断query不完整的情况,采用多轮的模型进行二次判断。

 

 

模型的设计是基于BERT的分类,针对于单轮的话,输入当前的query;针对多轮输入上一轮的query和answer和当前轮的query作为一个句对的分类任务。

 

04

 

小结

 

这次主要分享了语音交互系统中的两个机器学习任务的实践: 非人机交互识别和意图不明识别。

 

非人机交互识别: 我们采用的是基于语音和语义特征的神经网络模型,在手机语音助手上达到接近于普通人的水平;

 

意图不明识别: 主要介绍了乱序无意义和表达不完整两个任务的建模思路,技术方案的话主要是从语言模型和分类模型角度去思考。 这两个任务有一个共同点是都存在着歧义度高的问题,如何通过问题的定义降低任务的歧义性,如何能找到更有效的方法去解决这些高歧义性的问题,是我们需要进一步深入去研究的。

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。