知識圖譜問答的思路 -- 筆記2

首發地址:https://zhuanlan.zhihu.com/p/144311555

本文是段楠《智能問答》一書第五章“知識圖譜問答”的筆記。(其中有略的部分。同時夾私貨。)本文和姊妹篇《知識圖譜問答的思路 – 筆記1》是兩本書的筆記,不是前後兩部分。二者思路有同有異,可搭配食用。)

本文(確切的說是這本書的這一章)的信息量很大,一定要先把握大邏輯之後,再細扣具體的實現方式。

本人水平有限(。。真的。。)導致書中好幾處不懂的,大佬讀到我下文說沒看懂的地方,還請告知的評論區,真的謝謝了!

1、知識圖譜和語義表示

1.1、知識圖譜

知識圖譜的基本單元是三元組(triple),形式爲<實體, 謂詞, 實體>,如<Barack Obama, PlaceOfBirth, Honolulu>。每個三元組對應一個全局唯一標識符(GUID)。

需要注意一種特殊節點CVT(compound value type),用於連接本來連不上的多個節點。如書中例子,各種關係中沒有一種關係能夠連接Barack Obama節點和Michelle Obama節點,所以在二者之間加入CVT節點,變成<Barack Obama, Marriage, CVT, Spouse, Michelle Obama>,達到了連接的目的,同時該CVT節點還可以連接別的關係和節點,如日期作爲結婚日期。

1.2、語義表示

1.2.1、一階謂詞邏輯(first-order preicate logic)

命題(sentence)
謂詞(predicate):屬性property,關係relation
函數(function)
對象(object):包括常量constant,變量variable,符號函數functional symbol
連接符號(connectibe):交(且) ∧,並(或) ∨,否定 ¬, 當 ⇒,當且僅當 ⇔
等號(equality)
限量詞(quantifier):全稱量詞 ∀,存在量詞 ∃
高階函數,count、argmin、argmax、sum等
舉例:Barack Obama was born in Honolulu on Augest 4th,1961 的語義表示是

PlaceOfBirth(Barack Obama, Honolulu) ∧ DateOfBirth(Barack Obama, 1961-08-04)

1.2.2、高階謂詞邏輯(higher-order predicate logic)

略(不是我略,是書略。。。)

1.2.3、λ-算子(lambda calculus)

陳述句的予以可以採用一階謂詞邏輯表示,問句的語義則通常採用λ-算子表示。

舉例:Where was Barack Obama born ? 的語義表示是

λx.PlaceOfBirth(Barack Obama, x)

(私貨:一階謂詞邏輯和λ-算子是對應的,一個陳述,一個查詢。二者寫法除了λ和x貌似沒有區別。)

1.2.4、λ-DCS

DCS是指“依存組合語義”(Dependency-Based Compositional Semantics)。

λ-DCS的作用和λ-算子相同,但是其格式更簡潔且更適應於知識圖譜。

(私貨:看了後面的例子就回會發現,λ-算子像是“面向過程的”都是“函數”,λ-DCS像是“面向對象的”都是對象的“方法”。多神奇又形象的比喻。)

λ-DCS的操作和上面的“一階謂詞邏輯與λ-算子”的區別是交操作的符號,一階謂詞邏輯和λ-算子是∧;λ-DCS是⊓。

舉例:the area of the largest state in US 對應的

λ-算子的表示:argmax(λx.Type(x, USState) ∧ λx.λy.Area(x, y))

λ-DCS的表示:argmax(Type.USState, Area)

後面兩部分是說怎麼把自然語言轉化爲語義表示,以達到在知識圖譜中查找的目的。

2、基於語義分析的方法

大思路分成兩種:

基於文法的語義分析方法(後文CCG、SCFG、DCS),將過程當做白箱,拆開後對應,對應完了再拼成整個的結果;

基於神經網絡的語義分析方法(後文NMT),將過程當做黑箱,端到端直接輸出結果。

2.1、基於CCG的語義分析

組合範疇文法(combinatory categorial grammer, CCG)。該方法貌似始自1995年。略。

2.2、基於SCFG的語義分析

同步上下文無關文法(synchronous context-free grammar, SCFG)。該方法貌似始自2007年。略。

2.3、基於DCS的語義分詞

依存組合語義(dependency-based compositioan semantics, DCS)。2013年提出。略。

2.4、基於NMT的語義分析

