pointer networks

Pointer Networks提出了一种新的 neural architecture,可以解决输出序列的大小随着输入序列的大小而变化的问题。文章开头讲到,传统的seq2seq模型以及Attention Mechanism,都只能处理固定size的输入序列。下面主要围绕这Pointer Network展开学习。

首先需要回顾 seq2seq 模型 和 Attention 机制

1 Seq2Seq Model

传统的 seq2seq model 是由两个 RNN 构成,一个作为 Encoder ,另一个作为 Decoder。在输入 input sequence后,由Encoder进行处理,形成一个 Encoder Vector 送到 Decoder,由 Decoder 产生最终结果。

Understanding Encoder-Decoder Sequence to Sequence Model

  1. Encoder 部分由 若干个 RNN 单元构成,每个单元接受前一个单元的 hidden state 和当前 input sequence 中的输入元素,生成新的 hidden state 并且向前传递。\(h_{i}\)表示前面所有输入信息的 hidden state,计算公式为 \(h_{t} = f(W^{hh}h_{t-1} + W^{hx}x_{t})\)
  2. Encoder Vector是Encoder部分的输出,也是最后一个 hidden state,并作为Decoder部分的初始hidden state输入Decoder。
  3. Decoder 部分同样由若干个 RNN 单元构成,每个单元接受前一个单元的 hidden state,生成当前状态下的 hidden state,并预测当前的输出。hidden state的公式为:\(h_{t} = f(W^{hh}h_{t-1})\),预测输出的公式为:\(y_{t} = softmax(W^{s}h_{t})\)

seq2seq模型的一个很重要的好处在于 input sequence 和 output sequence 的大小可以不一致。

但是seq2seq不能处理 output dictionary 的大小会发生变化的任务,因为seq2seq处理一项特定的任务时,其 output dictionary 是不会发生变化的,是一个相对固定的域,但是在Pointer Networks文章中所提到的闭包问题等组合相关问题,它们的 output dictionary 是和 input sequence 密切相关的。比如,给定10个点 {\(P_{1}, P_{2}, ..., P_{10}\)},要找到一个闭包,那结果肯定是这10个点的子集;如果换10个点,那结果就应该是新的10个点的子集。

Pointer networks : What are they?

2 with Attention

上面提到了,seq2seq模型的Encoder部分将input sequence转换成一个vector,也叫context,Decoder根据这个context做输出预测。这样的话,这个context vector就成为模型性能的瓶颈了,模型输出结果的正确性取决于这个context vector能多好地表达input sequence。

引入Attention机制,使得模型专注在input sequence的相关部分。

Attention机制主要在两个地方做了改进

  1. 给Decoder部分传递所有的 hidden state,而不是一个 context vector。

  2. 在Decoder的每一步,为所有的 hidden state 打分,用 softmax 后的分数乘上对应的 hidden state,然后加和形成这一步的 context vector。之后,得到的 context vector 和 Decoder hidden state 做连接,得到新的 vector 传递给 feedforward neural network,最后得到该步的输出。

完整步骤

Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)

然后我们看看论文中对于Attention机制给的公式

  1. 第①个公式相当于就是上面说的打分,得到的\(u_{j}^{i}\)表示的是在 time-step 'i' 时,对Encoder的第 j 个 hidden state 的打分。
  2. 第②个公式:使用 \(softmax\) 函数对打分进行处理。
  3. 第③个公式:将 \(softmax\) 后的分数 \(\times\) Encoder的对应 hidden state,并加和算出这一步的 context vector。

3 Pointer Networks

而 Pointer Network 所做的改变就是,\(softmax\) 函数处理完打分后,选择其中 最大权重 的元素直接作为该步的输出

如图,第一个时间步的输出是 "1",那么在下一个时间步,输入\([x_1,y_1]\)的相应token和上一个时间步的 hidden state 会被传递给网络以计算当前的 hidden state。

这样就使得输出序列完全取决于输入序列,所以可以很好适应输入序列大小的变化。

4 Ptr的应用

abstractive text summarization

首先text summarization分为extractiveabstractive两种,extractive是指通过选择和重组原文中的句子或短语形成的summarization,而abstractive是指更高级的概括,会产生全新的词语,像人写abstract那样。

Get To The Point: Summarization with Pointer-Generator Networks介绍了一种hybrid pointer-generator network+coverage mechanism的架构来处理这一任务,可以很好地解决:① 不能准确再现细节;②不能处理超出词汇表以外的单词;③出现重复。其中hybrid pointer-generator network主要解决①②,而coverage mechanism解决③。

上图主要是hybrid pointer-generator network的结构。之所以是hybrid,是因为这里不是单纯使用pointer,而是将pointer和原先seq2seq-with-attention结合起来的。从图中我们可看到有两个distribution,一个是attention distribution,它就是pointer network中的pointer,反应的是source text中的分布;另一个是vocabulary distribution,这个就是正常seq2seq模型会产生的针对output dictionary的分布。这两个分布是通过\(p_{gen}\)结合起来的,最后形成一个总的distribution,由此产生结果。

coverage mechanism则是插入在产生attention distribution的步骤中,因为它是用来反映source text中单词在结果中的覆盖程度,通过将它加入attention distribution的计算中,起到一个反馈的作用,从而有效减少重复问题。(下式红框部分就是coverage vector作为额外输入传递给attention机制的计算中)


pointer networks
http://example.com/2022/11/07/machine-learning/pointer-networks/
作者
zhc
发布于
2022年11月7日
许可协议