如何構建多快好省的“知識圖譜即服務”?這裡有獨家的經驗分享

微軟研究院AI頭條發表於2019-01-18

近年來,隨著人工智慧技術在科研和實踐中的廣泛發展和應用,知識圖譜作為人工智慧的重要課題也得到迅速發展。包含上億條事實的公開知識圖譜已經非常常見,並且不同的資料來源又互相聯結相通,形成了數以百億計的超大規模知識圖譜。與此同時,隨著自然語言處理深度學習等技術的發展,知識圖譜的抽取技術也在不斷進步,增量的知識圖譜資料不斷匯入。

一方面,知識的普遍性和關聯性等特點決定了知識圖譜只有在到達一定的數量級和覆蓋率時才能真正發揮其能量;另一方面,常用知識表示方法(比如三元組)的靈活性和碎片化等特點,也讓知識圖譜資料的管理變得困難。在知識圖譜資料已經成為一個不斷快速生長的龐然大物的背景下,如何讓海量知識變得可用且好用已經成為當前知識型應用的緊迫需求。

同一套知識圖譜資料可以在不同應用中通用,同時對於使用者而言,構建一套全新的資料系統是一項冗餘和繁雜的工作。因此,為知識型應用提供線上可用或下載即可用的資料服務成為一種知識圖譜的高效應用方式。本文中,我們將這種線上或離線提供知識圖譜資料服務的方式稱為知識圖譜即服務”

本文將從資料、應用及挑戰等角度詳細闡述如何高效地管理和服務超大規模知識圖譜資料,並分享作者所在團隊在設計和實現百億量級知識圖譜實時服務中的一些案例經驗。

知識圖譜:圖視角下的知識

英國哲學家弗朗西斯·培根有句名言:“知識就是力量”。Stuart J.Russell 和 Peter Norvig 在《人工智慧:一種現代方法》一書中指出,人工智慧包括自然語言處理、知識表示、自動推理、機器學習計算機視覺以及機器人技術。知識表示對於人工智慧的重要性不言而喻。實際上,機器學習得到的模型也是一種用計算結構和數值表示的知識。

在眾多知識表示方式中,知識圖譜作為一種語義網絡擁有極強的表達能力和建模靈活性:首先,知識圖譜是一種語義表示,可以對現實世界中的實體、概念、屬性以及它們之間的關係進行建模;其次,知識圖譜是其衍生技術的資料交換標準,其本身是一種資料建模的“協議”,相關技術涵蓋知識抽取、知識整合、知識管理和知識應用等各個環節。

知識圖譜是一種特殊的圖資料,它是語義的和可複用的:知識圖譜資料一經獲取即可被多領域應用重複使用,這也是知識圖譜服務的構建動機。那麼,知識圖譜具體來說是什麼呢?

首先,知識圖譜是一種特殊的圖資料。具體來說,知識圖譜是一種帶標記的有向屬性圖。知識圖譜中每個結點都有若干個屬性和屬性值,實體與實體之間的邊表示的是結點之間的關係,邊的指向方向表示了關係的方向,而邊上的標記表示了關係的型別。例如,“湯姆·克魯斯”和“碟中諜”是兩個實體,“出演”則是這兩者之間的關係。兩個實體分別對應著現實世界中的人和電影,而邊則對應了他們所表示的人和電影之間的現實關聯。前者是關係的起始結點,後者是關係的目標結點。實體“湯姆·克魯斯”具有“出生日期”等屬性,其屬性值為“1962年7月3日”等。

其次,知識圖譜是一種人類可識別且對機器友好的知識表示。知識圖譜採用了人類容易識別的字串來標識各元素;同時,圖資料表示作為一種通用的資料結構,可以很容易地被計算機識別和處理。

再次,知識圖譜自帶語義,蘊涵邏輯含義和規則。知識圖譜中的結點對應現實世界中的實體或者概念,每條邊或屬性也對應現實中的一條知識。在此之上,我們可以根據人類定義的規則,推匯出知識圖譜資料中沒有明確給出的知識。比如,已知“張三是個人”,我們就可以根據“人都有父母,都有大腦,需要呼吸”等規則得到很多新知識,而無需在知識圖譜中逐條給出。再比如,“外公”的“兒子”是“舅舅”,據此可以推匯出很多實體之間的親屬等關係。

