教機器學習閱讀

機器學會閱讀將是人工智慧在處理和理解人類語言進程中一個里程碑式的事件,是一個真正AI必須達到的標準。最近一家叫做Maluuba的科技公司,號稱開發了目前最領先的機器閱讀理解系統EpiReader[10],成為了業界的領跑者,也被媒體盛讚。本文是一篇機器閱讀理解的綜述文章,系統地總結和對比一下最近閱讀過的相關paper。

問題描述

首先定義下機器閱讀理解問題的數學模型。

問題可以表述為一個三元組(d,q,a),這裡d是指原文document,q是指問題query或者question(不同的paper可能稱呼不同,但指的是同一回事),a是answer,即問題的答案。這個答案是來自一個固定大小的辭彙表A中的一個詞。我們要解決的問題就變成了:給定一個document-query對(d,q),從A中找到最合適的答案a。

經常聽到這麼一句話,沒有分類解決不了的問題。雖然有一點誇張,但這個問題是一個典型的多分類問題,預測候選列表中每個word或者entity的條件概率,最大的那個就是正確答案。其實很多問題也都是這樣,尤其是在生成問題上,給定context,來predict每一個word的概率。

這裡不同的paper在辭彙表A中有些不同,有的paper將A定義為document和query中的所有詞,而有的將A定義為所有的entity,而有的將會附帶一個包括正確答案在內的10個候選答案,並且每個答案的詞性都一致。

語料

語料對於NLP的研究有著十分重要的基礎作用,尤其是大規模的語料為研究相關任務帶來了革命性的變化。前些年的語料都非常小,比如MCTest。從2015年開始,出現了兩大主流的大型數據集。

1、CNN/Daily Mail[9]

數據集構建基本的思路是受啟發於自動文摘任務,從兩個大型的新聞網站CNN和Daily Mail中獲取數據源,用abstractive的方法生成每篇新聞的summary,用新聞原文作為document,將summary中去掉一個entity作為query,被去掉的entity作為answer,從而得到閱讀理解的數據三元組(document,query,answer)。這裡存在一個問題,就是有的query並不需要聯繫到document,通過query中的上下文就可以predict出answer是什麼,也就失去了閱讀理解的意義。因此,本文提出了用一些標識替換entity和重新排列的方法將數據打亂,防止上面現象的出現。處理之後的效果見下圖:

2、Children』s Book Test(CBT)[3]

CBT的數據均來自Project Gutenberg,使用了其中的與孩子們相關的故事,這是為了保證故事敘述結構的清晰,從而使得上下文的作用更加突出。每篇文章只選用21句話,前20句作為document,將第21句中去掉一個詞之後作為query,被去掉的詞作為answer,並且給定10個候選答案,每個候選答案是從原文中隨機選取的,並且這10個答案的詞性是相同的,要是名詞都是名詞,要是命名實體都是實體,要是動詞都是動詞。例子看下圖:

左圖為電子書的原文,右圖為構建成數據集之後的幾個元素,document、query、answer和candidate。數據集根據詞性一共分為四類,第一類是Named Entity,第二類是Nouns,第三類是Verbs,第四類是Preposition。其實閱讀理解問題的難度在於前兩種詞性,後面的兩種用語言模型通過query的上下文就可以預測出來,不需要藉助於document的信息。這個數據集並沒有像CNN那樣做替換和重排的處理,反而是鼓勵大家用更少的信息來做閱讀理解。

說完最流行的兩個數據集,接下來介紹一下昨天剛剛在arxiv上submit的一個數據集。

3、Stanford Question Answering Dataset(SQuAD)[1]

該數據集的構建分為三個步驟:

  • 在Wikipedia中選取質量排名在10000以內的article,(這裡用了 Project Nayuki』s Wikipedia』s internal PageRanks來做rank),從每篇文章中提取出paragraph,經過一系列處理之後得到了23215個paragraph,涉及了很寬泛的話題。

  • 然後僱傭了crowdworkers給每個paragraph提問和回答,而且鼓勵workers用自己的話來提問。(這一點和CNN中用abstractive的思路很像,只不過是用了人工來做。)

  • 第三步是讓crowdworkers來用原文中的text(word或者是span)來回答這個問題,如果無法用原文回答的話,直接提交問題。

這個數據集的答案類型非常豐富,看下錶:

模型

本文所說的模型是指neural模型,人工features的模型就不介紹了。

1、Deep LSTM Reader / Attentive Reader / Impatient Reader[9]

這個模型是配套CNN/Daily Mail數據集的模型,只是作為後面研究的baseline,所以效果不會太好。

  • Deep LSTM Reader

看上圖,其實非常簡單,就是用一個兩層LSTM來encode query|||document或者document|||query,然後用得到的表示做分類。

  • Attentive Reader

