知識圖譜怎樣入門?
或者說怎樣具體整一個能跑的中文的知識圖譜Demo或Example出來,英文的告訴下怎麼自己跑也行,,
即 Knowledge Graph From Scratch。。
(好像說的不只是入門了。算是個成長打怪小提綱吧)
任何一個學科,重要的不是靜態的知識本身,而是建立知其然(Framework),知其所以然(Rationale),最後到知未然(Insights)。最重要的便是產生insights,因擁有洞察而知關鍵所在,所以能預測未來的走向,不人云亦云。
知識圖譜作為一門學問,絕不是用個圖資料庫寫幾條查詢,或者用規則寫一個表格的提取,就可以稱為成功的運用的。和所有的學科一樣,都需要長期的艱苦的努力,在充分了解前人成果的基礎上,才有可能做出一點點成績。
知識圖譜作為人工智慧(AI)的一個分支,和AI的其他分支一樣,它的成功運用,都是需要知道它的所長,更需要知道它的所短的。特別是AI各個學派林立,經驗主義(機器學習)、連接主義(神經網路)、理性主義(知識工程)、行為主義(機器人)各個方法的優劣,倘若不能有縱覽的理解,也難以做正確的技術選型,往往盲目相信或者排斥一種技術。AI是一個極端需要廣闊視野的學科。
知識圖譜涉及知識提取、表達、存儲、檢索一系列技術,即使想有小成,也需要幾年的功夫探索。如下所列,應該是每個知識圖譜從業者都應該了解的一些基本功:
知道Web的發展史,了解為什麼互聯和開放是知識結構形成最關鍵的一件事。(我把這個列第一條,是我的偏見——但我認為這是最重要的一個insights)
知道RDF,OWL,SPARQL這些W3C技術堆棧,知道它們的長處和局限。會使用RDF資料庫和推理機。
了解一點描述邏輯基礎,知道描述邏輯和一階邏輯的關係。知道模型論,不然完全沒法理解RDF和OWL。
了解圖靈機和基本的演算法複雜性。知道什麼是決策問題、可判定性、完備性和一致性、P、NP、NExpTime。
最好再知道一點邏輯程序(Logic Programming),涉獵一點答集程序(Answer Set Programming),知道LP和ASP的一些小工具。這些東西是規則引擎的核心。如果不滿足於正則表達式和if-then-else,最好學一點這些。
哦,當然要精通正則表達式。熟悉regex的各種工具。
從正則文法到自動機。不理解自動機很多高效的模式提取演算法都理解不了。
熟悉常見的知識庫,不必事事重新造輪子,如Freebase, Wikidata, Yago, DBPedia。
熟悉結構化數據建模的基本方法,如ER,面向對象,UML,腦圖。
學會使用一些本體編輯器,如Protege。(Palantir就是個價值120億美元的本體編輯器)
熟悉任何一種關係資料庫。會使用存儲過程寫遞歸查詢。明白什麼叫物化視圖、傳遞閉包、推理閉包。
熟悉任何一種圖資料庫。明白圖的局部索引和關係的全局索引的理論和實踐性能差異。
熟悉詞法分析的基本工具,如分詞、詞性標註
熟悉句法分析的基本工具,如成分分析、依存文法分析、深層文法分析
熟悉TFIDF、主題模型和分散式表示的基本概念和工具。知道怎麼計算兩個詞的相似度、詞和句子的關聯度。
知道怎麼做命名實體識別。知道一些常用的詞表。知道怎麼用規則做關係提取。
為了上述的深化,要掌握一些機器學習的基本概念,識別、分類、聚類、預測、回歸。掌握一些機器學習工具包的使用。
謹慎地使用一些深度學習方法,最好在是了解了神經網路的局限之後,先玩玩BP。主要是用用LSTM。
了解前人已經建好的各種Lexical資料庫,如Wordnet, framenet, BabelNet, PropBank。熟悉一些常用的Corpus。
知道信息檢索的基本原理。知道各種結構的索引的代價。
掌握Lucene或者Solr/Elasticsearch的使用。
學會混合使用多種資料庫,把結構化數據和非結構化數據放在一起使用。體會數據建模和查詢的成本。
學會一些概念原型工具,如Axure和Semantic Mediawiki。快速做MVP。
以上是掛一漏萬的一些羅列。知識圖譜是交叉性的、實踐性的學問,當然不必先蒙頭學幾年才能來做事。How to get to Carnegie Hall? Practice, Practice, Practice.
所以Just practice。
到CNKI搜索一些比較不錯期刊的中文綜述,應該是最快的入門辦法:
可以讀一下http://zhishi.me的論文,復現一下就可以了。另外,我們實驗室正在做佛學知識圖譜和司法知識圖譜,感興趣的朋友可以加入,我會根據能力來安排不同的任務。
Quora上的答案還是挺詳細的,還可以順便看看鏈接頁面里列的周邊近似的問題
https://www.quora.com/How-do-you-build-and-maintain-a-knowledge-graph分享一下學習總結:
一、 知識圖譜技術體系
知識圖譜的構建主要涉及到知識建模、知識抽取、知識融合、知識存儲、知識計算以及知識應用,具體可以歸納如下:
二、 知識圖譜實施方法
- 使用現有的套裝工具(如LOD2、Stardog)
- 在現有套裝工具的基礎上進行擴充
- 針對知識圖譜生命周期的各種工具進行組合
- 有針對性的開發某種工具
- 從零開始構建
三、 技術架構
知識圖譜架構如下圖,這其中主要包括如下幾個部分:
3.1 數據採集
主要涉及到爬蟲技術
3.2 建立本體
可以採用如下兩種方式
自頂向下:由專家創建
自底向上:
- 從現有的行業標準轉化;
- 從現有高質量數據源(如百科)轉化
3.3 本體編輯
有很多現有的工具:如Protégé、Semantic Turkey、Swoop、OBO-Edit等,存在的缺點是需要個人編輯,不能多人並行編輯
3.4 知識抽取
針對不同的目標數據類型,可以提供文件導入、ETL、Wrapper、Extractor三種方式:
- 結構化數據, 如RDB中的數據,直接ETL或文件上傳
- 半結構化數據, 如百科,配置Wrapper解析邏輯
- 文檔、文本類數據, 如一般的web數據,利用文本抽取引擎的自然語言處理技術(NLP)、機器學習,利用Extractor抽取成結構化的知識數據
3.5 知識融合
把結構化數據、半結構化數據、非結構化數據的知識表達形式都統一成RDF的形式,便於存儲和查詢。具體的知識融合主要包括如下兩種類型:
- 合併外部知識庫: 數據層的融合、模式層的融合
開放數據集成框架:LDIF
- 合併關係型資料庫:將關係型數據轉換成RDF的格式,現有工具Triplify、 d2rServer 、OpenLink、 Virtuoso 、SparqlMap等
3.6 知識存儲
知識存儲的主流存儲方式是圖資料庫,但具體實施時需要根據具體的業務需求來選擇存儲方式,下表總結了各種存儲方式的特點:
- 關係型資料庫存儲三元組表(S,P,O): 類似RDF存儲結構,以元組為單元進行存儲。語義較為明確
問題:大量自連接操作的開銷巨大
- 關係型資料庫存儲屬性表: 屬性相似的主語聚為一張表,類似關係型數據結構,每一條數據代表一個實體,每一列代表一個屬性
問題:
(1)、 RDF靈活性(高於一階的關係查詢很複雜)
(2)、 查詢時必須指定屬性,無法做不確定屬性的查詢
- 關係型資料庫存儲垂直分割: 以謂語劃分三元組表,根據屬性的不同建立數據表,數據結構較為清晰
問題:
(1)、大量數據表
(2)、刪除屬性代價大
- 關係型資料庫存儲RDF存儲: 專為存儲三元組形式的數據而設計的專用資料庫,通過六重索引(SPO、SOP、PSO、POS、OSP、OPS)的方式解決了三元組搜索的效率問題
優點:
(1)、三元組模式查詢(triple pattern)的高效執行
(2)、任意兩個三元組模式的高效歸併連接(merge-join)
缺點:
(1)、六重索引意味著6倍空間開銷
(2)、更新維護代價大
- 圖資料庫存儲: 圖資料庫的結構定義相比RDF資料庫更為通用,實現了圖結構中的節點,邊以及屬性來進行圖數據的存儲,典型的開源圖資料庫就是Neo4j。
優點:資料庫本身提供完善的圖查詢語言、支持各種圖挖掘演算法,缺點:圖資料庫的分散式存儲實現代價高,數據更新速度慢,大節點的處理開銷很高。
- 時態數據存儲: 知識圖譜中的時態信息包含以下四個方面:
事實的生成時間
某事實的有效時間段
某一對象在特定歷史時刻的狀態
知識圖譜在過去特定時間的版本
- 存儲原則
關係型數據:使用圖形數據存儲
關聯型數據:作為記錄型數據存入合適的存儲中,通過實體鏈接與圖譜中實體關聯。
屬性型數據:作為實體的數值屬性存入知識圖譜
時態型數據:使用基礎存儲上的時態處理中間件進行存儲與查詢
3.7 知識表現
知識表現主要涉及語義網的知識,其中與知識圖譜相關緊密的是RDF、 OWL、SPARQL幾種,具體的特徵和用處如下表:
3.8 知識推理
- jena是一個java 的API,用來支持語義網的有關應用,學習jena需要了解XML 、RDF、 Ontology、OWL等方面的知識。
- RDFox是一個高度可擴展的內存RDF三重存儲,支持共享內存並行數據推理。它是一個用C ++編寫的跨平台軟體,帶有一個Java包裝器,可以與任何基於Java的解決方案輕鬆集成
3.9 知識檢索
索引系統的構建,並對查詢的結果進行排序
3.10 人機交互
集成現有的可視化工具,實現知識圖譜的可視化。常見的可視化工具如3D.js、Echarts等。
歡迎關注專欄:數聯未來
劉知遠老師所提供的兩篇論文,對知識圖譜問題進行了詳細介紹,非常適合入門。在此我再提供一些個人覺得非常優秀實用的論文供參考。
莊嚴,李國良,馮建華. 知識庫實體對齊技術綜述[J]. 計算機研究與發展,2016,(01):165-192.
Wang Yuanzhuo, Jia Yantao, Liu Dawei, Jin Xiaolong, Cheng XueqiOpen. Web Knowledge Aided Information Search and Data Mining [J]. Jisuanji Yanjiu yu Fazhan/Computer Research and Development, vol. 52, issue 2 (2015)
Bernstein P A, Madhavan J, Rahm E. Generic schema matching, ten years later [J].Proceedings of the VLDB Endowment, vol. 4, issue 11 (2011) pp. 695-701
Shvaiko P , Euzenat J. Ontology matching: State of the art and future challenges [J]. IEEE Transactions on Knowledge and Data Engineering ( Volume: 25, Issue: 1, Jan. 2013 )
Otero-Cerdeira L , Francisco J, Rodríguez-Martínez A. Ontology matching: A literature review [J]. Expert Systems with Applications, vol. 42 (2015) pp. 949--971
以上五篇論文大多對實體對齊和本體匹配做了很多綜述,希望能對你知識圖譜的進一步研究有參考價值
陳超美博士的citespace算是知名的了,支持中文檢索,還不定期更新手冊啥的 此外還有pajek啥的 不過我也是小白,我們可以一起交流交流
1、確定領域:電影?圖書?。。。。。
2、確定知識圖譜用什麼框架和知識表示理論。
2、上手工具,比如 protégé
3、只做demo的話,不用費勁,自己編輯幾條數據就夠了。
4、Just do it~
無恥一下,列幾個參考:
- 李曉喆:知識圖譜構建過程中用到的工具?
- 李曉喆:怎樣從零開始做一個 Google Knowledge Graph 或者 Freebase 一樣的的知識庫系統,有哪些困難?
- 李曉喆:准研究生請教,語義網如何入門?
- 李曉喆:如何在protege軟體上開發一個關於紅樓夢家族的知識庫系統,並支持其中的一些查詢?
- 目前的提供開放API的中文知識圖譜有哪些?
- 李曉喆:如何搭建一個類似百度百科這樣的面向大眾的知識庫平台呢?
- 李曉喆:Freebase 關閉之後,最好的替代品是什麼?
基於以上老師的理論,確定一個領域,開始實踐做一個產品,是最快的。
可以關注下歷屆的 『全國中文知識圖譜研討會』
知識圖譜,也被稱為知識域可視化或知識域映射地圖,是顯示科學的知識的發展進程與結構關係的一系列各種不同的圖形。它用可視化技術描述知識資源及其載體、挖掘、分析、構建、繪製和顯示知識及它們之間的相互聯繫。
知識圖譜的學習,主要應該掌握核心,所謂的核心就是,知識圖譜知識庫的建立,其中涉及很多關鍵技術,首先知識圖譜中實體及實體間關係的建立,其次,實體抽取不是一件易事,抽取是指從無結構或半結構的Web文檔中提取結構化的信息,並將其關聯到某個實體概念。一個實體的所有信息分散在多個Web文檔中,如何剔除雜訊、排除歧義,將所有相關的可靠信息鏈接到同一個實體存在很大挑戰。最後,需要很好地組織和存儲抽取的實體與關係信息,使其能夠迅速地訪問和操作。
知識圖譜和自然語言處理密不可分,在此之前,一定要明白,什麼是自然語言處理,自然語言處理的發展歷程是什麼? - 智能研究 多智時代
推薦閱讀:
※我想做一個基於神經網路的數字識別程序,請問我應該看哪些書?
※為什麼梯度下降法每次找到的都是下降最快的點?
※如何評價 Coursera 的機器學習 (Andrew Ng) 課程?
※如何評價Deep and Hierarchical Implicit Models?
※已知兩個高斯分布及他們的關係,如何求條件期望?