0

    使用多轮推理神经网络的对话生成

    2023.04.13 | admin | 252次围观

    发表会议:NAACL (2018)

    下载地址:

    原文作者:Xianchao Wu, Ander Mart´ınez , Momo Klyen

    发表机构:微软

    1 原文概述

    这篇较早(应该是2017年的work),整体架构还是encoder2decoder,但是借鉴了memory network的思想(构建不同种类的memory)以及迁移了文本阅读理解的方法(multi-hop reasoning),我觉得对以后的end2end对话模型产生很大的影响。原文在编码阶段使用对话历史并利用不同的对话轮次构建不同种类的记忆(Memory)信息,在解码器阶段,原文通过构建muilti-hop reasoning模块对不同种类记忆的交互得到深度层次的上下文向量,并且利用得到的深度上下文向量以及上一步的隐状态和上一步的预测值预测生成当前步的词。原文的贡献在于如何应用memory network以及multi-hop思想在于对话生成中。重点在于其提出的muilti-hop reasoning模块如何工作,另外针对于所选用的数据集如何构建出work的记忆信息。

    2 原文模型

    原文是生成式对话系统,它与其他两种较为流行的对话系统--基于排序的检索策略对话系统和基于统计机器翻译对话系统的区别有很多(从字面就能大概知道三种方法的不同做法),其中生成式对话系统更难,它也会使模型生成多样性的回复,尽量避免单一或者无用回复。如何让生成式对话生成的对话更为多样性和准确,原文作者所提出的muilti-hop reasoning模块是重点,原文作者认为多轮推理可以产生更多样的和可接受的反应,这种思想的来源于文本理解--多轮读取文档的记忆,可以扩展当前问题的知识面,使得从该文档中找出正确答案变得更容易。我认为是为当前时间步尽可能多的提供有用的信息,相当于偏置生成的方向。

    多轮对话模型的目标函数为: \mathcal{L}(\theta, \mathcal{D})=\sum_{d \in \mathcal{D}} \prod_{i=2}^{T_{d}} p\left(s_{i} | s_{

    如果将生成式的对话系统看成句子级语言模型,普通的对话系统仅仅基于前一个对话的,而多轮多轮对话模型基于先前所有的句子,这是原文的核心点。因为原文是基于encoder-decoder的,所以本文分两个阶段,编码器很简单,最大的不同是在于解码器的构造上。

    在编码器阶段,使用的是双向RNN来捕捉输入语句的长期依赖:

    h_{j}=\left[\overrightarrow{h}_{j}^{\top} ; \overleftarrow{h}_{j}^{\top}\right]^{\top}\\

    然后编码器的最后一个隐状态经过线性映射作为解码器的初始化隐状态, t_{0}=\tanh \left(W_{s} m_{T_{d^{\prime}}}\right) 。

    在解码器阶段,原文为了突出muilti-hop reasoning模块的作用,提出了三个对照模型,第一个是SIMPLE(仅使用当前句子),MULTI(使用前面所有的句子),muilti-hop reasoning。随着上下文信息的增长,将所有的上下文信息汇总成一个固定长度的向量将变得越来越弱,从而无法指导目标句子的生成,因此需要使用attention机制来提供对齐信息。

    SIMPLE模型

    在SIMPLE模型中,因为只使用当前的句子,所以attention机制仅仅和它编码的隐状态做:

    e_{i}^{(j)}=a\left(h_{i}, t_{j-1}\right)\\

    \alpha_{i}^{(j)}=\frac{\exp \left(e_{i}^{(j)}\right)}{\sum_{l=1}^{T_{s}} \exp \left(e_{l}^{(j)}\right)}\\ t_{j}=g\left(t_{j-1}, y_{j-1}, c_{j}, \theta_{g}\right)\\

    上述是SIMPLE模型,它仅仅依据当前的句子训练,原文作者使用多跳的出发点在于借鉴文本理解上的思想:对于复杂的上下文和复杂的查询,人类通常会重新访问给定的上下文,以便在一次阅读之后有更深入的推理;另外,attention机制可以多轮执行,以便更好地理解会话,并且可以扩展简单查询,以便更好地生成响应,而简单查询常常会省略未知数量的上下文敏感单词。但是,直接迁移文本理解的思路是走不通的,对话一般来讲具有身份多变性,即一个对话可能有多个人物;另外具有多主题特性,一个对话可以有很多topic组合。还有一些难点在于,对话的轮次不统一,即有的对话长有的对话短。原文作者在处理上述难点的时候,首先采用的是日本对话聊天数据集(内容已转换成英文),这个数据集一共有五个轮次,十句话(Japanese 10-sentence-5-round conversation)qq群聊对话生成器在线制作,然后将数据集分为两个特定用户即user以及response,如下图所示:

    MULTI模型

    相比于SIMPLE仅仅使用当前轮次的信息,MULTI使用的是多个轮次的信息。模型框架如下图所示:

    使用多轮推理神经网络的对话生成

    M_h 指的是编码器部分,M_c 的产生很有意思qq群聊对话生成器在线制作,它使用的是每一句编码器的最后隐状态然后过一层RNN,具体计算公式为: m_{i}^{(c)}=\operatorname{RNN}\left(m_{i}, m_{i-1}^{(c)}\right) ,其中 m_i 为第 i 个轮次的最后隐状态, m_{i-1}^{c} 是RNN上一个隐状态。 M_q 和 M_r 就更简单,分别是user和response的最后隐状态,这样分离两者,原文作者认为可以捕捉个人特征,如个性化的话题信息和说话风格。这样得到不同种类得记忆信息,如何concate?那就是直接用attention交互。如与 M_q 的交互计算公式为: a_{j, i}^{q}=\operatorname{softmax}_{i=1, \ldots,\left|M_{q}\right|} \cos \left(W_{1}^{q} m_{i}^{q}, W_{2}^{q} t_{j}\right)\\

    c_{j}^{q}=\sum_{i=1}^{\left|M_{q}\right|} a_{j, i}^{q} m_{i}^{q}\\

    其他的 c_{i}^{h} 、 c_{i}^{r} 、 c_{i}^{c} 同理产生,最后四个拼接代替SIMPLE模型的上下文向量 c_i ,为解码器提供对齐信息。

    muilti-hop reason模型

    先上muilti-hop reason模型图:

    muilti-hop reason模型与MULTI模型的不同在于前者有reason box模块,而reason box模块正是执行muilti-hop推理的部分。首先muilti-hop reason模型的reason box模块是基于MULTI模型的,但是MULTI模型仅仅是单挑(只做一次),reason box模块内部所做的是多跳。如下图所示:

    也就是比MULTI模型多了一个RNN,这个RNN用于推理主体。工作流程为:解码器上一个隐状态 t_{j-1} 和每一种记忆信息执行注意力交互得到四个注意力向量,然后拼接;接着该拼接后的注意力向量输入reason box模块内的RNN中迭代(多跳)--每一跳输出的隐状态与每一种记忆信息再执行注意力交互,完成muilti-hop reasoning后,输出作为上下文向量用于解码器的RNN提供推理信息。那么何时终止多跳?这由reason box中的RNN每步输出的隐状态决定,如下图:

    其中 o_m 就为终止向量,计算方式为: o_{m}=\left(1-o_{m-1}\right) * \sigma\left(w_{t}^{\top} h_{m}^{\mathrm{R}}+b_{t}\right) 。

    3 实验

    数据集的细节上文已经提到一些,原文对数据集的处理包括字符编码、词嵌入、过滤长度等不在叙述,请参考原文,这里给出数据集的统计量:

    另外,原文所设置的训练细节也不再详细叙述,原文第5部分有详细介绍,这里给出三种模型的loss与迭代次数的关系:

    接下来看最终的性能比较,对话领域其实没有太好的客观评价指标,一般采用BLEU-n来评估,其中原文作者认为当使用BLEU-2而不是BLEU-4时,与人类评价的相关性更好,实验结果为:

    对话领域最好的评价指标为--人来评定,原文作者使用真人评定生成回复的好坏,标准是:

    最后结果为:

    上图表明(1)如果不注意多轮推理,MULTI并不总是能从增强上下文中获益;(2)REASON的多跳attention的有效性。

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论