从Seq2seq到Pointer-Generator Networks

    xiaoxiao2025-04-20  7

    文章目录

    1 seq2seq1.1 为什么诞生seq2seq1.2 基本概述1.3 训练和预测 2 注意力机制 Attention2.1 为什么会诞生Attention2.2 基本概述内容向量权重$a_{i,j}$得分函数 3 poniter-network 指针网络3.1 为什么诞生pointer-network3.2 概述 4 pointer-generator network 指针生成网络4.1 为什么诞生pointer-generator network4.2 概述Copy or GenCoverage Mechanism 5 效果展示5.1 词语缩写生成:5.2 文本标题生成

    文本介绍 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可以作为解码网络的初始状态输入;

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

    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 基本概述

    我们以这个结构为例:

    可以看待语义向量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的改进模型再进行改进,原理如下:

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

    h j → 、 h j ← \stackrel{\rightarrow}{h_j}、\stackrel{\leftarrow}{h_j} hjhj分别表示encode阶段,时间步长j的前向隐藏状态、后向隐藏状态。 h j h_j hj 表示encode阶段时间步长j的隐藏状态,由前向和后向隐藏状态连接组成, h j = [ h j → : h j ← ] h_j = [\stackrel{\rightarrow}{h_j} : \stackrel{\leftarrow}{h_j}] hj=[hj:hj] T x T_x Tx表示输入序列长度 s t s_t st 表示decode网络的隐藏状态,便于和encode区分。并且这里是没有引入注意力机制的隐藏状态 s t ^ \hat{s_t} st^ 表示在引入注意力机制之后,decode网络的隐藏状态。

    现在decode网络,时间步长i的隐藏状态 s i ^ \hat{s_i} si^,由前一时间步长的隐藏状态 s i − 1 ^ \hat{s_{i-1}} si1^、当前时间的输入(即前一时间的输入) y i − 1 y_{i-1} yi1,和 c i c_i ci计算得到。

    内容向量

    其中 c i c_i ci就是由注意力机制得到的内容向量。

    c i = ∑ j = 1 T x a i j h j c_i = \sum_{j=1}^{T_x} a_{ij}h_j ci=j=1Txaijhj

    即 对于decoder的时间步长i的隐藏状态 s i s_i si,的输入语义向量 c i c_i ci等于 encoder网络所有的隐藏状态 h 1 . . . h j . . . h T x h_1...h_j...h_{T_x} h1...hj...hTx与其权重 a i j a_{ij} aij的乘积之和。 a i j a_{ij} aij表示 decoder网络的第i时刻受到encode网络第j时刻的影响,或者说表示第i时刻的输出受到输入的第j时刻的影响。

    权重 a i , j a_{i,j} ai,j

    那么这个权重 a i j a_{ij} aij如何计算呢

    a i j = e x p ( e i j ) ∑ k = 1 T x e x p ( e i k ) a_{ij} = \frac{exp(e_{ij})}{\sum_{k=1}^{T_x}exp(e_{ik})} aij=k=1Txexp(eik)exp(eij)

    其中, e i j e_{ij} eij是得分函数,

    得分函数

    这个有如下几种计算方法: e i j = s c o r e ( s i − 1 , h j ) = { s i − 1 T h j D o t ( 内 积 ) s i − 1 T W a h j G e n e r a l v a T t a n h ( W a . C o n c a t ( s i − 1 , h j ) ) C o n c a t e_{ij} = score(s_{i-1}, h_j) = \begin{cases} s_{i-1}^Th_j & Dot(内积) \\ s_{i-1}^T W_a h_j & General \\ v_a^Ttanh(W_a. Concat(s_{i-1}, h_j)) & Concat\end{cases} eij=score(si1,hj)=si1Thjsi1TWahjvaTtanh(Wa.Concat(si1,hj))DotGeneralConcat

    3 poniter-network 指针网络

    3.1 为什么诞生pointer-network

    普通的seq2seq输出长度是固定的,就是词典的大小。 1、如果输入中有未登录词,未登录词不会出现在输出中,如果输入中 2、普通seq2seq无法解决这样一类问题:输出验证依赖输入的问题,

    这类问题,比如凸优化,求解凸包,即输入一系列的点(p1,p2…p7),求解可以把所有点包围起来的外围点。

    这里的输出应该是{P2,P4,P3,P5,P6,P7,P2},所有的输出都是来自于当前的输入。

    3.2 概述

    Pointer Network(ptr-net 指针网络)是seq2seq模型的一个变种。他们不是把一个序列转换成另一个序列, 而是产生一系列指向输入序列元素的指针。或者说是对输入元素顺序的再次排列,最基础的用法是对可变长度序列或集合的元素进行排序。

    相比于 基于注意力机制的seq2seq,pointer-network其实是简化了注意力机制,

    pointer-network在得到得分函数 e i j e_{ij} eij,softmax之后得到 a i j a_{ij} aij就OK了, a i j a_{ij} aij就是一系列指向输入元素的指针!!

    为什么这么说:记得 a i j a_{ij} aij表示第i时刻的输出受到输入的第j时刻的影响大小。

    假设输入长度是 T x T_x Tx,那么每一个输出时刻i的 a i a_i ai都是一个 T x T_x Tx长度的概率向量,找到其中最大概率,如果这个最大概率的下标是j,那这不就是相当与一个指针,输出的第i时间步长指向了输入的第j时间步长。

    4 pointer-generator network 指针生成网络

    4.1 为什么诞生pointer-generator network

    自动摘要任务中,我们希望摘要的绝大部分来自于当前的原文,也不是100%的。 Pointer-generator network设计最初就是用来 自动摘要 的!

    论文《Get To The Point: Summarization with Pointer-Generator Networks》 下载地址:https://arxiv.org/pdf/1704.04368.pdf 源码地址:abisee/pointer-generator

    并且论文中另个一创新点是:应用了coverage mechanism来解决了seq2seq的通病–repitition。

    4.2 概述

    所以Pointer-generator network可以理解为是一个混合了Baseline seq2seq 和 PointerNetwork的网络。

    Copy or Gen

    既具有PointerNetwork的Copy能力; 也具有Baseline seq2seq的生成能力(即输出可以不完全来自输入)。 那么输出中的某个位置是生成还是复制?取决一个参数 p g e n p_{gen} pgen

    摘自原论文,可以看到, h t ∗ h_t^* ht就是decode阶段时间步长t的语义向量(之前我们表示为 c t c_t ct), s t s_t st就是decoder阶段时间步长t的隐藏状态, x t x_t xt是decode的输入,其余 w h ∗ , w s , w x , b p t r w_{h^*},w_s,w_x,b_{ptr} wh,ws,wx,bptr都是要学习的参数。

    那么这个时刻的预测词概率:

    Coverage Mechanism

    如何避免重复生成文本?

    运用了Coverage Mechanism来解决重复生成文本的问题。

    具体实现上,就是把之前时间步长的注意力权重加到一起,得到一个覆盖向量(coverage vector c t c^t ct),然后用这样的先前的注意力权重 来影响当前的注意力权重的决策,就可以避免在同一位置重复。

    c t = ∑ i = 0 t − 1 a i c^t = \sum_{i=0}^{t-1} a^i ct=i=0t1ai

    用这个覆盖向量,计算得分函数

    5 效果展示

    5.1 词语缩写生成:

    原词 缩写数据如下

    夏汾高速公路 夏汾高速 农村普通中小学校建设标准建标 中小学校建设标准建标 一用就灵的中医保健操 一用就灵的保健操 上海梅山矿业有限公司 上海梅山矿业 学俄语 语学 长冲凹村 长冲凹 电子点菜系统 电点点菜 深圳市南山区残疾人联合会 南山区残疾人联合会 时尚乡村女孩 时尚村女 脊椎动物 脊椎动物 扬州大学外国语学院 扬大外语学院 江西省防震减灾条例 江西防震减灾条例 远东第一监狱 远东一监 华硕A53XI243SV-SL 华硕

    5.2 文本标题生成

    原文标题最近高温持续,青岛天泰体育场周围,有一位8岁男孩头顶烈日叫卖冰棍。男孩叫宋新磊,父亲病逝,他与姐姐和母亲相依为命。为了给自己挣学费,为减轻家里的负担,他小小肩膀扛起了生活的重担……(齐鲁网)http://t.cn/RKJwT4r 父亲病逝,8岁男孩头顶烈日叫卖冰棍[悲伤]8岁男孩头顶烈日叫卖冰棍暑期到来,又到学车的高峰期了!本来信心满满准备驾考的你却发现,停车居然比开车还要难!角度把握不好?不同样式的车库,不知道如何驾驭?侧方位停车、斜方位停车、倒车入库、后视镜调节方法……超实用倒车停车技能↓↓助你一把入库,转发学起来! 一把入库!手把手教你正确停车[推荐]超实用倒车停车技能小丽今年25岁,大学毕业后她开了一家烘焙店。创业初期她起早贪黑地忙碌,饮食不规律,经常夜宵,“几年下来几乎吃遍了南京各大烧烤店”。半年前她觉得胃痛胃胀,一开始也没在意,直到上个月胃痛加重,出现呕血,到医院进行胃镜检查才发现得了胃癌。@金陵晚报 起早贪黑爱吃烧烤 25岁女孩得了胃癌[衰]大学毕业后开烘焙店
    最新回复(0)