由於工作原因,需要在系統里建立圖譜推理功能,因此簡單學習了浙江大學 陳華鈞教授 知識圖譜導論課程課件,這里記錄下學習筆記。
知識圖譜推理的主要方法
• 基於描述邏輯的推理(如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)最基本的元素: 概念、關系和個體(實例),
-
- TBox術語集 (概念術語的公理集合) - 泛化的知識
- 描述概念和關系的知識,被稱之為公理 (Axiom)
-
- ABox斷言集 (個體的斷言集合) --具體個體的信息
- ABox包含外延知識 (又稱斷言 (Assertion)),描述論域中
的特定個體
-
- 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
您的支持是對博主最大的鼓勵,感謝您的認真閱讀。
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。