神經機器翻譯(neural machine tranlation, NMT)。核心就是把自然語言轉換成語義表示的過程當做一個翻譯的過程,建模爲序列標註Seq2Seq問題。書中的標準做法是LSTM做encoder和decoder。

爲了解決Seq2Seq沒法層次化的問題(私貨:這一點我存在疑問,覺得是可以的把層次化的小括號也作爲輸出的一部分一起訓練一起預測就可以。),書中提到Seq2Tree模型,在encoder完成編碼後,讓decoder按照逐層的方式解碼出語義表示的序列。

(私貨:該書成書於2018年,不知是在bert之前還是之後,也有可能是bert之後也不願意大改了。現在的做法肯定不會止步於此。)

(私貨:計劃探索並嘗試一下這個思路下,在現在的前沿技術的處理方式,找個數據集真實的幹一次。先挖坑,做出來之後也在這個專欄內更新文章。)

3、基於答案排序的方法

基於答案排序(answer ranking)的知識圖譜問答方式將該問題看成一個信息檢索任務。對訓練數據的要求大幅度降低。

(私貨:對比本文最上的鏈接“筆記1”的“2”部分一起食用,挺有意思。其中的“實體的表示”和“排序”部分還可以對比下面的鏈接“實體鏈接”一問,也有相似的地方。都是用搜索而非解析的思路,在知識圖譜裏找東西。)

通用步驟 具體分成四個步驟:

(第0步、先明確定義。“問題實體”是說,一個自然語言的問題是關於若干個概念的,即實體提及,這若干個實體提及對應在知識圖譜中的若干個實體就稱作“問題實體”。)

(私貨:另外需要注意“候選實體”是指第1步實體鏈接階段的“問題候選實體“,還是2~4步的“答案候選實體”。)

  • 第1步、問題實體識別模塊:輸入是自然語言,輸出是問題實體。通過實體鏈接技術做到。詳見:【知識圖譜應用】實體鏈接的思路
  • 第2步、答案候選檢索模塊:輸入是一個問題實體,輸出是一堆答案候選實體。常用方法是,在知識圖譜上,與問題實體最多通過兩個爲此謂詞的知識庫實體。以此保證二者相距不會太遠。
  • 第3步、答案候選表示:輸入是答案候選實體,輸出是答案候選實體的向量表示。由於無法直接比較自然語言的問題和答案候選實體,所以通過答案候選實體在知識圖譜上的上下文生成對應的向量。那麼問題就從“輸入問題和答案候選實體之間的相關程度”變成了“計算輸入問題和答案候選實體的向量表示之間的相關程度”。
  • 第4步、答案候選排序:輸入是輸入問題 & 若干個答案候選實體的向量表示,輸出是答案。打分、排序、超過閾值的第一名作爲答案輸出。
    以上是通用思路,以下是具體的解決方式。

3.1、基於特徵的答案排序

3.1.1、問題特徵

疑問詞特徵 Q-word:人工規則,如“誰、爲什麼、怎麼、如何”等。
問題實體特徵 Q-entity:就是問題實體,可能是一個,也可能是多個。
問題類型特徵 Q-type:通過規則處理句法樹得到,如 “名字、時間”等。(ps:就是直接出現這個詞。)
問題動詞特徵 Q-verb:問題的核心動詞,與知識圖譜的謂詞聯繫緊密。
問題上下文特徵 Q-context:問題中除了上述特徵之外的詞或n-gram。

3.1.2、答案特徵

謂詞特徵 A-pred:知識圖譜上,連接問題實體於答案候選實體的謂詞路徑。最關鍵因素。與 Q-verb 和 Q-context 對應。
類型特徵 A-type:該答案候選實體在知識圖譜上的類型。與 Q-word 和 Q-type相對應。
上下文特徵 A-context:知識圖譜中實體也有上下文啊!就是和該答案候選實體直接相連的若干謂詞及若干實體。與 Q-context 相對應。

3.2、基於問題生成的答案排序

上文3.1的思路是將自然語言問題和答案候選實體都轉換成特徵作比較。3.2的思路是用知識圖譜中的知識信息將答案候選實體(反向)轉化成自然語言問題,(如同歐陽鋒筋脈逆行)然後任務就變成了“計算輸入問題和每個答案候選實體對應的生成問題之間的相似度”的任務,簡言之“文本相似度”的任務。

