揭開知識庫問答KB-QA的面紗8·非結構化知識篇

內容速覽

  • 非結構化的知識庫——維基百科
  • 文檔檢索與文檔理解
  • 段落encoding、問題encoding與答案預測
  • 實驗與總結

如果你想尋找一個問題的答案,比如謝霆鋒的出生年月,那麼你可能會先去查看關於謝霆鋒的百度百科 或者 維基百科,找到和出生年月相關的那一行信息,再提取答案。那麼,我們能不能讓機器也這樣去回答問題呢?在我們前面講到的文章中,我們都使用了結構化的知識庫來回答問題,今天我們將介紹一種使用非結構化的知識庫——維基百科作爲知識源來進行KB-QA。


我們以斯坦福和Facebook AI Research17年較新的這篇文章Reading Wikipedia to Answer Open-Domain Questions爲例,進行介紹。

非結構化的知識庫——維基百科

相比更適合機器去理解的結構化知識庫,維基百科的非結構化知識更適合人們去閱讀,而這樣的非結構化知識往往比結構化知識庫更加的豐富和巨大,使用非結構化知識進行KB-QA具有更強大的泛化性。

給定一個問題,我們可以在維基百科中找到相關信息和答案,如下表所示:


可以看出,對於問題我們可以在維基百科中找到相應的文章,根據文章找到與答案相關的段落,然後提取出答案。

思路與模型

我們的思路其實很簡單,分爲兩個步驟:第一步根據問題檢索出維基百科中的相關文章(DocumentRetriever),第二步在文章中找到相應的段落並提取出答案(DocumentReader),第二步的過程其實和NLP中的閱讀理解問題很相似,我們可以借鑑其中的技術來完成。整個流程如下圖所示:


Document Retriever

通過問題檢索出相關的文章有很多的方法,最簡單的方法就是統計兩者的TF-IDF得到詞袋模型向量,然後通過cosine similarity等相似度度量方式進行檢索。進一步可以將相鄰詞彙也考慮進去,使用n-gram的詞袋模型。這篇文章中,作者使用bigram的詞袋模型,爲了加快效率,將bigram映射爲murmur3 hash

對於問題,我們通過Document Retriever檢索出最相關的五篇文章。

Document Reader

接下來,我們使用NLP 閱讀理解問題中的一些方法來得出答案。對於每篇文章的每個段落,我們去預測一個文本區間作爲答案的概率,具體來說,我們根據問題去預測該自然段答案的起始位置(start position)和終止位置(end position)。依次對每篇文章的每個段落進行預測,選出概率最大的區間作爲最終答案。

首先我們對每個段落進行encoding,我們將段落中的每一個token用一個特徵向量表示,該特徵向量包含以下四個部分:

  1. 詞向量(Word-embbedings):300維度預訓練好的詞向量,由於問題中有些詞語比較特殊,如疑問詞,因此我們在訓練中,對word-embedding中前1000的高頻詞進行fine-tune,其他詞的word-embedding固定使用預訓練的值,不再進行訓練。
  2. 抽取匹配(Exact Match):我們用三個二元的指示器來表示該token是否在問題中出現,三個二元指示器分別表示該token的不同形式的表達(如大小寫)。
  3. 符號的特徵(Token Features):我們也將該符號的詞性標註、命名實體和歸一化後的TF作爲3個特徵加入到特徵向量中。
  4. 引入對問題的注意力機制(Aligned question embedding):該特徵和特徵2抽取匹配類似,都是爲了表徵該token和問題的關聯度,與特徵2不同的是,該特徵考慮了整個問題與它的相似度,而非某一個具體的單詞,是一種soft-alignment。具體來說,將問題每個單詞的embedding和該token通過點乘比較相似度得到加權係數,再對問題每個單詞的embedding進行加權求和作爲該特徵,公式如下:
  5. 其中p代表段落中的token,q代表問題中的token,E表示embedding,alpha是二者點乘後的歸一化相似度,即:

這樣我們就將段落中的每一個token進行了向量化,接下來我們使用一個3層的雙向LSTM對段落進行encoding,假設雙向LSTM每一層隱層爲h,我們將所有隱層連接起來,這樣對於每個token就得到了一個6h大小的向量表達\textbf{p}_i

接下來我們對問題進行encoding,使用另外一個3層的雙向LSTM對問題的word-embedding進行編碼,將每時刻的隱層進行加權求和,該歸一化加權係數由訓練得到,學習了問題中每個單詞的重要程度,這樣我們就得到了一個問題的向量表達\textbf{q}

得到了問題和段落的編碼,我們就可以進行答案區間的預測了,我們對於段落的每一個位置i,都用兩個雙線性項去分別預測它作爲答案起始位置和終止位置的概率,公式如下:


我們在該段落中去尋找一個區間最有可能是答案的區間[i,i'],即滿足P_{start}(i) \times P_{end}(i')最大,且i \leq i' \leq i + 15。我們將每個候選段落中最可能是答案的區間進行比較,選出最終的答案區間,這裏爲了能夠在所有段落中進行比較,我們用指數形式替換掉歸一化的Softmax。

實驗

作者使用2016-12-21版的英語版維基百科作爲知識源,通過對每一頁進行文本提取和結構化元素的刪除(section、list、figure、index)等預處理,最終得到了5,075,182篇文章,含9,008,962種token。

關於答案問題對,作者使用了三個數據集QA的數據集:CuratedTREC、WebQuestion和WikiMovies,作者也加入了閱讀理解問題的數據集SQuAD,以上數據集的規模如下表所示:


與SQuAD數據集不同,其他三個QA數據集只有答案問題對,沒有標註對應的維基百科文章和段落,因此作者使用以下方法去生成標籤:

對於每個問題,檢索出最相關的5篇文章,將不包含問題答案的段落,以及長度不滿足區間25-1500的段落去掉,如果問題中帶有命名實體,則也將不包含該命名實體的段落刪除。對於剩下的段落,我們對包含答案的位置進行評分,評分的標準是問題和該段落位置20 token的window中一元和二元的重疊程度,選取重疊程度最高的作爲遠程監督學習的label。

對於document retriever的性能,作者在四個數據集上進行了測試,測試能夠在最相關的5個文章中找到答案的概率,並與Wikipedia Search Engine進行比較,結果如下:


可以看出作者提出的document retriever在該問題上性能要優於Wikipedia Search Engine

對於document reader,作者使用h=128的3層雙向LSTM,0.3的dropout以及Adamax作爲優化器進行訓練,並比較了 1)只在SQuAD上訓練,和2)先在SQuAD上預訓練,再單獨在三個QA數據集上進行遠程監督訓練fine-tune(+Fine-tune)以及3)在四個數據集上進行多任務訓練的 測試結果——Top-1 exact-match 正確率,如下表所示:


可以看出,經過多任務訓練之後的模型,效果會更好一些。

作者也用document reader在SQuAD上進行閱讀理解任務的性能測試,與上面測試不同的是,上面是通過檢索維基百科中的文章進行回答,而該測試是直接給定相關的段落,作者與其他的state-of-art方法進行了比較,效果如下:


可以看出,作者提出的這個document reader模型,在閱讀理解領域效果也很不錯。我們注意到,在這裏作者也分析了token的四種feature對實驗的影響,結果如下表:


可以看出aligned和exact_match這兩個feature對性能影響較大。

總的來說,該文章提出來了一個將閱讀理解技術應用到KB-QA的思路,使得我們不僅僅可以使用結構化的知識庫作爲知識源回答問題,也能使用非結構化的知識源通過閱讀理解技術來幫助我們得到答案。

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