從一無所知到3分鐘快速了解“知識(shí)圖譜”
原創(chuàng)【51CTO.com原創(chuàng)稿件】 知識(shí)圖譜是一把開啟智能機(jī)器大腦的鑰匙,能夠打開Web 3.0時(shí)代的知識(shí)寶庫(kù)。本文將從知識(shí)圖譜的概念、架構(gòu)、關(guān)鍵技術(shù)、應(yīng)用領(lǐng)域以及一些需要注意的問題等方面,帶大家走進(jìn)知識(shí)圖譜的世界。
知識(shí)圖譜是什么?
A knowledge graph consists of a set of interconnected typed entities and their attributes.
知識(shí)圖譜本質(zhì)上是語(yǔ)義網(wǎng)絡(luò),是一種基于圖的數(shù)據(jù)結(jié)構(gòu),由節(jié)點(diǎn)(Point)和邊(Edge)組成。在知識(shí)圖譜里,每個(gè)節(jié)點(diǎn)表示現(xiàn)實(shí)世界中存在的“實(shí)體”,每條邊為實(shí)體與實(shí)體之間的“關(guān)系”。知識(shí)圖譜是關(guān)系的最有效的表示方式。
通俗地講,知識(shí)圖譜就是把所有不同種類的信息(Heterogeneous Information)連接在一起而得到的一個(gè)關(guān)系網(wǎng)絡(luò)。知識(shí)圖譜提供了從“關(guān)系”的角度去分析問題的能力。
知識(shí)圖譜這個(gè)概念最早由Google提出,主要是用來優(yōu)化現(xiàn)有的搜索引擎。不同于基于關(guān)鍵詞搜索的傳統(tǒng)搜索引擎,知識(shí)圖譜可用來更好地查詢復(fù)雜的關(guān)聯(lián)信息,從語(yǔ)義層面理解用戶意圖,改進(jìn)搜索質(zhì)量。比如在Google的搜索框里輸入科比的時(shí)候,搜索結(jié)果頁(yè)面的右側(cè)還會(huì)出現(xiàn)科比相關(guān)的信息比如出生年月,家庭情況等等。

在知識(shí)圖譜里,我們通常用“實(shí)體(Entity)”來表達(dá)圖里的節(jié)點(diǎn)、用“關(guān)系(Relation)”來表達(dá)圖里的“邊”。實(shí)體指的是現(xiàn)實(shí)世界中的事物比如人、地名、概念、公司等,關(guān)系則用來表達(dá)不同實(shí)體之間的某種聯(lián)系,比如人-“居住在”-北京、張三和李四是“朋友”等等。
通過上面這個(gè)例子,讀者應(yīng)該對(duì)知識(shí)圖譜有了一個(gè)初步的印象,其本質(zhì)是為了表示知識(shí),從實(shí)際應(yīng)用的角度出發(fā)其實(shí)可以簡(jiǎn)單地把知識(shí)圖譜理解成多關(guān)系圖(Multi-relational Graph)。
知識(shí)圖譜的表示
那什么叫多關(guān)系圖呢? 圖是由節(jié)點(diǎn)(Vertex)和邊(Edge)來構(gòu)成,但這些圖通常只包含一種類型的節(jié)點(diǎn)和邊。但相反,多關(guān)系圖一般包含多種類型的節(jié)點(diǎn)和多種類型的邊。比如下圖因?yàn)閳D里包含了多種類型的節(jié)點(diǎn)和邊。這些類型由不同的顏色來標(biāo)記。

