機器閱讀理解(看各種QA模型與花式Attention)

簡介

機器閱讀理解(Machine Reading Comprehension)爲天然語言處理的核心任務之一,也是評價模型理解文本能力的一項重要任務,其本質能夠看做是一種句子關係匹配任務,其具體的預測結果與具體任務有關。數組

記錄一下以後用來實踐的數據集:網絡

閱讀理解任務具備多種類別:單項/多項選擇、完形填空以及抽取式問答。百度發佈的DuReader機器閱讀理解數據集涵蓋了以上三種任務類型,所以選擇用來實踐也是很是合適的。ide

DuReader數據集的樣本可用一個四維數組表示:{q, t, D, A},其中q表示問題,t表示問題類型,D表示文檔集合,A表示答案集合。一半的樣原本源於百度搜索引擎,一半來源於百度知道。下圖展現了DuReader數據集的不一樣類型樣本。(這裏記錄一下數據集,以後要是出了實踐代碼這裏再補上)
函數

經典模型概述

這裏記錄一下比較經典的機器閱讀理解模型,或者說記錄一下各類花式 Attention,想要了解細節的小夥伴也能夠去看看原文,這裏也都附上了連接。性能

Model 1: Attentive Reader and Impatient Reader

原文連接:Teaching Machines to Read and Comprehend搜索引擎

這篇文章提出的模型有三個:The Deep LSTM Reader、The Attentive Reader 和 The Impatient Reader。最主要的貢獻仍是 Attentive Reader 和 Impatient Reader 這兩個模型,這兩個模型也是機器閱讀理解一維匹配模型和二維匹配模型的開山鼻祖。
編碼

Attentive Reader 的基本結構如上圖所示,實際上也比較簡單,就是一個簡單的細粒度注意力機制在機器閱讀理解任務中的經典應用。spa

  • u 是問題 q 在通過雙向 LSTMs 編碼後的最後一個前向輸出狀態和最後一個後向輸出狀態的拼接。
    \[u = \overrightarrow{y_{q}}(|q|)||\overleftarrow{y_{q}}(1)\]
  • \(y_d(t)\) 是文檔 d 中 第 t 個詞通過雙向 LSTMs 編碼後的前向輸出狀態和後向輸出狀態的拼接。
    \[y_d(t) = \overrightarrow{y_{d}}(t)||\overleftarrow{y_{d}}(t)\]
  • 將文檔 d 的單詞表示\(y_d(t)\)做爲Key,將問題表示 u 做爲 Query,輸入一個注意力層,獲得問題對文檔的注意力加權表徵 r。
    \[m(t) = \tanh{(W_{ym}y_d(t)+W_{um}u)} \\ s(t) \propto \exp{(W^\mathrm{T}_{ms}m(t))}\\ r = y_ds\]
  • 模型最後將文檔表示 r 和問題表示 u 經過一個非線性函數進行結合進行判斷。
    \[g^{AR}(d,q) = \tanh{(W_{rg}r+W_{ug}u)}\]

Impatient Reader 就是在 Attentive Reader 的一種變體,模型結構以下圖所示:
.net

由上圖可知,咱們能夠總結出如下幾點區別:

  • Impatient Reader 在計算注意力的時候,將每一個單詞看成一個單獨的 Query 從而計算該單詞對於 doc 中每一個詞的注意力加權表徵,並用非線性變換將全部的 r 進行反覆累積(單詞的重閱讀能力),即:
    \[y_q(i) = \overrightarrow{y_{q}}(i)||\overleftarrow{y_{q}}(i)\\m(i,t) = \tanh{(W_{dm}y_d(t)+W_{rm}r(i-1)+W_{qm}y_q(i))}, 1\leq i \leq |q|\\ s(i,t) \propto \exp{(W^\mathrm{T}_{ms}m(i,t))}\\r(0) = r_0\\ r(i) = y^\mathrm{T}_ds(i)+\tanh{(W_{rr}r(i-1))}, 1\leq i \leq |q|\]

  • 最後將最後一個文檔表示 r(|q|) 和問題表示 u 進行非線性組合用於答案預測。
    \[g^{IR}(d,q) = \tanh{(W_{rg}r(|q|)+W_{qg}u)}\]

