2-Answer 系列-本體構建模塊(一)

上一篇已經對 Answer 系統的基本原理做了簡單的分析和介紹,接下來的兩篇文章將介紹 Answer 系統中的本體構建模塊。本體構建模塊完成的主要功能是爬取百度百科頁面的數據并基于規則構建起本體庫。

本體庫是整個系統的關鍵知識來源,是實現同名實體識別、實體別名識別等功能的關鍵。

但在講解本體構建模塊的實現之前,需要對諸如"本體"、"RDF/RDFS"、"OWL"等概念和"WebMagic"、"Jena"等涉及到的技術做一下基本介紹。

何為本體

本體概念最早源自于哲學領域,是事物的本源和根本。

從哲學中的本體論上講,我們所看到的,所聽到的和所感覺到的一切都只是事物的一種現象表示。

比如我們說一朵玫瑰是紅色的,并不表示紅色是這朵玫瑰的自身具有的根本屬性,因為顏色只是光線帶給我們的一種視覺效果。

同樣的,我們聞到的玫瑰的香味、觸摸玫瑰花時的觸感都只是一種感官上的印象,是我們的感官對玫瑰的一種表達。人們對玫瑰的所有描述都只是一種符號,對它的所有認識都只是一種現象,而這些符號和表象都將指向玫瑰的本源。

因此在哲學本體論并認為玫瑰這個事物根本或事物本源是客觀存在的,但同時也是不可認知的,這個事物本源并稱之為本體。

當然在計算機領域引入本體之后,并沒有這么高層次的概念和理解。在計算機領域中我們將本體定義成一種計算機可操作、可理解、可計算的概念。目前業內有許多關于本體的定義,其中最受認可的是 Studer 給出的理解:

An ontology is a formal, explicit specification of a shared conceptualization.”
本體是共享概念模型的明確的形式化規范說明。

其中定義了本體幾層含義。

  • 概念模型
    本體是對現實世界概念模型的表達和說明
  • 明確
    所定義的概念、概念相關的屬性以及概念之間的關系等都必須具有明確的含義
  • 形式化
    不同于哲學領域的定義,計算機領域的本體是形式化的,是計算機能夠理解和處理的
  • 共享
    是領域公認的概念和知識,能夠相互分享和操作

簡而言之,計算機世界中的本體就是利用計算機描述語言如 RDF/RDFS/OWL 等(可以采用 XML、JSON 等語法格式實現)去對現實世界中的概念進行說明定義,也就是用計算機可理解的數據模型來描述現實中的"本體",而在構建的過程中要注意其共享性和規范性。

本體構建語言

如前所說,我們希望在計算機世界里構建并描述現實世界中的概念,那么我們就需要一些規范、標準、強大的本體構建語言(也可稱為本體標記語言或本體表示語言)。

目前已有很多不同的本體構建語言,而主流的本體構建語言主要有 RDF/RDFS、OWL 等。

  1. RDF
    資源定義框架(Resource Description Framework),簡稱為 RDF,是 W3C 提出的 Web 元數據描述語言標準。它能夠描述互聯網資源之間的關系,其語法格式也以可擴展標記語言 XML 為基礎。其主要由一系列的三元組組成,三元組的主要形式為“主體-謂語-客體”,這里的謂語并不局限于動詞,而是表達主體和客體之間的關系。
    例如"周星馳-年齡-xx" 這一個三元組中,"周星馳"是三元組中的主體,"年齡"(屬性名)是謂語,"xx"(屬性值)就是客體。
  2. RDFS
    RDFS 是在 RDF 的基礎上對其進行了適當擴展,相對于 RDF,RDFS 能夠描述類與類之間、屬性與屬性之間的層次關系、資源之間的關系,因此 RDFS 具有更加強大表達能力。例如 subClassOf 表達類與類之間的父子關系,subPropertyOf 表達屬性與屬性之間的父子關系。
  3. OWL
    OWL 是 Web Ontology Language 的縮寫,其中文含義即為網絡本體語言。W3C 設計了三種不同程度的 OWL 子語言,分別為 OWL Lite、OWL DL 和 OWL Full,三種語言在本體描述能力上依次增強,并且高表達能力語言可兼容低表達能力語言,我們可根據不同的應用場景選擇不同程度的表達語言。

利用上述語言就可以構建本體庫,并在本體庫表達一些知識,如下所示(使用 OWL 構建):

<?xml version="1.0"?>
<Ontology xmlns="http://www.w3.org/2002/07/owl#"
     xml:base="http://www.semanticweb.org/yue/ontologies/2018/2/untitled-ontology-5"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:xml="http://www.w3.org/XML/1998/namespace"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
     ontologyIRI="http://www.semanticweb.org/yue/ontologies/2018/2/untitled-ontology-5">
    <Prefix name="owl" IRI="http://www.w3.org/2002/07/owl#"/>
    <Prefix name="rdf" IRI="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
    <Prefix name="xml" IRI="http://www.w3.org/XML/1998/namespace"/>
    <Prefix name="xsd" IRI="http://www.w3.org/2001/XMLSchema#"/>
    <Prefix name="rdfs" IRI="http://www.w3.org/2000/01/rdf-schema#"/>
    <Declaration>
        <ObjectProperty IRI="#妻子"/>
    </Declaration>
    <Declaration>
        <NamedIndividual IRI="#周杰倫"/>
    </Declaration>
    <Declaration>
        <Class IRI="#人"/>
    </Declaration>
    <Declaration>
        <NamedIndividual IRI="#昆凌"/>
    </Declaration>
    <ClassAssertion>
        <Class IRI="#人"/>
        <NamedIndividual IRI="#周杰倫"/>
    </ClassAssertion>
    <ClassAssertion>
        <Class IRI="#人"/>
        <NamedIndividual IRI="#昆凌"/>
    </ClassAssertion>
    <ObjectPropertyAssertion>
        <ObjectProperty IRI="#妻子"/>
        <NamedIndividual IRI="#周杰倫"/>
        <NamedIndividual IRI="#昆凌"/>
    </ObjectPropertyAssertion>
