1. 程式人生 > >技術動態 | 自底向上構建知識圖譜全過程

技術動態 | 自底向上構建知識圖譜全過程

本文轉載自公眾號:阿里技術

640?wx_fmt=jpeg

“The world is not made of strings , but is made of things.”
——辛格博士,from Google.

知識圖譜,是結構化的語義知識庫,用於迅速描述物理世界中的概念及其相互關係,通過將資料粒度從document級別降到data級別,聚合大量知識,從而實現知識的快速響應和推理。

當下知識圖譜已在工業領域得到了廣泛應用,如搜尋領域的Google搜尋、百度搜索,社交領域的領英經濟圖譜,企業資訊領域的天眼查企業圖譜等。

640?wx_fmt=png

在知識圖譜技術發展初期,多數參與企業和科研機構主要採用自頂向下的方式構建基礎知識庫,如Freebase。隨著自動知識抽取與加工技術的不斷成熟,當前的知識圖譜大多采用自底向上的方式構建,如Google的Knowledge Vault和微軟的Satori知識庫。

1、定義

俗話說:“看人先看臉。”在我們深入瞭解知識圖譜之前,讓我們先來看一下它長什麼樣子!

640?wx_fmt=png

如圖所示,你可以看到,如果兩個節點之間存在關係,他們就會被一條無向邊連線在一起,那麼這個節點,我們就稱為實體(Entity),它們之間的這條邊,我們就稱為關係(Relationship)。


知識圖譜的基本單位,便是“實體(Entity)-關係(Relationship)-實體(Entity)”構成的三元組,這也是知識圖譜的核心。

2、資料型別和儲存方式

知識圖譜的原始資料型別一般來說有三類(也是網際網路上的三類原始資料):

  • 結構化資料(Structed Data),如關係資料庫

  • 非結構化資料,如圖片、音訊、視訊

  • 半結構化資料 如XML、JSON、百科 

640?wx_fmt=jpeg

如何儲存上面這三類資料型別呢?一般有兩種選擇,一個是通過RDF(資源描述框架)這樣的規範儲存格式來進行儲存,比較常用的有Jena等。

640?wx_fmt=png

還有一種方法,就是使用圖資料庫來進行儲存,常用的有Neo4j等。

640?wx_fmt=jpeg

那你可能會問我了,你不就是一大堆的三元組嗎,用關係資料庫來儲存不也一樣嘛。


是的,用關係資料庫來儲存,尤其是儲存簡單的知識圖譜,從技術上來說是完全沒問題的。

但需要注意的是,一旦知識圖譜變複雜,圖資料庫在關聯查詢的效率上會比傳統的關係資料儲存方式有顯著的提高。當我們涉及到2,3度的關聯查詢,基於知識圖譜的查詢效率會高出幾千倍甚至幾百萬倍。


除此之外,基於圖的儲存在設計上會非常靈活,一般只需要區域性的改動即可。


因此如果你的資料量較大,還是建議直接用圖資料庫來進行儲存的。

3、知識圖譜的架構

知識圖譜的架構主要可以被分為:

  • 邏輯架構

  • 技術架構

3.1 邏輯架構

在邏輯上,我們通常將知識圖譜劃分為兩個層次:資料層和模式層。

  • 模式層:在資料層之上,是知識圖譜的核心,儲存經過提煉的知識,通常通過本體庫來管理這一層這一層(本體庫可以理解為面向物件裡的“類”這樣一個概念,本體庫就儲存著知識圖譜的類)。

  • 資料層:儲存真實的資料。

如果還是有點模糊,可以看看這個例子:

模式層:實體-關係-實體,實體-屬性-性值

資料層:比爾蓋茨-妻子-梅琳達·蓋茨,比爾蓋茨-總裁-微軟

3.2 技術架構

知識圖譜的整體架構如圖所示,其中虛線框內的部分為知識圖譜的構建過程,同時也是知識圖譜更新的過程。

640?wx_fmt=png

別緊張,讓我們順著這張圖來理一下思路。首先我們有一大堆的資料,這些資料可能是結構化的、非結構化的以及半結構化的,然後我們基於這些資料來構建知識圖譜,這一步主要是通過一系列自動化或半自動化的技術手段,來從原始資料中提取出知識要素,即一堆實體關係,並將其存入我們的知識庫的模式層和資料層。


構建知識圖譜是一個迭代更新的過程,根據知識獲取的邏輯,每一輪迭代包含三個階段:

  • 資訊抽取:從各種型別的資料來源中提取出實體、屬性以及實體間的相互關係,在此基礎上形成本體化的知識表達;

  • 知識融合:在獲得新知識之後,需要對其進行整合,以消除矛盾和歧義,比如某些實體可能有多種表達,某個特定稱謂也許對應於多個不同的實體等;

  • 知識加工:對於經過融合的新知識,需要經過質量評估之後(部分需要人工參與甄別),才能將合格的部分加入到知識庫中,以確保知識庫的質量。

