R-NET機器閱讀理解(原理解析)

R-NET機器閱讀理解(原理解析) 


簡介 

    斯坦福大學自然語言計算組發佈SQuAD數據集,諸多團隊參與其中,而微軟亞研的R-NET是首個在某些指標中接近人類的深度學習模型。由於剛剛開源CNTK版的R-NET,趁着餘熱解讀其中的原理。


閱讀準備

    先介紹一下SQuAD數據集的特點,SQuAD數據集包含10w個樣例,每個樣例大致由一個三元組構成(文章Passage, 相應問題Query, 對應答案Answer), 以下皆用(P,Q,A)表示。
 由於R-NET模型中多次引用Matching-LSTM 模型和Pointer-Net模型中的思想,所以建議準備精讀的朋友先看一下Blog(Matching-LSTM)和李宏毅老師的Ptr-Net。

結構圖




原理介紹

    R-NET模型一共分爲四個步驟,分別爲QUESTION AND PASSAGE ENCODER, GATED ATTENTION-BASED RECURRENT NETWORKS, SELF-MATCHING ATTENTION, OUTPUT LAYER, 基本結構可觀察上面所示的結構圖。


1. QUESTION AND PASSAGE ENCODER

    第一層爲表示學習過程, R-NET中的方式Input = Glove + char embedding。第一種是把文章P,和問題Q中的單詞替換爲Glove詞向量中的數據,第二種是char embedding, 。最終把文章P和問題Q分別通過BiRNN。

$$
u_{t}^{Q} = BiRNN_{Q}\left (u_{t-1}^{Q}, \left [ e_{t}^{Q},c_{t}^{Q} \right ] \right )\\
u_{t}^{P} = BiRNN_{P}\left (u_{t-1}^{P}, \left [ e_{t}^{P},c_{t}^{P} \right ] \right )
$$

2. GATED ATTENTION-BASED RECURRENT NETWORKS

    從上一層網絡中可以得到,在這一層網絡中R-NET試圖把進行attention加權融入到中,得到及問題Q意識下的文章語義理解
$$
v_{t}^{P} = RNN( v_{t-1}^{P},c_{t})
$$
    其中 爲對問題Q的attention-pooling加權。從中可以看出中的attention權重完全由文章中單詞的含義,和上一個單詞在問題下的理解決定。
    基本具體形式如下:
$$
s_{j}^t = v^{T}tanh(W_{u}^{Q}u_{j}^{Q}+W_{u}^{P}u_{t}^Q+W_{v}^{P}v_{t-1}^P)\\
a_{i}^{t}=exp\left ( s_{i}^{t} \right )/\sum _{j=1}^{m}exp\left ( s_{j}^{t} \right )\\
c_{t}=\sum _{i=1}^{m}a_{i}^{t}u_{i}^{Q}
$$
    R-NET又基於matching-lstm和門控制方式對以上方法提出兩點改進,第一點是把 並聯爲 加入RNN中,即
$$
v_{t}^{P} = RNN( v_{t-1}^{P},[c_{t},u_{t}^P])
$$
    第二點又在上面加入門控制方式,爲了更好地提取和文章有關的問題信息,即
$$
g_{t} = sigmoid\left ( W_{g}[c_{t},u_{t}^P] \right )\\
[c_{t},u_{t}^P]^{*}=g_{t}\odot [c_{t},u_{t}^P]
$$

3. SELF-MATCHING ATTENTION



    此過程充分借鑑了Attention is all you need 中的自注意力思想,在模型效果提升中起了很大作用,而且這個方法也易於實現。
$$
h_{t}^{P} = BiRNN( h_{t-1}^{P},[c_{t},v_{t}^P])
$$
    其中  是基於當前單詞下的整篇文章的語義。
$$
s_{j}^t = v^{T}tanh(W_{v}^{P}v_{j}^{P}+W_{v}^{\tilde{P}}v_{t}^P)\\
a_{i}^{t}=exp\left ( s_{i}^{t} \right )/\sum _{j=1}^{n}exp\left ( s_{j}^{t} \right )\\
c_{t}=\sum _{i=1}^{n}a_{i}^{t}v_{i}^{P}
$$

4. OUTPUT LAYER



    R-NET模型輸出的是答案在文章中的起始位置,在這一過程中借鑑了pointer-network的思想,R-NET模型先計算得到開始位置在文章中的分佈,再利用這一分佈 對整篇文章進行加權作爲輸入得到終止位置在文章中的分佈 。所以這其實是一個seq2seq的過程,只不過最終得到的seq中只有兩項,即起始位置和終止位置。對於一個seq2seq過程,R-NET使用對問題  進行attention-pooling得到的  作爲起始鍵。
$$
s_{j} = v^{T}tanh(W_{u}^{Q}u_{j}^{Q}+W_{v}^{Q}v_{r}^Q)\\
a_{i}=exp\left ( s_{i} \right )/\sum _{j=1}^{m}exp\left ( s_{j} \right )\\
r^{Q}=\sum _{i=1}^{n}a_{i}u_{i}^{Q}
$$
    其中這個seq2seq的循環循環結構爲:
$$
h_{t}^{a} = RNN( h_{t-1}^{a},c_{t})
$$
$c_{t}$ 依然是對文章的attention-pooling得到的結果:
$$
s_{j}^t = v^{T}tanh(W_{h}^{P}h_{j}^{P}+W_{h}^{a}h_{t-1}^a)\\
a_{i}^{t}=exp\left ( s_{i}^{t} \right )/\sum _{j=1}^{n}exp\left ( s_{j}^{t} \right )\\
c_{t}=\sum _{i=1}^{n}a_{i}^{t}h_{i}^{P}
$$
    通過以上RNN循環單元兩次可以得到兩個權重分佈,我們可以通過下面這種方式從中得到答案的起始位置。
$$
p^{t}=argmax\left \{ a_{1}^{t},...,a_{n}^{t} \right \}
$$ 
    不過再具體實驗中還有一個小trick對提升效果很有用,由於我們得到了兩個分佈,通過兩個分佈我們可以得到一個聯合分佈,在計算中可以表示爲一個矩陣,然而由於開始位置永遠在終止位置之前,所以我們的選擇區域始終在矩陣對角線的左上半部分。又因爲答案的長度有一定範圍,我們可以設置答案的最大長度,所以最後的訓責區域只是一個若當標準型矩陣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章