揭开知识库问答KB-QA的面纱3·信息抽取篇
內容速覽
- 你是如何通過知識庫回答問題的
- 如何確定候選答案
- 如何對問題進行信息抽取
- 如何篩選候選答案
- 論文實驗與總結
本期我們將介紹KB-QA傳統方法之一的信息抽取(Information Extraction),我們以一個該方法的經典代表作為例,為大家進一步揭開知識庫問答的面紗。該方法來自約翰·霍普金斯大學Yao X, Van Durme B.的 Information Extraction over Structured Data: Question Answering with Freebase(文章發表于2014年的ACL會議)。
該類方法通過提取問題中的實體,通過在知識庫中查詢該實體可以得到以該實體節點為中心的知識庫子圖,子圖中的每一個節點或邊都可以作為候選答案。通過觀察問題,依據某些規則或模板進行信息抽取,得到表征問題和候選答案特征的特征向量,建立分類器,通過輸入特征向量對候選答案進行篩選,從而得出最終答案。
你是如何回答問題的
想一想,如果有人問你 “what is the name of Justin Bieber brother?" ,并且給你一個知識庫,你會怎么去找答案?顯然,這個問題的主題(Topic)詞就是Justin Bieber,因此我們會去知識庫搜索Justin Bieber這個實體,尋找與該實體相關的知識(此時相當于我們確定了答案的范圍,得到了一些候選答案)。接下來,我們去尋找和實體關系brother相關的實體(事實上freebase里沒有brother這個實體關系,而是sibling,我們需要進行一個簡單的推理),最后得到答案。
而信息抽取的方法,其靈感就是來自于剛才我們的這種思考方式。
如何確定候選答案
根據我們人的思維,當我們確定了問句中的主題詞,我們就可以去知識庫里搜索相應的知識,確定出候選答案。如果我們把知識庫中的實體看作是圖節點,把實體關系看作是邊,那么知識庫就是一個龐大的圖,通過問句中的主題詞可以找到它在知識庫中對應的圖節點,我們將該圖節點相鄰幾跳(hop)范圍內的節點和邊抽取出來得到一個知識庫的子圖,這個子圖作者稱為主題圖(Topic graph),一般來說,這里的跳數一般為一跳或兩跳,即與主題詞對應的圖節點在一條或兩條邊之內的距離。主題圖中的節點,即是候選答案。接下來,我們需要觀察問題,對問題進行信息抽取,獲取能幫助我們在候選答案中篩選出正確答案的信息。
如何對問題進行信息抽取
還是這個例子,讓我們先放慢腳步,想想我們人類是怎么對這個問題進行信息抽取和推理的。首先,我們會潛意識地對這個句子結構進行分析,下圖是 “what is the name of Justin Bieber brother?" 這個問句的語法依存樹(Dependency tree),如果你對依存樹不了解,可以把它理解成是一種句子成分的形式化描述方式。
我們首先通過依存關系nsubj(what, name) 和 prep_of(name, brother) 這兩條信息知道答案是一個名字,而且這個名字和brother有關,當然我們此時還不能判斷是否是人名。進一步,通過nn(brother, justin bieber)這條信息我們可以根據justin bieber是個人,推導出他的brother也是個人,綜合前面的信息,我們最終推理出來我們的答案應該是個人名。(注:這里nsubj代表名詞性主語,prep_of代表of介詞修飾,nn代表名詞組合,如果你想了解更多tag,可以 點擊這里 )當確定了最終答案是一個人名,那么我們就很容易在備選答案中篩選出正確答案了。我們剛才進行的步驟,實際上就是在對問題進行信息抽取,接下來,讓我們看看這篇文章具體是怎么實施的。
首先我們要提取的第一個信息就是問題詞(question word,記作qword), 例如 who, when, what, where, how, which, why, whom, whose,它是問題的一個明顯特征 。第二個關鍵的信息,就是問題焦點(question fucus, 記作qfocus),這個詞暗示了答案的類型,比如name/time/place,我們直接將問題詞qword相關的那個名詞抽取出來作為qfocus,在這個例子中,what name中的name就是qfocus。第三個我們需要的信息,就是這個問題的主題詞(word topic,記作qtopic),在這個句子里Justin Bieber就是qtopic,這個詞能夠幫助我們找到freebase中相關的知識,我們可以通過命名實體識別(Named Entity Recognition,NER)來確定主題詞,需要注意的是,一個問題中可能存在多個主題詞。最后,第四個我們需要提取的特征,就是問題的中心動詞(question verb ,記作qverb),動詞能夠給我們提供很多和答案相關的信息,比如play,那么答案有可能是某種球類或者樂器。我們可以通過詞性標注(Part-of-Speech,POS)確定qverb。通過對問題提取 問題詞qword,問題焦點qfocus,問題主題詞qtopic和問題中心動詞qverb這四個問題特征,我們可以將該問題的依存樹轉化為問題圖(Question Graph),如下圖所示
具體來說,將依存樹轉化為問題圖進行了三個操作1)將問題詞qword,問題焦點qfocus,問題主題詞qtopic和問題中心動詞qverb加入相對應的節點中,如what -> qword=what。
2)如果該節點是命名實體,那就把該節點變為命名實體形式,如justin -> qtopic=person (justin對應的命名實體形式是person)。這一步的目的是因為數據中涉及到的命名實體名字太多了,這里我們只需要區分它是人名 地名 還是其他類型的名字即可。
3)刪除掉一些不重要的葉子節點,如限定詞(determiner,如a/the/some/this/each等),介詞(preposition)和標點符號(punctuation)。
從依存樹到問題圖的轉換,實質是就是對問題進行信息抽取,提取出有利于尋找答案的問題特征,刪減掉不重要的信息。
如何構建特征向量對候選答案進行分類
在候選答案中找出正確答案,實際上是一個 二分類問題 (判斷每個候選答案是否是正確答案),我們使用訓練數據問題-答案對,訓練一個分類器來找到正確答案。那么分類器的輸入特征向量怎么構造和定義呢?特征向量中的每一維,對應一個問題-候選答案特征。每一個問題-候選答案特征由問題特征中的一個特征,和候選答案特征的一個特征,組合(combine)而成。
問題特征:我們從問題圖中的每一條邊e(s,t),抽取4種問題特征:s,t,s|t,和s|e|t。如對于邊prep_of(qfocus=name,brother),我們可以抽取這樣四個特征:qfocus=what,brother,qfocus=what|brother 和 qfocus=what|prep_of|brother。
候選答案特征:對于主題圖中的每一個節點,我們都可以抽取出以下特征:該節點的所有關系(relation,記作rel),和該節點的所有屬性(property,如type/gender/age)。(注:我在揭開知識庫問答KB-QA的面紗1·簡介篇中對知識庫中屬性和關系的區別進行了講解)對于Justin Bieber 這個topic我們可以在知識庫找到它對應的主題圖,如下圖所示:
(注:圖中虛線表示屬性,實線表示關系,虛線框即屬性值,實現框為topic node。在知識庫中,如果同一個topic節點的同一個關系對應了多個實體,如Justin Bieber的preon.sibing_s關系可能對應多個實體,那么freebase中會設置一個虛擬的 dummy node ,來連接所有相關的實體)例如,對于Jaxon Bieber這個topic節點,我們可以提取出這些特征:gender=male,type=person,rel=sibling 。可以看出關系和屬性都刻畫了這個候選答案的特征,對判斷它是否是正確答案有很大的幫助。
問題-候選答案特征:每一個問題-候選答案特征由問題特征中的一個特征和候選答案特征中的一個特征,組合(combine)而成(組合記作 | )。我們希望一個關聯度較高的問題-候選答案特征有較高的權重,比如對于問題-候選答案特征 qfocus=money|node type=currency(注意,這里qfocus=money是來自問題的特征,而node type=currency則是來自候選答案的特征),我們希望它的權重較高,而對于問題-候選答案特征qfocus=money|node type=person我們希望它的權重較低。
接下來我們用WebQuestion作為訓練數據,使用Stanford CoreNLP幫助我們對問題進行信息抽取。訓練集中約有3000個問題,每個問題對應的主題圖約含1000個節點,共計有3 million的節點和7 million種問題-候選答案特征,作者用帶L1正則化的邏輯回歸(logistic regression)作為分類器,訓練每種問題-候選答案特征的權值(L1正則化的邏輯回歸很適合處理這種稀疏的特征向量,作者表示其效果好于感知機Percptron和支持向量機SVM)。 訓練完畢后,得到了3萬個非零的特征,下表列出了部分特征和它相應的權值,可以看出問題特征和候選答案特征相關度較高時,其權值較高。
因此,在使用的時候,對于每一個候選答案,我們抽取出它的特征(假設有k個特征)后,再和問題中的每一個特征 兩兩結合 (假設有m個特征),那么我們就得到了k*m個問題-候選答案特征,因此我們的輸入向量就是一個k*m-hot(即k*m維為1,其余維為0)的3萬維向量。在提取候選答案的特征時,我們對每個實體提取了它的關系和屬性,在論文中,作者還額外提取了一個更強力的特征,即每一個關系R和整個問題Q的關聯度,可表示為概率的形式。那么這個概率如何求解呢?作者采用樸素貝葉斯,backoff model(即)的思想和假設,對于這種復合關系,如people.person.parents,也采用backoff的思想(即)這個概率進行近似,即
作者通過freebase知識庫和兩個數據集分別對上面的概率進行統計估算。第一個數據集是Berant J, Chou A, Frostig R, et al. 中 Semantic Parsing on Freebase from Question-Answer Pairs 使用到的利用 ReVerbopen IE system 在 ClueWeb09 抽取的三元組數據集,包含了15million個三元組,該數據集記作 ReverbMapping ,第二個數據集是含1.2 billion對齊對(alignment pairs)的 CluewebMapping。 值得一提的是,這些數據中并不直接包含知識庫中的關系 rel ,那么要如何去估算 呢? 作者采用了一個近似的辦法,如果一個數據集中的三元組包含的兩個實體和知識庫中的關系r包含的兩個實體一樣,就認為這個三元組中存在該關系r,計數加一。
在兩個數據集上分別完成統計和計算后,作者使用了WebQuestion進行了測試,分別計算給定每一個問題Q,答案對應的relation,它們的概率和其他relation相比,排名在top1, top5, top10, top50, top100和100之后這六種情況的百分比,如下表所示
可以看出當使用ClueWebMapping這個超大數據集訓練后,給定一個問題,每次選擇概率最高的rel時,有19%的正確率。因此,作者對于主題圖中的每一個候選答案,增加這樣一種特征,即該候選答案對應的每一個關系rel,其概率 在所有關系中的排名情況(如top1、top3、top5、top50、top100等等),比如特征income_relation_rank=top_3 (這里因為relation是有方向的,所以用income前綴對方向加以區分)。至此,我們已經搞清楚了這篇文章方法涉及到的所有元素:問題特征,候選答案特征,每個候選答案和問題的特征向量以及分類器。最后,我們再簡單介紹下實驗。
論文實驗與總結
候選答案的主題圖是根據問題中的主題詞確定的,而一個問題可能包含多個主題詞。作者先通過命名實體識別提取問題中的所有命名實體(如果提取不到一個命名實體,則使用名詞短語代替),將所有命名實體輸入到Freebase Search API中,選取返回排名最高的作為最終的主題詞,使用FreebaseTopic API得到相應的主題圖。
當然使用Freebase Search API這個方法可能會錯過真正和答案相關的主題詞(topic),作者也測試了模型在真實的主題詞(Gold Retrieval)下的F1 score,結果如下:
可以看出,信息抽取的這個方法,相比我在 揭開知識庫問答KB-QA的面紗2·語義解析篇 - 知乎專欄 中介紹的 Semantic Parsing on Freebase from Question-Answer Pairs 方法在F1-score下有較高的提升,到達了42.0的F1-score。信息抽取的辦法,總體來說涉及到了不少linguistic的知識,比較符合人類的直覺。雖然也涉及到了很多手工和先驗知識的東西,但個人認為它的思想還是很不錯的。
作者在構造候選答案特征時,引入了和相關的特征,這個思路是一個很好的思路,但是對的估計方式總體來說還是比較粗暴(比如使用backoff),個人認為可以使用Deep Learning的方法進行提升。
信息抽取的特征向量,每一維都代表了一個可解釋的特征,是一種離散的表達。在下一期中,我們將介紹KB-QA的第三種傳統方法——向量建模,它將使用分布式表達(Distributed Embedding)來構造問題和答案的特征向量,該方法相比信息抽取和語義解析,涉及到較少的linguistic和手工規則,也較容易通過Deep Learning進行提升。我們將以Bordes A, Chopra S, Weston J. 的Question answering with subgraph embeddings這篇文章為例,為大家進一步揭開KB-QA的面紗。
敬請期待。
https://zhuanlan.zhihu.com/p/25782244
總結
以上是生活随笔為你收集整理的揭开知识库问答KB-QA的面纱3·信息抽取篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 揭开知识库问答KB-QA的面纱4·向量建
- 下一篇: 揭开知识库问答KB-QA的面纱2·语义解