天天看點

面向知識的可解釋認知推理

演講嘉賓:李涓子

内容概要:

一、Complex QA and Explainable Cognitive Reasoning

二、Knowledge Oriented Programming Language (KoPL)

三、KQA Pro: A Dataset for Complex KBQA with Reasoning Programs

四、Conclusions

(一)Knowledge Representation and Resoning

先介紹一下複雜問答,即QA和可解釋認知推理。

人工智能就是通過研究和設計,使得計算機可以像人一樣感覺、思考、推理,并進行規劃和決策的一個系統。

面向知識的可解釋認知推理

通過圖靈測試,可以從以下幾方面來研究人工智能,分知識表示、推理機器學習、計算機視覺自然語言處理和機器人。我們這裡主要介紹的就是知識表示和推理。

為什麼知識是和認知非常相關的?實際上它就是認知的一個定義,是人怎麼去獲得知識和應用知識的過程,我們把它稱為認知。我們主要介紹的就是用認知來做推理,用知識去做推理——

knowledge oriented and reason。

(二)The Third Generation of AI

現階段,我們已經從感覺的智能到了認知的智能,這也是達成的共識。比如第三代的人工智能是可解釋的,是安全可信的,它也提出了知識+資料+算法算力這樣一個架構。

面向知識的可解釋認知推理

如上圖,圖靈獎獲得者做深度學習,也是要把推理和表示學習進行結合的,也就是把符号表示和推理,和深度學習來進行結合。

(三)Complex Question Answer

什麼是問答?問答就是圖靈測試最典型的一個方面。由人去問問題,計算機來自動回答這些問題。我們可以問圖檔,可以問文本裡面隐含的知識,也可以問知識圖譜裡面隐含的知識,最終得到從question到 answer的結果。

面向知識的可解釋認知推理

現在很多的推理,很多的問答系統和相關的資料集都有關于簡單問答的測試。比如上圖squad2.0是斯坦福的一個簡單問答資料集。第一行是 human performance,顯示已經超過了人的水準,當然這不能說是在simple answer and question上面真正超過,隻是在資料集上超過了。

再看這個斯坦福複雜問答資料集,是在vqa上用圖檔去做複雜問題提問。它需要一些推理過程的時候,在資料上就遠遠達不到人的水準,是以複雜問答是比簡單問答更難的。

(四)Complex QA and Explainable Reasoning

什麼是複雜問答呢?

首先,答案不能是從文本裡面或者圖檔裡面直接獲得的知識,是要用retrieve方法得到的。如果結果是encode到一個圖檔裡面,直接可以retrieve出來的,這就不是複雜問答。

複雜問答需要有推理的能力,而這個推理的能力展現在多跳推理、技術比較,還有一些交并補的邏輯操作。

面向知識的可解釋認知推理

如上圖,這是一個例子。 這個問題的答案是不在這圖裡面的。要得出人的數量,是需要一定的推理能力的.要找着這個樂隊,确定它的numbers有哪些人,然後去記述這個count,再看兩個count是不是一樣。

它的答案是不在這兩個自然段裡面的,必須通過一定的推理,得到他們是有相同的人數這個答案。中間的推理步驟,我們稱之為複雜問答。

(五)Related Works

複雜問答可以分成這三類,一類是semantic parsing,就是對問題進行了解,然後把它表示成一種邏輯表達,而這種邏輯表達可以是SPARQL ,也可以是拉姆的演算,可以是中間的任何一個邏輯結構。

面向知識的可解釋認知推理

第二類是利用端到端的graph neural network(圖神經元網絡),第三類是multistep query。這兩個都是深度學習的方法,但這些方法存在的問題是什麼?

第一個問題,是缺乏可解釋性。另外,在深度神經網絡上做推理,它對知識類型的處理非常有限,它隻能處理實體到實體之間的關系。但知識的形式是非常多的,而它隻是把實體和實體變成圖,在圖結構上去算。

針對這個問題,我們做了一些研究。随着研究的進展,逐漸明确了這個架構,并把它稱為面向知識的可解釋推理。因為知識就是認知的結果,是以後面就把認知去掉了,我們的 framework(架構)是什麼?其實就是圖邏輯表達和推理。

(六)Our Main Idea

那麼為什麼用圖?圖是一種顯示的表示,和人的認知是比較match的。看語義網絡,就是Smart network,研究認知怎麼去記憶這個知識,它是一種顯式的知識的表示。

面向知識的可解釋認知推理

不管是知識圖譜,還是内置的場景圖,還是文本裡面實體之間的關系,都可以用graph表示。它可以針對不同的形式表示,也可以用深度學習的方法來進行表征,就是用圖來表征。

另外,怎麼把認知的推理過程和整個圖結構結合起來?我們做了一個面向知識的程式設計語言,在程式設計語言上去推理。這個程式就是我們的推理過程。

(七)Explainable Cognitive Reasoning Framework

