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做加總決定輸出的字詞
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章