由于AI技术的发展,对话机器人也得到了广泛关注和应用,例如Siri、Alexa等。关于目前的人机对话可以分为两种:任务型对话(辅助购物、导航、商场指示、天气询问、病情询问等),非任务式对话(聊天等)。任务型对话的实现需要针对特定任务定义大量Intention,并对不同的Intention定义不同的Action,一般不需要太多数据。本文主要关注于非任务型对话系统的构建,目前主流方法是基于深度学习的生成式模型。
Seq2Seq模型是目前做生成对话的主流模型。模型源于机器翻译,机器翻译将一种源语言转换为另一种目标语言,是一个序列sequence到另一个序列sequece的转化。对话也可以看成是由Question到Answer的转换。所以seq2seq模型很快应用到对话过程。具体模型(如下图)可以解释为:
给定一句话X, X由T个词语构成:
需要得到回复Y,Y由T'词语构成:
seq2seq模型实质是encoder-decoder模型,先将X进行编码,再利用编码后得到的X表达进行Y的预测。编码和解码的建模采用RNN,一般使用LSTM或GRU。可以将seq2seq的模型理解为给定X的RNN语言模型,若没有X的encoder输入就是普通的RNN语言模型。模型优化目标函数为给定X生成Y的最大概率:
RNN计算过程为:
对于GRU,相比simple-RNN主要是迭代过程中f(x)函数不一样。
Attention机制就是注意力机制,最早出现在图像中,用于关注局部特征。后来引入NLP方向,对话系统中,产生回复时需要关注上一句话中的特定词,例如“你叫什么名字?”中名字的重要性会高于其他词。这就是注意力机制,可以简单地理解为用于产生文本不同部分的重要性权重。 通过encoder得到上一句各词语的表示为:
在decoder过程中,需要使用encoder得到的数据,若直接采用RNN最后一个cell的输出会丢失很多中间词语的信息。所以一般采用Attnetion机制。即解码过程看到Si-1词语时,在生成Si词应该关注上一句中的哪些词语。
(1)引入历史对话
上述seq2seq只是已知一句话,生成下一句话。其实对话过程要结合上下文进行生成。例如A:“你喜欢旅游吗”;B:"喜欢"。如果仅仅是知道一句话“喜欢”,生成下一句可能没有任何意义。所以要引入历史对话信息。目前主要是Serban建立的分层模型HRED[1]。
(2)提高回复的多样性
由于seq2seq建模采用的是极大似然估计,即已知X以最大概率生成Y.往往给出的回复会倾向于安全而没有意义的回复,例如“嗯”,“好的”,“是的”这类的。为提高回复的多样性,目前有多种做法:目标函数添加互信息;解码方式改进Beam Search;引入Variable变量等。
(3)引入知识
对话中引入知识非常有必要,毕竟不是所有问题都是闲聊。例如询问“姚明身高多少?”这类回复,需要引入知识来解决。[2]
[1] I. Serban, A. Sordoni, Y. Bengio, A. Courville, and J. Pineau. Building end-to-end dialogue systems using generative hierarchical neural network models. In AAAI Conference on Artificial Intelligence, 2016.
[2] P. Vougiouklis, J. Hare, and E. Simperl. A neural network approach for knowledge-driven response generation. In Proceedings of COLING 2016, the 26th International Conference on Computational Linguistics:Technical Papers, pages 3370–3380, Osaka, Japan, December 2016. The COLING 2016 Organizing Committee.