可以把面向複雜問答的對象表成圖,這個叫目标的結構化。我們可以把複雜問答看成一個

question program,而這個program表示了其中的推理步驟。

面向知識的可解釋認知推理

像上圖這個問題,有多少物體是在這塊棕色金屬右邊且在紅色方塊左邊的?它根據推理步驟就能得到一個人能看懂的答案。這個cube是紅色的,它的left是誰?相當于把這個question前面的自然語言表達表示成了一個推理過程,整個推理過程的步驟可以在執行program以後得到答案。

上面program的執行過程,就是場景。我們想通過這個場景,解析不同結構。比如這個先找到一個cube,再找一個紅的cube,接着去履約他的left,就激活了另一個節點。另一個程式也是,去找一個柱形,然後找一個brown的金屬,最後得到的是它們所對應的位置。

上述兩個program的交集,其實不止一個。但過程最後得到的就隻有一個結果。而每一個target的操作,是可以用module去實作操作的,可以看成是子產品化的神經網絡對這個操作去模組化。

那要怎麼去實作這個架構,也就是上面的每一個透明的顯示的過程?

面向知識的可解釋認知推理

整個計算雖然是在深度學習架構下做的,但它的每一個步驟都是可解釋的。我們用modular

neural network去實作每一個函數的計算,包括它的邏輯操作、它是否存在、它的基數,然後去描述。

(一)KoPL Motivation

在斯坦福上發的最簡單的vqa club的資料集上做了研究之後,我們考慮,是不是可以把它擴充到知識的範疇,去做知識的推理程式設計,是以我們就設計了Kopl語言。

面向知識的可解釋認知推理

比如 knowledge oriented的program,這裡的operation是由一組原子函數或者操作來組成的函數,它帶的參數就是知識的元素,我們可以通過程式設計語言把複雜的問題變成多個推理的步驟,并把它稱為program,這個推理步驟是很容易去了解的。

把這個推理過程變成程式,人也很容易對它進行control。程式編錯了,人可以去操作它,對它進行修正,這對人來說是更好的影響。

我們用SPARQL 來表示這個過程。看SPARQL 中間,因為它用的是圖結構,是以實際上用

program去表示出來更容易了解。執行這個模闆之後,得到的就是答案。

(二)KoPL Framework

這個framework就是程式設計語言裡面的參數,那麼knowledge的元素是什麼呢?

面向知識的可解釋認知推理

在這裡面,我們給出了一個knowledge base definition(知識庫定義),它的一些函數就是原子的函數,是對知識庫上知識的一些操作的原函數,還有對知識進行query的語言函數。program,就是 function的conversation,是由一系列的function組成的,這個program是可以去執行可以被編譯的。它可以在智庫上執行,産生問題的答案。

(三)Knowledge Base Definition

知識庫大家應該都已經了解,有concept(概念)。其實人也是這樣,有概念,有實體有關系,還有描述實體的屬性.

面向知識的可解釋認知推理

比如三元組當節點的時候,它在不同時間的配偶可能是不一樣的,是以它對實體也有一個修飾的關系。我們把它稱為qualifier。

從上圖裡可以看到,在矩形裡面都是實體的知識,中間是聯系這兩個實體的關系。裡面畫虛線的是qualifier的一些修飾關系,還有它的屬性,比如date of birth、height,這些都是attribute的關系。

在kopl語言裡面,它所處理的函數裡面對應的參數就是這些内容。

(四)Atomic Functions of KoPL

我們在kopl裡面定義了14個知識庫上的操作函數。

面向知識的可解釋認知推理

就是上面的find、filterConcept或者是filterstr等,這都是對于屬性值的過濾,FilterConcept是對concept過濾。然後找出一些實體,對這個函數的定義,都是在資料在知識庫上最基本的操作。

最後一列是每個函數對應的的input output,而這裡面都是對應了最基本的知識的元素。

面向知識的可解釋認知推理

因為是面向複雜問答,是以也有query方式。而這些query方式具有邏輯計算的能力,可以去做驗證,可以去做比較,也可以去做邏輯運算。

(五)Program Examples with KoPL

我們可以寫一個program,然後在這個知識庫上一編譯就可以得到結果。去執行這個程式的過程,就是得到答案的過程。

面向知識的可解釋認知推理

看一個簡單的例子。要先找着實體,然後通過實體去關聯,它的publication date是在1940年之後,這通過filter year按時間來去過濾的。

就好比它是一個動畫電影,最後得到一個技術。實際上每一個操作過程,都是一個代數集合的計算,最終對得到的實體進行計數。

我們給出一個問題之後,就可以去寫了解這個問題的program,而這個program不需要額外的操作,隻需要對它做執行,就可以得到問題的答案。 

(六)KoPL Conclusions

KoPL不僅僅可以面向KBQA上的複雜問答,還可以把這個複雜問題表示成上面說的方式的組合。

