Pointer Network指针网络

1. Why Pointer Network

Pointer network 主要用在解决组合优化类问题(TSP, Convex Hull等等),实际上是Sequence to Sequence learning中encoder RNN和decoder RNN的扩展。

传统的seq2seq模型是无法解决输出序列的词汇表会随着输入序列长度的改变而改变的问题的,如寻找凸包等。因为对于这类问题,输出往往是输入集合的子集

在传统的NLP问题中,采用Sequence to Sequence learning的方式去解决翻译问题,其输出向量的长度往往是字典的长度,而字典长度是事先已经订好了的(比如英语单词字典就定n=8000个单词)。而在组合优化类问题中,比如TSP问题,输入是城市的坐标序列,输出也是城市的坐标序列,而每次求解的TSP问题城市规模n是不固定的,如何解决输出字典维度可变的问题?
在这里插入图片描述

我们再来看一下凸包问题,如上图所示。这个图的例子是给定p1到p4四个二维点的坐标,要求找到一个凸包。显然答案是p1->p4->p2->p1。图a是传统seq2seq模型的做法,就是把四个点的坐标作为输入序列输入进去,然后提供一个词汇表:[start, 1, 2, 3, 4, end],最后依据词汇表预测出序列[start, 1, 4, 2, 1, end],缺点作者也提到过了,对于图a的传统seq2seq模型来说,它的输出词汇表已经限定,当输入序列的长度变化的时候(如变为10个点)它根本无法预测大于4的数字。

对于向上述的TSP问题和凸包问题,那么Pointer Network指针网络就是用来解决这个问题的。所以总结一下为什么需要PN,传统的seq2seq模型是无法解决输出序列的词汇表会随着输入序列长度的改变而改变的问题的。如寻找凸包等。因为对于这类问题,输出往往是输入集合的子集(输出严重依赖输入)。基于这种特点,作者考虑能不能找到一种结构类似编程语言中的指针,每个指针对应输入序列的一个元素,从而我们可以直接操作输入序列而不需要特意设定输出词汇表。

本质上是解决一种OOV问题。



2. Structure of Pointer Network

根据传统的注意力机制,作者想到,所谓的正是针对输入序列的权重,完全可以把它拿出来作为指向输入序列的指针,在每次预测一个元素的时候找到输入序列中权重最大的那个元素不就好了嘛!于是作者就按照这个思路对传统注意力机制进行了修改和简化,公式和框架图变成了这个样子:

其中 e j e_j ej 是encoder的在时间序列 j j j次的隐藏层输出, d i d_i di是decoder在时间序列 i i i次的隐藏状态输出。,对 u i u^i ui直接求softmax就可以得到输出字典的概率向量,其输出的向量维度和输入保持一致。其中 W 1 , W 2 , v t W_1,W_2,v_t W1,W2,vt 均为固定维度的参数,可被训练出来。

换句话说,传统带有注意力机制的seq2seq模型输出的是针对输出词汇表的一个概率分布,而Pointer Networks输出的则是针对输入文本序列的概率分布。其实我们可以发现,因为输出元素来自输入元素的特点,Pointer Networks特别适合用来直接复制输入序列中的某些元素给输出序列。



3. How to process language generation by incorporating Pointer Network

seq2seq模型生成风格自由,但往往存在两大缺陷:1、模型容易不准确地再现事实细节,也就是说模型生成的摘要不准确;2、往往会重复,也就是会重复生成一些词或者句子。
指针网络相对可控,信息来源于输入的信息范围,是天生的复制粘贴利器。但是他也有个弊端,就是说无法生成输入范围以外的词汇,这样就有很大的限制。
idea:generate combining language model with Pointer Networks

3.1 Get To The Point: Summarization with Pointer-Generator Networks

总体框架如下图所示:

在每一次预测的时候,通过传统seq2seq模型的预测(即softmax层的结果)可以得到针对词汇表的概率分布(图7中绿色柱形图),然后通过Pointer Networks可以得到针对输入序列的概率分布(图7中蓝色柱形图),对二者做并集就可以得到结合了输入文本中词汇和预测词汇表的一个概率分布(最终结果的柱形图中的“2-0”这个词不在预测词汇表中,它来自输入文本),这样一来模型就有可能直接从输入文本中复制一些词到输出结果中。当然,直接这样操作未必会有好的结果,因此作者又加入了一个Pgen来作为软选择的概率。Pgen的作用可以这样理解:决定当前预测是直接从源文本中复制一个词过来还是从词汇表中生成一个词出来。

