昨天介绍了一篇工程性比较强的paper,关于对话生成(bot)任务的,今天继续分享一篇bot方面的paper,6月2日刚刚submit在arxiv上。昨天的文章用了一种最最简单的端到端模型来生成对话,取得了不错的结果,而本文用了一种更加复杂的模型来解决这个问题,取得了更好的结果。文章的题目是Multiresolution Recurrent Neural Networks: An Application to Dialogue Response Generation,作者是来自蒙特利尔大学的博士生Iulian Vlad Serban。
本文最大的贡献在于提出了一种多尺度循环神经网络(Multiresolution RNN,MrRNN),这里的多尺度是指描述文本序列的方式有多种尺度,不仅仅是传统的用一个又一个word来表示序列,这种表示称为自然语言表示,还包括了一种所谓的high-level信息来表示文本序列,这种表示称为粗糙序列表示。本文的模型受启发于分层循环端到端模型(Hierarchical Recurrent Encoder-Decoder,HERD),该模型应用于搜索领域,将用户的search session划分为两个层次的序列,一个是query的序列,一个是每个query中词的序列。
本文模型中一个非常重要的部分是数据的预处理,将训练数据中的所谓high-level信息提取出来构造第二种序列来表示整个文本,这里用了两种思路。
1、提取文本中的名词。用词性标注工具提取出文本中的名词,去掉停用词和重复的词,并且保持原始的词序,还添加了句子的时态。通过这个过程构造了一种表示原始文本的序列。
2、提取文本中的动词和命名实体。用词性标注工具提取文本中的动词,并标记为activity,然后通过一些其他工具从所有训练数据中构造了一个命名实体的词典,帮助提取原句中的命名实体。因为数据集是ubuntu对话数据集,会涉及到大量的linux命令,所以还构造了一个linux命令词典,以标记原句中的命令。同样地也添加了句子的时态。通过这个处理过程,构造了另外一种表示原始文本的序列。
两种处理方法将原句用一种关键词的形式表示出来,尤其是第二种方法针对Ubuntu数据集的特点,包含了非常多的特征进来。这样的表示本文称为coarse sequence representation,包含了high-level的信息,比起单纯的word by word sequence具有更加丰富的意义。
接下来,看一下本文模型的架构图:
模型中包括了两个层次,或者说是两种尺度,一种用了很多的词来表示一个句子,另外一种用了经过处理的包含了更加重要的信息的词来表示一个句子。下层生成的预测值将会作为上层docoder在做预测时的context的一部分,这部分context包含了重要的、high-level的信息,再加上上层自己encoder的输出也作为context,可以说这个模型的context包含了非常丰富的内容。理解上面的图,只要仔细看好箭头的指向,也就明白了各个部分的输入输出是哪些。每个time step的数据流过程如下:
下层:coarse encoder -> coarse context -> coarse decdoer -> coarse predciton encoder
上层:natural language encoder -> (natural language context + coarse prediction encoder) -> natural language decoder -> natural language prediction
不管是用自动评价指标还是人工评价,结果都表明了本文的模型效果比baseline要高出很多个百分点,远远好于其他模型。下面展示一个结果,是ubuntu数据集上的测试效果:
可以看的出本文模型生成的结果效果比其他模型好很多。
本文模型并不是一个纯粹的数据驱动的模型,在初始的阶段需要做一些非常重要的数据预处理,正是这个预处理得到的序列表示给本文的好结果带来了保证。我想,这种处理问题的思路可以推广到解决其他问题上,虽然本文模型很难直接应用到其他问题上,但我相信经过一些不大的变化之后,可以很好地解决其他问题,比如我一直关注的自动文摘问题,还有机器翻译、自动问答等等各种涉及到自然语言生成问题的任务上。这篇文章的结果也支持了我之前的一个观点,就是在解决问题上不可能存在银弹,不同的问题虽然可以经过一些假设变成相同的数学问题,但真正在应用中,不同的问题就是具有不同的特点,如果只是想用一种简单粗暴的data driven模型来解决问题的话,相信效果会不如结合着一些该问题feature的模型。
来源:paperweekly