4、構建技術

前面我們已經說過了,知識圖譜有自頂向下和自底向上兩種構建方式,這裡提到的構建技術主要是自底向上的構建技術。


如前所述,構建知識圖譜是一個迭代更新的過程,根據知識獲取的邏輯,每一輪迭代包含三個階段

  • 資訊抽取:從各種型別的資料來源中提取出實體、屬性以及實體間的相互關係,在此基礎上形成本體化的知識表達;

  • 知識融合:在獲得新知識之後,需要對其進行整合,以消除矛盾和歧義,比如某些實體可能有多種表達,某個特定稱謂也許對應於多個不同的實體等;

  • 知識加工:對於經過融合的新知識,需要經過質量評估之後(部分需要人工參與甄別),才能將合格的部分加入到知識庫中,以確保知識庫的質量,見下圖

640?wx_fmt=png

下面我們依次來對每一個步驟進行介紹。(長文預警)

4.1 資訊抽取

資訊抽取(infromation extraction)是知識圖譜構建的第1步,其中的關鍵問題是:如何從異構資料來源中自動抽取資訊得到候選指示單元?

資訊抽取是一種自動化地從半結構化和無結構資料中抽取實體、關係以及實體屬性等結構化資訊的技術。

涉及的關鍵技術包括:實體抽取、關係抽取和屬性抽取。

★ 4.1.1 實體抽取

實體抽取,也稱為命名實體識別(named entity recognition,NER),是指從文字資料集中自動識別出命名實體。


比如在下圖中,通過實體抽取我們可以從其中抽取出三個實體——“Steve Balmer”, "Bill Gates",和"Microsoft"。

640?wx_fmt=png

實體抽取的研究歷史主要是從面向單一領域進行實體抽取,逐步跨步到面向開放域(open domain)的實體抽取。

★ 4.1.2 關係抽取

文字語料經過實體抽取之後,得到的是一系列離散的命名實體,為了得到語義資訊,還需要從相關語料中提取出實體之間的關聯關係,通過關係將實體聯絡起來,才能夠形成網狀的知識結構。這就是關係抽取需要做的事,如下圖所示。

640?wx_fmt=png

研究歷史:

  1. 人工構造語法和語義規則(模式匹配)

  2. 統計機器學習方法

  3. 基於特徵向量或核函式的有監督學習方法

  4. 研究重點轉向半監督和無監督

  5. 開始研究面向開放域的資訊抽取方法

  6. 將面向開放域的資訊抽取方法和麵向封閉領域的傳統方法結合

★ 4.1.3 屬性抽取

屬性抽取的目標是從不同資訊源中採集特定實體的屬性資訊,如針對某個公眾人物,可以從網路公開資訊中得到其暱稱、生日、國籍、教育背景等資訊。

研究歷史:

  1. 將實體的屬性視作實體與屬性值之間的一種名詞性關係,將屬性抽取任務轉化為關係抽取任務。

  2. 基於規則和啟發式演算法,抽取結構化資料

  3. 基於百科類網站的半結構化資料,通過自動抽取生成訓練語料,用於訓練實體屬性標註模型,然後將其應用於對非結構化資料的實體屬性抽取。

  4. 採用資料探勘的方法直接從文字中挖掘實體屬性和屬性值之間的關係模式,據此實現對屬性名和屬性值在文字中的定位。

4.2 知識融合

通過資訊抽取,我們就從原始的非結構化和半結構化資料中獲取到了實體、關係以及實體的屬性資訊。


如果我們將接下來的過程比喻成拼圖的話,那麼這些資訊就是拼圖碎片,散亂無章,甚至還有從其他拼圖裡跑來的碎片、本身就是用來干擾我們拼圖的錯誤碎片。
也就是說:

  • 拼圖碎片(資訊)之間的關係是扁平化的,缺乏層次性和邏輯性;

  • 拼圖(知識)中還存在大量冗雜和錯誤的拼圖碎片(資訊)

那麼如何解決這一問題,就是在知識融合這一步裡我們需要做的了。

知識融合包括2部分內容:

  • 實體連結

  • 知識合併

★ 4.2.1 實體連結

實體連結(entity linking)是指對於從文字中抽取得到的實體物件,將其連結到知識庫中對應的正確實體物件的操作。

其基本思想是首先根據給定的實體指稱項,從知識庫中選出一組候選實體物件,然後通過相似度計算將指稱項鍊接到正確的實體物件。

