6.Pointer Network(李宏毅)

提出的动机

Sequence2Sequence(简称seq2seq)模型是RNN的一个重要的应用场景,顾名思义,它实现了把一个序列转换成另外一个序列的功能,并且不要求输入序列和输出序列等长。
传统的seq2seq模型是无法解决输出序列的词汇表会随着输入序列长度的改变而改变的问题的,如寻找凸包等。因为对于这类问题,输出往往是输入集合的子集。基于这种特点,作者考虑能不能找到一种结构类似编程语言中的指针,每个指针对应输入序列的一个元素,从而我们可以直接操作输入序列而不需要特意设定输出词汇表。作者给出的答案是指针网络(Pointer Networks)。我们来看作者给出的一个例子:
在这里插入图片描述
这个图的例子是给定p1到p4四个二维点的坐标,要求找到一个凸包。显然答案是p1->p4->p2->p1。图a是传统seq2seq模型的做法,就是把四个点的坐标作为输入序列输入进去,然后提供一个词汇表:[start, 1, 2, 3, 4, end],最后依据词汇表预测出序列[start, 1, 4, 2, 1, end],缺点作者也提到过了,对于图a的传统seq2seq模型来说,它的输出词汇表已经限定,当输入序列的长度变化的时候(如变为10个点)它根本无法预测大于4的数字。(Encoder可以处理任意长短序列,但是Decoder却不行)图b是作者提出的Pointer Networks,它预测的时候每一步都找当前输入序列中权重最大的那个元素,而由于输出序列完全来自输入序列,它可以适应输入序列的长度变化。

Pointer Network

在这里插入图片描述
可以利用注意力机制(Attention Model)来解这个问题。
输入的部份加入了END,不同于之前课程所说的Attention Model,计算出Attention Weight之后不做加总,而是取最大值(第k个向量的最大值放到位置k),而我们希望输出的值跟我们的目标点愈接近接好,这可以利用Cross-entropy来最佳化。现在这样做的好处是,Decoder的长度是取决于Input,输入100个点,就有100个选择,模型会不断输出,直到END的机率最大才停止。

应用:文章内容总结

Point Network非常适合应用在Summarization,输入一篇文章之后输出这篇文章的Summary。但是文章内可能很多的人名、地名是我们词汇表内所没有的,这时候可以直接输出unkonw。
直观来看,将输入文章取出重要文字就是在做Summary,概念上跟上面所说的Point Network非常相似(凸包)。
传统作法:

将读入的文章做Encoder
将Encdoer的Output经过Decoder吐出Summary。
也可以加入Attention,利用Decoder的输出得到一个Key
利用该Key与Input计算Attention Weight
计算Weight Sum
利用Weight Sum与Decoder的结果计算得到一个Distribution
*这个Distribution是词汇分布,你有10万个词汇就是10万维
从Dsitribution中做Argmax取得一个字词

加入Point Network:

直接从Attention Distribution中做Argmax取得Sample
训练另一个权重Pgen来加权传统作法与Point Network
将加权的Distribution做加总决定输出的字词
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值