1. 程式人生 > >知識圖譜推理與實踐(1)

知識圖譜推理與實踐(1)

由於工作原因,需要在系統裡建立圖譜推理功能,因此簡單學習了浙江大學 陳華鈞教授 知識圖譜導論課程課件,這裡記錄下學習筆記。

知識圖譜推理的主要方法

• 基於描述邏輯的推理(如DL-based)
• 基於圖結構和統計規則挖掘的推理(如: PRA、 AMIE)
• 基於知識圖譜表⽰學習的推理(如: TransE)
• 基於概率邏輯的⽅法(如: Statistical Relational Learning)

基於符號邏輯的推理——本體推理

  • 傳統的符號邏輯推理中主要與知識圖譜有關的推理手段是基於描述邏輯的本體推理。
  • 描述邏輯主要被⽤來對事物的本體進⾏建模和推理,⽤來描述和推斷概念分類及其概念之間的關係。
  • 主要方法:
    • 基於表運算(Tableaux)及改進的⽅法: FaCT++、 Racer、 Pellet Hermit等
    • 基於Datalog轉換的⽅法如KAON、 RDFox等
    • 基於產⽣式規則的演算法(如rete): Jena 、 Sesame、 OWLIM等

基於圖結構和統計規則挖掘的推理

主要方法:
• 基於路徑排序學習⽅法(PRA, Path ranking Algorithm)
• 基於關聯規則挖掘⽅法(AMIE)

基於知識圖譜表示學習的關係推理

  • 將實體和關係都表示為向量
  • 通過向量之間的計算代替圖的遍歷和搜尋來預測三元組的存在,由於向量的表示已經包含了實體原有的語義資訊,計算含有⼀定的推理能⼒。
  • 可應⽤於連結預測,基於路徑的多度查詢等

基於概率邏輯的⽅法——Statistical Relational Learning

概率邏輯學習有時也叫Relational Machine Learning (RML),關注關係的不確定性和複雜性。
通常使用Bayesian networks or Markov networks

基於符號邏輯的推理

本體概念推理

圖譜中基於RDF來作為資源描述語言,RDF是Resource Description Framework的簡稱。

但是RDF表示關係層次受限,因此有了RDFS,在RDF的基礎上,新增了Class, subClassOf, type, Property, subPropertyOf, Domain, Range

詞彙,可以更好的表述相關關係。

基於RDFS,可以做一些簡單的推理

OWL在RDFS的基礎上,進一步擴充套件了一些複雜型別、約束:

因此,我們也叫OWL為本體語言:

  • OWL是知識圖譜語言中最規範, 最嚴謹, 表達能力最強的語言
  • 基於RDF語法,使表示出來的文件具有語義理解的結構基礎
  • 促進了統一詞彙表的使用,定義了豐富的語義詞彙
  • 允許邏輯推理

OWL的描述邏輯系統:

  • 一個描述邏輯系統包括四個基本的組成部分
    • 1)最基本的元素: 概念、關係和個體(例項),
    • 2) TBox術語集 (概念術語的公理集合) - 泛化的知識
      • 描述概念和關係的知識,被稱之為公理 (Axiom)
    • 3) ABox斷言集 (個體的斷言集合) --具體個體的資訊
      • ABox包含外延知識 (又稱斷言 (Assertion)),描述論域中
        的特定個體
    • 4) TBox和ABox上的推理機制
  • 不同的描述邏輯系統的表示能力與推理機制由於對這四個組成部分的不同選擇而不同

描述邏輯與OWL的對應:

推理就是通過各種方法獲取新的知識或者結論,這些知識和結論滿足語義。

OWL本體推理

  • 可滿足性
    • 本體可滿足性: 檢查一個本體是否可滿足,即檢查該本體是否有模型。
    • 概念可滿足性,檢查某一概念的可滿足性,即檢查是否有模型,使得對該概念的解釋不是空集。

  • 分類(classification),針對Tbox的推理,計算新的概念的包含關係

  • 例項化(materialization),即計算屬於某個概念或關係的所有例項的集合。

例子:

典型的推理演算法: Tableaux,適用於檢查某一本體概念的可滿足性,以及例項檢測,基本思想是通過一系列規則構建Abox,以檢測可滿足性,或者檢測某一例項是否存在於某概念,基本思想類似於一階邏輯的歸結反駁。

基於邏輯程式設計改寫的方法

本體推理的侷限:

  • (1) 僅支援預定義的本體公理上的推理 (無法針對自定義的詞彙支援靈活推理)
  • (2) 使用者無法定義自己的推理過程

因此,引入規則推理

  • (1) 可以根據特定的場景定製規則,以實現使用者自定義的推理過程
  • (2) Datalog語言可以結合本體推理和規則推理

Datalog的語法:

  • 原子(atom)
    • p(t1,t2,...,tn)
    • p是謂詞,n是目數,ti是項
    • 例如has_child(x,y)
  • 規則(rule)
    • H:-B1,B2,...,Bm
    • has_child(X, Y) :−has_son(X, Y)
  • 事實(Fact)
    • F(c1,c2,...cn):-
    • 沒有體部且沒有變數的規則
    • 例如:has_child(Alice,Bob):-

Datalog程式是規則的集合:

has_child(X, Y) : −has_son(X, Y).
has_child(Alice, Bob) : −

Datalog 推理舉例:

相關工具:

基於產生式規則的方法

產生式系統,一種前向推理系統,可以按照一定機制執行規則從而達到某些目標,與一階邏輯類似,也有區別,可以應用來做自動規劃和專家系統。

產生式系統的組成:

  • 事實集合 (Working Memory)
  • 產生式/規則集合 (Production Memory, PM)
  • 推理引擎

