MRC 經典模型與技術
未完待續
目錄
- MRC 經典模型與技術
- 預備知識
- 文章和問題表示
- 經典Attention
- Seg2Seg
- Normalization
- match-LSTM
- 指針網絡 Pointer Network
- Gated
- Highway Network
- Highway Maxout Networks (HMN)
- Depthwise Separable Convolution
- 記憶網絡(以後補,不太會)
- 一維匹配模型
- Attentive Reader
- Attention Sum Reader(ASReader)
- Stanford Attentive Reader(Stanford AR)
- Gated-Attention Reader(GA Reader)
- 二維匹配模型
- Impatient Reader
- Consensus Attention(CAReader)
- Attention-over-Attention(AoA Reader)
- match-LSTM and Answering Point(經典)
- BiDAF (Bidirectional Attention Flow)
- DCN (Dynamic Co-Attention Networks)
- R-NET(還是不太懂)
- QANet(集大成者)
- 多倫迭代策略
- 全文參考
預備知識
文章和問題表示
文檔表示
模型一:RNN表示
模型二:基於注意力的文檔的表示
對於文檔向量的每一個隱藏維度,乘以一個權重係數,這個係數代表了單詞對於整個文章及其上下文的最終語義表達的重要程度,將每個單詞的係數調整後的隱層狀態累加即可得到文章的Word Embedding語義表達。
權重係數可以用Attention機制計算出來。
問題的表示
模型一:RNN表示
模型二:基於注意力的問題表示(同上文文檔表示)
模型三:雙向RNN頭尾部隱層節點的表示
兩個時刻的尾部隱層節點融合了整個句子語義,拼接起來可以表示問題的整體語義。
這種方式也可以用來表達文檔,但是一般不會這麼用,因爲文檔比較長,會引起信息丟失。
經典Attention
上圖是BahdanauAttention,passage中的第t個詞,會根據所有Q的隱向量、P中第t-1時刻的上下文向量來確定對Q每個token的權重。圖中Y可以理解爲Passage,X理解爲question。如果預測的話,將X理解爲Passage,Y理解爲Answer(也就是當前時刻答案與所有passage向量與上一時刻的a有關)。
也就是說,attention機制的query可以是某個詞(比如Query裏的某個詞),也可以是一個上下文(比如seg2seg裏的問題上下文)。
Seg2Seg
RNN Seg2Seg
使用到了注意力機制,預測每個時刻的輸出用到的上下文是與當前輸出有關的上下文。
卷積Seg2Seg
2017年Facebook發表了NLP領域重要論文《Convolutional Sequence to Sequence Learning》
Positional Encoding
Normalization
Batch normalization
Batch normalization每個batch裏面的很接近的樣本,都歸一成0均值1方差。
隨着在神經網絡訓練深度加深,其整體分佈逐漸發生偏移或變動,導致後向傳播時神經網絡梯度消失,深度網絡收斂越來越慢。Batch normalization把越來越偏的分佈強行正態分佈,梯度變大,減緩梯度消失問題。因此,加Batch normalization是爲了使深度神經網絡訓練速度加快。
LayerNorm
比如transformer Encoder層每個部分的輸入都用到了LayerNorm,實現近似獨立同分布。
隨着神經網絡的加深,每一層的輸出到下一層的輸入,會出現分佈偏差越來越大。最後輸出的target層的分佈和輸入的分佈差距很大。
match-LSTM
前提premise,假說hypothesis,得到兩者的表徵。
得到兩個表徵之後,同樣是 Attention 操作,得到 hypothesis 對於 premise 每個詞注意力加權輸出ak,將注意力加權輸出與 hypothesis 對應位置詞的隱藏層拼接,mk = [ak; htk],然後通過一個長度爲N的LSTM,得到hypothesis整合關於premise的注意力的隱藏表徵,然後用最後一個時刻的隱層向量預測結果。
指針網絡 Pointer Network
比較好的講解:https://www.jianshu.com/p/bff3a19c59be
是對attention機制的簡化,seg2seq模型有“輸出嚴重依賴輸入”的缺點(因此會很依賴輸入的長度)。指針網絡可以克服這種缺點,使用注意力機制作爲指針來選擇輸入序列的一個成員來作爲輸出序列(這就不需要給定詞彙表,只需要選擇輸入序列中權重最大的元素)。界定一下,詞彙表和輸入序列裏的詞並不是完全包含的。
Pointer Net不像seq2seq將輸入信息通過encoder整合成context vector,也就是說沒有attention的最後一個公式,即將權重關係a和隱式狀態整合爲context vector,而是直接進行通過softmax,指向輸入序列選擇中最有可能是輸出的元素。
ptr-net輸出序列可以適應輸入序列長度變化。Pointer Networks天生具備輸出元素來自輸入元素這樣的特點,於是它非常適合用來實現“複製”這個功能,很多研究者也確實把它用於複製源文本中的一些詞彙。
attention vs ptr-net總結:傳統attention+seq2seq模型輸出的是針對詞彙表的概率分佈,而ptr-net輸出的是針對輸入文本序列的概率分佈。
Gated
通過GRU來理解門
門我的理解就是通過激活函數(比如sigmoid,它的數值範圍是0 ~ 1,tanh激活函數數值範圍是-1~1),來充當門信號。如GRU的兩個門控(遺忘門、更新門控)。
如z門控信號範圍爲0~1,門控信號越接近1,代表記憶下來的數據越多,反之遺忘的越多。然後由這些門控,構成更新表達式。
GRU很聰明的一點就在於,使用了同一個門控z就同時可以進行遺忘和選擇記憶。
Highway Network
基於門機制,類似於一個Residual,是爲了降低信息在傳輸過程中的損失,y=αf(x)+(1-α)x。
核心思想是將網絡前一層的輸出,跳着連到更後面的層(Skip Connection),使得模型的深度可以達到上百層。Highway Network使得所有原始信息部分激活進入下一層、部分不激活直接進入下一層,保留了更多原始信息。同時反向傳播的時候,可以避免梯度消失。
Highway 結構對詞向量以及字符向量的整合
Highway Maxout Networks (HMN)
在傳統的MLP(多層感知機)上加入了兩個改進,引入了Highway Network中的Skip Connection以及使用Maxout作爲激活函數。
上圖中,待預測位置ut和r拼接,然後輸入到把maxout作爲激活函數的三層MLP中,第一層的MLP的輸出也傳給了第三層,這裏用到了skip connection。
Maxout 是一種可學習的激活函數,其思想在於對每一個神經元的輸出,都通過k組可學習的參數進行加權變換,得到k個輸出,對k個輸出取最大值作爲最終輸出。該方法理論上可以學習到任何類型的激活函數,缺點是引入了更多的參數,增加了訓練成本和過擬合的可能。
Depthwise Separable Convolution
佔位
記憶網絡(以後補,不太會)
參考:https://blog.csdn.net/u014248127/article/details/84894739
Memory Networks (MemNN)
參考:https://zhuanlan.zhihu.com/p/29590286
動機:傳統的深度學習模型(RNN、LSTM、GRU等)使用hidden states或者Attention機制作爲他們的記憶功能,但是這種方法產生的記憶太小了,無法精確記錄一段話中所表達的全部內容,也就是在將輸入編碼成dense vectors的時候丟失了很多信息,所以就提出了一種可讀寫的外部記憶模塊,並將其和inference組件聯合訓練,最終得到一個可以被靈活操作的記憶模塊。
模型主要包含一系列的記憶單元(可以看成是一個數組,每個元素保存一句話的記憶)和I,G,O,R四個模塊。
-
I: (input feature map):用於將輸入轉化爲網絡裏內在的向量。(可以將輸入編碼爲內部特徵表示,例如,從文本轉換爲稀疏或密集特徵向量,得到I(x) )
-
G: (generalization):更新記憶。也就是根據I(x)對memory進行讀寫操作。最簡單的G形式是將I(x)存儲在 memory slots中。
-
O: (output feature map):結合輸入和記憶,把合適的記憶o抽取出來,返回一個向量。o= O(I(x), m)
-
R: (response):將向量o decode爲所需的格式,比如文字或者answer。r=R(o)
缺點:沒有端到端思想的訓練。
End-To-End Memory Networks
- 單詞推理,圖a
- 多次推理,圖b
Key-Value Memory Networks
參考:https://blog.csdn.net/liuchonge/article/details/78143756
從上圖可以看出來key embedding和value embedding兩個模塊跟end-to-end模型裏面input memory和Output memory兩個模塊是相同的,不過這裏記憶是使用key和value進行表示,而且每個hop之間有R矩陣對輸入進行線性映射的操作。此外,求每個問題會進行一個key hashing的預處理操作,從knowledge source裏面選擇出與之相關的記憶,然後在進行模型的訓練。在這裏,所有的記憶都被存儲在Key-Value memory中,key負責尋址lookup,也就是對memory與Question的相關程度進行評分,而value則負責reading,也就是對記憶的值進行加權求和得到輸出。二者各自負責自己的功能,相互配合,使得QA過程的記憶和推理各司其職。
Dynamic Memory Network
DMN網絡模型包含輸入、問題、情景記憶、回答四個模塊。
模型首先會計算輸入和問題的向量表示,然後根據問題觸發Attention機制,使用門控的方法選擇出跟問題相關的輸入。然後情景記憶模塊會結合相關的輸入和問題進行迭代生成記憶,並且生成一個答案的向量表示。
Episodic Memory Module,這部分主要有三部分:注意力機制、記憶更新、多次迭代。
這裏使用一個門控函數作爲Attention;計算出門控函數的值之後,根據其大小對記憶進行更新,更新方法就是GRU算出的記憶乘以門控值,再加上原始記憶乘以(1-門控值);每次迭代關注不同的內容,這樣傳遞推導,檢索不同的信息。
Answer Module:根據memory模塊最後的輸出向量(將其作爲初始隱層狀態),然後輸入使用的是問題和上一時刻的輸出值連接起來(每個時刻都是用q向量)。並使用交叉熵損失函數作爲loss進行反向傳播訓練。
Gated End-To-End Memory Networks
一維匹配模型
一維匹配模型之間的最大區別主要是匹配函數的定義不同。
核心
用雙向RNN的頭尾部節點RNN隱層狀態拼接作爲問題的語義表示,通過某種匹配函數F來計算文章中每個單詞Di語義和問題Q整體語義的匹配程度,再對每個單詞的匹配函數值通過SoftMax函數進行歸一化。
整個過程可以理解爲Attention操作,相同單詞Attention概率值累加,作爲答案可能性。
匹配函數:前向神經網絡的形式,
Attentive Reader
非累加的模式進行預測單詞。
數據集:CNN, Daily Mail
Attention Sum Reader(ASReader)
匹配函數:點積,
預測判斷:Pointer Sum Attention機制,即累加模式(同一個詞的attention在softmax之後累加),得分最高的是答案。這裏受到了Pointer Networks(Ptr-Nets)的啓發。
數據集:CNN, Daily Mail,CBT
Stanford Attentive Reader(Stanford AR)
Stanford Attentive Reader模型encoding步驟與AS Reader模型encoding步驟基本一致。
匹配函數:雙線性(Bilinear)函數,,比用點積更靈活。
預測:直接用注意力加權輸出作爲進行分類預測。
數據集:CNN, Daily Mail
Gated-Attention Reader(GA Reader)
參考:https://blog.csdn.net/sinat_34611224/article/details/82899163
-
Lookup Table就是輸出tokens的向量表示,用全連接訓練詞向量。
E是Document每個詞項過Bi-GRU後每個隱藏層狀態 ,q是每個詞項過Bi-GRU後每個隱藏層狀態串起來
-
Gated-Attention是E, q輸入進行兩兩相乘,得到下一層的輸入X;
-
Multi-hop結構:帶着問題重讀文章k次,從而增量式地重新得到tokens的表示,可以進一步幫助鎖定答案。第k層的時候,公式是:
sK=exp<qK, eK>/∑exp<qK, eK>,得到概率最大的answer是最終輸出
累加模式
數據集:CNN, Daily Mail
二維匹配模型
在計算問題和文章匹配的步驟中,就形成了||D||*||Q||的二維矩陣,就是說文章中任意單詞Di和問題中的任意單詞Qj都應用匹配函數來形成矩陣的位置的值。
二維矩陣,所以可以有多種Attention計算機制。
- 按行計算表達的是文檔單詞Di和問題中各個單詞的語義相似程度
- 按列計算表達的是問題單詞Qi和文檔序列中各個單詞的語義相似程度
Impatient Reader
像是一維和二維匹配模型的結合
將Q中的每個單詞當做單獨的query,從而計算該單詞對於文檔中每個詞的注意力加權表徵(常用!文檔這裏是模型二),非線性變換將所有的 r (二維匹配)進行反覆累積(單詞的重閱讀能力)。
將最後一個文檔表示r(文檔模型一)和問題表示u(問題的模型三),一維匹配,進行非線性組合用於預測答案
數據集:CNN, Daily Mail
Consensus Attention(CAReader)
Attention計算方式:按列計算,然後對每一行文檔單詞對應的針對問題中每個單詞的Attention向量,採取一些啓發規則的方式比如取行向量中最大值或者平均值等方式獲得文檔每個單詞對應的概率值。
Attention-over-Attention(AoA Reader)
匹配函數:
Attention計算方式:對CA Reader進行了改進,同時結合按照列和按照行的方式進行Attention計算,按列計算形成 query-to-document attention, 按行計算形成 document-to-query attention (AoA亮點)後做平均得到query-level attention,然後兩個attention做點乘,得到document中的每個詞的score。按行與按列,類似於人閱讀文檔的過程,先看問題,分析問題中的詞的重要性,再去文檔中定位相關性最高的詞作爲答案。
預測:類似AS Reader,同類型的詞累加
數據集:CNN&Daily Mail、CBT;
match-LSTM and Answering Point(經典)
該論文的主要貢獻在於
-
將指針網絡Pointer Net中指針的思想首次應用於閱讀理解任務中。
-
在 Match-LSTM 提出之後,question-aware 表徵的構造方式開始出現在各個論文之中。
可參考博客:https://blog.csdn.net/u012892939/article/details/80186590
把question當做premise,passage當作hypothesis。
match-LSTM與Attention應用方式
-
計算Attention:對段落P中每個詞,計算其關於問題Q的注意力分佈α(這個向量維度是question詞長度,故而這種方法也叫做question-aware attention passage representation),並使用該注意力分佈彙總擬合出整個問題的總和語義表示(按列);
-
將attention向量與原問題編碼向量點乘(按行),得到p中第i個token的Q關聯信息,並與段落中該詞的隱層表示合併爲一個向量- ;
- 最後輸入到LSTM中。在這個LSTM結構基礎上去預測哪個或者那些單詞應該是正確答案。
預測結果:兩種 Answer Point Layer 模型,Sequence Model 和 Boundary Model。
- Sequence Model考慮到答案在passage中不是連續存在的,因此預測的是答案標記序列,βk,j是從段落中選擇第 j 個字符作爲第 k 個答案字符的概率- 。
- Boundary Model 默認生成的答案在 passage 中是連續存在的,因此只需要預測開始位置,且在已知開始位置的基礎上預測一個結束位置即可,實驗表明,此方法更好。即:
數據集:SQuAD
BiDAF (Bidirectional Attention Flow)
在 Match-LSTM 提出之後,question-aware 表徵的構造方式開始出現在各個論文之中。
這篇論文的貢獻在於雙向注意力機制的提出,這種雙向注意力機制在QA任務中充當編碼器或者推理單元中的一環對後續的性能產生更大的影響。
很好的參考:https://www.zybuluo.com/songying/note/1441941
嵌入:word embedding, character embedding (在Bert之後都不夠看了)
Attention:注意力流層負責鏈接與融合query和context的信息。query-to-context, context-to-query 兩個方向的Attention信息,最後再與Context上下文信息融合,構造出 query-aware 的Context表示。
-
兩種attention構造的方法,詳細學習上面鏈接
Context-to-query (C2Q),就是對於 Context 中的第t個單詞,計算 Query 中的每個單詞與該詞的相關度,然後通過這些相關度信息來計算Context每個詞(行)的新表示。
Query-to-context Attention(Q2C):其本質是計算對於 Query 中的詞, context 中的每個詞與它的相關度。 而此段中的計算與上述有所不同。
- 使用了 memory-less attention mechanism,就是說每個time step的注意力是當前時間步的問題和上下文段落的函數,不依賴於之前time step的注意力(match-LSTM ptr-net就依賴)!
數據集:SQuAD
DCN (Dynamic Co-Attention Networks)
DCN和BiDAF都使用了query-to-context attention,DCN也是生成雙向注意力,給p注意力權重,也給q注意力權重。
該方法採用了最基本的seq2seq框架來對答案片段的起始和終止位置進行預測。在seq2seq框架的Encoder部分,加入Co-Attention機制去融合問句和文檔信息,再將融合信息和文檔信息通過雙向LSTM再次融合;Decoder部分使用HMN對結果進行預測,通過一個LSTM保存歷史預測信息。
參考:https://zhuanlan.zhihu.com/p/27151397
協同注意力 Co-Attention有兩種:
- parallel co-attention
- alternating co-attention(本文)
動態迭代 dynamic iteration: 對於模型輸出的結果,我們不直接將它作爲最終的結果,而是將它繼續輸入到模型中迭代出新一輪的輸出,經過多次迭代,直到輸出不再變化或超過迭代次數閾值。
模型
Coattention Encoder:可以概括爲通過Co-Attention結合文檔和問句的特徵信息,用雙向LSTM對結合後的特徵信息和文檔信息進行融合。
- 先分別獲得文檔和問句的每一時刻LSTM表示矩陣,記爲D和Q,然後相乘獲得兩個矩陣的信息L,然後對矩陣L按行和按列softmax或者對文檔和對問句的Attention,即AQ 和 AD;
- 然後利用Alternating Co-attention的思想,先得到加入了Attention之後的問句信息CQ ,然後再和文檔進行attention得到文檔信息和文本信息的結合CD ;
- 然後將D和CD 連接通過雙向LSTM在時序上融合,最後得到輸出矩陣U- 。
Dynamic Pointer Decoder:由Coattention Encoder的輸出矩陣U,利用該矩陣,通過 動態迭代 來預測答案在文檔的起始位置指針和終止位置指針。用到了HMN,HMN模型對文檔中的每一個字,都分別從【將它作爲起始位置】或【終止位置】兩個方面進行打分。
用HMN根據歷史預測信息(LSTM存儲的hi,可以將每一次的預測位置結果us,ue輸入到一個LSTM中去保存該歷史預測信息)、上一次預測位置(us,ue),對文檔中的當前字ut作爲起始位置(或終止位置)的可能性進行打分,將最後一次迭代得分最高的作爲起始位置(或終止位置),得到文檔片段作爲最終答案。
數據集:SQuAD
R-NET(還是不太懂)
R-Net主要是在 Match-LSTM 的基礎上進行的,但是也受到attention is all you need的影響,預測上用了pointer-network。
參考:https://blog.csdn.net/jyh764790374/article/details/80247204
Question and Passage Encoder:該層將Word Embedding 以及 Character Embedding 拼接,在輸入一個雙向GRU對 Question 以及 Passage 進行編碼
Gated Attention-based Recurrent Networks
-
計算QP的注意力得到問題的匹配信息ct ,然後得到Sentence-pair的表徵,vtP = RNN(vt-1P , ct ),每一個Sentence-Pair 向量都動態整合了整個問題的匹配信息(上圖的3個黃色塊)。
-
借鑑 Match-LSTM 的思想,將 Passage 的表徵輸入到最後的RNN中,得到 Question-aware Passage 表徵 :
vtP = RNN(vt-1P , [ utP ,ct ])(上圖黃色塊上面的紅色塊)
-
爲了動態判斷輸入向量與 Question 的相關性,還額外加入一個門機制,對RNN的輸入進行控制,因此將其稱爲 Gated Attention-based Recurrent Networks。(通過門機制,模型根據段落與問題的相關程度,賦予了段落中不同詞的重要程度,掩蓋了段落中不相關的部分。)
Self-Matching Attention:上一層輸出的 Question-aware 表徵確定了段落中與問題相關的重要部分,但這種表徵的一個重要問題是其很難包含上下文信息,然而一個答案的確定很多時候都是很依賴於上下文的。
-
因此這層動態地收集整個段落的信息給段落當前的詞語(pp-attention,是整個passage的自注意力池化)
-
把與當前段落詞語相關的信息和其匹配的問題信息編碼成段落表示
Output Layer:該模型同樣利用 Point Network 的結構來直接預測答案的起始位置和輸出位置。對問題進行attention-pooling得到rQ 作爲起始鍵,對文章進行attention-pooling得到ct,然後進行一個seg2seg循環,hta=RNN(ht-1a, ct),其中ha是pointer-network的隱層。然後得到答案,即起始位置和終止位置。(不太懂)
所以這其實是一個seq2seq的過程,只不過最終得到的seq中只有兩項,即起始位置和終止位置。(不太懂)
數據集:SQuAD
QANet(集大成者)
融合了2017~2018年NLP的重要突破(各種炫技),集大成者。
啓發和融合(BiDAF, transformer, 深度可分離卷積等)
- CNN seg2seg 代替LSTM (把self-attention和convolution結合起來)
- multi-head attention,positional encoding,並且每個塊中都用了LayerNorm + residual connection
- depthwise separable conv
- highway network
- data augmentation: back-translation
感慨一下,QANet真是集大成者,並且文章好讀易懂,優秀的模型就應該這樣。
QANet結構廣泛使用convolutions和self-attentions作爲encoders的building blocks,然後分別encode query和context,然後使用standard attentions學習到context和question之間的interactions,結果的representation再次被encode,然後最後decode出起始位置的probability。
結構
Input embedding layer:詞嵌入依舊是word embedding和character embedding(這和BiDAF相似),字符嵌入是用卷積訓練的固定長度詞向量,然後拼接兩者嵌入,在上面再接一個2層的highway network
Embedding encoder layer:Encoder block見圖,卷積使用的是 深度可分離卷積,有更好的泛化能力、更少的參數和計算量
Context-Query Attention Layer:常用組件,相似度計算方法也類似BiDAF,二維匹配,得到context中每個詞對Question所有詞的注意力,歸一化後得到矩陣S,再對問題表徵Q加權,從而得到context-to-query attention表徵(這也是個十分高效的模型編碼方式):
其中相似度矩陣的計算方法也是比較傳統的方法:f(q,c)=W0[q; c; q·c]
Model Encoder Layer :類似BiDAF的結構,輸入爲context的query-aware表徵[c, a, c·a, c·b],a和b代表着attention矩陣的行。這三個encoder可以理解爲對問題與答案匹配的特徵做一層一層的高級提取。QANet最後需要算起始位置的概率分佈,因此可以認爲第一層encoder提取答案全局特徵,第二層提取答案開頭特徵,第三層提取答案結束的特徵。
Output Layer:答案的起始位置的概率計算,也類似BiDAF,Pointer Network預測位置 ,span score是起始位置概率的乘積,損失函數爲交叉熵
以上公式:
,
實驗
數據集:SQuAD
多倫迭代策略
一種常見的推理策略往往是通過多輪迭代,不斷更新注意力模型的注意焦點來更新問題和文檔的Document Embedding表達方式,即通過注意力的不斷轉換來實現所謂的“推理過程”。
記憶網絡(Memory Networks)
Layer-Wise RNN模式:首先根據原始問題的Word Embedding表達方式以及文檔的原始表達,通過f函數計算文檔單詞的Attention概率,然後g函數利用文章原始表達和Attention信息,計算文檔新的表達方式(這裏一般g函數是加權求和函數)。t函數則根據文檔新的表達方式以及原始問題表達方式,推理出問題和文檔最終的新表達方式(通過兩者Word Embedding的逐位相加實現的)。t函數的輸出更新下一層網絡問題的表達方式。這樣就通過隱式地內部更新文檔和顯示地更新問題的表達方式實現了一次推理過程。
AMRNN推理過程
AMRNN模型可以近似理解爲AS Reader的基礎網絡結構加上記憶網絡的推理過程。
GA Reader
IA Reader
全文參考
張俊林大神關於一維二維匹配的解讀:https://blog.csdn.net/malefactor/article/details/52832134
西多士NLP博主總結:https://www.cnblogs.com/sandwichnlp/p/11811396.html#model-1-attentive-reader-and-impatient-reader