1、前言
在很多语音机器人或文本机器人对话场景下需要对整个对话过程或对话单句的核心关键字进行“提取或分析”(并不要理解每一句、只需要读取中心思想),如提取电话号码、邮政编码、车牌号码、地址库、设备编号、商品编码等,传统方法如基于规则算法、或标准神经网络模型都无法高效、精确处理复杂的业务场景、特别针对汉语言的方言的理解和处理上。
《VIKI-AI智能客服工单系统》是微服网络最新研发的一套传统呼叫中心+AI机器人+微信公众号+智能工单+APP派单的“智能客服中心”整体解决方案系统,支持私有化部署和快速业务场景适配的能力、下文介绍一个实际应用场景。
2、实际应用场景
2.1、案例介绍
由于2020年新冠疫情的发展、目前大量传统呼叫中心服务公司或团队面临着巨大的人员招聘、管理、成本等综合问题。某市运营商也是面临同样问题,急需要通过AI语音技术处理宽带、电视、电话等原来由人工处理的客服受理问题。如:“电话接待、通话录音、智能自助排障、转接装维人员、转接人工坐席、工单自动采集与下发、自动报表数据分析、工单APP远程处理”等、整个业务流程图如下:
2.2、对话效果
如下图机器人接听来电、询问和核对手机号码、根据手机号码匹配转接装维人员或电话值班客服。
1、算法介绍
3.1、注意力机制(Attention Mechanism)
AM源于对人类视觉的研究。在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息的一部分,同时忽略其他可见的信息。上述机制通常被称为注意力机制。人类视网膜不同的部位具有不同程度的信息处理能力,即敏锐度(Acuity),只有视网膜中央凹部位具有最强的敏锐度。为了合理利用有限的视觉信息处理资源,人类需要选择视觉区域中的特定部分,然后集中关注它。例如,人们在阅读时,通常只有少量要被读取的词会被关注和处理。综上,注意力机制主要有两个方面:决定需要关注输入的哪部分;分配有限的信息处理资源给重要的部分。近年来,深度学习的研究越来越深入,在各个领域也都获得了不少突破性的进展。微服网络研发人员近年来一直致力于基于attention机制的神经网络的研究与应用,在VIKI-AI系列产品获得了非凡成绩和效果,解决了很多实际问题。
3.2、软性注意力机制的数学原理
在神经网络模型处理大量输入信息的过程中,利用注意力机制,可以做到只选择一些关键的的输入信息进行处理,来提高神经网络的效率,比如在机器阅读理解任务中,给定一篇很长的文章,然后就文章的内容进行提问。提出的问题只和段落中一两个句子有关,其余部分都是无关的,那么只需要把相关的片段挑出来让神经网络进行处理,而不需要把所有文章内容都输入到神经网络中。软性注意力机制一般的处理方法包括“普通模式”和“键值对注意力模式”,“普通模式”读者可以查阅相关资料、本文重点描述VIKI-AI实际使用的“键值对注意力模式”。
3.2、键值对注意力模式
通常可以用键值对(key-value pair)来表示输入信息,那么N个输入信息就可以表示为(K, V)= [(k1,v1),(k2,v2),...,(kN,vN)],其中“键”用来计算注意分布σi,“值”用来计算聚合信息。那么就可以将注意力机制看做是一种软寻址操作:把输入信息X看做是存储器中存储的内容,元素由地址Key(键)和值Value组成,当前有个Key=Query的查询,目标是取出存储器中对应的Value值,即Attention值。而在软寻址中,并非需要硬性满足Key=Query的条件来取出存储信息,而是通过计算Query与存储器内元素的地址Key的相似度来决定,从对应的元素Value中取出多少内容。每个地址Key对应的Value值都会被抽取内容出来,然后求和,这就相当于由Query与Key的相似性来计算每个Value值的权重,然后对Value值进行加权求和。加权求和得到最终的Value值,也就是Attention值。
如下图所示,以上的计算可以归纳为三个过程:
第一步:根据Query和Key计算二者的相似度。可以用上面所列出的加性模型、点积模型或余弦相似度来计算,得到注意力得分si;
第二步:用softmax函数对注意力得分进行数值转换。一方面可以进行归一化,得到所有权重系数之和为1的概率分布,另一方面可以用softmax函数的特性突出重要元素的权重;
第三步:根据权重系数对Value进行加权求和:
图示如下:
可以把以上的过程用简洁的公式整理出来:
以上就是软性注意力机制的数学原理。
3.3、seq2seq模型介绍
seq2seq属于encoder-decoder结构的一种,这里看看常见的encoder-decoder结构,基本思想就是利用两个RNN,一个RNN作为encoder,另一个RNN作为decoder。encoder负责将输入序列压缩成指定长度的向量,这个向量就可以看成是这个序列的语义,这个过程称为编码,如下图,获取语义向量最简单的方式就是直接将最后一个输入的隐状态作为语义向量C。也可以对最后一个隐含状态做一个变换得到语义向量,还可以将输入序列的所有隐含状态做一个变换得到语义变量。
而decoder则负责根据语义向量生成指定的序列,这个过程也称为解码,如下图,最简单的方式是将encoder得到的语义变量作为初始状态输入到decoder的rnn中,得到输出序列。可以看到上一时刻的输出会作为当前时刻的输入,而且其中语义向量C只作为初始状态参与运算,后面的运算都与语义向量C无关。
decoder处理方式还有另外一种,就是语义向量C参与了序列所有时刻的运算,如下图,上一时刻的输出仍然作为当前时刻的输入,但语义向量C会参与所有时刻的运算。
encoder-decoder模型对输入和输出序列的长度没有要求,应用场景也更加广泛。
3.4、seq2seq模型通用训练
前面有介绍了encoder-decoder模型的简单模型,但这里以下图稍微复杂一点的模型说明训练的思路,不同的encoder-decoder模型结构有差异,但训练的核心思想都大同小异。
我们知道RNN是可以学习概率分布然后进行预测的,比如我们输入t个时刻的数据后预测t+1时刻的数据,最经典的就是字符预测的例子,可在前面的《循环神经网络》和《TensorFlow构建循环神经网络》了解到更加详细的说明。为了得到概率分布一般会在RNN的输出层使用softmax激活函数,就可以得到每个分类的概率。
对于RNN,对于某个序列,对于时刻t,它的输出概率为p(xt|x1,...,xt−1)p(xt|x1,...,xt−1),则softmax层每个神经元的计算如下:
其中ht是隐含状态,它与上一时刻的状态及当前输入有关,即:
那么整个序列的概率就为
而对于encoder-decoder模型,设有输入序列x1,...,xTx1,...,xT,输出序列y1,...,yT‘y1,...,yT‘,输入序列和输出序列的长度可能不同。那么其实就是要根据输入序列去得到输出序列的可能,于是有下面的条件概率,x1,...,xTx1,...,xT发生的情况下y1,...,yT‘y1,...,yT‘发生的概率等于p(yt|v,y1,...,yt−1)p(yt|v,y1,...,yt−1)连乘。其中v表示x1,...,xTx1,...,xT对应的隐含状态向量,它其实可以等同表示输入序列:
此时,ht=f(ht−1,yt−1,v)ht=f(ht−1,yt−1,v),decoder的隐含状态与上一时刻状态、上一时刻输出和状态向量v都有关,这里不同于RNN,RNN是与当前时刻输入相关,而decoder是将上一时刻的输出输入到RNN中。于是decoder的某一时刻的概率分布可用下式表示:
所以对于训练样本,我们要做的就是在整个训练样本下,所有样本的p(y1,...,yT‘|x1,...,xT)p(y1,...,yT‘|x1,...,xT)概率之和最大,对应的对数似然条件概率函数为
,使之最大化,θ则是待确定的模型参数。对于rnn、lstm和gru的结构可以看这几篇文章《循环神经网络》 《LSTM神经网络》 《GRU神经网络》。
1、参考文献
[1]、邱锡鹏:《神经网络与深度学习》
[2]、深度学习中的注意力机制(2017版) https://blog.csdn.net/malefactor/article/details/78767781
[3]、Dzmitry Bahdanau、KyungHyun Cho、Yoshua Bengio.
《Neural Machine Translation by Jointly Learning to Align and Translate 》
[4]、Cho, K., van Merrienboer, B., Gulcehre, C., Bougares, F., Schwenk, H., and Bengio, Y. (2014a).
[5] 《Learning phrase representations using RNN encoder-decoder for statistical machine translation》
[6] Yin, W., Ebert, S. & Schütze, H. Attention-Based Convolutional Neural Network for Machine Comprehension. 7 (2016).
[7] Kadlec, R., Schmid, M., Bajgar, O. & Kleindienst, J. Text Understanding with the Attention Sum Reader Network. arXiv:1603.01547v1 [cs.CL] (2016).
[8] Dhingra, B., Liu, H., Cohen, W. W. & Salakhutdinov, R. Gated-Attention Readers for Text Comprehension. (2016).
[9] Vinyals, O. et al. Grammar as a Foreign Language. arXiv 1–10 (2015).
[10] Wang, L., Cao, Z., De Melo, G. & Liu, Z. Relation Classification via Multi-Level Attention CNNs. Acl 1298–1307 (2016).