當(dāng)一個(gè)知識(shí)圖譜擁有屬性時(shí),我們可以用屬性圖(Property Graph)來表示,如上圖,科比和凡妮莎是夫妻,他們的結(jié)婚時(shí)間是2001年到2020年,其中結(jié)婚時(shí)間就可以作為關(guān)系的屬性,類似的,科比也有自己的屬性,比如性別、出生日期等。這種屬性圖的表達(dá)很貼近現(xiàn)實(shí)生活中的場(chǎng)景,也可以很好地描述業(yè)務(wù)中所包含的邏輯。
除了屬性圖,知識(shí)圖譜也可以用RDF來表示,它是由很多的三元組(Triples)來組成。RDF在設(shè)計(jì)上的主要特點(diǎn)是易于發(fā)布和分享數(shù)據(jù),但不支持實(shí)體或關(guān)系擁有屬性,如果非要加上屬性,則在設(shè)計(jì)上需要做一些修改。目前來看,RDF主要還是用于學(xué)術(shù)的場(chǎng)景,在工業(yè)界我們更多的還是采用圖數(shù)據(jù)庫(kù)(比如用來存儲(chǔ)屬性圖)的方式。
知識(shí)圖譜主要有兩種存儲(chǔ)方式:一種是基于RDF的存儲(chǔ);另一種是基于圖數(shù)據(jù)庫(kù)的存儲(chǔ)。RDF一個(gè)重要的設(shè)計(jì)原則是數(shù)據(jù)的易發(fā)布以及共享,圖數(shù)據(jù)庫(kù)則把重點(diǎn)放在了高效的圖查詢和搜索上。其次,RDF以三元組的方式來存儲(chǔ)數(shù)據(jù)而且不包含屬性信息,但圖數(shù)據(jù)庫(kù)一般以屬性圖為基本的表示形式,所以實(shí)體和關(guān)系可以包含屬性,這就意味著更容易表達(dá)現(xiàn)實(shí)的業(yè)務(wù)場(chǎng)景。
知識(shí)抽取
知識(shí)圖譜的體系架構(gòu)是其指構(gòu)建模式結(jié)構(gòu),如下圖所示。知識(shí)圖譜的構(gòu)建過程需要隨人的認(rèn)知能力不斷更新迭代。

所謂的靜態(tài)關(guān)系圖譜,意味著我們不考慮圖譜結(jié)構(gòu)本身隨時(shí)間的變化,只是聚焦在當(dāng)前知識(shí)圖譜結(jié)構(gòu)上。然而,我們也知道圖譜的結(jié)構(gòu)是隨時(shí)間變化的。
在下面的圖中,我們給出了一個(gè)知識(shí)圖譜T時(shí)刻和T+1時(shí)刻的結(jié)構(gòu),我們很容易看出在這兩個(gè)時(shí)刻中間,圖譜結(jié)構(gòu)(或者部分結(jié)構(gòu))發(fā)生了很明顯的變化。那怎么去判斷這些結(jié)構(gòu)上的變化呢? 感興趣的讀者可以關(guān)注我,后面會(huì)持續(xù)更新知識(shí)圖譜相關(guān)技術(shù)棧,本文先不做過多討論。

回到知識(shí)圖譜的體系架構(gòu)那張圖,知識(shí)圖譜的構(gòu)建是后續(xù)應(yīng)用的基礎(chǔ),而且構(gòu)建的前提是需要把數(shù)據(jù)從不同的數(shù)據(jù)源中抽取出來。對(duì)于垂直領(lǐng)域的知識(shí)圖譜來說,它們的數(shù)據(jù)源主要來自兩種渠道:一種是業(yè)務(wù)本身的數(shù)據(jù),這部分?jǐn)?shù)據(jù)通常包含在公司內(nèi)的數(shù)據(jù)庫(kù)表并以結(jié)構(gòu)化的方式存儲(chǔ);另一種是網(wǎng)絡(luò)上公開、抓取的數(shù)據(jù),這些數(shù)據(jù)通常是以網(wǎng)頁(yè)的形式存在所以是半結(jié)構(gòu)/非結(jié)構(gòu)化的數(shù)據(jù)。
前者一般只需要簡(jiǎn)單預(yù)處理即可以作為后續(xù)AI系統(tǒng)的輸入,但后者一般需要借助于自然語(yǔ)言處理等技術(shù)來提取出結(jié)構(gòu)化信息。比如在上面的搜索例子里,科比和凡妮莎的關(guān)系就可以從非結(jié)構(gòu)化數(shù)據(jù)中提煉出來,比如維基百科等數(shù)據(jù)源。
信息抽取的難點(diǎn)在于處理非結(jié)構(gòu)化數(shù)據(jù)。從一段非結(jié)構(gòu)化的文本中,需要抽取出實(shí)體、關(guān)系和屬性。例如下圖是從維基百科拿到的科比文本信息:

要從海量文字中,構(gòu)建出類似文章開頭的那種知識(shí)圖譜,需要涉及幾個(gè)方面的自然語(yǔ)言處理技術(shù):
- 實(shí)體命名識(shí)別(Name Entity Recognition)
- 關(guān)系抽取(Relation Extraction)
- 實(shí)體統(tǒng)一(Entity Resolution)
- 指代消解(Coreference Resolution)
首先是實(shí)體命名識(shí)別,就是從文本里提取出實(shí)體并對(duì)每個(gè)實(shí)體做分類/打標(biāo)簽:比如從上述文本里,我們可以提取出實(shí)體-“科比·布萊恩特”,并標(biāo)記實(shí)體類型為 “人”;我們也可以從中提取出“賓夕法尼亞洲費(fèi)城”,并標(biāo)記實(shí)體類型為“位置”。
這種過程稱之為實(shí)體命名識(shí)別,這是一項(xiàng)相對(duì)比較成熟的技術(shù),有一些現(xiàn)成的工具可以用來做這件事情。其次,我們可以通過關(guān)系抽取技術(shù),把實(shí)體間的關(guān)系從文本中提取出來,比如實(shí)體“科比”和“賓夕法尼亞洲費(fèi)城”之間的關(guān)系為“出生于”等等。
另外,在實(shí)體命名識(shí)別和關(guān)系抽取過程中,有兩個(gè)比較棘手的問題:一個(gè)是實(shí)體統(tǒng)一,也就是說有些實(shí)體寫法上不一樣,但其實(shí)是指向同一個(gè)實(shí)體。比如“科比·比恩·布萊恩特”和“科比”表面上是不同的字符串,但其實(shí)指的都是科比這個(gè)人,需要合并。
實(shí)體統(tǒng)一不僅可以減少實(shí)體的種類,也可以降低圖譜的稀疏性(Sparsity);另一個(gè)問題是指代消解,也是文本中出現(xiàn)的“他”, “它”, “她”這些詞到底指向哪個(gè)實(shí)體。
實(shí)體統(tǒng)一和指代消解問題相對(duì)于前兩個(gè)問題更具有挑戰(zhàn)性。
大規(guī)模知識(shí)庫(kù)的構(gòu)建與應(yīng)用需要多種智能信息處理技術(shù)的支持。通過知識(shí)抽取技術(shù),可以從一些公開的半結(jié)構(gòu)化、非結(jié)構(gòu)化的數(shù)據(jù)中提取出實(shí)體、關(guān)系、屬性等知識(shí)要素。
通過知識(shí)融合,可消除實(shí)體、關(guān)系、屬性等指稱項(xiàng)與事實(shí)對(duì)象之間的歧義,形成高質(zhì)量的知識(shí)庫(kù)。知識(shí)推理則是在已有的知識(shí)庫(kù)基礎(chǔ)上進(jìn)一步挖掘隱含的知識(shí),從而豐富、擴(kuò)展知識(shí)庫(kù)。分布式的知識(shí)表示形成的綜合向量對(duì)知識(shí)庫(kù)的構(gòu)建、推理、融合以及應(yīng)用均具有重要的意義。
作為科普性的文章,本文的目的是帶大家入門,關(guān)于知識(shí)圖譜更深入的知識(shí)抽取、知識(shí)表示、知識(shí)融合以及知識(shí)推理技術(shù),篇幅有限,將作為下一篇的重點(diǎn)內(nèi)容,供大家參考。
知識(shí)圖譜的搭建
首先需要說明的一點(diǎn)是,搭建一個(gè)知識(shí)圖譜系統(tǒng)最重要的核心在于對(duì)業(yè)務(wù)的理解以及對(duì)知識(shí)圖譜本身的設(shè)計(jì),這就類似于對(duì)于一個(gè)業(yè)務(wù)系統(tǒng),數(shù)據(jù)庫(kù)表的設(shè)計(jì)尤其關(guān)鍵,而且這種設(shè)計(jì)絕對(duì)離不開對(duì)業(yè)務(wù)的深入理解以及對(duì)未來業(yè)務(wù)場(chǎng)景變化的預(yù)估。 當(dāng)然,在這里我們先不討論數(shù)據(jù)的重要性。
一個(gè)完整的知識(shí)圖譜的構(gòu)建包含以下幾個(gè)步驟:
- 定義具體的業(yè)務(wù)問題
- 數(shù)據(jù)的收集 & 預(yù)處理
- 知識(shí)圖譜的設(shè)計(jì)
- 把數(shù)據(jù)存入知識(shí)圖譜
- 上層應(yīng)用的開發(fā),以及系統(tǒng)的評(píng)估。
對(duì)于定義具體業(yè)務(wù)問題,要明確的一點(diǎn)是,對(duì)于自身的業(yè)務(wù)問題到底需不需要知識(shí)圖譜系統(tǒng)的支持。因?yàn)樵诤芏嗟膶?shí)際場(chǎng)景,即使對(duì)關(guān)系的分析有一定的需求,實(shí)際上也可以利用傳統(tǒng)數(shù)據(jù)庫(kù)來完成分析的。所以為了避免使用知識(shí)圖譜而選擇知識(shí)圖譜,以及更好的技術(shù)選型,以下給出了幾點(diǎn)總結(jié),供參考。