介紹了模型結構以後,咱們就能夠從兩個模型的區別來總結一下一維匹配模型與二維匹配模型的區別:

  • 所謂的一維匹配模型,即將問題直接編碼爲一個固定長度的向量,在計算注意力分數的時候,等效於直接計算文檔 d 每一個詞在特定問題上下文向量中做爲答案的機率,也正是在計算問題向量 Q 與文檔各個詞的匹配關係中造成的一維線性結構,咱們能夠將其稱爲一維匹配模型;
  • 二維匹配模型,直接輸出問題 Q 每個詞的編碼,計算注意力的時候,計算文檔 Q 中每個詞對 D 中每個詞的注意力,即造成了一個詞 - 詞的二維匹配結構。因爲二維匹配模型將問題由總體表達語義的一維結構轉換成爲按照問題中每一個單詞及其上下文的語義的二維結構,明確引入了更多細節信息,因此總體而言模型效果要稍優於一維匹配模型。

Model 2: Attentive Sum Reader

原文連接:Text Understanding with the Attention Sum Reader Network

這篇文章的模型主題基本與 Attentive Reader 十分相似,是一種一維匹配模型,主要是在最後的 Answer 判斷應用了一種 Pointer Sum Attention 機制,模型結構以下圖所示:

對該模型作一個簡單的解釋:

  • 與 Attentive Reader 同樣,應用兩個RNN(該文中爲GRU)對 Document 和 Question 分別進行編碼
  • Attention層應用的是 Dot Attention,相對於 Attentive Reader 參數更少,即注意力權重
    \[s(i,t) \propto \exp{f_i(d) \cdot g(q)}\]
  • 咱們以前提到過,一維匹配模型的注意力分數等效於直接文檔 d 中每一個詞在特定問題上下文向量中做爲答案的機率,該模型的作法就是,在獲得每一個詞Softmax歸一化以後的分數後,將同類型的詞的分數累加,得分最高的詞即爲答案(即做者提到的Pointer Sum Attention)
    \[P(w|q, d) = \sum_{i \in I(w, d)}s_i\]

這樣一個將注意力分數累加的操做將受到一個詞出現次數的影響,一般,出現次數越多的詞越可能成爲問題的答案,這樣是不是合理的呢?實驗數據代表這樣的假設確實是合理的。該模型的結構以及Attention的求解過程明顯比 Attentive Reader 更簡單,卻取得了更好的效果,這也意味着並非越複雜的模型效果會更好,簡單的結構在合適的場景下能取得很是好的結果。

Model 3: Stanford Attentive Reader

該模型一樣是對 Attentive Reader 的改進,屬於一種一維匹配模型,咱們先來看看熟悉的模型結構:

模型主體這裏就不講了,主要記錄一下其與 Attentive Reader 不同的部分:

  • 注意力計算方式爲bilinear(較點積的方式更靈活):
    \[\alpha_i = softmax(q^TW_sp_i)\\o = \sum_i\alpha_ip_i\]

  • 獲得注意力加權輸出\(o\)以後,而後直接用\(o\)進行分類預測,而 Attentive Reader 是用輸出與 query 又作了一次非線性處理以後才預測的,實驗證實移除非線性層不會傷害模型性能。

  • 原來的模型考慮全部出如今詞彙表V中的詞來作預測。而該模型只考慮出如今文本中的實體(進一步減小參數)

上述三點中,第一點是比較重要的,然後面兩點都是對模型的一個簡化處理。

Model 4: AOA Reader

原文連接:Attention-over-Attention Neural Networks for Reading Comprehension

