1. 程式人生 > >基於條件知識庫(CKB)的對話問答系統--論文閱讀筆記

基於條件知識庫(CKB)的對話問答系統--論文閱讀筆記

本文是‘’Learning to Extract Conditional Knowledge for Question Answering using Dialogue‘’論文的閱讀筆記。最近開始看QA方面的一些論文,剛入門,很多東西都不太懂,感覺很吃力,慢慢堅持吧==

傳統的基於知識庫(KB)的問答系統,有三元組 (Subject, predicate, Object)組成,缺點在於當前面兩者相同但是條件不同是,其會給出相同的答案。不能靈活地根據問題給出正確的答案。比如下圖,雖然兩個問題都是要升級win10,但win xp 和win 8是作為兩個不同的條件,嚴重的影響著最終的答案:
這裡寫圖片描述

所以本文提出了一種基於條件的知識庫的問答系統,表示為(Subject,Predict, Object|Condition),就是在元十三元祖的基礎上加了條件的限定。這樣一來,我們就可以更靈活的做出回答。但是本文的模型仍有很大的限制,當用戶的提問不滿足回答條件時,對話系統會提示使用者補全問題方可進行回答。如下圖所示:
這裡寫圖片描述

接下來看一下演算法流程圖,主要包括下面6步:

  1. pattern mining
  2. pattern aggregation
  3. condition and pattern representation learning
  4. conditions and patterns clustering
  5. CKB construction
  6. dialogue model construction
    如下圖所示:
    這裡寫圖片描述
    接下來我們分步介紹其各個模組的功能和原理:

1 pattern mining

這一步主要是挖掘出訓練集中的pattern,並提取條件。這部分的原理沒搞太明白,大概意思是使用一種自舉模式學習的方法(bootstrapped pattern-learning),用的是SPIED-Learn系統框架==。使用種子字典從未標記的文字中學習條件,種子字典由先前的主語和當前主語共同構成。然後pattern從標記的條件中學習。舉例說明,假設當前主語為windows_10,windows_xp為條件,然後我們就可以學習到一個pattern,接下來再使用這個pattern去學習別的條件詞:
這裡寫圖片描述


上面所提到的種子庫是通過下面這種方法構建的,首先去除問題中的無用詞,比如“how to,how do i”等。揭曉來使用詞性標註的方法,對問題進行切分,然後剩下來的部分則被新增到種子庫中。最後學習到pattern之後,就使用‘SLOT0’將條件詞進行替換,這樣就可以繼續學習別的條件詞。

2 pattern aggregation

這部分比較簡單,就是進行pattern得聚合。將相同pattern和不同condition的聚合為一類。比如:
這裡寫圖片描述
最終的聚類結果如下圖所示:
這裡寫圖片描述

3 condition and pattern representation learning

這一部分是比較核心的演算法,通過word2vec的方法,將condition和pattern表示為詞向量的形式。這裡分為下面三個部分:
1,condition embedding model:


在原始skip-gram模型的基礎上加上condition-pair資訊,用如下計算公式表示,Ck和Cm是模型學習的condition的詞向量,
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
2,pattern embedding model:
這一部分是給pattern建模,將其對映到一個向量空間,Vk和Vm是pattern的詞向量表示,這裡我們單純的對pattern建模,不結合skip-gram模型。如下所示:
這裡寫圖片描述
3,alignment model
前面學習到了condition和pattern的embedding向量,但是由於是分開學習的,所以會被對映到兩個空間當中,並沒有什麼聯絡。這裡引入alignment模型,用於將二者聯絡在一起。思路和上面的方法一樣,也是求condition和pattern的共現次數。 如下圖所示:
這裡寫圖片描述
這樣我們的模型最終可以表示為上面三個模型的合集,將目標函式定義為:

J = Jc + Jp + Ja

最終學習到的向量空間使用t-SNE工具視覺化之後效果如下,可見最終意思相近的condition和pattern在向量空間中的距離也十分接近。
這裡寫圖片描述

4 condition and pattern clustering

這裡做聚類的目的是將意圖相近的pattern和有相同答案的condition聚合在一起,文中提出了一種基於embedding詞向量的協同聚類演算法。使用X-sim的分層聚類演算法作為演算法的主要框架。虛擬碼如下所示:
這裡寫圖片描述

5 Conditional Knowledge Base Construction

這部分就是使用前面所有的工作進行條件知識庫的構建(CKB)。上面的一步完成之後我們就獲得了pattern和condition的聚類,然後就可以遍歷所有的類別構成CKB,如下圖所示:
這裡寫圖片描述
這裡需要注意的是,作者提出了“MISSING PERCENTAGE OF SLOT”的概念,就是pattern中的SLOT會丟失,或者不重要。作者提出了三種,第一種是隻在一個cluster中包含的直接去除,第二種是十分重要以至於大部分人都不會遺忘的,第三種是對答案不會造成很大影響且基本上沒有使用者會提到的。

6 Dialogue Model Construction

上面我們已經構建好了條件知識庫CKB,接下來就是用到實際的對話系統中。包含下面兩個步驟:

  1. 尋找問題中的pattern,如果發現問題中丟失了pattern中關鍵的condition,則跳到第二步
  2. 提示使用者輸入condition,並提供一個候選集

至此,就將論文的主要演算法部分介紹完畢。其實也就是一個很淺顯的理解和筆記而已,因為第一次接觸QA,所以很多地方理解不深而且也不知道真正的問題是什麼==可能新手就這樣吧、