下一步就是要確定數(shù)據(jù)源以及做必要的數(shù)據(jù)預(yù)處理。在這里我只說明的一點(diǎn),并不是所有相關(guān)的數(shù)據(jù)都必須要進(jìn)入知識(shí)圖譜,對(duì)于這部分的一些決策原則在后續(xù)的文章中會(huì)有比較詳細(xì)的介紹。
知識(shí)圖譜的設(shè)計(jì)是門藝術(shù),作為程序媛,我把它交給更專業(yè)的人員。存儲(chǔ)上我們要面臨存儲(chǔ)系統(tǒng)的選擇,但由于我們?cè)O(shè)計(jì)的知識(shí)圖譜帶有屬性,圖數(shù)據(jù)庫(kù)可以作為首選。但至于選擇哪個(gè)圖數(shù)據(jù)庫(kù)也要看業(yè)務(wù)量以及對(duì)效率的要求。
如果數(shù)據(jù)量特別龐大,則Neo4j很可能滿足不了業(yè)務(wù)的需求,這時(shí)候不得不去選擇支持準(zhǔn)分布式的系統(tǒng)比如OrientDB, JanusGraph等,或者通過效率、冗余原則把信息存放在傳統(tǒng)數(shù)據(jù)庫(kù)中,從而減少知識(shí)圖譜所承載的信息量。 通常來講,對(duì)于10億節(jié)點(diǎn)以下規(guī)模的圖譜來說Neo4j已經(jīng)足夠了。
做完這些,就可以來到我們最熟悉的環(huán)節(jié),進(jìn)行應(yīng)用的開發(fā)(擼代碼)了。
知識(shí)圖譜的應(yīng)用
知識(shí)圖譜應(yīng)用的前提是已經(jīng)構(gòu)建好了知識(shí)圖譜,也可以把它認(rèn)為是一個(gè)知識(shí)庫(kù)。當(dāng)我們執(zhí)行搜索的時(shí)候,就可以通過關(guān)鍵詞提取以及知識(shí)庫(kù)上的匹配可以直接獲得最終的答案。
這種搜索方式跟傳統(tǒng)的搜索引擎是不一樣的,一個(gè)傳統(tǒng)的搜索引擎它返回的是網(wǎng)頁(yè)、而不是最終的答案,所以就多了一層用戶自己篩選并過濾信息的過程。
知識(shí)圖譜的應(yīng)用主要集中在搜索與推薦領(lǐng)域:

