文章目录

  • 1 seq2seq
    • 1.1 为什么诞生seq2seq
    • 1.2 基本概述
    • 1.3 训练和预测
  • 2 注意力机制 Attention
    • 2.1 为什么会诞生Attention
    • 2.2 基本概述
      • 内容向量
      • 权重$a_{i,j}$
      • 得分函数
  • 3 poniter-network 指针网络
    • 3.1 为什么诞生pointer-network
    • 3.2 概述
  • 4 pointer-generator network 指针生成网络
    • 4.1 为什么诞生pointer-generator network
    • 4.2 概述
      • Copy or Gen
      • Coverage 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(Y∣X)=t=1∏T​P(yt​∣y1:t−1​,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(Y∣X)=t=1∑T​P(yt​∣y1:t−1​,X)

其中

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

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

1.3 训练和预测

那么训练阶段,使用的是标注数据,在每一步decode阶段,如第t步decode,我们知道输入X,和之前 t − 1 t-1 t−1的输出,来预测当前时刻的输出。这个训练过程是”局部“的,完成训练之后,我们得到的也是这样的条件概率分布,在已知输入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} hj​→​、hj​←​分别表示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}} si−1​^​、当前时间的输入(即前一时间的输入) y i − 1 y_{i-1} yi−1​,和 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=1∑Tx​​aij​hj​

即 对于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=1Tx​​exp(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(si−1​,hj​)=⎩⎪⎨⎪⎧​si−1T​hj​si−1T​Wa​hj​vaT​tanh(Wa​.Concat(si−1​,hj​))​Dot(内积)GeneralConcat​

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=0∑t−1​ai

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

5 效果展示

5.1 词语缩写生成:

原词 缩写数据如下

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

5.2 文本标题生成

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

从Seq2seq到Pointer-Generator Networks相关推荐

  1. 文本生成任务之营销文本生成(Seq2seq+attention、Pointer Generator Network、Converage、Beam Search、优化技巧、文本增强)

    文章目录 引言 项目任务简介 0. 数据预处理 0.1 将json文件转化成txt文件 0.2 词典处理 0.3 自定义数据集SampleDataset(Dataset类) 0.4 生成Dataloa ...

  2. 【NeurIPS2020】Google点针图网络,Pointer Graph Networks

    关键词:图的搜索空间,图结构推测,点针传递 图神经网络(GNNs)通常应用于静态图,这些静态图可以认为是预先已知的.这种静态输入结构通常完全由机器学习从业者的洞察力决定,对于GNN正在解决的实际任务可 ...

  3. NLP-生成模型-2017-PGNet:Seq2Seq+Attention+Coverage+Copy【Coverage解决解码端重复解码问题;Copy机制解决解码端OOV问题】【抽取式+生成式】

    PGNet模型训练注意事项: Coverage机制要在训练的最后阶段再加入(约占总训练时间的1%),如果从刚开始训练时就加入则反而影响训练效果: Copy机制在源文本的各个单词上的概率分布直接使用At ...

  4. Generative Adversarial Networks: An Overview文献阅读笔记

    Generative Adversarial Networks: An Overview笔记 Abstract Generative adversarial networks (GANs) provi ...

  5. 阿士比亚:搜索团队智能内容生成实践

    一.项目背景 1.1 什么是智能内容生成?         更准确的定义应该是智能文本内容生成,指的是训练机器模型,智能生成单品推荐理由.多商品清单文章一类的文本型内容,显然,与智能内容生成相对的概念 ...

  6. 知识图谱如何助力文本摘要生成

    来源:丁香园大数据 本文约3800字,建议阅读8分钟 本文基于摘要生成,重点考虑如何帮助模型生成特定领域的知识点,并简要介绍一些用于应对无关重复这类退化现象的方案. 引言 文本生成类任务应用场景广泛, ...

  7. 淘宝总知道你要什么?万字讲述智能内容生成实践 | 技术头条

    参加「CTA 核心技术及应用峰会·杭州」,请扫码报名 ↑↑↑ 作者 | 清淞 来源 | 清淞的知乎专栏 专栏地址: https://zhuanlan.zhihu.com/p/33956907 本文主要 ...

  8. 收藏 | Tensorflow实现的深度NLP模型集锦(附资源)

    来源:深度学习与NLP 本文约2000字,建议阅读5分钟. 本文收集整理了一批基于Tensorflow实现的深度学习/机器学习的深度NLP模型. 收集整理了一批基于Tensorflow实现的深度学习/ ...

  9. Tensorflow实现的深度NLP模型集锦(附资源)

    https://www.toutiao.com/a6685688607191073294/ 本文约2000字,建议阅读5分钟. 本文收集整理了一批基于Tensorflow实现的深度学习/机器学习的深度 ...

  10. 论文浅尝 | 问题生成(QG)与答案生成(QA)的结合

    本文转载自公众号:徐阿衡. 梳理一下 MSRA 3 篇关于 QG 的 paper: Two-Stage Synthesis Networks for Transfer Learning in Mach ...

最新文章

  1. DevExpress的GridControl的使用以及怎样添加列和绑定数据源
  2. Oracle日期转换为周,月,季度,半年,年
  3. gradle和maven区别
  4. [NOIp2012]开车旅行
  5. 163 Blog试用有感
  6. 速卖通开放平台调用菜鸟组件实现云打印
  7. 10g gtx 光纤通信测试_光纤通信optisystem实验
  8. GIS技巧100例25-ArcGIS之shp文件修复
  9. php 获取服务器端口,PHP获取当前服务器详细信息
  10. 360浏览器截图快捷键设置
  11. 树莓派3自带了wifi
  12. JAVA习题001--产生多个随机数并使用冒泡排序将数字从小到大排序
  13. 查看树莓派openwrt路由器 CPU 架构
  14. nodejs addon实现回调函数事件
  15. k8s-linux上安装
  16. python bar图 百分比_matplotlib bar()实现百分比堆积柱状图
  17. matlab stats里的f值,MATLAB 回归分析regress,nlinfit,stepwise函数
  18. 包装印刷行业裕同集团易普优APS项目顺利验收!
  19. 儒猿秒杀季!互联网大厂的企业级风控系统项目实战
  20. 什么是长尾理论以及长尾理论的启示

热门文章

  1. CTS/GTS 常见问题解答
  2. 苹果logo_苹果ARM Mac发布会独特Logo亮相 允许品牌在标签旁添加自定义表情_IT业界行情...
  3. 三国战纪-风云再起----回忆当年心中的风云
  4. BP神经网络原理详解
  5. 影响绕线机稳定的一些因素
  6. 苹果M1芯片机器学习向测评:Mini 比RTX 2080Ti 快14%,Air好于Pro
  7. Oracle删除用户、表空间
  8. patch 文件 和 用法
  9. 计算机二级vf笔试题库,计算机二级VF笔试题库..doc
  10. 8年开发工程师,告诉你,程序员接私活的7大平台利器