本文是Wechat AI团队发表的基于DSTC7中第二个评测Sentence Generation 的论文,发表在AAAI2019上。研究的主要问题是基于背景知识的对话生成,主要通过指针生成机制和注意力机制从对话历史和背景知识中来生成更加有意义的回复。
Introduction
问题介绍:在目前纯数据驱动的对话系统中(如chitchat),往往存在大量的无意义的通用回复,无法利用真实世界的背景知识,生成的回复中缺乏有意义的实体和背景内容,与此相反的是,任务型对话系统中为了解决该问题则存在大量的手工编码过程(如slot-filling)。本文研究的问题如下:给定一段对话历史和一些与对话相关的文章片段,目标是生成有意义的、与给定背景信息密切相关的答复。
DSTC7提供的评测数据包括:
Conversational input: Similarly to DSTC6 Track 2 [7], all preceding turns of the conversation are available to the system. For practical purposes, we might truncate the context to the K most recent turns, at least in the case of the training data.
Contextually-relevant “facts”: The system is given up to N factual snippets of text (N = 20 in [9]) that are relevant to the context of the conversation. Note that these facts may vary turn-by-turn as the discussion progresses. These snippets of text are not drawn from any conversational data, and are instead extracted from external knowledge sources such as Wikipedia or Foursquare.
本文重点关注的是以下三个方面:
- 对话历史建模
- 如何充分使用非结构化的外部知识
- 生成回复的多样性和相关性
本文的主要贡献在于:
- 提出了一个泛化的指针生成机制(pointer generator),使得同时从对话历史和外部知识中复制实体。
- 提出了一种聚类Beam Search算法,可以在解码的时候动态地将相似语义地序列分组归类,避免生成通用回复。
Model
模型整体结构图:
Data Cleaning and Fact Retrieval
DSTC官方给出的评测数据里的背景知识来自于网络爬虫得到的很多文章片段,作者首先对这些非结构化数据做了预处理。论文中认为片段的每一句话是一个事实(fact),因为文章很多,所以作者使用了tfidf来选取与对话最相关的前topk个事实:
上式计算的是对话和一个事实的相关度,其中H是对话历史,F是一个事实,w是对话中的一个词,idf(w)是倒文档频率(此处是指w在所有对话中出现的频率的倒数)。上式的含义是在对话中出现频率低,而在文档某句话中出现次数多的词,决定了对话与该事实的相关度。最后将得到的前topk个事实按照初始出现的顺序拼接到一起。
因此,模型的目标函数定义为: $$P_{r}(R|H, F)$$
Encoder
对于对话历史和背景事实,模型使用两个独立的单层双向LSTM网络进行编码,得到两个隐层状态:
$$H^{H} = (h^{H}_{1},h^{H}_{2},…,h^{H}_{L})$$
$$H^{F} = (h^{F}_{1},h^{F}_{2},…,h^{F}_{T})$$
Decoder
Decoder主要包含三个模块:
- 分别针对于对话历史和背景事实的注意力机制
- 生成回复的模式预测
- 词生成
Attention Mechanism
在解码的每个时刻t,利用解码器的隐层状态$h_{t}^{R}$分别对$H^{H}, H^{F}$计算attention:
$\alpha_{ti}^{H}$ 和 $\alpha_{ti}^{F}$ 分别代表当前时刻拷贝对话历史和背景事实中的词的概率分布。
Mode Prediction
本模块主要是借鉴自pointer generator (See, Liu, and Manning 2017),解决生成过程中的OOV问题,唯一的不同点在于本模型增加了从背景事实中复制的机制,因此,Mode Prediction支持以下三种模式:
- Seq2Seq生成一个词
- 从对话历史中复制一个词
- 从背景事实中复制一个词
模型使用一个softmax得到每个模式的概率:
其中:$x_{t}$ 为时刻t的解码器输入。
Word prediction
最终,模型生成一个词的概率等于三种模式生成的概率相加:
- 对于 Seq2Seq生成一个词:$P_{r_{m}}(w|t,H,F)=softmax(W_{g}h_{t}^{R})$
- 对于从对话历史或者背景事实中复制一个词:$P_{r_{m}}(w|t,H,F) = \alpha_{ti}^{H} or \alpha_{ti}^{F}$
Cluster-based Beam Search
传统的beam search有一个固定大小的候选集上限k,而这k个最有可能的候选项有很多是语义相似的,例如i donot known, i donnot see,i donot understand
,虽然它们的概率都很高,但是对于生成的多样性来讲没有意义。因此,作者提出了一种新的基于聚类的Beam Search算法:
主要过程如下:
- 首先根据对数似然概率选取前BS*2个候选项
- 然后使用K-means聚成K个簇,聚类的特征为已解码序列的词向量平均
- 在每一个簇中选取前BS/K个候选项作为下一步解码的候选集
作用:语义相似的候选项会在一个簇中,不同簇中候选项含义不同,这样就可以在不增加Beam Search容量的前提下,增加不同语义回复的可能性。
作者还去除了注意力机制导致的重复N-grams,以及使用语言模型去除通用回复。
Experiments
针对于模型评估,DSTC提供两种方式:自动指标评估和手工评估。
可以看出,本模型在两种评价模式上都处于领先,模型的不足之处在于模型生成回复的相关性和回答一致性:
Conclusion
本文研究的主要问题是基于背景知识的对话生成,主要通过指针生成机制和注意力机制从对话历史和背景知识中来生成更加有意义的回复,提出了Cluster-based Beam Search机制,取得了一定的效果。但与人类对话相比还有很大差距,模型在利用背景知识时会出现前后逻辑不一致的问题,也有待解决。
Reference
- Cluster-based Beam Search for Pointer-Generator Chatbot Grounded by Knowledge
- http://workshop.colips.org/dstc7/tracks.html
- http://workshop.colips.org/dstc7/papers/DSTC7_Task_2_overview_paper.pdf
- http://workshop.colips.org/dstc7/papers/03_slides.pdf
- https://github.com/mgalley/DSTC7-End-to-End-Conversation-Modeling