Complex Knowledge Base Question Answering: A Survey(2021年10月)
前言
這是一篇對于複雜問題KBQA領域的詳細綜述,其工作主要集中在以下方面:
- 文章總結了目前複雜問題知識庫問答領域所面臨的一些難題,以及針對這些難題現存的思路和解決方法;
- 針對上一問題中提出的思路和方法分門别類,對于目前複雜問題KBQA領域的研究方向進行了梳理,并且對各研究方向上所用的主要算法、模型、表現進行了總結;
- 對在複雜問題KBQA中常用的知識庫和資料集進行了介紹。
目前複雜問題知識庫問答面臨的問題
- 目前基于語義解析方法的解析器很難覆寫多樣且複雜的問題,如把含多跳推理、限制關系和數字操作的問題。
- 複雜問題中更多的關系和主語使得在解析的過程中,對潛在邏輯形式的搜尋空間大大增加。通常在解析的過程中,對于不同的實體會有枚舉所有SPO的操作,這樣也就很容易了解搜尋空間的增大了。
- 無論對于基于語義解析的方法還是基于資訊檢索的方法,問題了解都是一個先導步驟。當問題變得複雜之後,模型就需要更加強大的自然語言了解能力和生成能力。
- 由于人工标記問題路徑(從主體實體到答案實體的路徑)的代價十分高昂,是以這一類的資料也就很稀少,這為模型的訓練帶來了問題,造成模型的訓練通常在一個弱監督信号的條件下進行。
具體來說,複雜問題的知識問答分為兩類:基于語義解析的知識庫問答,基于資訊檢索的知識庫問答。基于語義解析的知識庫問答在拿到問題之後通過對問句的語義進行分析,建構出形式化的查詢,通常是SPARQL語句,然後去知識庫中查找答案。基于資訊檢索的知識庫問答,在拿到問句之後根據問句中的實體在知識庫中找出相應的子圖,然後建構出主題實體到答案的路徑,進而求解出答案。這篇文章對于兩種方法具體化的分為了幾個功能子產品,并對每個功能子產品面對的挑戰進行了介紹。
論文章節内容:
- 介紹
- 背景知識,包含任務制定、基礎知識等
- 可用的資料集以及這些資料集是如何建構的
- 介紹兩種針對複雜知識問答的主流方法
- 針對兩種主流方法,指出他們各自面對的典型挑戰以及相應的解決方法
- 讨論了幾個最近的研究趨勢
- 總結本文的貢獻
文章目錄
- 一、知識庫問答基礎知識
-
- 1. 知識庫介紹
- 2. 知識庫問答任務的公式化定義
- 3. 傳統方法
- 4. KBQA系統評估名額
- 二、常用資料集
- 三、基于語義解析的複雜問題知識庫問答
- 四、基于語義解析的複雜問題知識庫問答面對的問題和解決方法
-
- 1. 概括
- 2.複雜語句的語義和句法了解
-
- 1)基于Seq2seq
- 2)基于樹結構或者圖結構的邏輯形式候選排序
- 3)解決狀态轉換建構候選查詢圖方法忽視問題語義結構的問題
- 3. 解析複雜問題
- 4. 在大搜尋空間中落地
- 5.在弱監督信号中訓練
- 6. 用到的模型和實作方法
- 五、目前一些新的研究方向
一、知識庫問答基礎知識
1. 知識庫介紹
常用的大規模知識庫有:Freebase [1], DBPedia [2], Wikidata [3] and YAGO [4]
- 知識庫中的知識通常是三元組的格式
- 為了支援結構化查詢,大規模開放知識庫都是用RDF描述的,而SPARQL是常用來檢索操作知識庫的查詢語言
- 不同的知識庫有不同的建構目的、多變的配置、不同的模式設計。例如,Freebase由社群成員從很多資源收集而來,包括Wikipedia;YAGO将Wikipedia和WordNet作為知識源,涵蓋了更加一般的概念的分類;WikiData是一個多語言知識庫,它整合了多知識庫資源,覆寫率和品質都很高。
對于知識庫更加詳細的對比可以看這裡。
2. 知識庫問答任務的公式化定義
-
知識庫的公式化表達
G = { < e , r , e ′ > ∣ e , e ′ ∈ ε , r ∈ R } \mathcal{G} = \{<e,r,e^{'}>|e,e^{'} \in \varepsilon, r \in \mathcal{R} \} G={<e,r,e′>∣e,e′∈ε,r∈R}
其中, < e , r , e ′ > <e,r,e^{'}> <e,r,e′>代表一個主語 e e e和謂詞 e ′ e^{'} e′之間存在關系 r r r。 ε \varepsilon ε 代表知識庫中實體的集合, R \mathcal{R} R代表知識庫中關系的集合。
-
問答任務的公式化定義
問題: q = { w 1 , w 2 , ⋯ , w m } q = \{w_1,w_2, \cdots, w_m\} q={w1,w2,⋯,wm},其中 w i w_i wi是問句中第 i i i個單詞的token。
預測答案: A ~ q \tilde{\mathcal{A}}_q A~q, 真實答案: A q {\mathcal{A}}_q Aq
用于訓練模型的資料集: D = { ( q , A q ) } \mathcal{D}=\{(q,{\mathcal{A}}_q)\} D={(q,Aq)}
目前的研究假設 A q {\mathcal{A}}_q Aq提取自知識庫的實體集 ε \varepsilon ε。這裡要注意,對于簡單問句,其答案實體往往和主題實體是直接相連的,其真是答案 A q {\mathcal{A}}_q Aq 真包含于實體集 ε \varepsilon ε。然而,對于複雜問句,其答案實體往往有多個而且離主題實體有好幾跳的距離,甚至其答案是這些實體的聚合。
3. 傳統方法
如下圖所示是對簡單問題的知識庫問答架構,通常分為兩步。
第一步是尋找問句中的主題實體,目的在于将一個問題和知識庫中有關聯的實體連接配接起來。在這個過程中,命名實體識别、消歧和連結都是在這一步完成。這一步通常用一些現成的實體連結工具,如:S-MART [24], DBpedia Spotlight [25], and AIDA [26]. 這裡有實體連結工具的介紹。
第二步是用問題 q q q作為一個答案預測模型的輸入,用這個模型來預測答案 A ~ q \tilde{\mathcal{A}}_q A~q。
論文中還講了其他的方法,這裡不一一贅述,詳細可看論文。
值得一提的是,簡單問題的知識庫問答基本已經解決,這篇文章講述了簡單問題知識庫問答的情況,而且附有源碼,我個人認為是了解簡單問答的一個很好的資料。相信對簡單問答有了一些了解之後,對複雜問答的了解也會有幫助。
4. KBQA系統評估名額
總的說,對于一個KBQA系統的評估,可以從三方面進行:可靠性、健壯性、系統和使用者的互動。
-
可靠性
評估名額有四個:準确率、召回率、F1值、[email protected]
準确率: P r e c i s i o n = ∣ A q ∩ A q ~ ∣ ∣ A q ∣ ~ Precision = \frac{|\mathcal{A}_q \cap \tilde{\mathcal{A}_q}|}{|\tilde{\mathcal{A}_q|}} Precision=∣Aq∣~∣Aq∩Aq~∣
召回率: R e c a l l = ∣ A q ∩ A q ~ ∣ ∣ A q ∣ Recall = \frac{|\mathcal{A}_q \cap \tilde{\mathcal{A}_q}|}{|\mathcal{A}_q|} Recall=∣Aq∣∣Aq∩Aq~∣
F1 值 : F 1 = 2 ∗ P r e c i s i o n ∗ R e c a l l P r e c i s i o n + R e c a l l F_1 = \frac{2*Precision*Recall}{Precision + Recall} F1=Precision+Recall2∗Precision∗Recall
[email protected]:
這裡的[email protected]是[email protected]中的n取1時的名額,而[email protected]是知識圖譜嵌入中的常用名額,在知識圖譜嵌入中n通常取3或者10。[email protected]有時會用在KBQA任務中。
[email protected],主要用于三元組連結預測,假設有一個三元組的正例,目前已知三元組的主題實體,然後對這個三元組進行預測。進行了1次預測,這一次預測得到了m(n<m)個預測三元組,根據預測三元組的正确程度會有一個得分,然後按照得分由高到低排序,分數最高的排序為1。如果這一次預測後,前n個中包含正例,則記此次預測記為1分,否則記0分。假設進行了N次預測,其中前n個包含正例的次數為M,則 H i t s @ n = M N [email protected] = \frac{M}{N} Hits@n=NM.下面是一個例子:
假設有兩個正例
進行了兩次預測Jack born_in Italy Jack friend_with Thomas
其中後面帶星的是正例。則:s p o score rank Jack born_in Ireland 0.789 1 Jack born_in Italy 0.753 2 * Jack born_in Germany 0.695 3 Jack born_in China 0.456 4 Jack born_in Thomas 0.234 5 s p o score rank Jack friend_with Thomas 0.901 1 * Jack friend_with China 0.345 2 Jack friend_with Italy 0.293 3 Jack friend_with Ireland 0.201 4 Jack friend_with Germany 0.156 5
[email protected]= 2/2 = 1.0 [email protected]= 1/2 = 0.5
-
健壯性
目前的很多KBQA資料集都是基于模闆産生而缺乏多樣性;
訓練資料的規模因為人工标注的高代價而受到限制;
現在是資料爆炸的時代,訓練資料集不可能覆寫所有的範圍。
是以,提高模型的健壯性一直是一個重要的話題,如何使得模型可以覆寫不包含在訓練集内的模式元素和領域是一個重要的研究方向。
-
系統和使用者的互動
一個好的問答系統應該跟使用者有良好的互動,目前離線的試驗評估受到比較大的重視,然而和使用者的互動這一方面收到了忽略。事實确實如此,此處不多餘贅述、
二、常用資料集
此部分對複雜問題知識庫問答中常用的資料集進行介紹分析。
原文中的章節對各個資料集的來源以及建構時的特殊性進行了詳細的介紹,感興趣可以去閱讀原文。如果作為使用者,文中的TABLE 1已經足夠:
其中LF\CO\NL\NU的含義如下:
LF:資料集是否提供類似SPARQL的邏輯形式(Logic Forms)
CO:資料集中是否含有包含限制(Constraints)的問題
NL:資料集的生成過程中是否雇傭人工對問題進行同意改寫(NL, Natural Language)
NU:資料集中是否包含需要數字操作(Numerical operations)的問題,數字操作例如比較、排序等
三、基于語義解析的複雜問題知識庫問答
在文章中是對基于語義解析的知識庫問答和基于資訊檢索的知識庫問答兩種主要思路都進行了介紹,這裡隻看基于語義解析的方法,對基于資訊檢索的方法感興趣可以去看原文。
總的來說,基于語義分析的方法執行的是一個 p a r s e − t h e n − e x c u t e parse-then-excute parse−then−excute 的流程,基于資訊檢索的方法執行的是一個 r e t r i e v e − a n d − r a n k retrieve-and-rank retrieve−and−rank 的流程。
此處隻讨論語義解析的知識庫問答流程。
第一步:完整的了解問題中的語義資訊,這一步經常使用LSTM,GRU,目前使用BERT也很多,最終得到的是包含語義資訊的編碼後的問題
q ~ = Q u e s t i o n _ U n d e r s t a n d i n g ( q ) \tilde{q} = Question\_Understanding(q) q~=Question_Understanding(q)
第二步:将第一步得到的編碼後的問題作為輸入,生成邏輯形式,提取問題中的邏輯結構資訊。這一步可以通過序列生成或者對候選打分獲得。實踐中經常采用Seq2seq模型和基于特征的打分模型。(邏輯形式到底是什麼樣的形式?)
l q ˉ = Logical_Parsing ( q ~ ) \bar{l_q}=\text{Logical\_Parsing}(\tilde{q}) lqˉ=Logical_Parsing(q~)
第三步:将第二步得到的邏輯形式,針對具體的知識庫進行執行個體化,生成可以在知識庫中執行的查詢 l q l_q lq,這個 l q l_q lq可以轉化為SPARQL形式。值得一提的是, l q l_q lq中必然包含 e q e_q eq,這裡的 e q e_q eq是通過實體連結得到的。在很多模型中,是将第二步和第三步結合在一起的。(實體連結在哪一步執行?)
l q = KB_Grounding ( l q ˉ , G ) l_q = \text{KB\_Grounding}(\bar{l_q},\mathcal{G}) lq=KB_Grounding(lqˉ,G)
第四步:執行第三步得到的形式化查詢得到預測答案
A q ~ = KB_Execution ( l q ) \tilde{\mathcal{A_q} } = \text{KB\_Execution}(l_q) Aq~=KB_Execution(lq)
注意:
- 雖然沒有特别說明,但是實體連結是在第一步中進行的,通過實體連結和關系檢測找到實體和關系,進而根據找到的關系建構第二步的邏輯結構;
- 第三步的執行個體化是用實體連結中找到的實體;
- 在實踐中,第二步的邏輯結構可以通過人工制定模闆或者建構查詢樹等形式,例如對一跳問題提供一個邏輯形式,對兩跳問題提供另一種邏輯形式;
- 目前複雜問題知識庫問答的研究大多集中于第二步,努力提高第二步的效果,對于第二步來說,提升模型語義解析能力和設計更好的邏輯形式是提升性能的關鍵方法;
- 第一步的語義提取和實體連結等技術目前已經較為成熟。
四、基于語義解析的複雜問題知識庫問答面對的問題和解決方法
1. 概括
前面已經将基于語義分析的知識庫問答流程大緻分為了四個階段:Question understanding, Logical parsing, KB grounding, KB execution。不同的部分都面臨相對的問題,概括的将有以下幾個方面:
- 當問題的語義和句法更加複雜之後,問題了解(Question Understanding) 變得更加困難。
- 複雜問題更加多樣化,邏輯解析(Logical parsing)很難覆寫全面。同時,複雜問題中更多的實體和關系使得搜尋空間大大增加,進而降低分析的效率。
- 手動标注資料的成本太高,是以導緻基于語義解析的方法缺乏良好的訓練資料,隻能在弱監督信号的條件下訓練。
論文接着從四個方面對目前的研究情況進行總結,概括如下表,接下來我将詳細說明。
2.複雜語句的語義和句法了解
作為SP-based的第一步,問題了解子產品講非結構化的轉化為編碼的問題,這對下遊的分析有很大的作用,而複雜問題相對于簡單問題更加難以提取其語義。
1)基于Seq2seq
- 為了更好的了解複雜自然語言問題,很多現存的方法依靠句法解析,例如基于依存性的【13】、【64】、【68】和AMR【72】,這樣使得問題的成分與邏輯形式元素有更好的比對。
- 為了減少對于複雜問題句法分析的不正确性,【73】利用基于骨架的分析法來獲得複雜問題的主幹部分,這樣的一個主幹包含一個具有幾個待擴充分支的簡單問句。例如,句子“What movie that Miley Cyrus acted in had a director named Tom Vaughan?”的主幹是"What movie had a director?",原句子中的定語從句則是分支。在這樣一個骨架結構中,隻有簡單問題将被進一步解析,這樣更有可能得到準确的解析結果。
2)基于樹結構或者圖結構的邏輯形式候選排序
- 【74】提出了一個新穎的打分模型,在這個模型中利用查詢圖結構和注意力權重明确的比較謂詞和自然語言問題。具體來說,文中提出了一個細粒度的槽比對機制,這個機制用于在核心推理鍊上對問題和每一個謂詞進行跳寬度的語義比對。
- 相較于捕捉問題和一個簡單關系鍊之間的語義關聯,【75】聚焦于查詢的結構特征并以查詢問題比對的方式執行KBQA。他們用了一個結構感覺編碼器來為一個查詢中的實體或關系上下文模組化,進而提升查詢和問題的比對度。相似的,【77】使用了兩個Tree-LSTMs[94]來分别為問題的依存關系樹、候選查詢的樹結構進行模組化,并且利用二者之間的結構相似性做綜合排名。
3)解決狀态轉換建構候選查詢圖方法忽視問題語義結構的問題
傳統方法采取狀态轉換政策來生成候選查詢圖。這種政策忽視了問題本身的結構性,這樣講導緻一大批不合格的查詢進入候選集。
- 為了過濾這些不合格的查詢,【76】提出了預測問題的查詢結構并以此限制候選查詢生成的方法。具體來說,他們設計了一系列的操作來生成對一些類型的占位符,這些類型包括:數字操作,謂詞,實體。在這之後,他們借助知識庫将這些未執行個體化的邏輯形式落地,進而産生可執行的邏輯形式。通過這樣的兩階段操作,含有非比對結構的非法邏輯形式會被高效的過濾出去。
論文清單:
3. 解析複雜問題
為了生成一個可執行的邏輯形式,傳統方法第一步利用現存的解析器講一個問題轉換為CCG派生,這個CCG派生可以通過在知識庫中尋找相應的關系和實體與其謂詞和論據相比對,進而生成具體的SPARQL查詢。
然而,由于這些方法存在本體錯誤比對的問題,隻能被當做複雜問題問答中的次優先級方法。是以,利用知識庫的的結構來進行精準的解析就是必須的,這種精準的解析表現出來的是和知識庫的事實高度一緻。為了适應複雜問題的組合型,研究者提出了不同的邏輯表達形式作為解析的目标。
- 由于在前面的步驟已經得到了主題實體,【78】從主題實體出發,設計了三種查詢模版作為解析的目标。如下圖所示,前兩種模闆傳回跟主題實體‘Titanic’相距一跳或者兩跳距離的實體。第三種模版傳回跟主題實體的距離在兩跳以上以及被其他實體限制的實體。這種方法雖然可以成功解析幾種類型的複雜問題,但是它受到覆寫面有限這一缺陷的限制。【79】與此論文類似,他集中精力設計可以處理時态問題的模闆。
- 【36】提出了将查詢圖作為表達解析的目标。一個查詢圖是一種圖形式的邏輯形式,它和知識庫模式相比對,并且可以轉化為一個可執行的SPARQL。查詢圖包含試題,變量和函數,他們分布對應問題中提到的固定實體,要查詢的變量、聚合操作。就像圖5所示,從主題實體出發的推斷鍊首先被确定,然後限制實體和聚合操作被附加到路徑鍊上,進而使得可以适應更加複雜的問題。不同于與定義的模闆,查詢圖不受跳數以及限制數量的限制。這一方法在複雜問題知識問答任務中展現了強大的表達能力,但這一方法的缺陷是尚不能處理長尾類型的複雜問題。
- 基于對長尾問題的更多觀察,【64】嘗試通過增加句法提示來增加查詢圖的結構複雜性,進而可以提升查詢圖的公式,【12】嘗試應用更多的聚合操作,例如合并、共指消解等來适應複雜問題。
-
Tips
CCG(combinatory categorial grammars,組合範疇文法),CCG的作用是提供一個從自然語言的文法到語義的轉化,能夠作為将自然語言轉換為資料庫查詢結構的工具。具體内容較多,在ReadPaper的相關知識中有介紹的PPT,後面需要再仔細學習。
共指消解:将現實世界中同一實體的不同描述合并到一起。
論文清單:
4. 在大搜尋空間中落地
為了得到可執行的邏輯形式,知識庫連結子產品利用知識庫将可能的邏輯形式執行個體化。知識庫中的一個實體常常關聯到成百上千個實體,在這樣的情況下進行知識庫連結和搜尋的時間代價以及計算複雜度都是極高的。相比于在一步之中枚舉邏輯形式,研究者們嘗試在多步中生成複雜查詢。
- 【80】提出先将複雜問題分為幾個簡單問題,将這些簡單問題解析為簡單邏輯形式。然後将這些簡單邏輯形式進行拼接或者組合進而得到最終的邏輯形式。這種 decompose-execute-join 的方式有效的縮減了搜尋空間。【81】類似的提出通過利用擴充的指針網絡([55])來識别通過連接配接或合成獲得的最終答案,進而減少了人工注釋。
除了采用分解複雜問題進而得到子問題的方法,有很多學者采用了 expand-and rank 的方法來縮小搜尋空間,通過一種以疊代方法擴充邏輯形式的方法。具體來說,第一個疊代中找出與主題實體隻有一條距離的實體作為候選實體,然後通過比較問題和邏輯形式的語義相似性來給這些候選實體打分,然後得分較高的一部分實體将繼續擴充,而低分的将被舍棄。接下來,得高分的邏輯形式将會被繼續擴充,這樣就能夠得到更加複雜的查詢圖。每當找到最佳的查詢圖,這一過程就會停止。
- 【47】首先使用逐條貪婪搜尋擴充最可能查詢圖。
- 【82】提出了一種增量式序列比對子產品,可以疊代地解析問題,而不需要在每個搜尋步驟中重新通路生成的查詢圖。
- 【83】不同于以上提出的線性方法,這樣的線性方法隻有在多條關系上效率較高。在這篇論文中在每個疊代中定義了三個動作:擴充、連接配接、聚合,其分别對應多條推理、限制關系和數值運算。
論文清單:
5.在弱監督信号中訓練
- 【63】,【86】為了解決訓練資料的有限性和不充分性,基于強化學習的優化被用來最大化期望獎勵。
使用強化學的方式,在基于語義解析的方法中隻能在完全解析後的邏輯形式執行之後得到回報,這會導緻嚴重稀疏的正獎勵和虛假推理問題。為了解決這些問題,一些研究工作采用了句法分析評價的整形政策。
- 【84】通過附加回報,當預測的答案和事實是同一類型時,給模型獎勵。除了來自最終預測的獎勵,再語義分析過程中的即時獎勵也可能會幫助解決這一問題。
- 【86】将查詢圖生成問題轉為一個階層化決策問題,并且提出來一個基于選擇的層次架構來為低層次的agent提供獎勵。在決策過程中的選擇時,高等級的agent在中間步驟為低等級的agent設定目标。同時,為了檢測低等級的agent的中間狀态是否達到了高等級agent的目标,他們評估所給的問題和生成的三元組的語義相似度。
- 【63】為了加速和穩定訓練過程,這篇文章提出通過疊代最大似然訓練過程來保持pseudo-gold program。訓練的過程包含兩部分,第一步,利用BEAM搜尋機制來查找 pseudo-gold programs,第二步,在曆史上發現的最好的program的監督下優化模型。【87】提出了一個相似的想法,通過将個生成的邏輯形式和緩存中存儲的得到最高經曆的邏輯形式進行對比來評估生成的邏輯形式。為了在開發和探索之間取得平衡,他們提出了接近獎勵和新奇獎勵來鼓勵記住過去的高獎勵邏輯形式并産生新的邏輯形式,通過這樣一種兩種方式來分别減輕虛假推理。将這種獎勵與終端獎勵相結合,模型可以再學習階段獲得密集的回報。
論文清單:
6. 用到的模型和實作方法
五、目前一些新的研究方向
- 自學習的KBQA
- 更加強健的KBQA系統(能應對資料集分布之外分别的問題)
- 更加廣泛的知識庫
- 對話式的KBQA