胡宸愷, 魏 鑫, 姜國強, 李發強, 金玉舜
(東北林業大學 信息與計算機工程學院, 哈爾濱 150040)
目前,林業領域的用戶大多仍都通過搜索引擎查詢林業領域知識,會花費大量時間在龐大的互聯網冗余數據里查找對自己有價值的信息,獲取林業領域信息存在檢索精準度和效率較低的問題。為了解決林業領域用戶查找相應信息費時費力的問題,提升林業大數據信息化水平,構建林業知識圖譜顯得尤為重要。林業知識圖譜是將互聯網上稀疏、缺乏關聯的林業數據組合起來,提高用戶檢索林業知識的效率。由于目前互聯網上與林業領域相關的網站提供的林業數據陳舊、分散、不直觀,構建林業知識圖譜可以幫助林業領域專業人員更好地創建、完善并更新林業相關知識,同時也能更好地推進林業信息化發展。將林業知識圖譜改造成林業知識科普網站還能更好地向大眾宣傳和普及林業相關知識。
目前國內外科研機構、大型互聯網公司同時也在推出針對不同限定領域的知識圖譜產品來提高對應領域的信息檢索效率。其中針對林業領域,數據庫資源最為專業的是由中國林科院科信所建成的中國林業信息網以及中國工程院建成的林業專業知識服務系統,但都是數據庫資源形式,而沒有增加知識圖譜展現的形式。即在林業領域還尚未有專業性強、成熟度高的林業知識圖譜,構建林業知識圖譜在大數據時代對林業數據資源整合有著重要的作用。
知識圖譜可以比作是一個大型結構化的語義網絡,由概念實體和語義關系組成。知識圖譜最早由谷歌在2012年5月17日通過其官方博客正式提出。早在2010年,谷歌收購Metaweb公司用于知識圖譜的信息收集和構建工作,其關鍵技術是將不同文字的表述與同一個實體鏈接起來,并找出實體之間屬性的聯系。其實在谷歌提出知識圖譜的概念之前便已經有了如DBPedia、Freebase、開放政府數據以及蘋果公司推出的智能語音助手Siri等知識圖譜技術的相關應用。在國內,學術界的知識圖譜研究有上海交通大學的zhishi.me中文知識圖譜平臺,工業界已經應用了知識圖譜技術的有百度的下一代搜索引擎雛形“百度知心”和搜狗知識庫搜索引擎“知立方”等[1]。
2013年段慶峰收集了近24年林業經濟領域的發展趨勢,從核心作者、核心機構和關鍵詞、利用知識圖譜的分析方法展現了林業經濟研究中心(如東北林業大學經管學院)對于中國林業經濟研究的動態[2];同年還有張哲等從Web of Science、知網收集了有關森林碳匯研究的文獻總計5000余篇,運用知識圖譜的方式梳理了對該研究方向有重要貢獻的機構、相關任務和研究熱點等[3];在2015年,陳麗榮等使用CiteSpace,收集知網中1997—2015年的3 081篇天然林保護工程文獻為研究對象,使用知識圖譜分析方法揭示中國天然林保護工程研究的整體脈絡[4];同年還有蘇松錦等以黃山松為研究對象,分析兩百余篇相關文獻,揭示了圍繞黃山松研究有重要影響力的作者和科研機構[5];2016年苗潤清以林業項目、林業專利數據,從年份、申請人、關鍵詞3個方面使用知識圖譜展現林業專利的申請趨勢[6]。這些研究都只是針對所提及的研究對象,以知識圖譜的數據可視化形式展現出來,還沒有發現利用林業百科數據來構建知識圖譜的這類研究。但是國內有許多學者對限定領域的知識圖譜構建進行了研究,如針對中醫藥的知識圖譜構建、微博的知識圖譜構建、雙語影視知識圖譜的構建、寵物醫學知識圖譜的半自動構建方法等等。這些知識圖譜的構建都是基于相關領域專業數據庫資源還有爬取相關領域的百科內容,互聯網上公開的海量領域數據和領域專業數據庫資源給相應領域知識圖譜的構建給予了很大的幫助。但對于數據資源較為稀缺(如新技術、基礎科學突破發展方向)或者數據保密性強(如軍工)的領域則不太容易構建限定領域知識圖譜。
知識圖譜有二種基本組成單元形式,一種為<“實體”-“關系”-“實體”>,另一種為<“實體”-“屬性名稱”-“屬性值”>。知識圖譜通過這兩種形式來描述不同現實事物之間的關系與屬性。構建知識圖譜的數據分為3類:
(1)結構化數據,如關系數據庫中存儲的表;
(2)半結構化數據,如百科數據、JSON文檔、XML文檔等;
(3)非結構化數據,如圖片、音頻和視頻等。
一般有二種方式存儲知識圖譜的數據,一種是通過RDF(資源描述框架)存儲,另一種方法就是通過數據庫存儲[7]。本文采用第二種方法并使用圖數據庫存儲。雖然簡單的知識圖譜是可以通過關系數據庫存儲的,但是當一個知識圖譜涉及關系和屬性越復雜、實體節點數量越大的時候,圖數據庫在關聯查詢的效率會比傳統的關系數據存儲方式有顯著地提高。圖數據庫中實體之間能通過關系相互連接,構建出知識圖譜的網狀結構。知識圖譜的架構分為邏輯架構和技術架構。在邏輯上,知識圖譜分為數據層和模式層。數據層存儲真實的數據,模式層是知識圖譜的核心,在數據層之上通過本體庫管理知識圖譜。
圖1展示了一個以水曲柳為實例的簡單知識圖譜,可以解析出這樣一個簡單的知識圖譜的模式層為:實體-關系-實體;實體-屬性-屬性值。而數據層的表示為:水曲柳-界-植物界;水曲柳-產地-黑龍江。水曲柳節點代表單個實體,周圍藍色圓點如黑龍江、植物界、翅果表示與水曲柳相關聯的實體或屬性值,不同實體之間的連線上有描述實體與實體間的關系與屬性。因此,一個高質量、成熟的領域知識圖譜是由大量實體節點互相鏈接,且實體之間包含多個關系與屬性所組成的,每個實體通過設置唯一ID來與其它實體區分。