下面介紹一下廣泛使用的知識圖譜表示框架和查詢語言:資源描述框架 (ResourceDescription Framework, RDF) 和 SPARQL 查詢語言 (SPARQL Protocol and QueryLanguage, SPARQL) 。

資源描述框架中的基本元素格式為: <主, 謂, 賓> 或 <s, p, o>。它採用主語、謂詞和賓語的方式來表示和陳述一條知識,這種表示方式簡單且靈活。由於資源描述框架的英文縮寫為 RDF,知識圖譜資料集也經常被稱為RDF資料集,而其管理工具通常被稱為RDF Store或Triple Store。在RDF中,我們可以用<Tom_Cruise, Acting, Mission:Impossible>和<Tom_Cruise, Date_Of_Birth, ”July 3, 1962”>等來表示實體“湯姆·克魯斯”的關係和屬性。一個 RDF 資料可以分為兩個部分:

一:顯式三元組。這部分由資料集直接給定。例如:

 <Sky, Color, blue>

 <Alice, Friend, Bob>

二:隱含三元組。這部分由推理規則隱含表示。規則可作用於顯式三元組,其推匯出的三元組數量可能巨大,甚至超過原始資料數倍。例如:

  • 如果?x 是一種?y, 而?y是?z的子型別,那麼?x 也是一種?z: (?x, IsA, ?y) & (?y, SubclassOf, ?z) => (?x, IsA, ?z) 

  • 如果?y是?x的朋友,那麼?x 是?y的朋友: (?x, Friend, ?y) => (?y, Friend, ?x)

代表性的 RDF 資料集包括 Freebase、DBpedia、WikiData、Yago2、Cyc、PubChemRDF以及UniProt等。已有知識圖譜資料中的資料量已達到空前規模,例如 Freebase 包含大約19億的三元組,DBpedia 包含大約30億三元組,而 Bio2RDF 擁有約100億三元組。這些資料集因為連結開放資料倡議 (Linked Open Data initiative, LOD) 而互相連通,形成了一個超過1490 億三元組的超大知識圖譜。如果算上它們遵循標準規則集 (如ρdf, RDFSPlus, RDFSFull, OWL DL 等) 可得的隱含三元組,實際的資料量將更為龐大。

SPARQL是一種廣泛使用的知識圖譜查詢語言。它的主要功能是做宣告式的子圖匹配,即只描述最終需要的結果模式,而具體執行的過程由底層資料管理系統決定。一個 SPARQL 查詢的主要組成部分是基本圖模式,比如 (?s, p, ?o),三個元素分別對應主、謂、賓,其中需要匹配的元素用帶問號的變數表示。通過集合交、並、差等操作符號實現組合邏輯。此外,其它的圖查詢語言比如 GraphQL 和Cypher 也可以用於查詢知識圖譜

知識圖譜應用

國內外各大公司、高校以及研究機構都對知識圖譜進行了探索和構建,比如谷歌的 Google Knowledge Graph、微軟的 Bing Knowledge Graph、搜狗的知立方、 百度知心、阿里巴巴的商品知識圖譜、復旦大學的 CN-DBpedia、東南大學的 Zhishi.me、清華大學的 Xlore 以及開放中文知識圖譜社群 OpenKG 的 cnSchema.org 等。知識圖譜的發展同時也得到了政府的關注和支援,例如中國國務院在《新一代人工智慧發展規劃》 (國發〔2017〕35號) 一文中就明確提出了知識圖譜相關的發展規劃

作為一種應用型技術,知識圖譜支撐了很多行業中的具體應用。例如:

- 資訊檢索:搜尋引擎中對實體資訊的精準聚合和匹配、對關鍵詞的理解以及對搜尋意圖的語義分析等;

- 自然語言理解知識圖譜中的知識作為理解自然語言中實體和關係的背景資訊;

- 問答系統:匹配問答模式和知識圖譜中知識子圖之間的對映

- 推薦系統:將知識圖譜作為一種輔助資訊整合到推薦系統中以提供更加精準的推薦選項;

- 電子商務:構建商品知識圖譜來精準地匹配使用者的購買意願和商品候選集合;

- 金融風控:利用實體之間的關係來分析金融活動的風險以提供在風險觸發後的補救措施(如聯絡人等);

