A Knowledge-Grounded Neural Conversation Model

1 出发点

  1. 现有的会话模型无法获得外部知识,网络产生的相应虽然在会话上恰当,但是包含的信息量很少

2 网络结构

图1:网络的整体结构

2.1 Dialog Encoder

        输入:对话历史S = {s1 …sn}
        操作:利用GRU将句子编码成一个向量
        输出:向量u

2.2 Facts Encoder

        输入:‘事实’F = {fi…fk},对话历史向量u
        操作:1. 先将每个fi转换为词袋向量表示ri
                  2. 利用memory network生成具有‘事实’的向量 u ^ \hat u u^

公式1

(note: 公式还是比较好理解的,AC都是参数需要学习)

2.3 Decoder

        输入:向量 u ^ \hat u u^为GRU初始化
        操作:利用GRU生成目标回应
        输出:目标回应R

3 Multi-Task Learning

        该文章利用了多任务学习同时学习conversation data和external data,因此训练网络时分为两种子任务:
                1. 仅利用conversation data,训练网络
                2. 利用所有的数据训练网络
        这样的好处有:
                1. 先利用任务1预训练网络,当再训练任务2时,此时的网络已经从任务1中学习到了会话的主干知识
                2. 使我们能够灵活地在两个任务中公开不同类型的会话数据。(应该说的是迁移学习的问题,任务1中使用的是A领域的会话,任务2中使用的是B领域的会话。这就是文章中提到的泛化能力强的原因吧)
                3. 还可以将任务2中的response替换成任意一个fact,使得最终模型产生的response具有更多的信息
                (note: 第三个好处使得子任务类型变成了3个)

5 与论文《Learning to Select Knowledge for Response Generation in Dialog Systems》的比较

(note: 论文《Learning to Select Knowledge for Response Generation in Dialog Systems》见上一篇博客,。对比时简称为论文1,该博客中介绍的简称为论文2)

  1. 两篇论文的网络结构基本相似,encoder和decoder都采用GRU
  2. 论文1中的外部知识也是由GRU编码,而论文2中利用memory network进行编码。memory network也可以视为RNNd的一种扩展,详见《Memory Network》和《End-to-End Memory Network》
  3. 论文2训练时进行了多任务训练
  4. 可能真的是数据驱动的吧,网络结构真的没啥好讲的(尴尬)

更多推荐

论文笔记:基于外部知识的会话模型A Knowledge-Grounded Neural Conversation Model