从Seq2seq到Pointer-Generator Networks

文本介绍 pointer-network 和 pointer-generator network。
从 seq2seq开始讲起,到注意力机制,再到pointer-network再到pointer-generator network,最后列出几个,指针生成网络的简单应用效果。
(好长时间没更了,期间搭过一个个人博客,域名就是tenliu.top,后来种种原因,域名和服务器都没有续费~~)

1 seq2seq

1.1 为什么诞生seq2seq

我们知道RNN单元,输入输出的长度是一样的。那么在序列问题中,输入和输出的序列长度不同(这类实际问题更多,机器翻译、文本摘要、阅读理解、语言识别····)。网络结构该是什么样的呢?
这就是seq2seq问题,这时候就要 encoder-decoder结构了。

1.2 基本概述

我们先用一个LSTM作为 encoder编码网络,输入通过编码网络得到一个上下文向量c,
这个c有很多种,最简单的就是把编码网络LSTM的最后一个隐藏状态赋值给c,也可以把LSTM的所有隐藏状态复制给c,也可以把隐藏状态做些变换之后在赋值给c,

然后再来一个解码网络,也是LSTM。把编码网络的c作为输入,目标作为输出。这样就可以实现 输入和输出长度不同的 学习啦。

c可以作为解码网络的初始状态输入;

image.png

也有做法是把c作为 解码网络的每一步的输入:
image.png

seq2seq生成模型,主要的思想就是把问题看做一个条件语言模型,

即在已知输入序列和前序生成序列的条件下,最大化下一目标的概率,最终希望得到整个输出序列的生成出现的概率最大。(和语言模型不同在于,多列一个已知的输入序列这个条件,所有我们说是条件语言模型)

P ( Y ∣ X ) = ∏ t = 1 T P ( y t ∣ y 1 : t − 1 , X ) P(Y|X) = \prod_{t=1}^{T}P(y_t|y_{1:t-1},X) P(YX)=t=1TP(yty1:t1,X)

或者我们为了便于计算,取log,把相乘变成相加:

P ( Y ∣ X ) = ∑ t = 1 T P ( y t ∣ y 1 : t − 1 , X ) P(Y|X) = \sum_{t=1}^{T}P(y_t|y_{1:t-1},X) P(YX)=t=1TP(yty1:t1,X)

其中

  • X、Y分别表示输入输出序列
  • T T T表示输出序列的时间序列大小
  • y 1 : t − 1 y_{1:t-1} y1:t1表示输出序列的前t-1个时间点对应的输出。在训练的时候这个是已知的,但是在测试阶段,就是未知的了,需要从开始位置探索

这个公式就是我们的目标,不论模型如何变化,这个目标不变。

1.3 训练和预测

那么训练阶段,使用的是标注数据,在每一步decode阶段,如第t步decode,我们知道输入X,和之前 t − 1 t-1 t1的输出,来预测当前时刻的输出。这个训练过程是”局部“的,完成训练之后,我们得到的也是这样的条件概率分布,在已知输入X,输出的前t个时刻的条件下,当前t时刻输出为 y t y_t yt的概率。

那么在测试和预测阶段呢?我们希望得到的是最大概率的是输出序列。(tenliu)
但是现实是,decode的第一步,我们知道输入X,也知道 y 0 y_0 y0这个初始值,我们通过训练好的模型知道 t = 1 t=1 t=1的概率分布,如何采样输出 y 1 y_1 y1
1、贪心算法吗
2、随机采样
3、集束搜索

(这里不是这次的重点)

2 注意力机制 Attention

2.1 为什么会诞生Attention

上面我们介绍了 encoder-decoder作为一种通用框架,在具体的NLP任务上还不够精细化。比如在上面的模型中encoder编码后的上下文向量c,就会被decoder网络作为输入,而且是在不同时间步中的不加区分的使用C。

这就是不精细化的地方,比如机器翻译,输入的A语言的前几个字往往可能是输出B语言的前几个字(这个例子不是很好,但是比较直观理解问题),所以引入“注意力”,效果会更加精准。

2.2 基本概述

我们以这个结构为例:

image.png

可以看待语义向量C仅仅是encode最后一个时间步的隐藏状态。

现在我们的注意力机制的切入点,就是希望吧encode所有隐藏状态 h 1 . . . h t h_1...h_t h1...ht都用上。

论文NEURAL MACHINE TRANSLATION
BY JOINTLY LEARNING TO ALIGN AND TRANSLATE
。attention在NMT基于seq2seq的改进模型再进行改进,原理如下:

image.png

这里encoder使用的是双向RNN,因为希望得到向前的词的顺序,也希望的代反向的词的顺序,

  • h j → 、 h j ← \stackrel{\rightarrow}{h_j}、\stackrel{\leftarrow}{h_j} h
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值