產生式表示:

IF conditions THEN actions

  • conditions是由條件組成的集合,又稱為LHS(Left Hand Side)
  • actions是由動作組成的序列,又稱為RHS(Right Hand Side)

LHS,是條件的集合,各條件是且(AND)的關係,當所有條件均被滿足,則該規則觸發。
條件形如(type attr1: spec1 attr2:spec2)條件的形式:

  • 原子 (person name:alice)
  • 變數(person name:x)
  • 表示式 (person age:[n+4]
  • 布林 (person age:{>10})
  • 約束的與、或、非

RHS,是執行動作(action)的序列,執行時依次執行。動作的種類有ADD pattern,Remove i,Modify i,可以理解為對WME(Working Memory)的CUD;

產生式舉例:

IF (Student name: x)
Then ADD (Person name: x)

也可以寫作:

(Student name: x) ⇒ ADD (Person name: x)

推理引擎

➤ 控制系統的執行:

  • 模式匹配,用規則的條件部分匹配事實集中的事實,整個LHS都被滿足的規,則被觸發,並被加入議程(agenda)
  • 解決衝突,按一定的策略從被觸發的多條規則中選擇一條
  • 執行動作,執行被選擇出來的規則的RHS,從而對WM進行一定的操作

產生式系統=事實集+產生式集合+推理引擎

產生式系統執行流程

模式匹配——RETE演算法

  • 將產生式的LHS組織成判別網路形式
  • 用空間換時間

相關工具介紹

  • Drools
  • Jena 提供了處理RDF、 RDFS、 OWL資料的介面,還提供了一個規則引擎
Model m = ModelFactory.createDefaultModel(); 
Reasoner reasoner = new
GenericRuleReasoner(Rule.rulesFromURL("file:rule.txt"));
InfModel inf = ModelFactory.createInfModel(reasoner, m)

Inductive Reasoning – 基於圖的方法

PRA

➤ 將連線兩個實體的路徑作為特徵來預測其間可能存在的關係

• 通用關係學習框架 (generic relational learning framework)

路徑排序演算法 – Path Ranking Algorithm (PRA)

TransE

知識圖譜嵌⼊模型: TransE

TransE(Translating Embeddings for Modeling Multi-relational Data. NIPS 3013)

⽬標函式:

損失函式:

知識圖譜嵌⼊模型: 預測問題

  • 測試三元組( h, r, t )
  • 尾實體預測( h, r, ? )
  • 頭實體預測( ?, r, t )

PRA vs. TransE

基於Jena實現演繹推理

構建model

NO BB, show code:

Model myMod = ModelFactory.createDefaultModel();
String finance = “http://www.example.org/kse/finance#”;

// 實體
Resource shb = myMod.createResource(finance + "孫巨集斌");
Resource rczg = myMod.createResource(finance + "融創中國");


// 關係

Property control = myMod.createProperty(finance + "執掌");

// 加入三元組
myMod.add(shb, control, rczg);

上圖所示的圖譜,包含如下的三元組:

finance :孫巨集斌 finance :control finance :融創中國
finance :賈躍亭 finance :control finance :樂視網
finance :融創中國 rdf:type finance :地產公司
finance :地產公司 rdfs:subclassOf finance:公司
finance:公司 rdfs:subclassOf finance:法人實體
finance:孫巨集斌 rdf:type finance:公司
finance:孫巨集斌 rdf:type finance:人
finance :人 owl:disjointWith finance:公司

我們可以依次加入,程式碼略。

新增推理機

jena推理使用的是InfModel,可以基於Model構造,實際上在原來的Model之上加了個RDFS推理機

InfModel inf_rdfs = ModelFactory.createRDFSModel(myMod);

• 上下位推理

通過listStatements來獲取是否有滿足條件的三元組,從而實現判斷,subClassOf是RDFS裡的vob,因此使用RDFS.subClassOf。

public static void subClassOf(Model m, Resource s, Resource o) {
for (StmtIterator i = m.listStatements(s, RDFS.subClassOf, o); i.hasNext(); ) {
Statement stmt = i.nextStatement();
System.out.println(" yes! " );
break;
}
}

subClassOf(inf_rdfs, myMod.getResource(finance+"地產公司"),myMod.getResource(finance+”法人實體"));

• 針對類別的推理,OWL推理機可以針對個體類別做出完備推理,即補充完整該個體的所有類別;在查詢的時候,可以直接打印出所有類別!

首先構建owl推理機:

Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
InfModel inf_owl = ModelFactory.createInfModel(reasoner, myMod);

然後執行類別推理

public static void printStatements(Model m, Resource s, Property p, Resource o) {
for (StmtIterator i = m.listStatements(s,p,o); i.hasNext(); ) {
Statement stmt = i.nextStatement();
System.out.println(" - " + PrintUtil.print(stmt));
}
}
printStatements(inf_owl, rczg, RDF.type, null);

• 不一致檢測, jena的另一個常用推理就是檢驗data的不一致。

Model data = FileManager.get().loadModel(fname);
Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
InfModel inf_owl = ModelFactory.createInfModel(reasoner, myMod);
ValidityReport validity = inf_owl.validate();
if (validity.isValid()) {
System.out.println(“沒有不一致");
} else {
System.out.println(“存在不一致,如下: ");
for (Iterator i = validity.getReports(); i.hasNext(); ) {
System.out.println(" - " + i.next());
}
}


作者:Jadepeng
出處:jqpeng的技術記事本--http://www.cnblogs.com/xiaoqi
您的支援是對博主最大的鼓勵,感謝您的認真閱讀。
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。