AOA Reader 屬因而一種二維匹配模型,該論文的亮點是將另外一種注意力嵌套在現有注意力之上的機制,即注意力過分集中機制,其主要模型結構以下圖所示:

  • 利用雙向GRU對 Document 和 Query分別編碼,獲得編碼後的隱藏層表徵,即
    \[e(x) = W_e \cdot x, \ where \ x \in D, Q\\ \overrightarrow{h_s}(x) = \overrightarrow{GRU}(e(x))\\ \overleftarrow{h_s(x)} = \overleftarrow{GRU}(e(x))\\ h_s(x) = [\overrightarrow{h_s}(x); \overleftarrow{h_s}(x)]\]

  • 利用pair-wise matching matrix來計算獲得注意力匹配分數:
    \[M(i,j)=h_{doc}(i)^T ·h_{query}(j)\]

  • 在列方向上進行 Softmax 歸一化,注意上一個公式,每一列表示 query 一個詞對 doc 全部詞的注意力分數大小,獲得所謂的 query-to-document attention
    \[\alpha(t) = softmax(M(1, t), ..., M(|D|, t))\\ \alpha = [\alpha(1), \alpha(2), ..., \alpha(|Q|)]\]

  • 在行的方向進行 Softmax 歸一化,獲得 document-to-query attention
    \[\beta(t) = softmax(M(t, 1), ..., M(t, |Q|))\]

  • 將 document-to-query attention 做平均獲得最終的 query-level attention:
    \[\beta = \frac{1}{n}\sum_{t=1}^{|D|}\beta (t)\]

  • 最後,用每一個query-to-document attention和剛剛獲得的query-level attention作點乘,獲得document中每一個詞的score。
    \[s = \alpha^T\beta\]

  • 與Attentive Sum Reader相似,最後預測答案詞的方式是將同類型的詞的分數累加,得分最高的詞即爲答案,下式中,V爲詞表:
    \[P(w|q, d) = \sum_{i \in I(w, d)}s_i, \ w \in V\]

  • 對於損失函數,咱們能夠直接最大化正確詞的機率分數便可,下式中,A爲標註答案詞:
    \[L = \sum_i log(p(x)), \ x \in A\]

Model 5: Match-LSTM and Answering Point

Match-LSTM:Learning Natural Language Inference with LSTM

Pointer Networks:Pointer Networks

Match-LSTM and Answering Point:Machine Comprehension Using Match-LSTM and Answer Pointer

由論文標題可知,該論文利用 Match-LSTM 以及 Answer Pointer 模型來解決機器閱讀理解問題,Match-LSTM也屬於二維匹配模型的一種,注意力求解方法咱們下面再詳細介紹,該論文的主要貢獻在於將Pointer Net中指針的思想首次應用於閱讀理解任務中。首先,咱們分別看看兩個模型的結構:

Match-LSTM

Match-LSTM最初提出是用於解決文本蘊含任務的。文本蘊含任務的目標是,給定一個 premise(前提),根據此 premise 判斷相應的 hypothesis(假說)正確與否,若是今後 premise 可以推斷出這個 hypothesis,則判斷爲 entailment(蘊含),不然爲 contradiction(矛盾)。文本蘊含任務也能夠看做是句子關係判斷任務的一種。

模型的主要結構如上圖所示,圖中,\(H^S\)爲 premise 通過LSTM編碼後的隱藏層表徵,同理,\(h_k^t\)爲 hypothesis 中第 \(k\) 個詞的隱藏層表徵。整個模型的計算以下:

  • 獲得兩個表徵以後,一樣是 Attention 操做(詳細的Attention計算方法參考原文)獲得 hypothesis 對於 premise 每一個詞注意力加權輸出\(a_k\)
  • 將注意力加權輸出與 hypothesis 對應位置詞的隱藏層拼接\(m_k=[a_k;h_k^t]\),再將其經過一個長度爲\(N\)的LSTM,獲得一個 hypothesis 整合注意力向量的隱藏表徵,用最後一個時刻的隱藏層向量\(h_N^m\)預測最後結果。

Pointer Net

Pointer Net的提出解決了一類特殊問題:若是生成的輸出序列中的字符必然出現於輸入序列,則咱們能夠採用Pointer Net的結構來獲得輸出,而不須要事先規定固定詞表。這類模型在文本摘要任務中獲得了普遍的應用,主要思路以下圖所示:

對於左邊的傳統模型,若是給定的詞彙表已經限定,則模型沒法預測大於4的數字,而對於右邊的Ptr-Net,咱們不須要給定詞彙表,只須要在預測的時候每一步都指向輸入序列中權重最大的那個元素,因爲輸出序列徹底來自於輸入序列,則解空間徹底能夠隨着輸入序列變化。而咱們在求 Attention 過程當中的 Softmax 分數,正是每個輸出位置對輸入序列的注意力大小,直接將最大分數的位置做爲該輸出位置的指針便可。