</Ontology>
<!-- Generated by the OWL API (version 4.2.8.20170104-2310) https://github.com/owlcs/owlapi -->

上述 OWL 語言表達了以下現實知識:

  1. 存在著名為"妻子"的對象屬性
    如下所示:
    <Declaration>
      <ObjectProperty IRI="#妻子"/>
    </Declaration>
    
    • 對象屬性:對象之間的關系稱之為對象屬性,如 "周杰倫-妻子-昆凌",其中 "妻子" 為兩個對象實體之間的關系,稱之為對象屬性。
    • 數據屬性:如 "周星馳-年齡-xx" 中的 "年齡" 是 "周星馳" 和數據 xx 之間的關系,這種關系稱為數據屬性。
  2. 存在著 "人" 這個類型
    如下所示:
    <Declaration>
      <Class IRI="#人"/>
    </Declaration>
    
  3. 存在著 "周杰倫" 這個對象實體
    如下所示:
    <Declaration>
      <NamedIndividual IRI="#周杰倫"/>
    </Declaration>
    
  4. 存在著 "昆凌" 這個對象實體
    如下所示:
    <Declaration>
      <NamedIndividual IRI="#昆凌"/>
    </Declaration>
    
  5. "周杰倫" 屬于人這個類型
    如下所示:
    <ClassAssertion>
      <Class IRI="#人"/>
      <NamedIndividual IRI="#周杰倫"/>
    </ClassAssertion>
    
  6. "昆凌" 屬于人這個類型
    如下所示:
    <ClassAssertion>
      <Class IRI="#人"/>
      <NamedIndividual IRI="#昆凌"/>
    </ClassAssertion>
    
  7. "周杰倫" 的妻子是 "昆凌",即 "周杰倫-妻子-昆凌"
    如下所示:
    <ObjectPropertyAssertion>
      <ObjectProperty IRI="#妻子"/>
      <NamedIndividual IRI="#周杰倫"/>
      <NamedIndividual IRI="#昆凌"/>
    </ObjectPropertyAssertion>
    

本體操作框架 Jena

現在我們已經有了 RDF、RDFS 和 OWL 等本體構建語言來構建本體庫了,但是我們該如何對這些語言描述的數據進行查詢、插入、刪除、更新等操作呢?自然是需要寫相應的程序來解析和操作這些 RDF / RDFS / OWL 數據。

但像這種底層需求的功能自然已經有相應的輪子以供高層應用開發者使用。Jena 便是這樣一款滿足我們需求的開源框架,它提供了一系列強大的 API 實現對本體庫的插入、查詢等操作。

關于 Jena 的下載和詳細 API 文檔等可參見官網 Apache Jena

爬蟲框架 WebMagic

有了 RDF、OWL 等本體庫構建語言以及對本體庫進行查詢操作的 Jena 之后,我們就可以編寫程序向本體庫中插入或更新各種 "知識" 了。

但是這些 "知識" 來源于哪里?又該如何生成?這里又是一塊深不見底的坑,也是目前學術界比較活躍的研究領域,尤其是從非結構文本中提取知識。

當前版本的 Answer 采用最簡單最土的方式——數據來源于半結構化的百度百科,并基于規則,通過定義規則的方式來進行分類、插入屬性、建立對象之間關系等,從而生成一系列的知識插入到本體庫中。

那么這里自然需要一個爬蟲去抓取百度百科的數據,這里采用開源的 Java 爬蟲框架 WebMagic,關于 WebMagic 的使用教程和文檔請查看官方網站 http://webmagic.io/

下一篇

下一篇講解本體構建模塊的實現。

汪.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容

  • 一、關于本體 1. 本體論語義學的特點: 本體論語義學與其他人工智能理論、自然語言加工系統相比有自己的一些鮮明特點...
    御風之星閱讀 4,146評論 0 1
  • 本體、知識庫、知識圖譜、知識圖譜識別之間的關系? 本體:領域術語集合。 知識庫:知識集合。 知識圖譜:圖狀具有關聯...
    方弟閱讀 28,525評論 6 49
  • title: Jena學習筆記(一) RDFdate: 2016/11/26 22:56:02tags: Jena...
    Skye_kh閱讀 22,960評論 4 11
  • 前言 最近一段時間都在做知識圖譜相關的研究開發,總算在這幾天有了比較大的突破,本來凌亂不堪的思路也終于理清了。我在...
    小土刀閱讀 6,932評論 7 39
  • 還有十天,2017年就結束了。仿佛每到一個節點,人們總是會回顧過去,展望未來。而又令人欣慰的是,不管之前是好是壞,...
    雪寒之凝閱讀 450評論 0 1