面向知識的可解釋認知推理

另外,跟sparql相比,它還有比較好的可解釋性。如果生成了對應的sparql query,錯了之後就不太好改。而我們有這個program之後,可以直接對program進行更改。

它還可以做知識guide的複雜問答。這是一個我們在HotpotQA QA上的資料集,一個真實的問題。HotpotQA QA是面向文本做多跳推理的一個資料集。

面向知識的可解釋認知推理

比如上圖,他的兒子是什麼時間出生的?可以把這個問題變成一個program。在知識庫裡面,這兩個人都是存在的。但在wiki data裡面的資料集,這個人和他是兒子的關系是沒有的,那這個關系展現在哪?

在這個文本裡面。

我們提問 who is his child,就可以把這個人找着,有date of birth,可以把斷的 program通過文本來補全。這個時候就可以把文本和大模型進行一個結合,因為文本裡面有很多這樣的知識。

接下來就是怎麼把寫program的過程自動化智能化。我們做了一個KQA PRO資料集,這個資料集就是把每一個複雜問題都帶上推理的 program。

它已經線上上了,大家也可以試着往裡面寫問題,它會給你個 program的解析結果。

(一)KQA Pro Motivation

面向知識的可解釋認知推理

針對上圖面向智庫的複雜問題,我們希望出來是yao ming這個結果。我們會把這個問題解析成program,同時為了跟spark做比較,可能他們還有互補性,我們也保留了sparql。

(二)Current KBQA Datasets

為什麼做這個資料集,其實是希望把  complex QA的pairs帶上對應的推理步驟。

面向知識的可解釋認知推理

實際上現在的資料集是沒有的,并且問題個數規模也不夠大,用MetaQA組成的知識類型也比較受限。

(三)KQA Pro Construction

基于前面知識庫的定義,我們做了KQA Pro,這裡面有将近12萬的帶推理的program資料集。這個過程也保證了推理問題達到多樣性和規模。

面向知識的可解釋認知推理

上圖可以看到,對于每個問題,都要對這個問題做program标注,也要保證它是自然語言的。可以用模闆去生成很多question,但因為它是模闆生成的語言,有一定的局限性,是以要邀請

speaker來重新把問題進行更貼近自然語言的描述。再請其他的人來看,這個描述結果是不是自然語言。

(四)Knowledge Base Extraction

面向知識的可解釋認知推理

我們在fb15k237這個資料上,也就是大家經常用的一個資料上進行了擴充。用wiki data擴充它知識類型,包括了實體的屬性值,還有事實的修飾等的知識,最後得到了這樣一個資料規模。上圖可見,大概有17,000的實體,有近百萬的三元組。這裡生成了13萬的問題,最終得到的是不到

12萬的品質比較高的例子。

(五)Question Generation

那怎麼保證它的問題的複雜性和多樣性呢?

用采樣加疊代組合的方式。

面向知識的可解釋認知推理

可以采用問題的實體,再通過實體去擴充。它對應的概念就是采用一些擴充的政策,這個圖上就是生成問題的過程。要先locate,標明對應的實體或概念。

面向知識的可解釋認知推理

再通過遞歸的模闆去擴充這個問題。最後去做各種修飾,比如問他不同的問題,這樣一些操作。

面向知識的可解釋認知推理

最終可以看到,每一個question有5個部分,包含question、sparql、 program,還有可選擇的答案以及最終的标準答案。在亞馬遜的衆包平台上去做rephrase,同時由5個人對rephrase的sentence做驗證,三個以上認為它是自然語言的,才能夠保留下來。

面向知識的可解釋認知推理

 這是大概資料集的一個整體情況。

面向知識的可解釋認知推理

做了這個資料集之後,用end-to-end的方法,在資料集上做question到answer的答案,準确率是非常低的。

面向知識的可解釋認知推理

是以現在的這種End-to-end的模型,基本上是不頂用的,不能夠在資料上得到一個合理的結果。

我們用program對問題去做semantic parsing,相當于把自然語言變成program的表示,準确率就比前面高了一大截。也就是說,把它做成了program之後,它了解問題的準确度還是比較高的。并且這裡因為用了知識,他的概化能力還是很強的。在Zero-shot下面也得到了理想的結果。

面向知識的可解釋認知推理

總結起來,我們提出了一個可解釋的認知推理的架構,就是面向複雜問題的問答,然後設計了

KoPL程式設計語言,直接通過程式的執行,從問題到得到答案。我們還做了一個面向複雜問題推理的資料集,并且希望能夠把函數庫進一步優化,把文本技術和預訓練技術結合起來去回答。

它不僅隻是知識庫,還可以利用大模型的參數和文本幫助我們去做推理,實作多模态的認知推理。還可以做增量式的推理,如果程式錯了,我們可以對它進行修改,進一步優化它的推理程式。

面向知識的可解釋認知推理

繼續閱讀