Match-LSTM and Answering Point

將二者結合起來,在機器閱讀理解任務中,能夠將 question 看成 premise,將 passage 看成 hypothesis,整個模型的思路以下:

  • 首先針對 question 以及 passage 用 LSTM 進行預編碼
  • 對編碼事後的向量輸入到以前提到的Match-LSTM中,只是最後一層長度爲 \(N\) 的 LSTM 改成了雙向LSTM,獲得雙向LSTM的隱藏輸出\(H^r\),能夠將其看做 passage 對 question 的初步 Attention 編碼結果
  • 做者採用了兩種 Answer Point Layer 模型輸出預測結果
    • Sequence Model:考慮到生成的答案在 passage 中不是連續存在的,所以預測的是一個答案標記序列
      • 首先,使用注意機制再次得到一個注意力權重向量,其中\(\beta_{k, j}\)是從段落中選擇第 j 個字符做爲第 k 個答案字符的機率,\(\beta_{k,P+1}\)表示答案在段落第 k 個字符結束的機率,\(\beta_{k}\)將其按行 Softmax 獲得第 k 個答案字符對段落中全部字符的注意力分數:
        \[F_k=tanh(V\widetilde{H}^r+(W^ah^a_{k-1} + b^a)\otimes e_{P+1})\\\beta_{k}=softmax(v^TF_k+c\otimes e_{P+1})\]
      • 上式中\(\widetilde{H}^r \in \mathbb{R}^{2l \times (P +1)}\)\(H^r\)與零向量的結合,\((\cdot \otimes e_Q)\)表示將左邊的向量複製\(Q\)次(至關於廣播),\(h_{k-1}^a \in \mathbb{R}^l\)是LSTM的第k-1位置的隱藏向量,LSTM以下定義:
        \[h_k^a=\overrightarrow{LSTM}(\widetilde{H}^r\beta^T_k, h_{k-1}^a)\]
      • 針對咱們獲得的\(\beta _{k,j}\),咱們能夠將其表徵爲 passage 中選擇第 j 個字符做爲第 k 個答案字符的機率,即\(p(a_k=j|a_1,a_2,...,a_{k-1},H^r)=\beta _{k,j}\),所以生成答案序列的機率爲:
        \[p(a|H^r)=\prod _kp(a_k|a_1,a_2,..a_{k-1},H^r)\]
      • 損失函數能夠直接定義爲最小化答案字符位置機率的負數,即
        \[-\sum _{n=1}^Nlogp(a_n|P_n,Q_n)\]
    • Boundary Model:其與 Sequence Model 很是相似,只是默認生成的答案在 passage 中是連續存在的,所以只須要預測開始位置,且在已知開始位置的基礎上預測一個結束位置便可,即:
      \[p(a|H^r)=p(a_s|H^r)p(a_e|a_s,H^r)\]

Model 5: BiDAF

原文連接:Bidirectional Attention Flow for Machine Comprehension

在 Match-LSTM 提出以後,question-aware 表徵的構造方式開始出如今各個論文之中。該論文中的 Attention 計算主要有如下三個特徵;

  • 爲典型的二維匹配模型,在詞-詞的層面上求 Attention 矩陣,計算了 query-to-context(Q2C) 和 context-to-query(C2Q)兩個方向的 attention 信息,最後構造出 qurry-aware 的 Context 表示
  • 在每個時刻,僅僅對 query 和當前時刻的 context paragraph 進行計算,並不直接依賴上一時刻的 attention,使得每次的attention計算更關注當前時刻的文本,不受過去信息的影響

