上一篇已經(jīng)對(duì)本體構(gòu)建模塊涉及到的概念和技術(shù)做了簡(jiǎn)單的介紹,這一篇原本是想更為詳細(xì)的講解本體構(gòu)建模塊的具體實(shí)現(xiàn),但是在寫(xiě)百度百科結(jié)構(gòu)分析部分時(shí)寫(xiě)的內(nèi)容過(guò)多,為了讓文章更好閱讀尊浓,這一篇就先只講百度百科結(jié)構(gòu)分析這一部分。
百度百科結(jié)構(gòu)分析
百度百科是 Answer 系統(tǒng)本體庫(kù)的主要數(shù)據(jù)來(lái)源纯衍,我們將利用 WebMagic 從百度百科抓取數(shù)據(jù)并利用 Jena 來(lái)構(gòu)建本體庫(kù)栋齿。
之所以選擇百度百科作為構(gòu)建本體庫(kù)的數(shù)據(jù)源,是因?yàn)槠渚哂邪虢Y(jié)構(gòu)化的特點(diǎn),這降低了從中抽取知識(shí)的難度瓦堵。下面就舉幾個(gè)栗子來(lái)分析百科頁(yè)面的結(jié)構(gòu)特點(diǎn):
- "周杰倫" 百科頁(yè)面
- "美人魚(yú)" (周杰倫創(chuàng)作歌曲)百科頁(yè)面
對(duì)比兩個(gè)頁(yè)面可以發(fā)現(xiàn)基协,不同詞條的頁(yè)面具有不同的結(jié)構(gòu)。雖然兩個(gè)頁(yè)面都具有基本的關(guān)于詞條的簡(jiǎn)介谷丸,但是 "周杰倫" 頁(yè)面具有 "代表作品"堡掏、"明星關(guān)系"等內(nèi)容,而作為歌曲的 "美人魚(yú)" 則沒(méi)有刨疼。
所以對(duì)于百度百科來(lái)說(shuō)泉唁,每個(gè)頁(yè)面的內(nèi)容并不是按照嚴(yán)格而統(tǒng)一的結(jié)構(gòu)來(lái)描述的,頁(yè)面結(jié)構(gòu)將會(huì)因詞條的不同而有所變化揩慕。
但與一般的互聯(lián)網(wǎng)頁(yè)面相比亭畜,百科頁(yè)面又具有較為明顯的結(jié)構(gòu)性,如 "周杰倫" 頁(yè)面中迎卤,頁(yè)面開(kāi)頭為關(guān)于 "周杰倫" 的簡(jiǎn)介拴鸵,之后是 "代表作品" 和 "明星關(guān)系"。之后還有如下內(nèi)容:
從上圖中可以查看到 "周杰倫" 的一些基本信息蜗搔,如 "中文名"劲藐、"外文名"、"別名" 等樟凄。這種結(jié)構(gòu)化的重要意義就是為我們提供了數(shù)據(jù)以及數(shù)據(jù)的語(yǔ)義聘芜。而這本質(zhì)上就是我們需要抽取的知識(shí),如對(duì)于屬性"別名: 周董"缝龄,我們就可以將其構(gòu)造成知識(shí) "周杰倫-別名-周董"汰现,并將其插入到本體庫(kù)中。
但是在插入 "周杰倫-別名-周董" 這條知識(shí)到本體庫(kù)之前我們忽略了一個(gè)問(wèn)題叔壤。在頁(yè)面中 "中文名"瞎饲、"外文名" 其實(shí)都是一些文本數(shù)據(jù),而 "別名" 同樣是其中一個(gè) "文本" 而已炼绘。我們?nèi)绾沃?"別名" 這個(gè)文本代表屬性名嗅战? "別名" 這個(gè)文本難道不能是詞條的簡(jiǎn)介嗎?
其實(shí)這里還需要對(duì)本文數(shù)據(jù)進(jìn)行語(yǔ)義標(biāo)識(shí)俺亮,但是幸運(yùn)的是已經(jīng)有人幫我們做了仗哨,雖然不徹底,但是勉強(qiáng)能用铅辞,他就是 —— HTML 標(biāo)簽。
實(shí)際上 HTML 數(shù)據(jù)本身就可以視為一種半結(jié)構(gòu)化數(shù)據(jù)萨醒,例如 <title>Hello Coder!</title>
標(biāo)簽就為文本 "Hello Coder!" 提供了語(yǔ)義斟珊,我們可以通過(guò) <title>
標(biāo)簽識(shí)別出文本 "Hello Coder!" 是網(wǎng)頁(yè)的標(biāo)題。
同理,我們可以通過(guò) HTML 標(biāo)簽來(lái)標(biāo)識(shí)頁(yè)面中 "簡(jiǎn)介"囤踩、"基本信息"旨椒、"屬性名" 等內(nèi)容。例如百科中標(biāo)簽 <dt class="basicInfo-item name">中文名</dt>
標(biāo)識(shí)屬性名(如上文提到的中文名堵漱、外文名综慎、別名等),<dd class="basicInfo-item value">周杰倫</dd>
標(biāo)識(shí)屬性值(如周杰倫勤庐、Jay Chou示惊、周董等)。
但是在我們采用 HTML 來(lái)標(biāo)識(shí)文本時(shí)需要注意的是 HTML 本身主要是用來(lái)定義資源的表現(xiàn)結(jié)構(gòu)愉镰、格式和樣式的米罚,另外用戶(hù)可通過(guò) HTML 來(lái)發(fā)布和獲取信息。但是對(duì)數(shù)據(jù)本身進(jìn)行語(yǔ)義標(biāo)注并不是 HTML 的工作丈探。
如上提到的 <dt class="basicInfo-item name">中文名</dt>
標(biāo)簽其實(shí)也只是程序員為了更好的重用和分類(lèi)樣式录择,才在 dt 標(biāo)簽中加入 class 屬性,而我們現(xiàn)在只是有點(diǎn)取巧的拿來(lái)當(dāng)做文本的語(yǔ)義標(biāo)注碗降。所以必須意識(shí)到這種方式是存在很大局限性的隘竭,頁(yè)面中極有可能存在 <dt class="basicInfo-item name">語(yǔ)義不明的一些文本</dt>
,如果我們把該文本解釋為屬性名自然是有誤的讼渊。但是幸運(yùn)的是百度百科中這種情況較少动看,HTML 標(biāo)簽具有較強(qiáng)標(biāo)識(shí)性,姑且可采用 HTML 標(biāo)簽來(lái)識(shí)別文本語(yǔ)義精偿。
在具體實(shí)現(xiàn)中弧圆,WebMagic 提供了 Xsoup(一款XPath解析器),Xsoup 可以讓我們通過(guò)定義元素路徑 Xpath笔咽,快速提取我們所想要的 HTML 數(shù)據(jù)搔预。具體實(shí)現(xiàn)在下一篇中介紹。
一點(diǎn)補(bǔ)充: 語(yǔ)義網(wǎng)
其實(shí)在上述的分析過(guò)程中叶组,你是否有這樣的想法和思考拯田。既然 HTML 描述萬(wàn)維網(wǎng)中資源的表現(xiàn)結(jié)構(gòu)、格式和樣式甩十,那能不能創(chuàng)造一種語(yǔ)言來(lái)表達(dá)資源的語(yǔ)義船庇?
舉一個(gè)栗子,如發(fā)布一段文本 "周杰倫(Jay Chou)侣监,1979年1月18日出生于臺(tái)灣省新北市"鸭轮。在發(fā)布時(shí),我們可以使用 HTML 發(fā)布橄霉,那么就需要加上 <html>
窃爷、<title>
、<body>
等標(biāo)簽,為的是表達(dá)這段文本的表現(xiàn)格式和結(jié)構(gòu)按厘,這也是為了讓人更容易閱讀医吊。但是如果我們?cè)诎l(fā)布時(shí)也按照某種規(guī)范描述了這段文本中數(shù)據(jù)的語(yǔ)義,如 "Jay Chou" 是周杰倫的別名逮京, "1979年1月18日" 是周杰倫的出生日期卿堂,"臺(tái)灣省新北市" 是周杰倫的出生地,那么這將使得這段本文能夠被計(jì)算機(jī)閱讀和理解懒棉。每個(gè)資源發(fā)布者如果都能按照這種規(guī)范發(fā)布資源草描,那么資源網(wǎng)絡(luò)不僅能夠讓人閱讀和理解,也可以讓機(jī)器閱讀和理解漓藕。他不僅僅是資源的網(wǎng)絡(luò)陶珠,同時(shí)也是知識(shí)的網(wǎng)絡(luò)。Excited !
實(shí)際上面所述便是語(yǔ)義網(wǎng)的概念享钞,而語(yǔ)義網(wǎng)的提出者也正是萬(wàn)維網(wǎng)的發(fā)明者-蒂姆·伯納斯·李揍诽。蒂姆·伯納斯·李早在 1998 年就提出語(yǔ)義網(wǎng),但是語(yǔ)義網(wǎng)的復(fù)雜度較高栗竖,距離真正的廣泛工業(yè)應(yīng)用還有一定的距離暑脆。感興趣的同學(xué)可以查閱相關(guān)資料了解。
但話(huà)又說(shuō)回來(lái)狐肢,在語(yǔ)義網(wǎng)還未完全實(shí)現(xiàn)之前添吗,我們面對(duì)的依然是無(wú)語(yǔ)義的萬(wàn)維網(wǎng),我們能抓取的大部分網(wǎng)頁(yè)是無(wú)語(yǔ)義的文本內(nèi)容份名,那么對(duì)于這些網(wǎng)頁(yè)或者說(shuō)非結(jié)構(gòu)化文本如何提取知識(shí)并構(gòu)建本體庫(kù)呢碟联?其實(shí)這是目前學(xué)術(shù)界還在研究的問(wèn)題,自然語(yǔ)言處理僵腺、機(jī)器學(xué)習(xí)等技術(shù)自然是該領(lǐng)域比較常見(jiàn)的解決方法鲤孵,但是效果依然非常不理想。
從嚴(yán)格意義上講辰如,從任意非結(jié)構(gòu)化文本抽取出知識(shí)普监,這依然是當(dāng)前技術(shù)無(wú)法實(shí)現(xiàn)的。試想一下琉兜,如果給定一段文本凯正,計(jì)算機(jī)能夠正確理解這段文本中每個(gè)數(shù)據(jù)背后的語(yǔ)義,這是多么恐怖的一件事豌蟋,這從某種程度上講意味著計(jì)算機(jī)真正具有了智能廊散。
而目前還沒(méi)有什么技術(shù)和現(xiàn)象表明我們有能力創(chuàng)造出人工智能,這里的人工智能指強(qiáng)人工智能梧疲,也就是大眾理解的人工智能奸汇。實(shí)際上我認(rèn)為人工智能這個(gè)詞就應(yīng)該只能指強(qiáng)人工智能施符,現(xiàn)在的弱人工智能應(yīng)該用另外的詞來(lái)表達(dá),比如機(jī)器智能擂找?計(jì)算機(jī)智能?人工函數(shù)擬合浩销?人工統(tǒng)計(jì)學(xué)習(xí)贯涎?......不然大眾和專(zhuān)業(yè)領(lǐng)域關(guān)于人工智能這個(gè)詞的理解一直存在著本質(zhì)上的區(qū)別,討論的都不是一個(gè)東西慢洋,還相互討論的那么熱烈......如今的 "人工智能" 就和當(dāng)年的 "黑客" 一樣塘雳,不同之處在于以前是大眾和媒體濫用 "黑客",現(xiàn)在是專(zhuān)業(yè)領(lǐng)域人員濫用 "人工智能"......
相對(duì)于利用所謂的 "人工智能" 實(shí)現(xiàn)從非結(jié)構(gòu)化文本抽取知識(shí)普筹,我還是更加看好實(shí)現(xiàn)語(yǔ)義網(wǎng)后推動(dòng)機(jī)器智能的發(fā)展败明。
下一篇
下一篇真正開(kāi)始介紹本體構(gòu)建模塊的實(shí)現(xiàn)細(xì)節(jié)。
汪
汪.