知识图谱与智能问答基础理解
什么是知識圖譜?
知識圖譜本質上是語義網絡,是一種基于圖的數據結構,由節點(Point)和邊(Edge)組成。在知識圖譜里,每個節點表示現實世界中存在的“實體”,每條邊為實體與實體之間的“關系”。知識圖譜是關系的最有效的表示方式。通俗地講,知識圖譜就是把所有不同種類的信息(Heterogeneous Information)連接在一起而得到的一個關系網絡。知識圖譜提供了從“關系”的角度去分析問題的能力。
image.png知識圖譜這個概念最早由Google提出,主要是用來優化現有的搜索引擎。不同于基于關鍵詞搜索的傳統搜索引擎,知識圖譜可用來更好地查詢復雜的關聯信息,從語義層面理解用戶意圖,改進搜索質量。比如在Google的搜索框里輸入Bill Gates的時候,搜索結果頁面的右側還會出現Bill Gates相關的信息比如出生年月,家庭情況等等。
image.png上面提到的知識圖譜都是屬于比較寬泛的范疇,在通用領域里解決搜索引擎優化和問答系統(Question-Answering)等方面的問題。接下來我們看一下特定領域里的 (Domain-Specific) 知識圖譜表示方式和應用,這也是工業界比較關心的話題。
知識圖譜的表示
假設我們用知識圖譜來描述一個事實(Fact) - “張三是李四的父親”。這里的實體是張三和李四,關系是“父親”(is_father_of)。當然,張三和李四也可能會跟其他人存在著某種類型的關系(暫時不考慮)。當我們把電話號碼也作為節點加入到知識圖譜以后(電話號碼也是實體),人和電話之間也可以定義一種關系叫 has_phone,就是說某個電話號碼是屬于某個人。下面的圖就展示了這兩種不同的關系。
image.png另外,我們可以把時間作為屬性(Property)添加到 has_phone 關系里來表示開通電話號碼的時間。這種屬性不僅可以加到關系里,還可以加到實體當中,當我們把所有這些信息作為關系或者實體的屬性添加后,所得到的圖譜稱之為屬性圖 (Property Graph)。屬性圖和傳統的RDF格式都可以作為知識圖譜的表示和存儲方式,但二者還是有區別的,這將在后面章節做簡單說明。
知識圖譜的存儲
知識圖譜是基于圖的數據結構,它的存儲方式主要有兩種形式:RDF存儲格式和圖數據庫(Graph Database)。至于它們有哪些區別,請參考【1】。下面的曲線表示各種數據存儲類型在最近幾年的發展情況。從這里我們可以明顯地看到基于圖的存儲方式在整個數據庫存儲領域的飛速發展。
image.png下面的列表表示的是目前比較流行的基于圖存儲的數據庫排名。從這個排名中可以看出neo4j在整個圖存儲領域里占據著NO.1的地位,而且在RDF領域里Jena還是目前為止最為流行的存儲框架。
image.png當然,如果需要設計的知識圖譜非常簡單,而且查詢也不會涉及到1度以上的關聯查詢,我們也可以選擇用關系型數據存儲格式來保存知識圖譜。但對那些稍微復雜的關系網絡(現實生活中的實體和關系普遍都比較復雜),知識圖譜的優點還是非常明顯的。首先,在關聯查詢的效率上會比傳統的存儲方式有顯著的提高。當我們涉及到2,3度的關聯查詢,基于知識圖譜的查詢效率會高出幾千倍甚至幾百萬倍。其次,基于圖的存儲在設計上會非常靈活,一般只需要局部的改動即可。比如我們有一個新的數據源,我們只需要在已有的圖譜上插入就可以。于此相反,關系型存儲方式靈活性方面比較差,它所有的Schema都是提前定義好的,如果后續要改變,它的代價是非常高的。最后,把實體和關系存儲在圖數據結構是一種符合整個故事邏輯的最好的方式。
什么是知識庫
“奧巴馬出生在火奴魯魯?!?/p>
“姚明是中國人?!?/p>
“謝霆鋒的爸爸是謝賢?!?/p>
這些就是一條條知識,而把大量的知識匯聚起來就成為了知識庫。我們可以在wiki百科,百度百科等百科全書查閱到大量的知識。然而,這些百科全書的知識組建形式是非結構化的自然語言,這樣的組織方式很適合人們閱讀但并不適合計算機去處理。為了方便計算機的處理和理解,我們需要更加形式化、簡潔化的方式去表示知識,那就是三元組(triple)。
“奧巴馬出生在火奴魯魯?!?可以用三元組表示為 (BarackObama, PlaceOfBirth, Honolulu)。
這里我們可以簡單的把三元組理解為 (實體entity,實體關系relation,實體entity),進一步的,如果我們把實體看作是結點,把實體關系(包括屬性,類別等等)看作是一條邊,那么包含了大量三元組的知識庫就成為了一個龐大的知識圖。
知識庫可以分為兩種類型,一種是以Freebase,Yago2為代表的Curated KBs,它們從維基百科和WordNet等知識庫中抽取大量的實體及實體關系,可以把它們理解為是一種結構化的維基百科,被google收購的Freebase中包含了上千萬個實體,共計19億條triple。
值得一提的是,有時候會把一些實體稱為topic,如Justin Bieber。實體關系也可分為兩種,一種是屬性property,一種是關系relation。如下圖所示,屬性和關系的最大區別在于,屬性所在的三元組對應的兩個實體,常常是一個topic和一個字符串,如屬性Type/Gender,對應的三元組(Justin Bieber, Type, Person),而關系所在的三元組所對應的兩個實體,常常是兩個topic。如關系Place_of_Brith,對應的三元組(Justin Bieber, Place_of_brith,London)。
(圖中藍色方塊表示topic,橙色橢圓包括屬性值,它們都屬于知識庫的實體,藍色直線表示關系,橙色直線表示屬性,它們都統稱為知識庫的實體關系,都可以用三元組刻畫實體關系和實體)
但是,像維基百科這樣的知識庫,與整個互聯網相比,仍只能算滄海一粟。知識庫的另外一種類型,則是以Open Information Extraction (Open IE), Never-Ending Language Learning (NELL) 為代表的Extracted KBs,它們直接從上億個網頁中抽取實體關系三元組。與Freebase相比,這樣得到的知識更加具有多樣性,而它們的實體關系和實體更多的則是自然語言的形式,如“奧巴馬出生在火奴魯魯?!?可以被表示為(“Obama”, “was also born in”, “* Honolulu”),*當然,直接從網頁中抽取出來的知識,也會存在一定的noisy,其精確度要低于Curated KBs。
Extracted KBs 知識庫涉及到的兩大關鍵技術是:
- 實體鏈指(Entity linking) ,即將文檔中的實體名字鏈接到知識庫中特定的實體上。它主要涉及自然語言處理領域的兩個經典問題實體識別 (Entity Recognition) 與實體消歧 (Entity Disambiguation),簡單地來說,就是要從文檔中識別出人名、地名、機構名、電影等命名實體。并且,在不同環境下同一實體名稱可能存在歧義,如蘋果,我們需要根據上下文環境進行消歧。
- 關系抽取 (Relation extraction),即將文檔中的實體關系抽取出來,主要涉及到的技術有詞性標注 (Part-of-Speech tagging, POS),語法分析,依存關系樹 (dependency tree) 以及構建SVM、最大熵模型等分類器進行關系分類等。
什么是知識庫問答
知識庫問答(knowledge base question answering,KB-QA)即給定自然語言問題,通過對問題進行語義理解和解析,進而利用知識庫進行查詢、推理得出答案。如下圖所示:
image.png與對話系統、對話機器人的交互式對話不同,KB-QA具有以下特點:
- 答案:回答的答案是知識庫中的實體或實體關系,或者no-answer(即該問題在KB中找不到答案),當然這里答案不一定唯一,比如 中國的城市有哪些 。而對話系統則回復的是自然語言句子,有時甚至需要考慮上下文語境。
- 評價標準:召回率 (Recall),精確率 (Precision) ,F1-Score。而對話系統的評價標準以人工評價為主,以及BLEU和Perplexity。
知識庫問答的主流方法
- 語義解析(Semantic Parsing):該方法是一種偏linguistic的方法,主體思想是將自然語言轉化為一系列形式化的邏輯形式(logic form),通過對邏輯形式進行自底向上的解析,得到一種可以表達整個問題語義的邏輯形式,通過相應的查詢語句(類似lambda-Caculus)在知識庫中進行查詢,從而得出答案。下圖紅色部分即邏輯形式,綠色部分where was Obama born 為自然語言問題,藍色部分為語義解析進行的相關操作,而形成的語義解析樹的根節點則是最終的語義解析結果,可以通過查詢語句直接在知識庫中查詢最終答案。
信息抽取(Information Extraction):該類方法通過提取問題中的實體,通過在知識庫中查詢該實體可以得到以該實體節點為中心的知識庫子圖,子圖中的每一個節點或邊都可以作為候選答案,通過觀察問題依據某些規則或模板進行信息抽取,得到問題特征向量,建立分類器通過輸入問題特征向量對候選答案進行篩選,從而得出最終答案。
向量建模(Vector Modeling): 該方法思想和信息抽取的思想比較接近,根據問題得出候選答案,把問題和候選答案都映射為分布式表達(Distributed Embedding),通過訓練數據對該分布式表達進行訓練,使得問題和正確答案的向量表達的得分(通常以點乘為形式)盡量高,如下圖所示。模型訓練完成后則可根據候選答案的向量表達和問題表達的得分進行篩選,得出最終答案。
隨著深度學習(Deep Learning)在自然語言處理領域的飛速發展,從15年開始,開始涌現出一系列基于深度學習的KB-QA文章,通過深度學習對傳統的方法進行提升,取得了較好的效果,比如:
使用卷積神經網絡對向量建模方法進行提升:
Dong L, Wei F, Zhou M, et al. Question Answering over Freebase with Multi-Column Convolutional Neural Networks[C]//ACL (1). 2015: 260-269.
使用卷積神經網絡對語義解析方法進行提升:
Yih S W, Chang M W, He X, et al. Semantic parsing via staged query graph generation: Question answering with knowledge base[J]. 2015.
(注 該paper來自微軟,是ACL 2015年的Outstanding paper,也是目前KB-QA效果最好的paper之一)
使用長短時記憶網絡(Long Short-Term Memory,LSTM),卷積神經網絡(Convolutional Neural Networks,CNNs)進行實體關系分類:
Xu Y, Mou L, Li G, et al. Classifying Relations via Long Short Term Memory Networks along Shortest Dependency Paths[C]//EMNLP. 2015: 1785-1794.
Zeng D, Liu K, Lai S, et al. Relation Classification via Convolutional Deep Neural Network[C]//COLING. 2014: 2335-2344.(Best paper)
Zeng D, Liu K, Chen Y, et al. Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks[C]//EMNLP. 2015: 1753-1762.
使用記憶網絡(Memory Networks),注意力機制(Attention Mechanism)進行KB-QA:
Bordes A, Usunier N, Chopra S, et al. Large-scale simple question answering with memory networks[J]. arXiv preprint arXiv:1506.02075, 2015.
Zhang Y, Liu K, He S, et al. Question Answering over Knowledge Base with Neural Attention Combining Global Knowledge Information[J]. arXiv preprint arXiv:1606.00979, 2016.
以上論文幾乎都使用了Freebase作為knowledge base,并且在WebQuestion數據集上進行過測試,這里給出各種方法的效果對比圖,給大家一個更加直觀的感受。
image.png知識庫問答的數據集
最后,我們再簡單地介紹一下KB-QA問題的Benchmark數據集——WebQuestion。
該數據集由Berant J, Chou A, Frostig R, et al.在13年的論文Semantic Parsing on Freebase from Question-Answer Pairs中公開。
作者首先使用Google Suggest API獲取以wh-word(what,who,why,where,whose...)為開頭且只包含一個實體的問題,以“where was Barack Obama born?”作為問題圖譜的起始節點,以Google Suggest API給出的建議作為新的問題,通過寬度優先搜索獲取問題。具體來講,對于每一個隊列中的問題,通過對它刪去實體,刪去實體之前的短語,刪去實體之后的短語形成3個新的query,將這三個新query放到google suggest中,每個query將生成5個候選問題,加入搜索隊列,直到1M個問題被訪問完。如下圖所示:
image.png獲取完問題后,隨機選取100K個問題交給Amazon Mechanical Turk (AMT)的工人,讓工人回答答案。注意,這里對答案進行了限制,讓AMT的工人只能把答案設置為Freebase上的實體(entity),實體列表,值(value)或者no-answer。
最終,得到了5,810組問題答案對,其詞匯表包含了4,525個詞。并且,WebQuestion還提供了每個答案對應知識庫的主題節點(topic node)。
可以看出WebQuestion的問題與freebase是不相關的,更加偏向自然語言,也更多樣化。這里給出一些例子
“What is James Madison most famous for?”“What movies does Taylor Lautner play in?”
“What music did Beethoven compose?”
“What kind of system of government does the United States have?”
除了該數據集,這里再補充一些其他數據集的信息,如下圖所示:
image.png附: 知識圖譜從0級到10級簡化版 (For Developer)
0級:掌握正則表達式、SQL、JSON和一門支持if-then-else的高級語言 —— 是的,這些不是知識圖譜技術,但是這些可以解決問題。我們要的是解決問題,不是嗎?
1級:學會ER建模(對,就是數據庫里的ER建模),理解實體(Entity)和關系(Relation)的概念。這個可能比你想象得難很多。學會更復雜的SQL,能熟練掌握至少一種主流的關系數據庫,至少學會一種語言的數據庫操作。
2級:學會兩種給實體命名的方法:數據庫里的主鍵,Web上的URI。理解分類樹。這時候可以學下RDF了,掌握Turtle和JSON-LD兩種語法。會用Java或者Python操作RDF。(小白一般到這里就開始大批陣亡)
3級:如果還未陣亡,可能發現RDF數據庫不是太好用,需要學會一個圖數據庫(如Neo4j或OrientDB)或者支持JSON的關系數據庫(如PostgreSQL)。學會用這些數據庫表達關系-實體,和表達分類樹。這可以保證以后可以活得再久一點。
4級:這時候作為一名老兵,你可能已經學會了查詢語言SPARQL、Cypher或Gremlin。然后你發現查詢語言可以用來寫!規!則!天啊,天堂的大門已經打開了。
5級:你會發現把智能放在數據里要遠遠好于放在代碼里。你會開始鄙視在代碼里寫大量if-then-else的偽知識圖譜愛好者。而且你開始不滿足用查詢語言客串規則(如用SPIN)。你需要一些真正的推理規則。你開始對OWL感興趣……然后徹底被搞暈了。
6級:你發現OWL很強大但是也很難理解,它背后的描述邏輯如同三體人一樣充滿敵意。然后你發現其實if-then-else也蠻不錯的,而且有一個更容易理解的規則語言:logic program。然后你突然發現SQL其實就是一種LP啊(Datalog)!突然一下世界豁然開朗,喜悅充滿全身,圣潔的陽光從天上映下。
7級:在各種奇怪的規則語言中游弋:RIF-BLD,RIF-PRD,SWRL,RuleML,JESS,DLV,XSB,Prolog。發現世界的各種東西都可以按此建模。理解各種推理機的性能。諳熟各種知識建模套路。
8級:從頭到尾設計過一個完整的語義或知識應用,經歷落地過程種種工程的巨大陷阱,入坑、爬出來,再入坑、再爬出來,再再入坑……直到爬不出來。
9級:開始思考人性問題。從認知的角度、社會的角度、組織的角度、經濟的角度思考什么是知識,怎么才能真正實施知識系統。
10級:綜合運用正則表達式、SQL、JSON和一門支持if-then-else的高級語言 ,舉重若輕解決以上1-9級中遇到的的各種問題。其實你設計出了自己的知識表現語言。
總結
以上是生活随笔為你收集整理的知识图谱与智能问答基础理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文浅尝 | 利用边缘标签的网络嵌入强化
- 下一篇: 7张图学会SQL