Hierarchical Recurrent Encoder-Decoder

Hierarchical Recurrent Encoder-Decoder

Building End-to-End Dialogue Systems Using Generative Hierarchical Neural Network Models

Introduction

seq2seq的典型方法,用前N-1句话生成第N句话。假如说现在A, B对话内容是:a1,b1,a2,b2a1,b1,a2,b2, 其中每个都表示一句话

a1a1 -> [emb[word] for word in a1a1] -> RNN(a1a1) 
b1b1 -> [emb[word] for word in b1b1] -> RNN(b1b1) 
a2a2 -> [emb[word] for word in a2a2] -> RNN(a2a2) 
b2b2 -> [emb[word] for word in b2b2] -> RNN(b2b2)

本文重点是说,除了上面写的每句一个RNN,还加了一个句子之间的RNN:

  • RNN(a1)预测 b1
  • RNN(a1, b1) 预测 a2
  • RNN(a1, b1, a2)预测 b2
  • 再过一个句子之间的RNN

model

Hierarchical Recurrent Encoder-Decoder_第1张图片

Encoder RNN主要用于对输入句子进行编码,这里跟普通的seq2seq没有什么区别,并且把最后一个时刻的隐层向量认为是输入句子的编码向量,当做下一层RNN的输入向量。中间一层context RNN用来编码整个对话的状态、意图等对话层面的信息,而第一层RNN用来编码一句话的句子层面信息,中间层每个时刻输入的第一层输出的句子表示向量,这样context RNN的隐藏层向量就可以记住之前的对话信息,双向rnn将有效地引入额外的短期依赖性,这在类似的体系结构中已被证明是有用的。

最后,将该编码了之前对话信息的向量作为decoder RNN的输入向量,使得在解码过程中除了使用回答句子本身信息还会结合对话上下文信息。

扩展阅读

A Hierarchical Latent Variable Encoder-Decoder Model for Generating Dialogues

在HRED的基础上,在decoder中加了一个隐藏变量。这个隐藏变量根据当前对话的前n-1句话建立多元正态分布,与前n-1句话&第n句话的前m-1个已生成word一起共同影响第n句话第m个word的生成。通过这个隐藏变量(表示隐状态)可能可以提高整体dialog随机性。

你可能感兴趣的:(paper,NLP,机器学习)