模型結構如上圖所示,由圖可知,模型主要有如下幾個部分:

  • 字符嵌入層:字符嵌入層負責將每一個單詞映射到高維向量空間。使用卷積神經網絡(CNN)在字符級別上對每一個單詞進行編碼,該卷積網絡的應用原理參考Kim在2014年發表的TextCNN。CNN的輸出在整個寬度上被max-pooled,以得到每一個單詞的固定大小向量。

  • 詞嵌入層:使用預訓練的 Glove 詞向量。並將字符嵌入層獲得的詞向量與預訓練詞向量拼接以後,輸入一個2層的Highway層,獲得整合以後的詞表徵。

  • 上下文嵌入層:使用BiLSTM對 Context 和 Query 分別進行編碼。值得注意的是,上述這三層提取了三個不一樣粒度的特徵對 Context 以及 Query 進行編碼,獲得矩陣 \(H \in R^{2d\times T}\)\(U \in R^{2d \times J}\)

  • 注意力流層:該層是該模型最重要的部分。注意力流層負責連接與融合query和context的信息。和之前流行的attention機制不同,咱們的模型不會把query和context變成一個單一的特徵向量,而是將每一個時間步的attention向量都與以前層的嵌入向量,一塊兒輸入modeling層。這能夠減小由於early summarization引發的信息損失。其具體操做以下:
    • 該層的輸入是 Context 的表徵 \(H\) 和 Query 的表徵 \(U\),輸出爲 query-aware 的 Context 表徵,以及以前的上下文嵌入。
    • 在該層中,計算了兩個方向上的 Attention,context-to-query 和 query-to-context
    • 首先,構造一個共享類似度矩陣:
      \[S_{tj} = \alpha (H_{:t}, U_{:j}) \ \in R^{T*J}\\ \alpha(h, u) = w^T_{(S)}(h;u;h \cdot u)\]
    • 接下來,使用獲得的共享類似度矩陣 \(S\) 來計算兩個方向上的注意力大小
      • context-to-query attention:計算 query 上的一個詞對 context 上的每一個詞的注意力大小(相關性),與 AOA 模型中的作法有點相似,對行方向進行歸一化,再對 query 進行注意力加權,包含全部query信息:
        \[a_t = softmax(S_{t:}) \ \in R^J\\ \hat{U}_{:t} = \sum _{j} a _{tj}U _{:j} \in R^{2d \times T}\]
      • query-to-context attention(Q2C): 計算 context 上的一個詞對 query 上的每一個詞的注意力(相關性),這些 context words 對回答問題很重要。直接取相關性矩陣每一列的最大值,再將其進行softmax歸一化,對 context 加權,並在列方向上迭代T次,最後獲得的矩陣維度爲\(\hat{H}\in R^{2d*T}\),包含全部的context信息,即:
        \[b = softmax(max_{col}(S)) \ \in R^T\\ \hat{h} = \sum_tb_tH_{:t} \ \in R^{2d}\]
    • 將 Context 表徵 \(H\) 與 Attention 表徵進行整合爲\(G\),整合方式以下,獲得的矩陣中每一列可視爲 Context 中每個詞的 query-aware 表示:
      \[G_{:t} = \beta (H_{:t}, \hat{U}_{:t}, \hat{H}_{:t}) \in R^{d_G}\]
      上式中,\(d_G\)\(\beta\)的輸出維度,論文中對\(\beta\)取以下定義:
      \[\beta(h, \hat{u}, \hat{h}) = [h;\hat{u};h \cdot \hat{u};h\cdot\hat{h}]\in R^{8d \times T}\]
  • 建模層:這一層的輸入爲以前獲得的\(G\),Context 的 query-aware 表示。這一層能夠看做利用 Bi-LSTM 對含 Context 及 Query 信息的矩陣G進行進一步的信息提取,獲得輸出矩陣大小爲\(M \in R^{2d\times T}\),將其用於預測答案。

  • 輸出層:對於問答任務,該層採用指針的方式來預測輸出,即僅預測答案在 Context 中的開始位置以及結束位置。
    • Start:直接將 \(G\)\(M\) 拼接以後,輸入一個全聯接層進行預測,即
      \[p^1 = softmax(w^T_{(p^1)}[G;M])\]
    • Stop:將 \(M\) 經過另外一個 BiLSTM 獲得 \(M^2\) 而後與 \(G\) 拼接,經過全聯接層預測,即
      \[p^2 = softmax(w^T_{(p^2)}[G;M^2])\]
  • 損失函數爲開始和結束位置的交叉熵之和,與 Match-LSTM 中的 Boundary Model 相似。

Model 6: R-NET

原文連接:R-NET: MACHINE READING COMPREHENSION WITH SELF-MATCHING NETWORKS