圖1 水曲柳的實體查詢結果
知識圖譜的技術架構如圖2所示。首先從網絡上爬取數據,數據可能是結構化的、半結構化的以及非結構化的;其次,基于這些數據來構建知識圖譜,通過一系列自動化或半自動化的技術從原始數據中提取知識,即提取實體關系;最后,存入所構建的知識庫的模式層和數據層。

圖2 知識圖譜技術架構
以目前知識圖譜構建技術的發展而言,構建知識圖譜可以通過自頂向下或者自底向上的方法[8]。在知識圖譜發展初期,多數的科研機構與企業對于知識圖譜及其應用主要采用自頂向下的方法構建。自頂向下的構建方法是指爬取百科類網站(如本文中用到的互動百科和維基百科)的半結構化數據或使用開放的專業領域的結構化數據,從這些高質量的數據中提取本體和模式信息,加入到知識庫中。自底向上的構建方法則是借助公開采集的數據,從中提取出資源模式,再選取其中置信度較高的模式,經過人工審核加入到知識庫中。采用自底向上的方法必須要有3個步驟:
(1)信息抽取。從半結構化或非結構化的數據中抽取三元組的基本信息,如實體、關系以及實體屬性等結構化信息,包括實體抽取、關系抽取和屬性抽取3個關鍵技術。實體抽取是指從網頁語料或具有某種特殊性質的文本語料中選取迭代多次后置信度高的實體作為結果輸出,其是最為基礎和關鍵,而且是最能影響知識獲取效率和質量的部分;
(2)知識融合。在半結構化或非結構化數據中取得實體、實體間關系還有實體屬性的信息,這些信息可能包含錯誤或者冗余的信息,經過初步篩選的數據也缺少邏輯和層次結構,最后清理無用的信息并整合有用的信息。這個部分包含二個內容,實體鏈接和知識合并,基本思想是消除實體間歧義后將知識庫中對應的實體鏈接到一起,并驗證和評估實體含義;
(3)知識加工。包含3個步驟,本體構建、知識推理和質量評估。其基本思想是將實體對象間的關系結構化處理。
隨著知識抽取和知識加工技術的不斷發展,知識圖譜及其應用將逐漸采用自頂向下構建概念層、自底向上的方法構建數據層的方式。因為專業領域的知識更注重知識的深度、準確性和具體的層次結構,所以需要領域內豐富且具有準確性的數據來構建知識庫。因此本文構建的林業知識圖譜是將兩種構建方法綜合起來,使用爬取百科里的林業相關的數據,輔以Wikidata上實體和實體說明的開放數據,最后結合自定義林業實體分類表的模式去匹配采集的數據。
數據爬取采用開源的Scrapy分布式爬蟲框架從Wikidata、互動百科的網頁中爬取林業相關的數據。
首先,從Wikidata爬取數據。Wikidata是維基百科推出的一個大型知識庫,由志愿者自主發布或導入數據,經過管理員的嚴格審核保障了提交的數據質量和可信度,該網站包含了大量的實體和實體間的關系。每一個實體為一個網頁,使用“實體+說明”的數據模型展現數據融合結果。因此,通過Scrapy爬蟲框架爬取Wikidata上面實體及其實體的說明,過程需要完成:
(1)爬取Wikidata定義的所有關系,如圖3所示的生物學包含的實體關系定義;
(2)爬取Wikidata上的實體,如圖4所示的“海棠”實體數據;
(3)以第一步爬取的實體數據為基礎,爬取實體和實體間的三元組關系,爬取與實體相聯系的其他實體與關系,如圖5所示的是實體與實體間三元組關系。
還要在互動百科上爬取林業相關的數據,這構建林業知識圖譜概念層的重要一步。首先要爬取互動百科的“植物”分類樹,百科的分類樹可作為林業知識圖譜的概念層,如圖6左下角所示。通過爬取的分類樹列表再爬取“植物”分類樹列表下的所有子詞條。對于單個詞條要分為主要信息和次要信息,如圖7展示的是“黃楊冬青”詞條的主要信息:標題、開放分類和基本信息,主要信息用來實現信息抽取的步驟,如詞條內容提供關于“黃楊冬青”實體的屬性有:界門綱目科屬種以及分布區域。在瀏覽林業相關詞條的網頁時可以發現,一部分數據在互動百科里擁有開放分類,而一部分數據沒有開放分類,開放分類能幫助實體更準確地被識別。如圖8展示的爬取“黃楊冬青”詞條的次要信息,詞條的次要信息作為冗余數據的補充,如形態特征、生長環境、分布范圍,可以通過模板匹配的方式查詢這些信息,提高信息檢索的效率。