- 公安刑偵:分析實體和實體之間的關係以獲得線索等;

- 司法輔助:法律條文的結構化表示和查詢來輔助案件的判決等;

- 教育醫療:提供視覺化的知識表示,用於藥物分析、疾病診斷等;

……

那麼知識圖譜在這些應用中是如何被訪問的呢?知識圖譜的服務場景按照其對響應時間的要求可以大體分為線上查詢和離線分析兩類。

線上查詢任務包括:1) 針對實體的查詢,如“作者為蘇軾的詩”;2) 針對屬性的查詢,如“辛棄疾的生卒年”;3) 針對關係的查詢,通過多跳關係搜尋實現知識圖譜中的關係發現,如“湯姆·克魯斯和布拉德·皮特一起演的電影所獲獎項”;4) 針對子圖結構的查詢,用於查詢具有某種特定關係的一系列實體,如“參與演出過同一部電影並且具有夫妻關係的演員”;5) 針對查詢的聚合,如“世界十大最高峰所在的國家列表”。這類查詢的特點是:響應延遲敏感,但資料吞吐量低。

離線分析任務包括:1) 基於圖結構的計算,如:知識圖譜向量化表示、知識圖譜資料補全和實體排序等;2) 基於規則的推理;3) 基於整體資訊的統計分析等。這類任務對響應時間要求低,但要求高資料吞吐量。

知識圖譜服務的挑戰

那麼,構建知識圖譜服務有什麼難點呢?主要包括以下三點:

一:並行圖處理。作為一類特殊的圖資料,知識圖譜的儲存、查詢以及計算都需要處理和圖結構相關的如下三方面挑戰:

  • 圖資料的複雜性。從資料訪問的角度看,無論圖資料如何表示,對一個圖結點鄰居結點的訪問都會涉及到在連續儲存空間中的“跳轉”,即大量的隨機資料訪問。大量程式優化技術依賴於資料的區域性性和重用。大量隨機資料訪問會導致中央處理器的快取在大部分時間裡失效,進而導致系統效能急劇下降。從程式結構的角度看,圖的非結構化特性使得並行處理十分困難。值得一提的是,切分圖資料本身是一個 NP 難問題,這讓分而治之方案的系統設計變得困難。

  • 圖結構和計算的多樣性。圖資料型別很多,圖演算法的效能會因為圖特徵不同而大相徑庭。圖計算的型別也有很多種,有針對性的系統優化適用面比較受限。

  • 圖資料規模越來越大。大規模的圖資料讓很多經典圖演算法因為低效而不可用。

二:隱含語義資訊處理。例如,處理 (?x, Parent, ?y) => (?x, Father, ?y) UNION (?x, Mother, ?y) 和 (?x, Niece, ?y) => (?x, Niece, ?y) UNION (?x, Spouse, ?z) AND (?z, Niece, ?y) 這類基於規則的推理將放大儲存、查詢代價。處理方法一般分為兩類:一類是在查詢之前就將所有隱含的三元組推匯出來並作為正常三元組儲存,這類方法會大量增加儲存代價;另一類是在查詢時,按照推理規則將一個查詢重寫成多個查詢,最後彙總查詢結果,這類方法會大大增加查詢代價。而將兩種方法融合的折中方法則會同時放大儲存和查詢代價。

三:複雜的資料模式知識圖譜的資料模式 (Schema)很複雜,如 ‘A dog can be also an actor’ (DEFINE ‘Actor SubClass Person’?);實體可以多角色,如 ‘A director who is also an actor, a singer, and a writer’;屬性可以有多值或預設,如 ‘An actor with many awards’ 和 ‘A person entity without birthday data’ 等。資料模式的複雜使得知識的物理儲存和優化變得十分困難。

結合以上對資料特點、查詢特點以及資料模式的分析,我們把一個知識服務系統所面臨的挑戰總結為以下四點:

- 系統架構:實現資料可擴充套件;

- 儲存設計:處理隨機資料訪問;

- 資料訪問:友好的訪問介面;

- 高效查詢:低延遲和/或高吞吐資料查詢

這四點彙集起來就是:

如何構建多快好省的“知識圖譜即服務”?這裡有獨家的經驗分享

知識圖譜服務的實現

