機器閱讀理解,筆者認為他是NLP中最有意思的任務了。機器閱讀一份文件之後,可以“理解”其中的內容,並可以回答關於這份文件的問題。聽上去,有一種很強的“人工智慧”的Feel。
這篇文章介紹機器閱讀理解(Machine Reading Comprehension),包括MRC的概況、做法以及主要模型。
作者&編輯 | 小Dream哥
目標
目前來講,還沒有一種NLP技術,能夠端到端的實現對文字的理解。通常是轉化位不同的NLP任務,來實現對文字不同層面的“理解”,例如如下的任務:
- 詞性識別
- 命名實體識別
- 句法依存
- 句法依存
MRC也是一種理解文字的任務,它的大體模式是: 機器閱讀文件,並回答相關的問題。
這跟我們做英語的閱讀理解題目是非常的相似,閱讀一篇英文章之後,基於此,做後面的幾道選擇題或者填空題。
MRC發展概況
在MRC的早期主要是一些基於規則和機器學習方法的MRC系統:
- 1997,QUALM system
- 1999. Reading Comprehension dataset by Hirschman et al
- 1999 Deep Read System (rule-based BOW model)
- 2000 QUARC system (rule-based)
- 2013-2015 MCTest(and 4 on1) and ProcessBank(Y/N) dataset
- 2014 Statistical Model
- Machine learning Models(map the question to formal queries)
上述基於規則的系統,通常能夠獲得30-40%的準確率,機器學習模型取得了一些進展,但也有一些問題,例如:
- 嚴重依賴一些基於語法和語言學的工具
- 資料集太小
- 基於現有的語言學工具,很難特徵構建有效的特徵
隨著深度學習時代的到來,這種情況得到了很大的改上,出現瞭如下的模型是資料集:
- 2015. The Attentive Reader(Hermann et al). Achieved 63% accuracy
- 2015 CNN and Daily Mail
- 2016 Children Book Test
- 2016 The Stanford Question Answer Dataset (SQUAD 1)
- 2017 Match-LSTM,BiDAF,TrivalQA,R-net,RACE
- 2018. QANet, NarrativeQA ,BiDAF+self-attention+ELMO,SQuAD 2.0, The Standford Attentive Reader,BERT, HotPotQA
我們現在來正式的定義一下基於神經網路的MRC:
給定一個訓練資料集{P,Q,A},目標是學習一個函式f:
f(p,q)-> a
其中,P是文件集,Q是問題集,A是答案集。
根據Answer的型別,我們可以把目前的MRC系統分為以下4類:
- 完形填空型別(cloze)
- 多項選擇(Multiple Choice)
- Span Prdiction
- Free-From answer
The Standford Attentive Reader
如下圖所示,展示了Stanford Attentive Reader模型結構圖
這裡的SAR主要用來解決的是span prediction的MRC問題。設給定一篇文章p,長度位l1;同時給定一個問題q,長度位l2;目的是預測一個span(start,end),start和end是P上詞位置,並且這個span是這個問題的答案。
模型將這個任務轉化為序列上的二分類問題,即對於文章中的每個詞,都預測這個詞分別是start和end的得分,最後用這個分數來預測span。
1)question部分的編碼
主要是對question進行編碼,先經過embedding層,而後用BiLSTM進行序列建模,最終每個詞的表徵為:
然後,接一個帶權重的softmax,得到一個編碼向量q,如下的公式所示:
2)Passage編碼部分
Passage的編碼也是先經過embedding,再透過BiLSTM進行序列建模,最終每個詞的表徵為:
需要注意的是,輸入BiLSTM的emdedding向量是由4部分concate而成的:
- Glove生成的embedding
- embedding對齊特徵,透過與q的embedding做attention而得到
- 詞性特徵
- 實體型別特徵
3)prediction部分
簡單來說就n個二分類,根據q和p分別預測每個詞是start及end的機率:
4)損失函式
訓練過程中採用的損失函式如下:
這個模型還可以轉化為上述的cloze,multiple-choice等型別的MRC任務,做一些簡單的調整即可。
我們前面還介紹過,如何基於BERT來做MRC的任務,感興趣的讀者可以看看:
基於MRC可以完成知識抽取、QA等重要的NLP任務,讀者務必熟悉。