這個模型將document和query分開表示,其中query部分就是用了一個雙向LSTM來encode,然後將兩個方向上的last hidden state拼接作為query的表示,document這部分也是用一個雙向的LSTM來encode,每個token的表示是用兩個方向上的hidden state拼接而成,document的表示則是用document中所有token的加權平均來表示,這裡的權重就是attention,權重越大表示回答query時對應的token的越重要。然後用document和query的表示做分類。

  • Impatient Reader

這個模型在Attentive Reader模型的基礎上更細了一步,即每個query token都與document tokens有關聯,而不是像之前的模型將整個query考慮為整體。感覺這個過程就好像是你讀query中的每個token都需要找到document中對應相關的token。這個模型更加複雜一些,但效果不見得不好,從我們做閱讀理解的實際體驗來說,你不可能讀問題中的每一個詞之後,就去讀一遍原文,這樣效率太低了,而且原文很長的話,記憶的效果就不會很好了。

2、Attention Sum Reader[6]

step 1 通過一層Embedding層將document和query中的word分別映射成向量。

step 2 用一個單層雙向GRU來encode document,得到context representation,每個time step的拼接來表示該詞。

step 3 用一個單層雙向GRU來encode query,用兩個方向的last state拼接來表示query。

step 4 每個word vector與query vector作點積後歸一化的結果作為attention weights,就query與document中的每個詞之前的相關性度量。

step 5 最後做一次相同詞概率的合併,得到每個詞的概率,最大概率的那個詞即為answer。

3、Memory Networks[3][5]

模型將document中的每一個word保存為一個memory m(i),每個memory本質上就是一個向量,這一點與embedding是一回事,只是換了一個名詞。另外每個word還與一個輸出向量c(i)相關聯。可以理解為每個word表示為兩組不同的embedding A和C。同樣的道理,query中的每個單詞可以用一個向量來表示,即對應著另一個embedding B。

在Input memory表示層,用query向量與document中每個單詞的m(i)作內積,再用softmax歸一化得到一組權重,這組權重就是attention,即query與document中每個word的相關度,與昨天的AS Reader模型有些類似。

接下來,將權重與document中的另一組embedding c(i)作加權平均得到Output memory的表示。

最後,利用query的表示和output memory的表示去預測answer。

然後,介紹下右圖的多層模型。根據單層模型的結構,非常容易構造出多層模型。每一層的query表示等於上一層query表示與上一層輸出memory表示的和。每一層中的A和C embedding有兩種模式,第一種是鄰接,即A(k+1) = C(k),依次遞推;第二種是類似於RNN中共享權重的模式,A(1) = A(2) = … = A(k),C(1) = C(2) = … = C(k)。其他的過程均和單層模型無異。

本文模型的特點是易於構造更多層的模型,從而取得更好的效果。後面Gate Attention Reader模型正式藉助了這個思想。

4、Dynamic Entity Representation[7]

計算出entity的動態表示之後,通過attention mechanism計算得到query與每個entity之間的權重,然後計算每個entity在document和query條件下的概率,找到最終的answer。

query向量的計算與動態entity計算過程類似,這裡需要填空的地方記作placeholder,也是包括四個部分,其中兩個是表示placeholder上下文的last hidden state,另外兩個是表示placeholder的hidden state。

模型的整個計算過程就是這樣。如果遇到一個entity在document中出現多次的情況,該entity就會會有不同的表示,本文採用CNN中常用的max-pooling從各個表示中的每個維度獲取最大的那一個組成該entity最終的表示,這個表示包括了該entity在document中各種context下的信息,具有最全面的信息,即原文中所說的accumulate information。如下圖:

5、Gate Attention Reader[8]

step 1 document和query通過一個Lookup層,使得每個詞都表示成一個低維向量。

step 2 將document中的詞向量通過一個雙向GRU,將兩個方向的state做拼接獲得該詞的新表示。同時也將query通過一個雙向GRU,用兩個方向上的last hidden state作為query的表示。

step 3 將document中每個詞的新表示與query的新表示逐元素相乘得到下一個GRU層的輸入。

step 4 重複step 2和3,直到通過設定的K層,在第K層時,document的每個詞向量與query向量做內積,得到一個最終的向量。

step 5 將該向量輸入到softmax層中,做概率歸一化。

step 6 因為document中有重複出現的詞,聚合之後得到最終的分類結果,即確定應該填哪個詞。

6、Iterative Alternating Attention[2]

step 1 將document和query通過一個Lookup層,使得每個詞都表示成一個低維向量。

step 2 將document和query中的詞向量通過一個雙向GRU,將兩個方向的state拼接獲得該詞的新表示。