圖3 爬取Wikidata上關于生物學的實體關系定義

圖4 爬取Wikidata上的海棠實體數據

圖5 爬取Wikidata上的實體與實體間三元組關系
本文采用了基于規則和詞典的命名實體識別方式,首先要構建林業實體類別分類表,見表1,然后通過下面3個步驟識別并分類實體。

圖6 互動百科“植物”分類樹詳情頁面

圖7 互動百科“黃楊冬青”詞條頁面主要抓取的信息

圖8 互動百科“黃楊冬青”詞條頁面抓取的其他信息

表1 林業實體類別分類表
(1)首先將語料分詞,使用THULAC工具將爬取的林業百科數據進行中文詞法分析,進行分詞操作,見表2。

表2 THULAC詞性解釋表
(2)通過林業實體類別表識別命名實體(人、地名、機構名),再從非命名實體中過濾掉與林業無關的名詞實體;
(3)剩下的詞或詞組合,匹配知識庫中已經分好類的實體,如果沒有匹配到則自動劃分到無關數據。
在完成知識圖譜的構建工作后,所有的數據都被處理成結構化的數據存儲。對于傳統的關系型數據庫而言,大規模的結點與邊的存儲和查詢效率較低,而Neo4j作為圖數據庫的代表很好地解決了上述的問題。Neo4j圖數據庫中的節點、關系和屬性3種元素與知識圖譜中知識的圖模型相對應;支持分布式存儲,更好地應對了大規模數據增長的問題;通過其使用的Cypher語句也能直觀地看出圖數據的操作和不同實體之間的關系;具有較高的擴展性和可靠性、支持完整的ACID事務。由此,本文所構建的林業知識圖譜用Neo4j圖數據庫進行存儲,方便用戶獲取林業知識結構。對知識圖譜的查詢可以轉換為Neo4j圖數據庫上的查詢,以查詢實體“蓖麻子”的知識圖譜查詢實體流為例,如圖9所示。