在語(yǔ)義搜索這一塊,知識(shí)圖譜的搜索不同于常規(guī)的搜索,常規(guī)的搜索是根據(jù)keyword找到對(duì)應(yīng)的網(wǎng)頁(yè)集合,然后通過page rank等算法去給網(wǎng)頁(yè)集合內(nèi)的網(wǎng)頁(yè)進(jìn)行排名,然后展示給用戶;基于知識(shí)圖譜的搜索是在已有的圖譜知識(shí)庫(kù)中遍歷知識(shí),然后將查詢到的知識(shí)返回給用戶,通常如果路徑正確,查詢出來的知識(shí)只有1個(gè)或幾個(gè),相當(dāng)精準(zhǔn)。
問答系統(tǒng)這一塊,系統(tǒng)同樣會(huì)首先在知識(shí)圖譜的幫助下對(duì)用戶使用自然語(yǔ)言提出的問題進(jìn)行語(yǔ)義分析和語(yǔ)法分析,進(jìn)而將其轉(zhuǎn)化成結(jié)構(gòu)化形式的查詢語(yǔ)句,然后在知識(shí)圖譜中查詢答案。
實(shí)踐上的幾點(diǎn)建議
首先,知識(shí)圖譜是一個(gè)比較新的工具,它的主要作用還是在于分析關(guān)系,尤其是深度的關(guān)系。所以在業(yè)務(wù)上,首先要確保它的必要性,其實(shí)很多問題可以用非知識(shí)圖譜的方式來解決。
知識(shí)圖譜領(lǐng)域一個(gè)最重要的話題是知識(shí)的推理。而且知識(shí)的推理是走向強(qiáng)人工智能的必經(jīng)之路。但很遺憾的,目前很多語(yǔ)義網(wǎng)絡(luò)的角度討論的推理技術(shù)(比如基于深度學(xué)習(xí),概率統(tǒng)計(jì))很難在實(shí)際的垂直應(yīng)用中落地。其實(shí)目前最有效的方式還是基于一些規(guī)則的方法論,除非我們有非常龐大的數(shù)據(jù)集。
最后,還是要強(qiáng)調(diào)一點(diǎn),知識(shí)圖譜工程本身還是業(yè)務(wù)為重心,以數(shù)據(jù)為中心。不要低估業(yè)務(wù)和數(shù)據(jù)的重要性。如果本篇對(duì)你有幫助,點(diǎn)個(gè)贊互相鼓勵(lì)一下吧!
參考:
- 《知識(shí)圖譜技術(shù)綜述》 徐增林, 盛泳潘, 賀麗榮, 王雅芳
- 知識(shí)圖譜基礎(chǔ)(一)-什么是知識(shí)圖譜
- 這是一份通俗易懂的知識(shí)圖譜技術(shù)與應(yīng)用指南
作者:臧遠(yuǎn)慧
簡(jiǎn)介:就職于中科星圖股份有限公司(北京),研發(fā)部后端技術(shù)組。個(gè)人擅長(zhǎng) Python/Java 開發(fā),了解前端基礎(chǔ);熟練掌握 MySQL,MongoDB,了解 Redis;熟悉 Linux 開發(fā)環(huán)境,掌握 Shell 編程,有良好的 Git 源碼管理習(xí)慣;精通 Nginx ,F(xiàn)lask、Swagger 開發(fā)框架;有 Docker+Kubernetes 云服務(wù)開發(fā)經(jīng)驗(yàn)。對(duì)人工智能、云原生技術(shù)有較大的興趣。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】