機器閱讀理解之推理網路(一)End-To-End Memory Networks全文翻譯
作者:Sainbayar Sukhbaatar,Arthur Szlam,Jason Weston,Rob Fergus
原文鏈接:[1503.08895v4] End-To-End Memory Networks
譯者總結:本文其實是機器閱讀推理模型的一種,屬於比較早期,比較經典的論文,在此之後,衍生出了本模型的很多變體,我將在後續進行翻譯。
本文作者將memory network的思想應用到了本模型,即引入外部知識進入memory,與問題進行交互,得到答案後不斷重複此過程,即經歷多次計算步驟,多次推理後,得到預測的答案a^後,計算與真實答案a的交叉熵,通過縮小這個損失來進行梯度下降,實現端到端的訓練。
如下圖:
首先根據原始問題的Word Embedding表達方式以及文檔的原始表達,通過f函數計算文檔單詞的Attention概率,然後g函數利用文章原始表達和Attention信息,計算文檔新的表達方式,這裡一般g函數是加權求和函數。而t函數則根據文檔新的表達方式以及原始問題表達方式,推理出問題和文檔最終的新表達方式,這裡t函數實際上就是通過兩者Word Embedding的逐位相加實現的。t函數的輸出更新下一層網路問題的表達方式。這樣就通過隱式地內部更新文檔和顯示地更新問題的表達方式實現了一次推理過程,後續每層網路推理過程就是反覆重複這個過程,通過多層網路,就實現了不斷通過推理更改文檔和問題的表達方式。
這個作者比較囉嗦,喜歡把一句話來回說幾遍,他論文中除了上面那個閱讀推理機的演算法外,還有的小細節我直接可以做總結:
1、這模型比memory network好,直接端到端,直接訓練,不用人力。
2、使用多計算步驟的方式對於長期依賴的閱讀理解推理問題有奇效。
3、為了減少參數數量,可以將一些訓練矩陣共享。
4、訓練時候先把softmax拿掉,收斂再加上去有奇效
5、為了考慮語言的詞序問題,PE方法比Bow更好。
基本就是這麼多,下面是正文,有我寫錯或者看不明白的,大家可以回復我哦,每問必答。我基本沒有哪天不看知乎。
正文:
End-To-End Memory Networks
摘要:本文提出了一種可以引入外部知識的循環attention神經網路模型。本文的架構是Memory Network的一種,但是是端到端的訓練方式,意味著可以減少人力,在實際應用中更實用。本文同時可以被看做是RNNsearch的一種擴展,在每次輸出結果前都要進行多輪的計算步驟。這個模型的靈活性允許我們將這其應用於問答系統和語言模型。這個模型對於Memory Network來說,需要更少的監督,而對於一些應用來說,模型展現了對於rnn良好的兼容性。本文的關鍵概念在於使用多計算步驟來提升閱讀推理性能。
1、介紹
機器閱讀理解兩大挑戰在於:
(1)如何構建可以有多此計算步驟的模型
(2)如何構建具有長期依賴的模型,使機器不至於忘記很久遠的文本
本文的rnn架構可以在得到輸出結果前引入外部知識,並且是Memory network的一種多次實現重複實現來達到多個計算步驟的方式。Memory nerword並不易於進行反向傳播,需要在每一層進行監督學習,而本文模型可以簡單實現端到端訓練,所以他可以直接應用於各種任務。同時這模型也可以視為RNNsearch的一種變體。我們將在後文用實驗證明長期依賴下的機器推理任務的多次計算步驟對於提高任務性能相當關鍵。
2、方法
模型的單個數據集由文本{x1,x2...,xn},一個query作為q,還有answer a作為輸入文
本將由詞向量編碼後寫入memory中,文本中的每個x1(字元級別或詞級別或句級別的嵌入)經過編碼後將與q進行attention匹配,最後得到文本和問題的統一表示,這個向量接著會經歷多次計算步驟來輸出預測a。
2.1 單層模型
Input memory representation:文本{xi}被編碼成{mi},使用矩陣A(d*v)。query也被編碼成一個內部狀態u,使用和A同樣size的矩陣B。在嵌入的空間中,我們計算u和mi之間的交互關係通過計算他們的內積以及一個softmax。
p是輸出這個向量的可能性。
Output memory representation: 每一個xi都會通過另一個矩陣C得到一個對應的輸出向量ci。這個向量將和之前計算得到的pi依次相乘求和得到向量o(其實就是文本向量)。
Generating the final prediction: 在這個單層樣例中,輸出向量之和o與query編碼後的向量u將通過一個矩陣W(v*d)和一個softmax去得到預測標籤:
單層模型的架構圖如下圖a所示。在訓練過程中,所有的可訓練矩陣(A,B,C,W)將聯合學習去最小化預測的標籤a與真實a之間的交叉熵。訓練使用stochastic gradient descent方式。
2.2
Multiple Layers
現在我們擴展我們的模型到多步驟操作,記憶層按如下方式堆積:
(1)第二層的輸入是上一層k層的ok 和uk 的和(有很多種其他結合方法我們將在之後提及):
(2)每一層都有自己的AK,CK。但是,為了減少參數的數量簡化訓練過程,他們彼此間會建立一些約束關係。
(3)在網路的最頂層,計算標籤a概率時,W要結合頂層的輸入和輸出
我們探索了可訓練矩陣約束的兩種方式:
(1)Adjacent: 輸出嵌入矩陣和上一層的輸入嵌入矩陣相同,比如Ak+1 =Ck。我們同時約束問題預測矩陣去和最後的輸出矩陣相同,比如WT=CK,或者問題嵌入矩陣去和第一層的輸入嵌入矩陣相同,比如B = A1。
(2)Layer-Wise(RNN-like):每一層的輸出輸入嵌入矩陣相同,比如A1 = A2 =... = AK以及C1 =C2 = ... =CK。我們同時發現增加一些線性映射去更新在不同層之間的u相當有用,類似於,uk+1 = Huk + ok。這種映射將自動調整u和o之間的權重。
一個三層的模型版本已經在上圖的b圖中展示。
3、相關工作
4、Synthetic Question and Answering Experiments
我們在synthetic任務上進行實驗。這是一個包含一系列statement,以及一個問題,一個答案的數據集,答案一般是一個單詞(有些是多個單詞)一共有20多種不同形式的推理問題,下面是一些樣例:
對於每一個問題來說,只有一個statement的一小部分子集能提供答案的信息,其他基本可忽略。在Memory Networks中,這個子集將直接提供給模型,而這個任務並不是。因此,這個模型必須學會去推斷哪些句子與問題相關。
正式來說,對於這20個我們提供樣例問題的QA任務來說,每一個都有一個大小為I的句子集合(xi),I<=320;一個問題句子q和一個答案a。讓第i個句子的第j個單詞變成xij,表示成一個長度為v的one-hot向量。對於q和a中的詞我們也做同樣的處理。我們有兩個版本的數據,一個其中每個任務都有1000個訓練問題,另一個更大每個都有10000個問題。
4.1 模型細節
我們的模型基本都採用k=3的計算步驟,並使用adjacent權重分享方案。對於answer是多個單詞的數據,我們考慮了每一種可能的結果,並且記錄他們為單獨的答案辭彙。
Sentence Representation: 我們考慮了兩種句子表示方法,一是bow,但這種方法對於語序這個信息沒有考慮,丟失了太多信息。二是PE方法,考慮了句子詞中的相互影響。(譯者註:因為本文是15年的,這種方法可能比較早,對於此段譯者進行了精簡)
Temporal Encoding: 許多問題需要考慮句子上下文的影響,比如剛剛給的第一個樣例,模型需要理解sam現在處在臥室在他在廚房之後。為瞭解決這問題我們修改了模型向量,變成
TA(i)是TA的第i行,用來編碼暫時的信息,輸出嵌入矩陣也同理變成:
TA和TC都是可訓練矩陣。
Learning time invariance by injecting random noise: 為了正則化TA,我們發現添加一些假的記憶非常有效。在訓練時候我們可以往memory中添加10%的空記憶,即雜訊。我們稱呼這方法為隨機雜訊(RN)。
4.2 訓練細節
10%的數據被分作驗證集,來找到模型的最佳擬合點。學習率是0.01,每25個epoch學習率自動減半,直到到100個epoch。在梯度下降中,沒有採用動量和權重衰減。矩陣採用Gaussian distribution隨機初始化,均值為0,方差為0.1。Batch size是32。採用l2正則。
在一些實驗中,我們試著不使用softmax,使模型除了最後答案預測的sofmax以外,所有的部分都更線性化。當驗證集損失停止下降時,我們再重新加入softmax。我們稱這個過程為線性開始訓練(LS)。在LS訓練中,學習率開始被設為0.005.
在一些任務上,我們的模型會有很大的方差(有時候是,有時候不是,取決於初始化)。
為瞭解決這個問題,我們重複訓練十次用不同的初始化,然後選擇最低訓練誤差那個。
4.3 Baselines
4.4 Results
我們用瞭如下一系列方案
(1) BoW vs Position Encoding (PE) sentence representation
(2) 20個任務獨立訓練vs20個任務聯合訓練,聯合訓練d=20,獨立訓練d=50。
(3) LS vs softmax一開始便參與訓練
(4) 改變計算步驟從1到3
下表展示了所有結果,是10k條訓練數據的平均性能,我們發現了幾個有趣的點:
(1)最好的MemN2N模型接近監督模型。
(2)所有我們提議的模型的變種都擊敗了弱監督的baseline方法
(3)PE性能強於Bow
(4)LS方法似乎可以幫助避免local minima
(5)加入雜訊(RN),對於訓練有小但是持續的幫助,尤其是訓練集小樣本時
(6)聯合訓練性能更好
(7)最重要的,更多計算步驟可以提升性能。
5、語言模型實驗
6、結論和未來的工作
在本文我們展示了一種帶有明確的記憶和一個循環attention機制的神經網路模型,可以使用反向傳播演算法來解決問答問題和語言模型問題。相比於Memory network本模型更實用於各項任務。我們的模型可以達到其他模型相同甚至更好的表現。在語言模型任務中,他比rnns和lstms的性能更好,並且計算步驟(hops)越多,性能越好。
但是,仍然有很大未來的工作需要去完成。我們的模型始終無法匹敵在強監督情況下的memory network模型,並且在1k 大小的QA任務上表現不好。此外,smooth lookups不能在一些很大的memory需要的地方scale的很好。
來自專欄
深度學習經典論文翻譯(nlp方向)推薦閱讀: