機器學習-29-Pointer Network(指針網絡)文章目錄PointerNetwork簡介PointerNetworkApplications-Summarization(應用:文章內容總結)背景介紹使用Pointer-Generator網絡的文本摘要方法賦予seq2seq模型復制能力——CopyNet使用多來源PointerNetwork的產品標題摘要方法Applications-MachineTranslation(應用:機器翻譯)Applications-Chat-bot(應用:對話)總結參考文獻PointerNetwork簡介問題
問題的原始描述是有一堆的點,要找出最外圍的點,使得這些點連起來,能夠包圍所有的點。
這個本來是一個算法可以解決的問題,現在我們用NN來解決:
把所有點的坐標丟到NN里面,要求得到最外圍點的下標。這個問題實際上可以看做是Sequence-to-sequence問題
Sequence2Sequence(簡稱seq2seq)模型是RNN的一個重要的應用場景,顧名思義,它實現了把一個序列轉換成另外一個序列的功能,并且不要求輸入序列和輸出序列等長。
可以看到,輸入的Sequence是所有的點,輸出的Sequence是包圍所有點的點。
這個模型是不行的,因為輸入和輸出的點的數量是不固定的。輸入長度不固定好解決,但是輸出不固定不好弄。
傳統的seq2seq模型是無法解決輸出序列的詞匯表會隨著輸入序列長度的改變而改變的問題的,如尋找凸包等。因為對于這類問題,輸出往往是輸入集合的子集?;谶@種特點,作者考慮能不能找到一種結構類似編程語言中的指針,每個指針對應輸入序列的一個元素,從而我們可以直接操作輸入序列而不需要特意設定輸出詞匯表。作者給出的答案是指針網絡(Pointer Networks)。我們來看作者給出的一個例子:
這個圖的例子是給定p1到p4四個二維點的坐標,要求找到一個凸包。顯然答案是 p 1 ? > p 4 ? > p 2 ? > p 1 p1->p4->p2->p1 p1?>p4?>p2?>p1。圖a是傳統seq2seq模型的做法,就是把四個點的坐標作為輸入序列輸入進去,然后提供一個詞匯表: [ s t a r t , 1 , 2 , 3 , 4 , e n d ] [start, 1, 2, 3, 4, end] [start,1,2,3,4,end],最后依據詞匯表預測出序列 [ s t a r t , 1 , 4 , 2 , 1 , e n d ] [start, 1, 4, 2, 1, end] [start,1,4,2,1,end],缺點作者也提到過了,對于圖a的傳統seq2seq模型來說,它的輸出詞匯表已經限定,當輸入序列的長度變化的時候(如變為10個點)它根本無法預測大于4的數字。(Encoder可以處理任意長短序列,但是Decoder卻不行)圖b是作者提出的Pointer Networks,它預測的時候每一步都找當前輸入序列中權重最大的那個元素,而由于輸出序列完全來自輸入序列,它可以適應輸入序列的長度變化。
解決方法是用上節講過的attention based 模型的思想(What decoder can output depends on the input.)
我們首先來看傳統注意力機制的公式:
其中是encoder的隱狀態,而是decoder的隱狀態,v,W1,W2都是可學習的參數,在得到之后對其執行softmax操作即得到。這里的就是分配給輸入序列的權重,依據該權重求加權和,然后把得到的拼接(或者加和)到decoder的隱狀態上,最后讓decoder部分根據拼接后新的隱狀態進行解碼和預測。
根據傳統的注意力機制,作者想到,所謂的正是針對輸入序列的權重,完全可以把它拿出來作為指向輸入序列的指針,在每次預測一個元素的時候找到輸入序列中權重最大的那個元素不就好了嘛!于是作者就按照這個思路對傳統注意力機制進行了修改和簡化,公式變成了這個樣子:
第一個公式和之前沒有區別,然后第二個公式則是說Pointer Networks直接將softmax之后得到的當成了輸出,讓承擔指向輸入序列特定元素的指針角色。
下面我們看幾個圖來理解一下:
先有一個 z 0 z^0 z0,然后用 z 0 z^0 z0和所有的點做attention 操作,不同的是,得到的結果不做加權求和,而是直接做歸一化,然后去概率最大的那個。例如,上圖中1號點概率為0.5最大。然后把1號點作為輸入生成 z 1 z^1 z1,然后做attention并求分布最大值,得到4號點
以上步驟不斷重復,直到The process stops when “END”has the largest attention weights.
現在這樣做的好處是,Decoder的長度是取決于Input,輸入100個點,就有100個選擇,模型會不斷輸出,直到END的機率最大才停止。
所以總結一下,傳統的帶有注意力機制的seq2seq模型的運行過程是這樣的,先使用encoder部分對輸入序列進行編碼,然后對編碼后的向量做attention,最后使用decoder部分對attention后的向量進行解碼從而得到預測結果。但是作為Pointer Networks,得到預測結果的方式便是輸出一個概率分布,也即所謂的指針。換句話說,傳統帶有注意力機制的seq2seq模型輸出的是針對輸出詞匯表的一個概率分布,而Pointer Networks輸出的則是針對輸入文本序列的概率分布。
其實我們可以發現,因為輸出元素來自輸入元素的特點,Pointer Networks特別適合用來直接復制輸入序列中的某些元素給輸出序列。而事實證明,后來的許多文章也確實是以這種方式使用Pointer Networks的。
所謂文本摘要,就是用一個較短的句子來總結一段文本的主要信息(Summarization is the task of condensing a piece of text to a shorter version that contains the main information from the original.[2])。而目前主流的文本摘要方法分為兩個大的類別:Extractive和Abstractive。顧名思義,Extractive類方法就是從源文本中抽取出若干關鍵詞來表達源文本的語義;而Abstractive類方法則是除了獲取源文件中的一些詞外還要生成一些新的詞匯來輔助表達語義,類似人類做文本摘要的方式。
我們本次要介紹的兩篇文本摘要領域的文章,其中Get To The Point: Summarization with Pointer-Generator Networks結合了Extractive和Abstractive兩種方式來做文本摘要,而另一篇Multi-Source Pointer Network for Product Title Summarization則是偏重Extractive方向。
本部分介紹谷歌聯合斯坦福于17年發表在ACL上的文章:
???? Get To The Point: Summarization with Pointer-Generator Networks
在這篇文章中,作者認為,用于文本摘要的seq2seq模型往往存在兩大缺陷:1、模型容易不準確地再現事實細節,也就是說模型生成的摘要不準確;2、往往會重復,也就是會重復生成一些詞或者句子。而針對這兩種缺陷,作者分別使用Pointer Networks和Coverage技術來解決。
而最終的效果,作者提供了一張圖來做對比:
在這張圖中,基礎的seq2seq模型的預測結果存在許多謬誤的句子,同時如nigeria這樣的單詞反復出現(紅色部分)。這也就印證了作者提出的基礎seq2seq在文本摘要時存在的問題;Pointer-Generator模型,也就是在seq2seq基礎上加上Pointer Networks的模型基本可以做到不出現事實性的錯誤,但是重復預測句子的問題仍然存在(綠色部分);最后,在Pointer-Generator模型上增加Coverage機制,可以看出,這次模型預測出的摘要不僅做到了事實正確,同時避免了重復某些句子的問題(摘要結果來自原文中的藍色部分)。
那么,Pointer-Generator模型以及變體Pointer-Generator+Coverage模型是怎么做的呢,我們具體來看。
首先,我們來看看傳統seq2seq模型圖與Pointer-Generator模型圖之間有什么區別:
傳統seq2seq模型結構圖:
Pointer-Generator模型結構圖:
可以很明顯地看到,傳統seq2seq模型正如我們開始描述的那樣,通過Attention Mechanism將encoder的隱狀態和decoder的隱狀態結合成一個中間向量C,然后使用decoder解碼并預測,最后經由softmax層得到了針對詞匯表的概率分布,從中選取概率最高的作為當前預測結果。
而Pointer-Generator模型除了上述過程,還加入了Pointer Networks的部分。作者對Pointer Networks應用的思想非常直觀,就是用它來復制源文本中的單詞。簡單來說,在每一次預測的時候,通過傳統seq2seq模型的預測(即softmax層的結果)可以得到針對詞匯表的概率分布(綠色柱形圖),然后通過Pointer Networks可以得到針對輸入序列的概率分布(藍色柱形圖),對二者做并集就可以得到結合了輸入文本中詞匯和預測詞匯表的一個概率分布(最終結果的柱形圖中的“2-0”這個詞不在預測詞匯表中,它來自輸入文本),這樣一來模型就有可能直接從輸入文本中復制一些詞到輸出結果中。當然,直接這樣操作未必會有好的結果,因此作者又加入了一個Pgen來作為軟選擇的概率。Pgen的作用可以這樣理解:決定當前預測是直接從源文本中復制一個詞過來還是從詞匯表中生成一個詞出來。
結合公式,Pgen是這樣生成的:
和Attention Mechanism中的的計算方式極其相似對吧?得到Pgen之后,我們就可以這樣計算最終預測出一個詞的概率:
其中Pvocab(w)就是傳統seq2seq模型通過softmax層計算出來的當前詞的概率,而則是使用Pointer Networks計算出的源文本中的該詞的概率,最后通過Pgen這個軟選擇概率結合在一起就得到了最終預測結果。
通過以上過程,作者得到了Pointer-Generator模型,解決了摘要中存在事實性錯誤的問題。然后作者又向前走了一步,就是加入了Coverage機制來解決重復問題。
Coverage機制的思想同樣簡單而直接:每次預測的時候我們都會得到概率分布,這個就反映了模型對源文本各個元素的注意程度(概率越高的部分被認為得到越多的注意力),如果模型在預測時總是注意相同的部分,那么就很有可能會預測出相同的單詞,因此為了防止這種情況發生,我們就強迫模型多去關注之前沒被注意過的角落。公式如下:
這個公式的意思是說,當預測時刻t的單詞時,我們就來看看在過往的t-1個時刻中,源文本被關注程度的分布情況如何,接下來我們用一些方法來做出相應調整。調整的方法是這樣的:
這個公式其實是對傳統Attention公式的調整,也就是在結合encoder隱狀態和decoder隱狀態的基礎上又加入了coverage vector的信息,這樣就把coverage信息結合了進去。
最后,為了鼓勵多把注意力轉向之前不被注意的角落的行為,作者在原本的loss function中加入了針對Coverage機制的loss項:
最后,將coverage loss(由某些超參數λ加權)添加到主要損失函數中,以產生新的復合損失函數:
至此,一個完整的用于克服文章開頭提出的兩個問題的Pointer-Generator+Coverage模型就完成了。
通過這篇文章我們可以看出,雖然很多想法非常簡單而直觀,但是把它們放在合適的位置上就可以讓它們發揮不簡單的力量。
本部分介紹華為和港大合作的一篇文章:
Incorporating Copying Mechanism in Sequence-to-Sequence Learning
并以此作為和上部分介紹的文章的對照(因為那篇文章的作者提到,他們的工作和本文的CopyNet比較相似)。
本文開篇,作者就提出他們的目標是解決seq2seq模型的復制問題,并且提供了一個例子:
在這個例子中,我們要對用戶提出的問題做出回答,顯然,藍色部分根本不需要理解語義,直接復制即可。針對這種情形,作者希望能賦予seq2seq復制的能力。
解決方案其實和前一篇ACL17的文章有些類似。那么為什么先介紹17年的文章,后介紹16年的呢?這是因為ACL17的文章相對較為通俗易懂,我們在讀過它后再來理解ACL16的文章會更容易。
模型包含兩個部分:Generation-Mode用來根據詞匯表生成詞匯,然后Copy-Mode用來直接復制輸入序列中的一些詞(是不是覺得有些眼熟)??匆幌履P徒Y構圖:
在紅色矩形圈出的部分中,左邊正是在詞匯表上的概率分布,而右邊則是在輸入序列上的概率分布,將這兩部分的概率進行加和即得到最終的預測結果。公式如下:
是不是和之前的文章的公式非常相似?不同的是ACL17的文章還計算了一個軟選擇的概率Pgen用來結合生成概率和復制概率,而在這里則是直接加和。
為了更好地理解,作者繪制了一幅詞匯分布圖。圖中X部分是輸入序列的詞匯集合,而V部分代表輸出詞匯集合,當然,通常情況下兩個集合都存在交集,而在X和V并集之外的部分就是未知詞匯:UNK。所以我們用一句話來解釋上面的公式:當某個詞是輸入序列獨有的則該詞的生成概率為0,復制概率不變;若某個詞是輸出詞匯表獨有的則該詞的復制概率為0,而生成概率不變;若某個詞既存在于輸入序列又存在于輸出詞匯表則生成概率和復制概率都不變。最后,將生成概率和復制概率加和得到最終的概率。
那么生成概率和復制概率具體怎么計算呢?來看公式:
看起來有點復雜,但對比一下,其實形式和attention計算公式非常相似。
最后,通過一個實例看到模型的能力還是很強的:
本部分介紹新鮮出爐的阿里團隊18年發表在CIKM上的文章:
???? Multi-Source Pointer Network for Product Title Summarization
這篇文章描述了這樣的一個場景:用戶在移動設備上使用電子商務軟件進行購物的時候,由于移動設備屏幕的限制,往往在列表頁無法看到商品的完整名稱,為了弄清楚這商品具體是什么不得不點開商品的詳細信息頁(即使用戶還沒有決定購買該商品),而這會有損用戶體驗。那么為了讓用戶在列表頁就準確知道該商品的主要信息,就有必要對較長的商品標題做一個摘要,用短短幾個詞準確表達商品信息。
作者認為,商品標題摘要這個特殊問題天然存在對模型的兩個限制:(1)摘要中不能引入不相關信息;(2)摘要中必須保留源文本的關鍵信息(如品牌名和商品名)。作者提出的解決辦法是Multi-Source Pointer Network。
對于第一點限制,作者使用Pointer Networks來直接從源標題中提取詞匯,保證不會引入不相關信息,針對第二點,作者提出了knowledge encoder技術來滿足要求。
模型結構如下:
可以看出,在這個模型中存在兩個輸入,即原本的商品標題以及額外提供的“knowledge”,在這里作者提的“knowledge”主要是商品名稱和品牌名。source encoder從商品標題中抽取單詞信息(綠色概率分布),而knowledge encoder從“knowledge”序列中抽取信息(藍色概率分布),將二者結合得到最終的輸出。
所以用一句話來形容MS-Pointer的功能就是:從兩個信息來源:原始商品標題和知識信息中抽取信息,然后將二者進行綜合得到最后的結果。
然后我們通過公式來看看具體的計算過程:
這三個公式類似之前提到的傳統seq2seq模型中的attention過程,其中hi是source encoder的隱狀態,dt是decoder的隱狀態,而hj’則是knowledge encoder的隱狀態,最后分別得到針對商品標題和knowledge的概率分布:和。
然后我們對二者進行一個綜合,從而得到最終的結果:
可以看到,綜合的方式是引入了概率值。這樣就得到了當前輸出。那么又是怎么得到的呢?如下圖:
這個公式有點類似我們之前討論的Get To The Point: Summarization with Pointer-Generator Networks計算決定復制還是生成的概率Pgen的計算方式。所不同的是,這里不僅結合了當前decoder隱狀態和上一時刻的輸出,另外還結合了兩個encoder提供的向量和。而同樣的,和就是兩個encoder經過編碼之后得到的中間向量:
當然,最后的實驗也驗證了作者提出的方法確實在電子商務的商品標題摘要任務上取得了非常好的效果。
在翻譯的過程中,經常會遇到專有名詞,例如人名、地名??梢杂肞ointer Network直接把對應原文的名詞抽取出來,直接貼過去。
對話的過程也是一樣,如果是普通的seq2seq模型,這里可能學不到,因為庫洛洛這個詞根本不在詞庫里面。所以用Pointer Network直接貼過來最好。
讀過三篇關于Pointer Networks的文章后,相信大家會對Pointer Networks有一個比較直觀的感受。筆者的感受是,由于Pointer Networks天生具備輸出元素來自輸入元素這樣的特點,于是它非常適合用來實現“復制”這個功能。而從本次介紹的兩篇Pointer Networks應用文章來看,很多研究者也確實把它用于復制源文本中的一些詞匯。另外由于摘要這個任務所需的詞匯較多,也非常適合使用復制的方法來復制一些詞。這就造成了目前Pointer Networks成為文本摘要方法中的利器的局面。那么未來Pointer Networks的應用會走向什么方向呢?當然也會和“復制”這個關鍵詞分不開。正如Multi-Source Pointer Network for Product Title Summarization的作者提到的,Pointer Networks其實特別適合用于解決OOV(out of vocabulary)問題,或許它可以在NLP的其他任務中被用來解決OOV問題。至于更多創新應用,我們拭目以待。
[1] Vinyals O, Fortunato M, Jaitly N. Pointer Networks[J]. Computer Science, 2015, 28.
[2] See A, Liu P J, Manning C D. Get To The Point: Summarization with Pointer-Generator Networks[J]. 2017:1073-1083.
[3] Gu J, Lu Z, Li H, et al. Incorporating Copying Mechanism in Sequence-to-Sequence Learning[J]. 2016:1631-1640.
[4] Sun F, Jiang P, Sun H, et al. Multi-Source Pointer Network for Product Title Summarization[J]. 2018.
[5] Sutskever I, Vinyals O, Le Q V. Sequence to Sequence Learning with Neural Networks[J]. 2014, 4:3104-3112.
[6] Bahdanau D, Cho K, Bengio Y. Neural Machine Translation by Jointly Learning to Align and Translate[J]. Computer Science, 2014.
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
股市5000點是哪年?股市5000點的意思是上證指數到5000點,上證指數有3次站上5000點,之一次是2007、第二次是2008年,第三次是2015年。第一次:2007年8月23日,上證指數首次站上5000點,而后一路上行,2007年10月16日達到上證指數目前頂峰6124.04點,2007年11月22日站上5000點后,首次跌破5000點。第二次:2008年1月14日,上證指數更高至5522....
是什么導致了霸王集團停牌?王霸集團創始人萬裕華上訴至香港高等法院,要求法院對王霸集團控股股東財富驛站有限公司進行清算。該股在震蕩開盤一個多小時后繼續下跌,10點半左右股價暴跌近30%。王霸集團停牌時,股價暴跌30.9%,至0.197港元,為8年前上市以來的最低水平。造成這種情況的主要原因是霸王集團核心層的裂變。作為公司的創始人之一萬玉華被稱為霸王的真正策劃者。她出生于云南玉溪市,1984年考入廣州...
光大銀行住房貸款時長多久?住房貸款是光大銀行向借款申請人發放的用于中國大陸境內購買一手住房或者是車庫位用途的貸款產品。貸款的時間還是很長的,如果用于申請房貸的話,最長時間是30年,如果單獨申請車位貸款的話最長是10年。具體的貸款時間根據用戶的個人實際情況以及相關資質決定,貸款期限各不相同。光大銀行一般放款需要多長時間?光大銀行放款時間需要多久,是根據用戶申請的貸款業務來看的。多數情況下,在光大銀行...