研究歷史:

  1. 僅關注如何將從文字中抽取到的實體連結到知識庫中,忽視了位於同一文件的實體間存在的語義聯絡。

  2. 開始關注利用實體的共現關係,同時將多個實體連結到知識庫中。即整合實體連結(collective entity linking)

實體連結的流程:

  1. 從文字中通過實體抽取得到實體指稱項;

  2. 進行實體消歧共指消解,判斷知識庫中的同名實體與之是否代表不同的含義以及知識庫中是否存在其他命名實體與之表示相同的含義;

  3. 在確認知識庫中對應的正確實體物件之後,將該實體指稱項鍊接到知識庫中對應實體。

實體消歧是專門用於解決同名實體產生歧義問題的技術,通過實體消歧,就可以根據當前的語境,準確建立實體連結,實體消歧主要採用聚類法。其實也可以看做基於上下文的分類問題,類似於詞性消歧和詞義消歧。

共指消解技術主要用於解決多個指稱對應同一實體物件的問題。在一次會話中,多個指稱可能指向的是同一實體物件。利用共指消解技術,可以將這些指稱項關聯(合併)到正確的實體物件,由於該問題在資訊檢索和自然語言處理等領域具有特殊的重要性,吸引了大量的研究努力。共指消解還有一些其他的名字,比如物件對齊、實體匹配和實體同義。

★ 4.2.2 知識合併

在前面的實體連結中,我們已經將實體連結到知識庫中對應的正確實體物件那裡去了,但需要注意的是,實體連結連結的是我們從半結構化資料和非結構化資料那裡通過資訊抽取提取出來的資料。

那麼除了半結構化資料和非結構化資料以外,我們還有個更方便的資料來源——結構化資料,如外部知識庫和關係資料庫。

對於這部分結構化資料的處理,就是我們知識合併的內容啦。一般來說知識合併主要分為兩種:

  • 合併外部知識庫,主要處理資料層和模式層的衝突

  • 合併關係資料庫,有RDB2RDF等方法

4.3 知識加工

經過剛才那一系列步驟,我們終於走到了知識加工這一步了!


感覺大家可能已經有點暈眩,那麼讓我們再來看一下知識圖譜的這張架構圖。

640?wx_fmt=png

在前面,我們已經通過資訊抽取,從原始語料中提取出了實體、關係與屬性等知識要素,並且經過知識融合,消除實體指稱項與實體物件之間的歧義,得到一系列基本的事實表達。


然而事實本身並不等於知識。
要想最終獲得結構化,網路化的知識體系,還需要經歷知識加工的過程。

知識加工主要包括3方面內容:本體構建、知識推理和質量評估

★ 4.3.1 本體構建

本體(ontology)是指工人的概念集合、概念框架,如“人”、“事”、“物”等。

本體可以採用人工編輯的方式手動構建(藉助本體編輯軟體),也可以以資料驅動的自動化方式構建本體。因為人工方式工作量巨大,且很難找到符合要求的專家,因此當前主流的全域性本體庫產品,都是從一些面向特定領域的現有本體庫出發,採用自動構建技術逐步擴充套件得到的。

自動化本體構建過程包含三個階段:

  1. 實體並列關係相似度計算

  2. 實體上下位關係抽取

  3. 本體的生成

比如對下面這個例子,當知識圖譜剛得到“阿里巴巴”、“騰訊”、“手機”這三個實體的時候,可能會認為它們三個之間並沒有什麼差別,但當它去計算三個實體之間的相似度後,就會發現,阿里巴巴和騰訊之間可能更相似,和手機差別更大一些。

這就是第一步的作用,但這樣下來,知識圖譜實際上還是沒有一個上下層的概念,它還是不知道,阿里巴巴和手機,根本就不隸屬於一個型別,無法比較。因此我們在實體上下位關係抽取這一步,就需要去完成這樣的工作,從而生成第三步的本體。


當三步結束後,這個知識圖譜可能就會明白,“阿里巴巴和騰訊,其實都是公司這樣一個實體下的細分實體。它們和手機並不是一類。”

640?wx_fmt=png

★ 4.3.2 知識推理

在我們完成了本體構建這一步之後,一個知識圖譜的雛形便已經搭建好了。但可能在這個時候,知識圖譜之間大多數關係都是殘缺的,缺失值非常嚴重,那麼這個時候,我們就可以使用知識推理技術,去完成進一步的知識發現。


比如在下面這個例子裡:

640?wx_fmt=png

我們可以發現:如果A是B的配偶,B是C的主席,C坐落於D,那麼我們就可以認為,A生活在D這個城市。


根據這一條規則,我們可以去挖掘一下在圖裡,是不是還有其他的path滿足這個條件,那麼我們就可以將AD兩個關聯起來。除此之外,我們還可以去思考,串聯裡有一環是B是C的主席,那麼B是C的CEO、B是C的COO,是不是也可以作為這個推理策略的一環呢?