我們先分析底層資料儲存介質。常見的記憶體 (RAM) 和硬碟 (HDD)的響應速度級別分別為10的負7次方秒和10的負2次方秒,而資料吞吐量分別為3GB/s 左右和100MB/s 左右。傳統硬碟由於其機械尋道機制的限制,資料的隨機化和並行化讀寫效能差。為了滿足高並行和隨機化資料訪問的需求,對延遲敏感的知識圖譜應用一般都選擇記憶體作為主要的儲存介質。另一方面,由於單機記憶體容量的限制,向上擴充套件代價昂貴,我們更傾向於可擴充套件的記憶體雲架構。

從儲存架構角度看,單機儲存系統主要為兩類:一類是基於傳統關聯式資料庫構建的系統,如SW-Store、Triple Tables 等;另一類是針對知識圖譜資料定製的專用儲存查詢系統,如 RDF-3X、TripleBit等。分散式系統大致可以分為分散式檔案系統、鍵值儲存系統、中心化的儲存以及混合儲存這四種。

如何構建多快好省的“知識圖譜即服務”?這裡有獨家的經驗分享

對於上層應用,系統需要提供細粒度的訪問介面。原因如下:首先這些介面可以作為線上查詢的輕量級工具,同時可以作為離線分析的並行化元件,真正實現將N 轉換為1 + 1 + … + 1,其中 N 表示批量的操作,而1表示細粒度的操作。這樣我們將這些1並行執行,就可以獲得與批量處理相當的高吞吐量效果。反之,如果我們只支援批量處理,當系統響應多個細粒度操作時就會變成 N + N + … + N,從而導致資源的浪費和響應速度的下降。

資料儲存和處理模組作為中間層,向下它基於底層儲存架構(比如記憶體雲),需要考慮儲存代價敏感和隨機訪問友好兩個特點;同時向上它需要提供細粒度且高效的訪問介面。

資料儲存和處理模組最核心的部分是知識圖譜資料的物理表示。它負責實現儲存、查詢和更新在內的資料管理,需要解決的核心問題是管理一個可更新的超大規模稀疏三階張量:如果將知識圖譜資料的主語、謂詞和賓語三個部分分別看作三個維度,每一個維度上的取值範圍即知識圖譜中對應位置出現的所有值,那麼整個資料集就可以被一個稀疏的三階張量表示,而知識圖譜的儲存問題也可以轉換為對這個三階張量的壓縮和索引。這個三階張量非常稀疏且分佈不均勻,其中主語和賓語這兩維的數量大,可以達到十億量級,而謂詞通常在幾千到上萬的量級。我們需要在儲存和查詢兩個方面同時做到高效,並且支援對各個維度的自由更新。

如何構建多快好省的“知識圖譜即服務”?這裡有獨家的經驗分享

具體的優化目標包括:首先是能夠儘量縮小資料儲存檔案的大小;其次是能夠快速地處理各類資料訪問請求;最後是支援增量更新。鑑於物理儲存模型的複雜性和靈活性,常見的一類方法是直接將這個三階張量中的元素(即三元組)作為最小儲存單元進行壓縮表示並建立索引。這種方法對三個元素按位置進行排列組合進行多次儲存,已達到空間換時間的目的。這種方法我們不妨稱為零階展平。另一類方法則將三階張量按某一階展平,如主語(圖資料結構)或謂詞(垂直劃分、位元矩陣等)。最後一類同時按兩階來展平,如主語和謂詞,這一類我們稱為強型別的儲存方案。前面提到的常見資料儲存方案大多屬於弱型別系統,如三元表(簡單直接)或“謂詞-賓語”鍵值列表等。相比於弱型別系統,強型別系統具有更小的資料儲存和訪問代價和更少的聯結操作 (JOIN) 代價。

後記

設計一個高效的大規模知識服務系統包含大量瑣碎的細節。除了通用的系統優化技巧,如果需要把我們的經驗總結為一條,那將是:強型別資料建模(軟體)+ 分散式記憶體儲存(硬體)

究員。他參與開發了微軟開源分散式記憶體圖處理引擎 Microsoft Graph Engine, 是開源專案分散式知識圖譜服務系統 Stylus 的主要作者。主要研究興趣包括:知識圖譜、分散式圖資料系統、機器學習、生物資訊學等。

相關文章