R-Net主要是在 Match-LSTM 的基礎上進行的,的主要結構如上圖所示,結構已經很是清楚了,主要包括Encoding Layer,Gated Matching Layer,Self-Matching Layer,Boundary Prediction Layer四個部分,咱們先把結構展開講一下,再對該論文的貢獻進行總結。

  • Question and Passage Encoder:該層將Word Embedding 以及 Character Embedding 拼接,在輸入一個雙向GRU對 Question 以及 Passage 進行編碼,即
    \[u^Q_t = BiRNN_Q(u^Q_{t−1}; [e^Q_t ; c^Q_t])\\ u^P_t = BiRNNP (u^P_{t−1}; [e^P_t ; c^P_t])\]

  • Gated Attention-based Recurrent Networks:論文提出了一種門限注意力循環網絡來將 Question 的信息整合到 Passage 的表徵中,它是基於注意力的循環網絡的一種變體,具備一個附加的門來肯定段落中有關問題的信息的重要性。由 Question 與 Passage 的表徵 \(u^Q_t, u^P_t\) 獲得 Sentence-Pair 表徵 \(v^P_t\)
    \[v^P_t = RNN(v^P_{t-1}, c_t)\]

    其中,\(c_t = att(u^Q, [u^P, v^P_{t-1}])\),能夠將其看做一個注意力池化向量,具體計算以下:
    \[s_t^j = v^T tanh(W_u^Qu^Q_j + W_u^P u^P_t + W_v^P v_{t−1}^P)\\ a^t_i = exp(s^t_i)/sum^m_{j=1}exp(s^t_j) \\ c_t = \sum^m_{i=1}a^t_iu^Q_i\]

    則獲得的每個 Sentence-Pair 向量都動態整合了整個問題的匹配信息,借鑑 Match-LSTM 的思想,將 Passage 的表徵輸入到最後的RNN中,獲得 Question-aware Passage 表徵 :
    \[v^P_t = RNN(v^P_{t-1}, [u^P_t, c_t])\]
    爲了動態判斷輸入向量與 Question 的相關性,還額外加入一個門機制,對RNN的輸入進行控制,所以將其稱爲 Gated Attention-based Recurrent Networks:
    \[[u_t^P, c_t]^* = g_t \cdot [u_t^P, c_t]\\ g_t = sigmoid(W_g[u_t^P, c_t])\]

  • Self-Matching Attention:上一層輸出的 Question-aware 表徵肯定了段落中與問題相關的重要部分,但這種表徵的一個重要問題是其很難包含上下文信息,然而一個答案的肯定不少時候都是很依賴於上下文的。爲了解決這個問題,論文提出了 Self-Matching Attention,其動態地收集整個段落的信息給段落當前的詞語,把與當前段落詞語相關的信息和其匹配的問題信息編碼成段落表示:
    \[h^P_t = BiRNN(h_{t-1}^P, [v_t^P, c_t])\]

    這裏的\(c_t = att(v^P ; v_t^P )\)爲對整個 Passage 的自注意力池化:
    \[s^t_j = v^Ttanh(W_v^P v_j^P + W_v^{\tilde{P}}v_t^P )\\ a^t_i = exp(s^t_i)/\sum^n_{j=1}exp(s^t_j)\\ c_t = \sum^n_{i=1}a^t_iv_i^P\]

    一樣,對\([v_t^P, c_t]\)增長與上一層輸入一樣的門控機制,來自適應控制 RNN 的輸入。

  • Output Layer:該模型一樣利用 Point Network 的結構來直接預測答案的起始位置和輸出位置。
    • 根據給定段落表示,把 Attention 權重分數做爲一個 Pointer 來選取答案在段落中的起始位置,也就是基於初始語境信息,計算段落中每一個詞語的 Attention 權重,權重最高的做爲起始位置:
      \[s^t_j = v^Ttanh(W_h^P h_j^P + W_h^{a}h_{t-1}^a)\\ a^t_i = exp(s^t_i)/\sum^n_{j=1}exp(s^t_j)\\ p^t = argmax(a_1^t, ..., a_n^t)\]

      上式中,\(h^a_{t-1}\) 爲 Point Network 最後的隱藏狀態

    • 在獲得起始位置以後,用注意力分數對 Self-Matching 的 Passage 表徵進行加權,而後利用以前的Question Attention-Pooling表徵,做爲RNN的初識狀態,對加權後的Passage 表徵進行再處理,獲得新的語境,新的語境信息計算方式以下:
      \[c_t = \sum^n_{i=1}a^t_ih^P_i\\ h^a_t = RNN(h^a_{t-1}; c_t)\]

    • 當預測開始位置的時候,將對 Question 的表徵使用 Attention-Pooling的向量做爲 Pointer Network 的初始語境。
      \[s_j = v^Ttanh(W_u^Q u_j^Q + W_V^{Q}V_r^Q )\\ a_i = exp(s_i)/\sum^m_{j=1}exp(s_j)\\ r_Q = \sum^m_{i=1}a_iu_i^Q\]

      上式中\(V_r^Q\)爲參數向量

  • 一樣選擇交叉熵做爲模型的損失函數

