論文淺嘗 - ICLR 2020 | 用於文本推理的神經模塊網絡

論文筆記整理:鄧淑敏,浙江大學在讀博士,研究方向爲低資源條件下知識圖譜自動化構建關鍵技術研究。



論文鏈https://openreview.net/pdf?id=SygWvAVFPr

Demo鏈接: https://demo.allennlp.org/reading-comprehension

代碼鏈接: https://nitishgupta.github.io/nmn-drop/

這篇文章解決的任務是複雜問題問答,比如回答“誰在第二節比賽中得到最高分?”類似的問題。解決這個任務需要:理解問題->在蘊含答案的文本中做信息抽取à符號推理,所以問題的難點也顯而易見:(1)理解問句語義,將複雜問題拆分成簡單問題;(2)文本理解,理解文本中實體、關係和事件等;(3)進行推理,比如判斷大小,計數等。傳統的方法比如語義解析,或者pipeline的模型,要麼需要基於結構化或半結構化數據去做,要麼在子任務中依賴更多的監督信號,這對複雜問題問答任務來說都很難實現。因此這篇文章提出用神經模塊網絡去解決這個問題,先將問題解析成logicalform,然後在文本中運行可執行的模塊。這裏的模塊可看成用於推理的可學習的函數。

模塊概覽

複雜問題問答包含的推理可分爲兩大類:自然語言推理和符號推理。自然語言推理可以看成是文本信息抽取的過程,符號推理就是基於抽取出的結構化知識進行推理判斷。這兩大類推理中定義的模塊如上圖所示。

下面看一個用神經模塊網絡解複雜問題問答的例子。

第一步:將問題解析成logicalform。

將問題解析成logicalform

第二步:在蘊含答案的文本中執行模塊。

模塊運行的最終結果

執行第一個模塊:find(),找出得分這個實體

執行第二個模塊:find-num(),找出得分的數值

執行第三個模塊:max-num(),找出最大的得分值

執行第四個模塊:extract-argument(),找出得到最大得分的人,這個模塊類似於事件抽取中的argumentextraction

那接下來的問題就在於,如何組合這些模塊,以及如何學習出這些模塊。組合這些模塊目前主要用一些seq-to-seq的模型,至於學習這些模塊,下面給出學習find()模塊的示例。

問題的嵌入用Q表示,蘊含答案的文本嵌入用P表示,find(Q)->P,輸入問句的tokens,輸出蘊含答案的文本中和輸入tokens相同或相似的token分佈,如下圖所示

find(Q)->P示例

具體做法就是先計算一個“問題-蘊含答案文本”的相似度矩陣

然後按行標準化S,得到“問題-蘊含答案文本”的權重矩陣

最後得到蘊含答案文本的token權重分佈:

其他模塊的做法這裏就不贅述了,可以參見原文。

本文的實驗用了DROP數據集(https://www.aclweb.org/anthology/N19-1246.pdf),實驗結果如下

實體預測的實驗結果比較

由於篇幅限制省略了一些細節,如果大家對這篇文章的工作感興趣,可以閱讀原文,也歡迎一起交流。



 

OpenKG

開放知識圖譜(簡稱 OpenKG)旨在促進中文知識圖譜數據的開放與互聯,促進知識圖譜和語義技術的普及和廣泛應用。

點擊閱讀原文,進入 OpenKG 博客。

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