Proactive Human-Machine Coversation with Explicit Conversation Goals
ACL 2019
一、动机
人机对话是人工智能的一项基本挑战,涉及语言理解、对话控制和语言生成等关键技术,受到了学术界和工业界的广泛关注。但目前的人机对话普遍存在以下问题:
- 机器大多是被动对话形式,即机器的回复是用于响应用户的输入,无法像人一样进行充分的信息交互
- 机器的对话漫无目的,缺乏像人一样的自主意识
因此,我们提出了主动对话任务:
- 给机器设定对话目标
- 让机器根据给定的知识图谱信息主动引领对话进程,完成对话目标
- 达到信息充分交互,实现机器具备自主意识的目的
二、主动对话任务设置
我们给机器设置的对话目标是从当前话题跳转到目标话题上,由于目标话题和当前话题存在相关和不相关两种情况,因此我们在对话目标设定上同时考虑这两种情况,如图1左下所示,首先让机器从当前话题(Start)跳转到任意目标话题A(红海行动),然后进一步跳转到和话题A相关的另一目标话题B(林超贤)上。
图1 主动对话示例
如图1左上部分所示,给机器提供的知识图谱信息是目标话题A和B相关的子图信息。图1右侧为主动对话示例,机器主动发起对话,根据知识图谱信息主动引领对话进程,自然流畅的实现话题的迁移目标。
三、数据集建设
目前已有的对话数据集不适用于我们提出的主动对话任务,因此我们通过人工标注方式在电影和娱乐人物领域建设了一个新的对话数据集(DuConv),用于主动对话技术的研究。整个数据集建设经过了知识挖掘、图谱建设、对话目标设定和语料众包标注四个阶段。
1、知识挖掘
我们在时光网(www.mtime.com)上挖掘了电影和娱乐人物相关的结构化和非结构化知识信息,如电影的票房、导演、评论,相关人物的祖籍、代表作和评论等。我们根据网上挖掘的这些静态知识进一步计算出动态知识以丰富知识内容,比如根据票房信息计算出电影之间的票房排行,根据评分信息离散化得到电影或人物的口碑信息等。经过数据清洗后总共得到约14万实体360万条知识的数据,每条知识以三元组<实体,属性,值>的形式组织,经过抽样评估,我们挖掘的知识准确率为97%。
2、图谱建设
类似于传统的图谱建设,我们以挖据的三元组知识中的实体和值为节点,属性为边建立一阶图谱关系,除此之外,我们对有相同属性和值的两个实体建立二阶关系,如“红海行动”和“湄公河行动”的导演都是林超贤,这两个实体则存在二阶关联关系。
3、对话目标设定
如图1所示,每组对话都有对话目标和关联的知识信息,我们从图谱中提取任意两个关联的实体作为对话目标中的目标话题A和B,包括一阶关系和二阶关系的关联实体。然后进一步提取关联实体所在的知识子图作为目标话题A和B的附加知识信息。
4、语料众包标注
不同于self-play一人扮演对话双方的标注方式,我们在众包平台test.baidu.com上随机挑选两个标注人员模拟真实对话的双方标注出每组对话数据。为保证至少有两个标注人员同时进入对话标注任务,我们安排多个外包团队进入标注平台开展对话标注。标注时,每组对话随机挑选两个标注人员标注,其中之一扮演机器角色根据提供的知识子图信息主动引领对话进程完成设定的对话目标,另一个标注人员扮演真实用户角色响应机器角色的对话即可。由此共标注了约3万组含有27万对话句子的语料,详细统计信息如下:
图2 标注语料统计
四、基线模型建设
目前人机对话任务主要有检索和生成两种主流的技术方向,我们在这两个方向上都建立了主动对话的基线模型。
1、检索模型
图3 检索模型
检索模型借鉴信息检索的方法从对话语料库中检索候选回复,然后使用排序模型对候选回复进行排序,再选取高相关性的回复进行输出,如图3左侧所示。
我们的候选回复是从训练集中相同对话目标类型(如“Start”->[Movie]->[Person], “Start”->[Movie]->[Movie]等)相同轮次的机器回复中随机选取的,并对候选回复中的知识根据属性名称替换成当前对话的相应知识,减少知识冲突现象。
排序阶段,使用二分类方法判断每个候选回复Y属于正确回复的概率,如图3右侧所示,首先将候选回复Y和对话历史X(包括当前轮的用户输入)使用分隔符拼接成一串字符序列,然后使用Transformer方法进行编码表示,再联合attention方法选取的相关知识信息通过softmax层进行二分类判断。为了简便,该方法中将对话目标Goal作为知识信息的一部分使用。
2、生成模型
图4 后验生成模型
生成模型借鉴最早用于机器翻译的Seq2Seq模型,将输入的对话历史X使用encoder编码表示,然后使用decoder逐步解码出回复的每个字符。如图4所示,我们在Seq2Seq框架基础上使用Memory Network方法表示知识信息,通过attention方式选择输出回复需要使用的知识信息,并引入decoder中。我们发现:
通过输出回复的loss信息再经decoder的长距离梯度回传很难有效指导模型进行知识选择。
因此我们提出了一种新的解决方法(使用该方法的模型称为后验生成模型):
在训练阶段使用标准回复Y中的后验知识信息指导模型进行先验知识选择,即让先验知识分布p(ki|x)拟合后验知识分布p(ki|x,y),训练时将这两个分布向量的KL散度作为Loss的一部分。KL散度计算方法如下:
为避免在计算后验知识分布时存在严重信息损失,借鉴自编码的思想,训练阶段让标准回复计算的后验知识分布能解码出标准回复本身,即用后验分布预测标准回复的每个词,预测结果的BOW Loss也作为整体Loss的一部分,BOW Loss计算如下:
该方法中对话目标Goal作为输入信息的一部分共同参与知识信息的选择和回复的解码。
五、实验及结果
实验中使用的模型除了上文介绍的检索模型(retrieval)和后验生成模型(generation)外,增加了Seq2Seq模型进行对比,该模型只有encoder和decoder,语料中的对话历史、知识信息和对话目标拼接成一个字符串作为模型的输入。
我们使用百度的深度学习平台飞桨PaddlePaddle实现所有的基线模型,每个模型都使用预训练的word2vec词表进行热启动,词表大小为3万,隐层维度为300,训练阶段使用Adam方式对模型进行优化,生成模型中使用大小为10的beamsize进行解码。
由于对话的开放性,对话效果的自动评估仍然是一个难题,因此我们在自动评估的基础上进一步使用人工评估的方式来衡量对话的效果。
1、自动评估
由于无法自动生成用户的回复,因此自动评估只能进行单轮评估,即给定对话历史(包括当前用户输入)时,评估系统输出的机器回复。评估指标上既有检索相关的指标Hits@k又有生成相关的PPL、F1、BLEU和DISTINCT指标,同时使用准确召回指标衡量回复中的知识使用情况。评估估结果如下:
图5 自动评估结果
结论:
(1)为了观察知识的作用,每个模型都做了引入知识(w/)和不引入知识(w/o)的对比,从实验结果中可以看出引入知识能有效提升系统的效果,尤其是生成模型。
(2)由于知识本身具有稀疏性,尤其是知识中的实体名称,因此我们进一步对知识进行了归一化处理(normalization,简写成norm),将语料中的实体名称槽位化,回复输出前再将槽位替换为相应的实体名称,从实验结果可以看到三个模型做了知识归一化处理后可以有效提升模型的泛化能力,效果提升非常显著。
(3)从表中还可以看到后验生成模型要显著优于Seq2Seq模型,可见**后验信息能