知识图谱实践篇(一):数据准备和本体建模
對(duì)知識(shí)圖譜有興趣的讀者可以關(guān)注我的知乎專欄,主要介紹知識(shí)圖譜的相關(guān)概念、技術(shù),也包含一些具體實(shí)踐。
通過前面幾篇文章的介紹,讀者應(yīng)該對(duì)知識(shí)圖譜,其相關(guān)概念,以及語(yǔ)義網(wǎng)技術(shù)棧中的RDF,RDFS/OWL有了一定的了解。然而,之前我們都是在介紹一些概念性的東西。實(shí)踐才出真知,理論掌握得再好,不能解決實(shí)際問題也只是紙上談兵。因此,筆者準(zhǔn)備開一個(gè)實(shí)踐篇,結(jié)合理論篇,讓讀者能夠從無(wú)到有構(gòu)建一個(gè)領(lǐng)域知識(shí)圖譜,并在其上搭建一個(gè)基于知識(shí)圖譜的問答小程序。demo比較簡(jiǎn)單,問答實(shí)現(xiàn)是基于模板匹配和正則表達(dá)式,整個(gè)流程是為了讓讀者對(duì)知識(shí)圖譜及其相關(guān)應(yīng)用有個(gè)直觀的認(rèn)識(shí)。
本文作為實(shí)踐篇第一篇文章,首先介紹我們使用的數(shù)據(jù)、數(shù)據(jù)來(lái)源和數(shù)據(jù)獲取方法;其次,基于數(shù)據(jù)內(nèi)部關(guān)系,介紹如何以自頂向下的方式構(gòu)建本體結(jié)構(gòu)。
一、數(shù)據(jù)準(zhǔn)備
實(shí)踐篇使用的數(shù)據(jù)是與電影相關(guān)的。基本統(tǒng)計(jì)數(shù)據(jù)如下:
1. 演員數(shù)量:505人
2. 電影數(shù)量:4518部
3. 電影類型:19類
4. 人物與電影的關(guān)系:14451
5. 電影與類型的關(guān)系:7898
演員的基本信息包括:姓名、英文名、出生日期、死亡日期、出生地、個(gè)人簡(jiǎn)介。
電影的基本信息包括:電影名稱、電影簡(jiǎn)介、電影評(píng)分、電影發(fā)行日期、電影類型。
數(shù)據(jù)是從“The Movie DB”網(wǎng)站獲取的,官方提供注冊(cè)用戶API KEY用于查詢和下載數(shù)據(jù)。我本來(lái)打算從豆瓣獲取電影數(shù)據(jù),但現(xiàn)在豆瓣API已經(jīng)關(guān)閉了個(gè)人用戶申請(qǐng)入口。
本實(shí)例數(shù)據(jù)獲取方法:以周星馳為初始入口,獲取其出演的所有電影;再獲取這些電影的所有參演演員;最后獲取所有參演演員所出演的全部電影。經(jīng)過去重處理,我們得到了505個(gè)演員的基本信息和4518部電影的基本信息。數(shù)據(jù)保存在mysql中,其ER圖如下:
er_movie
讀者可以直接下載我們獲取到的數(shù)據(jù),或者用我們提供的腳本自己從網(wǎng)站獲取額外的數(shù)據(jù),再或者根據(jù)自己的需要重新編寫腳本。
二、本體建模
本體的構(gòu)建大體有兩種方式:自頂向下和自底向上。
1. 開放域知識(shí)圖譜的本體構(gòu)建通常用自底向上的方法,自動(dòng)地從知識(shí)圖譜中抽取概念、概念層次和概念之間的關(guān)系。這也很好理解,開放的世界太過復(fù)雜,用自頂向下的方法無(wú)法考慮周全,且隨著世界變化,對(duì)應(yīng)的概念還在增長(zhǎng)。
2. 領(lǐng)域知識(shí)圖譜多采用自頂向下的方法來(lái)構(gòu)建本體。一方面,相對(duì)于開放域知識(shí)圖譜,領(lǐng)域知識(shí)圖譜涉及的概念和范圍都是固定或者可控的;另一方面,對(duì)于領(lǐng)域知識(shí)圖譜,我們要求其滿足較高的精度。現(xiàn)在大家接觸到的一些語(yǔ)音助手背后對(duì)接的知識(shí)圖譜大多都是領(lǐng)域知識(shí)圖譜,比如音樂知識(shí)圖譜、體育知識(shí)圖譜、烹飪知識(shí)圖譜等等。正因?yàn)槭沁@些領(lǐng)域知識(shí)圖譜來(lái)滿足用戶的大多數(shù)需求,更需要保證其精度。
本實(shí)例是一個(gè)電影領(lǐng)域的知識(shí)圖譜,我們采用自頂向下的方法來(lái)構(gòu)建本體結(jié)構(gòu)。首先介紹下我們使用的工具protege(點(diǎn)擊進(jìn)入官網(wǎng)下載):
Protégé,又常常簡(jiǎn)單地拼寫為“Protege”,是一個(gè)斯坦福大學(xué)開發(fā)的本體編輯和知識(shí)獲取軟件。
開發(fā)語(yǔ)言采用Java,屬于開放源碼軟件。由于其優(yōu)秀的設(shè)計(jì)和眾多的插件,Protégé已成為目前使用最廣泛的本體論編輯器之一(來(lái)自維基百科)。
打開protege,看到和下圖類似的界面。在Ontology IRI中填寫我們新建本體資源的IRI。讀者可以填寫自己的符合標(biāo)準(zhǔn)的IRI。
protege
點(diǎn)擊“Entities”tab標(biāo)簽,選擇“Classes”標(biāo)簽。在這個(gè)界面,我們創(chuàng)建電影知識(shí)圖譜的類/概念。注意,所有的類都是“Thing”的子類。最左邊紅色小方框中的按鈕用于創(chuàng)建當(dāng)前選中類的子類,中間的按鈕用于創(chuàng)建兄弟類(平行類),最右邊的按鈕刪除當(dāng)前選中的類。我們創(chuàng)建了三個(gè)類,“人物”、“電影”、“類別”。右下方的界面是用于描述該類的一些特性,例如:”disjoint of”是用于表示該類與哪些類是互斥的。本例中,三個(gè)類都是互斥的。也就是說(shuō),一個(gè)實(shí)例只能是三個(gè)類中的一個(gè)。我們沒有在protege中顯式地定義互斥關(guān)系,讀者可以自己定義。
class
接下來(lái)我們切換到”O(jiān)bject Properties”頁(yè)面,我們?cè)诖私缑鎰?chuàng)建類之間的關(guān)系,即,對(duì)象屬性。這里我們創(chuàng)建了三個(gè)對(duì)象屬性,”hasActedIn”表示某人參演了某電影,因此我們?cè)谟蚁路降?號(hào)矩形框中定義該屬性的”domain”是人,4號(hào)框定義”range”是電影。這個(gè)很好理解,”domain”表示該屬性是屬于哪個(gè)類的,”range”表示該屬性的取值范圍。2號(hào)框表示該屬性的逆屬性是”hasActor”,即,有了推理機(jī),盡管我們的RDF數(shù)據(jù)只保存了A出演了B,我們?cè)诓樵兊臅r(shí)候也能得到B的演員有A。1號(hào)方框中是一些描述該屬性的詞匯,我們?cè)谏弦黄恼轮幸呀?jīng)介紹過,這里不再贅述。同理,我們定義另外兩個(gè)屬性,這里不再展示。
obeject property
最后,我們切換到”Data properties”,我們?cè)谠摻缑鎰?chuàng)建類的屬性,即,數(shù)據(jù)屬性。其定義方法和對(duì)象屬性類似,除了沒有這么豐富的描述屬性特性的詞匯。其實(shí)不難理解,這些描述特性的詞匯是傳遞、對(duì)稱、反對(duì)稱、自反等,表明其必定有指向其他資源或自身的邊,而我們之前提到過,數(shù)據(jù)屬性相當(dāng)于樹的葉子節(jié)點(diǎn),只有入度,而沒有出度。
data property
其實(shí)區(qū)分?jǐn)?shù)據(jù)屬性和對(duì)象屬性還有一個(gè)很直觀的方法,我們觀察其”range”,取值范圍即可。對(duì)象屬性的取值范圍是類,而數(shù)據(jù)屬性的取值范圍則是字面量,如下圖。
range
protege也支持以可視化的方式來(lái)展示本體結(jié)構(gòu)。我們點(diǎn)擊”Window”選項(xiàng),在”Tabs”中選擇”O(jiān)ntoGraf”,然后”Entities”旁邊就多了一個(gè)標(biāo)簽頁(yè)。在右側(cè)窗口中移動(dòng)元素,可以很直觀地觀察本體之間的關(guān)系。
image
在這個(gè)小節(jié),我們簡(jiǎn)單地介紹了如何用protege自頂向下地構(gòu)建知識(shí)圖譜的本體結(jié)構(gòu)。對(duì)于Protege更詳細(xì)的操作和介紹,請(qǐng)參考這篇文檔。
總結(jié)
這篇文章介紹了接下來(lái)實(shí)踐中使用的數(shù)據(jù),以及如何利用protege,根據(jù)我們的數(shù)據(jù)來(lái)進(jìn)行本體建模。數(shù)據(jù)、代碼以及本體文件我都上傳到了github。之后實(shí)踐篇涉及到的所有文件我都會(huì)放在該項(xiàng)目中。下一篇實(shí)踐文章將介紹關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)轉(zhuǎn)換為RDF的幾種方法,讓讀者學(xué)會(huì)如何把存在Mysql中的電影數(shù)據(jù)轉(zhuǎn)為RDF格式的數(shù)據(jù)。
https://blog.csdn.net/u011801161/article/details/78910988
總結(jié)
以上是生活随笔為你收集整理的知识图谱实践篇(一):数据准备和本体建模的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java throws catch_ja
- 下一篇: linux录制远程麦克风声音,在Linu