當然知識推理的物件也並不侷限於實體間的關係,也可以是實體的屬性值,本體的概念層次關係等。


比如:

  • 推理屬性值:已知某實體的生日屬性,可以通過推理得到該實體的年齡屬性;

  • 推理概念:已知(老虎,科,貓科)和(貓科,目,食肉目)可以推出(老虎,目,食肉目)

這一塊的演算法主要可以分為3大類,基於邏輯的推理、基於圖的推理和基於深度學習的推理。

640?wx_fmt=png

★ 4.3.3 質量評估

質量評估也是知識庫構建技術的重要組成部分,這一部分存在的意義在於:可以對知識的可信度進行量化,通過捨棄置信度較低的知識來保障知識庫的質量

好啦,在質量評估之後,你是不是想說,媽耶知識圖譜終於構建完畢了。終於可以鬆一口氣了。

好吧,實不相瞞,知識圖譜這個寶寶目前雖然我們構建成功了。

但是!你家寶寶不吃飯的啊!你家寶寶不學習的啊!

所以,讓我們冷靜一下,乖乖進入知識更新這一步……

4.4 知識更新

從邏輯上看,知識庫的更新包括概念層的更新和資料層的更新

  • 概念層的更新是指新增資料後獲得了新的概念,需要自動將新的概念新增到知識庫的概念層中。

  • 資料層的更新主要是新增或更新實體、關係、屬性值,對資料層進行更新需要考慮資料來源的可靠性、資料的一致性(是否存在矛盾或冗雜等問題)等可靠資料來源,並選擇在各資料來源中出現頻率高的事實和屬性加入知識庫。

知識圖譜的內容更新有兩種方式:

  • 全面更新:指以更新後的全部資料為輸入,從零開始構建知識圖譜。這種方法比較簡單,但資源消耗大,而且需要耗費大量人力資源進行系統維護;

  • 增量更新:以當前新增資料為輸入,向現有知識圖譜中新增新增知識。這種方式資源消耗小,但目前仍需要大量人工干預(定義規則等),因此實施起來十分困難。

5、知識圖譜的應用

好了!終於終於!知識圖譜的構建方式我們就此結束了!


為了讓大家不立刻棄療,讓我們來看看知識圖譜能做到什麼,以及目前已經做到了什麼~

  • 智慧搜尋——也是知識圖譜最成熟的一個場景,自動給出搜尋結果和相關人物

  • 構建人物關係圖,檢視更多維度的資料

  • 反欺詐:這主要有兩部分原因,一個是反欺詐的資料來源多樣,結構化和非結構化,二是不少欺詐案件會涉及到複雜的關係網路

  • 不一致性驗證(類似交叉驗證)——關係推理

  • 異常分析(運算量大,一般離線)

    • 靜態分析:給定一個圖形結構和某個時間點,從中去發現一些異常點(比如有異常的子圖)。

    • 動態分析:分析其結構隨時間變化的趨勢。(假設短時間內知識圖譜結構的變化不會太大,如果它的變化很大,就說明可能存在異常,需要進一步的關注。會涉及到時序分析技術和圖相似性計算技術。)

  • 失聯客戶管理 挖掘出更多的新聯絡人,提高催收的成功率。

  • ……

事實上,知識圖譜的應用遠不止於此。在我看來,這個世界就是一張巨大的知識圖譜,是無數個實體關係對,這兩年工業界對圖資料庫、知識圖譜的巨大需求也同樣反映出了這一點。


就像這篇文章開頭說的那句一樣,

“The world is not made of strings , but is made of things.”
——辛格博士,from Google.

References

[1] 劉嶠, 李楊, 段巨集,等. 知識圖譜構建技術綜述[J]. 計算機研究與發展, 2016, 53(3):582-600.
[2] 打怪的螞蟻. CSDN. 知識圖譜技術技巧. http://blog.csdn.net/xgjianstart/article/details/70214852
[3] Ehrlinger L, Wöß W. Towards a Definition of Knowledge Graphs[C]// Joint Proceedings of the Posters and Demos Track of, International Conference on Semantic Systems - Semantics2016 and, International Workshop on Semantic Change & Evolving Semantics. 2016.
[4] Das R, Neelakantan A, Belanger D, et al. Chains of Reasoning over Entities, Relations, and Text using Recurrent Neural Networks[J]. 2016:132-141.

640?wx_fmt=gif

OpenKG.CN

中文開放知識圖譜(簡稱OpenKG.CN)旨在促進中文知識圖譜資料的開放與互聯,促進知識圖譜和語義技術的普及和廣泛應用。

640?wx_fmt=jpeg

點選閱讀原文,進入 OpenKG 部落格。