圖9 以“蓖麻子”為實例查詢知識圖譜的過程圖
知識問答系統主要分為二類:
(1)基于信息檢索的問答系統。先將問題轉化為對圖數據庫中知識庫的查詢,再從知識庫中搜索與問題中實體相關信息相似度比較高的幾個實體作為問題的備選答案,最后再按相似度降序排序的備選答案中選出問題的確切答案;
(2)基于語義分析的問答系統。對問題進行語義上的分析,其中包括詞匯映射和語法樹的構建,將問題轉換為知識庫的語義表示,再通過對知識庫的推理查詢從而找到正確答案。
本文搭建了一個簡易的林業知識圖譜網站,通過匹配問題中的實體和問題模板的形式轉換成對Neo4j圖數據庫的Cypher查詢語句進行答案檢索。
該問答系統解答一個提問需要經過3個模塊的流程,如圖10所示。

圖10 林業知識問答流程圖
(1)問題分析模塊負責對用戶輸入的問題進行分析,通過命名實體識別技術檢測出問題中的實體詞,將實體詞反饋給知識查詢模塊;
(2)知識查詢模塊以實體詞作為關鍵詞在知識庫中查詢,得到的查詢結果可能會有多個,再通過實體鏈接找到問題中實體詞表示的實體對應哪一個之后,再重新查詢知識庫中該候選實體相關聯屬性的信息生成候選答案;
(3)答案抽取模塊分析問題和候選答案的語義相似性,選取相似度最高的答案輸出。
本文提出了一種基于百科數據的林業知識圖譜的構建方式,并詳細介紹了構建林業知識圖譜需要的步驟,最后展示了林業知識圖譜的實例,簡單介紹和展示了林業知識圖譜的應用:林業知識問答系統。首先,通過爬取互動百科分類樹設計構建了林業知識圖譜的概念層,然后通過Scrapy爬蟲框架爬取Wikidata提供的“實體+說明”開放數據,分離出實體、實體和實體間的關系等與上一步爬取的互動百科數據一起構建林業知識圖譜的數據層;其次,命名實體識別和分類步驟,利用基于規則和構建林業實體類別分類表的方式來對數據中的實體進行識別;最后,將整合好的知識存儲在Neo4j圖數據庫里,并通過Neo4j內置的數據可視化方法顯示林業知識圖譜。
知識圖譜相關的技術飛速發展,在搜索、推薦系統、報告生成、風險監控等業務都有較多的應用。未來每行每業都會產生更多的數據,越來越多的公司也會收集相關數據構建領域知識庫。或許會發展以知識圖譜管理信息的方式,為以后的“智能大腦”奠定基礎。雖然目前處于知識圖譜的探索階段,但對于林業領域來說,創建、獲取高質量的林業數據仍為構建林業知識圖譜的重要基礎環節。為了建立高質量的林業知識圖譜,本文提出的構建方式仍有許多可以優化的地方,如數據來源單一,只能對大部分實體進行實體對齊的操作,少數可能無法進行實體對齊;對于數據清洗環節需要專業人員的介入,方便后期林業知識庫的維護與擴展;優化已有的林業知識庫建立檢索效率更高的知識問答系統等。