这里再解释一下pointer-network,这里以所有出现在input的词作为此时的小词表,对求attention进行了变化,上面图中可以看到,在attention模型中,是将softmax的结果作为权重,与hidden states求了加权和作为context vector来预测输出;而pointer中没有进行求和,是将softmax的结果作为预测input 中最有可能输出的元素。

具体来说,假如整个的词表有1000个词,输入有x1,x10,其中x1-x8是在这1000个词中的词,x9,x10不在词表中,那么单纯的generate模型就会认为x9,x10是unk,只考虑在词表中的1000个词的概率;而在pointer-generator中相当于计算的是x1-x10这10个位置上的词应当被输出的概率。然后将输入中的词映射到voc中

最终输出的时候,就像上图的是结合了pgen和1-pgen,来最终考虑输出的是哪个词(概率最大的)

但是这样也不会完全没有UNK,可能词表里没有,input里也没有。



3.2 Product abstract generation through pointer network

这篇文章描述了这样的一个场景:用户在移动设备上使用电子商务软件进行购物的时候,由于移动设备屏幕的限制,往往在列表页无法看到商品的完整名称,为了弄清楚这商品具体是什么不得不点开商品的详细信息页(即使用户还没有决定购买该商品),而这会有损用户体验(如图19)。那么为了让用户在列表页就准确知道该商品的主要信息,就有必要对较长的商品标题做一个摘要,用短短几个词准确表达商品信息。
在这里插入图片描述

可以看出,在这个模型中存在两个输入,即原本的商品标题以及额外提供的“knowledge”,在这里作者提供的“knowledge”主要是商品名称和品牌名。source encoder从商品标题中抽取单词信息(绿色概率分布),而knowledge encoder从“knowledge”序列中抽取信息(蓝色概率分布),将二者结合得到最终的输出。

所以用一句话来形容MS-Pointer的功能就是:从两个信息来源:商品标题和知识信息中抽取信息,然后将二者进行综合得到最后的结果。
在这里插入图片描述
可以看到,综合的方式是引入了概率值。这样就得到了当前输出。那么又是怎么得到的呢?公式如下:
在这里插入图片描述

在这里插入图片描述

3.3 CopyNet

在这个例子中,我们要对用户提出的问题做出回答,显然,蓝色部分根本不需要理解语义,直接复制即可。针对这种情形,作者希望能赋予seq2seq复制的能力。

模型包含两个部分:Generation-Mode用来根据词汇表生成词汇,然后Copy-Mode用来直接复制输入序列中的一些词。模型结构图:
在这里插入图片描述
在红色矩形圈出的部分中,左边正是在词汇表上的概率分布,而右边则是在输入序列上的概率分布,将这两部分的概率进行加和即得到最终的预测结果。公式如下:
在这里插入图片描述
在decode的时候有三点特别之处:

  1. Prediction:基于两种混合模式的概率模型来预测单词。包括生成模式和copy模式,copy模式是直接从源端pick单词到目标端。
  2. State_update:t-1时刻的单词被用来更新t时刻的状态,但是copynet不仅用t-1时刻单词的word_embedding,也用t-1时刻的单词在M中隐藏层状态的具体位置有关。
  3. Reading M:除了attentive read to M,Copynet 也用selective read to M,这就使它成为一个强大的混合体,既考虑到了内容,也考虑到了位置。

为了更好地理解,作者绘制了一幅词汇分布图。图中X部分是输入序列的词汇集合,而V部分代表输出词汇集合,当然,通常情况下两个集合都存在交集,而在X和V并集之外的部分就是未知词汇:UNK。所以我们用一句话来解释上面的公式:当某个词是输入序列独有的则该词的生成概率为0,复制概率不变;若某个词是输出词汇表独有的则该词的复制概率为0,而生成概率不变;若某个词既存在于输入序列又存在于输出词汇表则生成概率和复制概率都不变。最后,将生成概率和复制概率加和得到最终的概率。
在这里插入图片描述





评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值