step 3 這一步文章中稱為Iterative Alternating Attention,1)根據前一個inference狀態s(t-1)來計算query的attention,得到query glimpse q(t),對應圖中的1;2)根據前一個狀態s(t-1)和當前的query glimpse q(t)來計算document的attention,得到document glimpse d(t),對應圖中的2;3)用GRU來將前一個狀態s(t-1)和當前的query glimpse q(t)和當前的document glimpse d(t)做處理得到當前的狀態s(t)。

step 4 重複step 3 直到t達到給定的T為止。

step 5 用最後得到的每個詞向量進行歸一化,並且聚合相同的詞概率,得到預測結果。

結果

所有模型都是在兩大主流數據集上進行對比[2][8],結果如下:

Maluuba公司的模型在CBT數據集上是最好的,在CNN/Daily Mail數據集上並沒有最測試,而Gate Attention Reader佔據了CNN數據集上的頭把交椅。

model ensemble可以將single model的效果提升很多,是一種非常有效的技術。從第一個模型Attentive Reader到最後一個模型Iterative Alternating Attention時間跨度大概是半年左右的時間,閱讀理解的正確率提升了近20個百分點。

CBT數據集上包含了人工測試的結果,最高的準確率為81.6%,而目前計算機可以達到的最高正確率是72%,離人類仍有不小的差距,需要更多更牛的model湧現出來。

思考

讀了一周的Machine Reading Comprehension paper,有幾點思考:

1、大規模語料的構建是nlp領域研究進步的重要基礎和保證,深度學習模型尤其是端到端+注意力模型利用大規模的語料進行訓練和學習,極大地提升了計算機閱讀理解的效果。而且每出現一個新的數據集,都會彌補之前數據集存在的問題,對模型提出了更高的要求,從而提高了該領域的研究水平。同時,也給很多需要畢業的童鞋提供了一個新的刷榜平台。

2、模型的提出應該更多地聯繫人類是如何解決這個問題的,比如attention、copy mechanism等等優秀的模型。attention藉助了人類觀察一個事物的時候,往往第一眼會先注意那些重要的部分,而不是全部這個行為方式。copy mechanism而是受啟發於當人類不了解一個事物或者該事物只是一個named entity,而又需要表達它的時候,需要「死記硬背」,需要從context中copy過來。模型Dynamic Entity Representation用一種變化的眼光和態度來審視每一個entity,不同的context會給同樣的entity帶來不同的意義,因此用一種動態的表示方法來捕捉原文中entity最準確的意思,才能更好地理解原文,找出正確答案。實際體會中,我們做閱讀理解的時候,最簡單的方法是從問題中找到關鍵詞,然後從原文中找到同樣的詞所在的句子,然後仔細理解這個句子最終得到答案,這種難度的閱讀理解可能是四、六級的水平,再往高一個level的題目,就需要你聯繫上下文,聯繫關鍵詞相關聯的詞或者句子來理解原文,而不是簡單地只找到一個句子就可以答對題目。

3、[4]和[6]中用簡單的模型反而會得到更好的結果,[9]中用了非常複雜的注意力機制反而並沒有太好的結果。[2][8]都證明了用多層結構比單層結構更優秀。那麼,是不是多層簡單的模型會有更好的效果?這是一個需要動手實踐來研究的問題。

4、當前的這些模型都是純粹的data-driven,並沒有考慮人工features進來。我一直堅信,如果做一個準確率非常高的系統的話,neural models+features是必須的,針對具體的問題,做具體的分析;但是如果是對於學術界研究model的話,提出更牛的neural models比純粹的刷榜更有意義。

參考文獻

[1] SQuAD: 100,000+ Questions for Machine Comprehension of Text

[2] Iterative Alternating Neural Attention for Machine Reading

[3] THE GOLDILOCKS PRINCIPLE: READING CHILDREN』S BOOKS WITH EXPLICIT MEMORY REPRESENTATIONS

[4] A Thorough Examination of the CNN Daily Mail Reading Comprehension Task

[5] End-To-End Memory Networks

[6] Text Understanding with the Attention Sum Reader Network

[7] Dynamic Entity Representation with Max-pooling Improves Machine Reading

[8] Gated-Attention Readers for Text Comprehension

[9] Teaching Machines to Read and Comprehend

[10] Natural Language Comprehension with the EpiReader


推薦閱讀:

用深度學習(CNN RNN Attention)解決大規模文本分類問題 - 綜述和實踐
自然語言處理基礎技術之分詞、向量化、詞性標註
python | sklearn ,做一個調包俠來解決新聞文本分類問題
RNN Encoder–Decoder的attention機制簡介
淺談自然語言處理 – 開端

TAG:自然语言处理 | 机器学习 | 深度学习DeepLearning |