瞭解了模型的主要結構,咱們來看看該模型的創新點在什麼地方:

  • 首先,提出了一種gated attention-based recurrent network,也就是在經典的attention-based recurrent networks上額外增長了門機制,這樣作的主要緣由是針對閱讀理解的問題,段落中的每一個單詞的重要性是不一樣的。經過門機制,模型根據段落與問題的相關程度,賦予了段落中不一樣詞的重要程度,掩蓋了段落中不相關的部分。
  • 因爲RNN自己只能存儲有限段落信息,一個候選答案一般不知道段落的其他部分的信息,提出了 Self-Matching 機制這種機制,用整個段落的信息動態完善段落表示,使後續網絡可以更好地預測答案。

Model 7: QANet

原文連接:QANET
深度可分離卷積:Xception: Deep Learning with Depthwise Separable Convolutions
DCN:Dynamic Connection Network for Question Answering

最後一個模型QANet,是預訓練模型發佈以前排名最優的一個閱讀理解模型了,其與以前模型明顯的不一樣就是,拋棄了RNN,只使用 CNN 和 Self-Attention 完成編碼工做,使得速度與準確率大大贈強。模型的主要結構以下圖(左)所示

該模型與大多與之模型的結構都是相同的,,由五個部分組成:Embedding layer, Embedding encoder layer, Context-query attention layer, Model encoder layer 和 Output layer。其中,整個模型中使用相同的編碼器塊(圖右),僅改變每一個塊的卷積層數,該編碼器塊主要由以下幾個特色:

  • 編碼器塊中的每一層都使用了 Layernorm 和殘差連接
  • 每一個編碼器塊的輸入位置都加入了 Transformer 中定義的 Position Embedding
  • Self-Attention 採用了 Transformer 中的多頭注意力機制
  • 編碼器塊中的卷積網絡並非簡單的卷積網絡,而是深度可分離卷積層((depthwise separable convolutions),該結構由更好的泛化能力,且有更少的參數和更低的計算量
    • 對於普通的卷積核卷積,輸入矩陣維度爲 \(N_{in} \times N_{in} \times C_{in}\),假設卷積核大小爲\(N_{k}\times N_{k} \times C_{in}\),輸出通道數爲 \(C_{out}\) ,則須要的參數爲 \(N_k \times N_k \times C_{in} \times C_{out}\)
    • 對於深度可分離卷積,則使用 \(C_{in}\)\(N_k \times N_k \times 1\) 的卷積核分別卷積每一個通道,而後使用\(C_{out}\)\(1 \times 1 \times C_{in}\) 的一維卷積整合多通道信息,總體參數只有 \(C_{in} \times (N_k \times N_k + C_{out})\)個參數

下面來看看總體結構:

  • Input Embedding Layer:與以前的模型處理相似,也是整合詞向量以及字符向量的方式來獲得詞表徵。
    • 對於詞嵌入,利用預訓練的GloVe詞向量來初始化,並在訓練的過程當中固定,而對於OOV詞,將其初隨機初始化以後加入訓練。
    • 對於字符向量,將每一個字符都初始化爲200維的可訓練向量,每一個詞都固定到16的長度,則每一個詞的字符向量表示爲字符向量矩陣的最大池化表示,從而將其映射到 200 的固定長度。最後的詞表徵爲詞向量與字符向量表徵拼接\([x_w;x_c]\) 經過一個 Highway 的輸出向量。
  • Embedding Encoder Layer:編碼層就是編碼器塊堆疊造成的,此處的編碼器塊層數爲1,將 Input Embedding Layer 輸出的長度爲 500 的向量 映射爲一個長度爲 128 的向量。

  • Context-Query Attention Layer:咱們用 C 和 Q 分別表示編碼後的 Context 和 Question,根據二維匹配模型,首先計算出 C 和 Q 的類似矩陣 \(S \in R^{n \times m}\),而後對其進行 Softmax 歸一化,獲得 Context 中每一個詞對 Question 全部詞的注意力分數,再將歸一化後的矩陣 \(\bar{S}\) 對問題表徵 Q 進行加權,從而獲得問題的context-to-query attention表徵:
    \[A=S \cdot Q^T \ \in R^{n\times d}\]

    類似度矩陣的計算方法也是比較傳統的方法:
    \[f(q, c) = W_0[q; c; q \cdot c]\]

    另外,做者還借鑑了當時高性能的模型中求解雙向注意力的方法(如BiDAF),計算了上下文的 query-to-context attention 表徵,計算方式借鑑的是 DCN 中的計算方法,首先對類似度矩陣 \(S\) 進行列歸一化,獲得 Question 的每一個詞對 Context 全部詞的注意力分數 \(\bar{\bar{S}}\) ,則 query-to-context attention 表徵爲
    \[B=\bar{S} \cdot \bar{\bar{S}}^T \cdot C^T \ \in R^{m\times d}\]

  • Model Encoder Layer:這部分繼續沿用了與 BiADF 中相似的結構,輸入爲 Contest 的 query-aware 表徵 \([c, a, c \cdot a, c \cdot b]\) ,其中 \(a, b\) 爲矩陣 \(A, B\) 中的一行。而編碼器塊處了卷積層數爲2,總的塊數是7之外,其他與 Embedding Encoder Layer 中的結構相同,總共堆疊3組編碼器塊(共有 3*7 個Encoder Block)。

  • Output layer:這一層一樣沿用與 BiADF 相似的結構,僅僅答案開始以及結束的位置進行預測。
    \[p^1=softmax(W_1[M_0;M_1])\\ p^2=softmax(W_2[M_0;M_2])\]
    其中,\(W_1, W_2\) 均爲可訓練矩陣,而\(M_0, M_1, M_2\) 分別爲3組編碼器塊的輸出

  • 損失函數一樣爲交叉熵。固然,經過改變輸出層的網絡結構,該模型可以適應其餘類型的閱讀理解任務,如單項多項選擇等。

總結

若是你看到了這裏,就會發現 QANet 基本融合以前全部模型的優勢,從而獲得了當時的最優效果(即便模型性能以後仍是被預訓練模型吊打),在這篇文章的基礎上,最後咱們總結一下機器閱讀理解模型的一些已被證明的十分有效的技巧:

  • 利用 Highway 結構對詞向量以及字符向量的整合
  • 編碼器 CNN 以及 Transformer 的並行能力以及信息提取能力已經能夠徹底代替LSTM,且CNN可用深度可分離卷積網絡,大大較少參數
  • 既然使用了 CNN 和 Transformer,位置編碼則是必不可少的
  • 經過對相關矩陣進行 Softmax 歸一化的方法獲得雙向注意力,再整合爲包含問題信息的上下文表徵,是一個十分高效的模型編碼方式
  • 對於答案爲上下文中某一個文段的問題,目前最優的方法是 Pointer Network 中指針位置預測的方法

參考連接
https://zhuanlan.zhihu.com/p/22671467
https://zhuanlan.zhihu.com/p/52977813
https://zhuanlan.zhihu.com/p/53132772
https://zhuanlan.zhihu.com/p/53324276
https://zhuanlan.zhihu.com/p/21349199
https://zhuanlan.zhihu.com/p/48959800
https://blog.csdn.net/zhang2010hao/article/details/88387493
https://zhuanlan.zhihu.com/p/53626872
https://zhuanlan.zhihu.com/p/35229701
https://zhuanlan.zhihu.com/p/61502862
https://zhuanlan.zhihu.com/p/58961139

相關文章
相關標籤/搜索