史珂軒,焦自程
(西藏大學信息科學技術學院,拉薩 850000)
隨著國內(nèi)的全面脫貧以及交通運輸業(yè)的快速發(fā)展,高原地區(qū)的特殊地理風貌逐漸向內(nèi)地民眾揭開了神秘的面紗,但是對青藏高原地區(qū)特有的高原植物進行調(diào)查后的結構所知甚少。因為其種類繁多、分布疏散、形態(tài)相似等特點,使得高原植物的分析和辨識具有了一定的難度,讓非專業(yè)人士難從下手[1];以至于近些年,一些珍稀的高原植物因得不到有效的生態(tài)保護,導致其消亡于歷史長河中。至今為止,國內(nèi)外尚未有較為先進的高原植物識別系統(tǒng)以及較為完整的高原植物知識圖譜統(tǒng),而現(xiàn)有的國內(nèi)外高原植物圖譜系統(tǒng)檢索冗余,特點不夠鮮明。雖然對于高原植物的囊括與介紹比較完整,但是缺乏檢索的直接性,最新物種的更新進度較為緩慢。此外,國內(nèi)現(xiàn)有的一些植物圖譜和識別系統(tǒng),沒有顯著的識別特點,多是針對生活中常見的普通、易辨認的植物種類,沒有對高原植物做一個具有特殊地域性、特殊特征識別的內(nèi)容整理,不能滿足大多數(shù)用戶的需求[2]。
基于以上現(xiàn)象設計了一款能夠精確、簡明索引高原植物,按植物種類進行劃分,運用高原植物特征進行植物識別等多個功能的高原植物知識圖譜系統(tǒng),促進高原植物的保護[3]。
在平臺的前后端框架技術方面,后端開發(fā)選用了Flask框架,主要為前端提供數(shù)據(jù)接口及服務器支撐;后臺管理模塊和前端模塊選擇了BootStrap,實現(xiàn)了數(shù)據(jù)及頁面視圖的雙向綁定更新。
Flask是一個采用Python編寫的輕量級Web應用框架。其WSGI工具箱采用Werkzeug,模板引擎則使用Jinja2。Flask使用BSD授權。其沒有默認使用的數(shù)據(jù)庫、窗體驗證工具。對于大多數(shù)小型網(wǎng)站的開發(fā),使用SSH(Struts+Spring+Hibernat的一個JavaEE集成框架)即可以滿足需要。和其他輕量級框架相比,F(xiàn)lask框架有更好的擴展性,這是其不可替代的的主要原因[4]。
Bootstrap是美國Twitter公司的設計師Mark Otto和Jacob Thornton基于HTML、CSS、JavaScript合作開發(fā)的簡潔、直觀、強悍的前端開發(fā)框架。Bootstrap提供了優(yōu)雅的HTML和CSS規(guī)范,即是由動態(tài)CSS語言Less寫成。Less是一個CSS預處理器,使CSS具有動態(tài)性,并能夠很方便地獲取數(shù)據(jù)的更新,實現(xiàn)頁面視圖與數(shù)據(jù)模型的交互[5]。
平臺使用MVC的編程模式和前后端分離的設計方式進行開發(fā)。對于前端,采用BootStrap框架將系統(tǒng)的各個可視化部分設計為一個個組件,通過具有相似功能的模塊直接調(diào)用組件就可以起到相同的效果,降低了代碼的復用性,節(jié)約開發(fā)的時間成本,也有利于平臺內(nèi)容的動態(tài)實現(xiàn)。對于后端,使用Flask框架做整合,并在WSGI中結合Neo4j圖數(shù)據(jù)庫,實現(xiàn)對數(shù)據(jù)的增刪改查。
系統(tǒng)的整體結構如圖1所示,其中,將可視化后的知識圖譜展示給用戶,主要是通過首頁的高原植物簡介來完成,用戶可以大致了解高原植物的物種多樣性、使用價值以及保護意義;用戶可以通過圖譜的總體展示來了解每種植物的門類、各植物間的相互聯(lián)系和各植物的具體屬性;植物檢索可以幫助用戶認識到具體植物的圖像信息、分布信息、醫(yī)學屬性等。面向后臺管理員的主要功能有圖數(shù)據(jù)庫中的關系數(shù)據(jù)、節(jié)點數(shù)據(jù)、屬性數(shù)據(jù)以及通過可視化接口實現(xiàn)對系統(tǒng)內(nèi)容的動態(tài)增刪改查。
2.1.1 用戶模塊
用戶進入圖譜首頁后可以看到高原植物的起源與歷史,大致認識到高原植物的重要意義、瀕危程度以及生態(tài)保護的重要性。用戶可以看到圖譜的節(jié)點、關系和屬性圖示。在植物檢索模塊,用戶可以根據(jù)自己的需求進行檢索,以獲取所需的具體植物信息。
2.1.2 后臺管理模塊
管理員可以通過系統(tǒng)的后臺管理實現(xiàn)對知識圖譜中的植物圖示進行增刪改查的操作;可以根據(jù)植物種類的類別模塊進行總體信息更新,也可以對某一具體植物信息進行操作,并根據(jù)不同的需求分配不同的權限以此實現(xiàn)對不同數(shù)據(jù)信息的更新。
本系統(tǒng)采用Neo4j圖數(shù)據(jù)庫,為了更好、更高效地描述實體之間的關系,圖數(shù)據(jù)事務的設計嚴格遵循ACID性質(zhì),保證其原子性、一致性、隔離性和永久性的統(tǒng)一[6]。系統(tǒng)的圖數(shù)據(jù)庫如圖2所示。
系統(tǒng)根據(jù)圖1的整體設計得出的數(shù)據(jù)庫設計見表1。
表1 數(shù)據(jù)庫設計
2.3.1 數(shù)據(jù)獲取
知識圖譜的數(shù)據(jù)獲取主要有兩種方式:一是半公開或者公開的數(shù)據(jù)集;二是抓取網(wǎng)絡上公開的相關數(shù)據(jù)。系統(tǒng)結合兩種方式,以公開數(shù)據(jù)集為主,以抓取網(wǎng)絡數(shù)據(jù)為補充,形成本系統(tǒng)的數(shù)據(jù)來源。引用openkg“大規(guī)模1.4億中文知識圖譜開源下載”的數(shù)據(jù)集,對其進行篩選獲得主要數(shù)據(jù),并對“中國植物志”中的半公開數(shù)據(jù)進行抓取作為數(shù)據(jù)的補充來源,因此確保了數(shù)據(jù)的完整性。
2.3.2 信息抽取
信息抽取主要涵蓋了實體抽取、關系抽取和屬性抽取。對于從openkg中獲取的公開數(shù)據(jù)集,通過對其使用正則表達式(re函數(shù)庫)進行簡單的數(shù)據(jù)篩選,就獲得了系統(tǒng)圖譜所需的候選知識單元;對于自行抓取的數(shù)據(jù)信息,采取Python中 的NumPy、Pandas、Matplotlib、Scipy等數(shù)據(jù)處理函數(shù)庫進行數(shù)據(jù)的分析與處理,得到一系列離散的命名實體和實體間的關聯(lián)關系[7]。
2.3.3 知識融合
知識融合主要關鍵技術包括指代消解、實體消歧、實體鏈接和知識合并。通過信息抽取獲取的信息個體之間是扁平的,因此個體之間缺乏層次性和邏輯性,并且還存在冗余的信息碎片[8]。因此,需要知識融合技術將多個知識個體進行整合,從而形成知識庫。通過設立encode_onehot方法對標簽進行編碼,對上述處理后的數(shù)據(jù)按照植物學的界門綱目科屬種進行分類,同時對基于“實體-關系-實體”的三元組數(shù)據(jù)進行數(shù)據(jù)整合,這只是合并過程中對三元組中的頂點、邊進行任意多屬性的補充,從而形成最后的CSV數(shù)據(jù)文件,即property graph。
2.3.4 知識加工
知識加工主要包含以下三個方面:本體構建、知識推理和質(zhì)量評估。將系統(tǒng)經(jīng)過上述步驟處理的知識進行結構化、網(wǎng)絡化,從而獲得完整的知識體系并確保了知識庫的質(zhì)量。將植物數(shù)據(jù)三元組中的節(jié)點按照植物類別和具體植物進行本體的構建,以此獲得本體的相似性。在知識圖譜的雛形構建完成后,根據(jù)其自身屬性和鄰居信息對后續(xù)節(jié)點信息進行節(jié)點分類,通過知識推理的方法獲取更為完整的植物知識圖譜系統(tǒng)。
主要論述了基于neo4j圖數(shù)據(jù)庫和Flask框架的一個高原植物知識圖譜系統(tǒng)的設計與實現(xiàn),重點介紹了項目的總體結構設計以及圖數(shù)據(jù)庫的知識庫設計等內(nèi)容。通過采用知識融合、知識推理的技術來獲取完整、高效的知識庫,最后通過BootStrap框架對高原植物知識庫進行可視化顯示,基本達到了最終的目標。