3.2.1、問題生成
整本書的例子全是英文,咱們做的時候也可以做一套類似的中文模板。
上圖左列中的縮寫表(CCG部分提到的):S 句子;N 名詞;NP 名詞短語;ADJ 形容詞;PP介詞短語。

(私貨:具體的生成過程,我在書裏沒讀明白,如果我後來明白了我會再補上。)

3.2.2、輸入問題與生成問題的相似度計算

將二者之間的每一個短語對當成一個複述短語對。

(私貨:後面的過程,貌似是如何如何轉化成詞向量。我也沒讀明白。)

(私貨:我猜測,用現在的常見思路,會想辦法將兩個問句都通過遷移模型變成詞向量。)

3.3、基於子圖匹配的答案排序

該方法爲每個答案候選實體從知識圖譜中抽取一個子圖(sub-gragh),將“爲答案候選實體打分和排序”的任務轉化爲“計算輸入問題和每個答案候選實體對應的子圖之間的相似度”。

其轉化方法是,在知識圖譜中找到問題實體和答案候選實體之間的路徑,子圖具體體現爲路徑上的三項:

謂詞(一個或兩個)
答案候選實體的實體類型
與路徑上CVT節點相連的實體
示例:奧巴馬是問題實體,他媳婦米歇爾是答案候選實體,大的藍範圍是子圖。
在這裏插入圖片描述
得到子圖之後,對於輸入問題和子圖之間做相似度匹配的方式,書中提及是用的CDSSM模型。

(私活:書中沒說更具體的實現方式,我也懶的再查原始論文了。不過DSSM一系列的模型確實應該學學了,如果學了會更新新的知乎文章。)

(私活:感覺3.3和3.2的前半部分處理是一樣的,都是在圖譜中找到二者實體之間的聯繫(路徑或子圖);分歧是找到之後怎麼處理。3.2是生成句子,然後做句子相似度;3.3不生成句子,而是更“白箱”一些,直接做句子和子圖的上述三項之間的匹配。)

3.4、基於向量表示的答案排序

將輸入問題 Q 和答案候選實體 A 分別表示爲向量 f(Q) 和 g(A),然後計算 f(Q) 和 g(A) 兩個向量的相似度。Φ

然後問題又分爲三步:

3.4.1、如何得到向量 f(Q) :

[公式]

式中,在這裏插入圖片描述是根據Q中的詞做 one-hot 或者 tf 得到的稀疏向量;[公式]是人工設定的,將高維稀疏向量轉化爲低維向量的矩陣。T是轉置的意思。

3.4.2、如何得到向量 g(A) :

[公式]

式中, [公式] 是根據A得到的高維稀疏向量; [公式] 是待訓練的,將高維稀疏向量轉化爲低維向量的矩陣。T是轉置的意思。

而得到[公式],又有三種方式:

  • 單一實體表示法:將“答案候選實體A”的位置設爲1,其它是0;
  • 路徑表示法:將“問題實體、答案候選實體、二者之間謂詞”的位置設爲1,其它是0;
  • 子圖表示法:在路徑表示法的基礎上,將和答案候選實體A直接相連的所有實體的位置設爲1。

3.4.3、計算 f(Q) 和 g(A) 兩個向量的相似度

書中方式是直接相乘: [公式] ,S(Q,T)作爲Q和A的距離。

另外對 S(Q,T) 還提出了另一種方法,略。

3.4.4、通過訓練計算[公式]

設定損失函數在這裏插入圖片描述
(私貨:對於解決問題,我原有思路是將問題建模爲一個經典的機器學習問題,比如分類、迴歸、聚類、序列標註、文本相似度等,然後用標準做法就算解決了;而這部分要處理的問題是“文本與知識圖譜中實體”的相似度,而這東西很難建模爲經典問題,因爲雖然是向量和向量的相似度,但是二者因爲來源不同,所以不能直接做比較,所以只能自己再建“新”模,其中核心就是做一個新的適合本問題的損失函數用來訓練。)

3.5、基於記憶網絡的答案排序

記憶網絡(memory networks)

(私貨:讀了好幾遍,我也沒找到它和知識圖譜有什麼關係,略。)

總結:

  • 在基於語義分析的方法中,將自然語言轉化爲機器能夠理解和執行的語義表示;
  • 在基於答案排序的方法中,計算輸入問題和答案候選實體之間的相關性。

如果有錯,請指正;如果覺得還行,請點贊!謝謝!

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