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