原 越,范家豪,寇 哲,安超凡
(北京信息科技大學 計算機學院,北京 100101)
得益于信息技術的發(fā)展,線上景點數據日趨豐富。目前在各個領域都存在著知識圖譜技術的廣泛應用。針對旅游領域來說,現(xiàn)有的基于網頁進行搜索的方式能夠提供的旅游景點信息缺乏關聯(lián)度和完整性,不利于用戶獲取有效信息。而知識圖譜作為一種關聯(lián)知識組織技術,能夠描述現(xiàn)實世界中存在的各種實體和屬性,以及實體之間的關系。同時,知識圖譜能夠幫助計算機更好地理解人類語言模式,從而更加智能化地對用戶所需要的各類信息進行反饋。
在知識圖譜構建技術方面,劉嶠等人介紹了自底向上的知識圖譜構建技術。在知識獲取方面,姚萍等人介紹了知識獲取的過程。在知識圖譜的應用方面,邵嘉進等人將知識圖譜用于旅游領域,構建了每個用戶的畫像,并為每個用戶推薦旅游景點。
與傳統(tǒng)的富文本形式相比,知識圖譜更注重強調對實體的覆蓋,其包含的語義豐富,語義關系的建模具有多樣化的特點。例如針對景點、酒店、餐飲這3個實體,可以引申出相同地理位置的景點、相同等級的景點以及景點附近相鄰的酒店和餐飲三個關系,對比分散性查詢信息可以提供極大的便利。因此,本文通過對景點數據的高效整理來構建旅游景點知識圖譜,且在此基礎上設計并實現(xiàn)了基于知識圖譜的旅游景點應用系統(tǒng)。
知識圖譜在邏輯上可分為模式層與數據層兩個層次:模式層在數據層之上,是知識圖譜的核心,通常采用本體庫來管理知識圖譜的模式層。兩者之間的聯(lián)系以及區(qū)別通過如下例子進行說明。
(1)模式層:實體-屬性-屬性值
(2)數據層:故宮-面積-72萬平方公里
(3)模式層:實體-關系-實體
(4)數據層:故宮-位于-北京
這里,對構建流程可做探討分述如下。
(1)原始材料的收集。根據互聯(lián)網的信息進行爬取。
(2)本體構建。是對獲取的知識進行加工,模式層的建立。
(3)信息抽取。需要將內容抽取成三元組的形式。
(4)知識存儲。將最終的內容存儲到圖數據庫中,利用自身的語句進行增刪改查。
目前,多用2種構建知識圖譜的方法。一是自頂向下:從模式層開始構建,再往里面添加實例,直至構建的完成。二是自底向上:從數據層開始構建,再向上抽象出來概念和關系,直至構建完成。
本文選擇2種方法相融合進行旅游景點知識圖譜的構建。首先定義并構建本體,建立模式層;根據模式層抽取出景點、旅店、餐館的概念、屬性、屬性值以及各自的概念、屬性、屬性值之間的關系;最后將所有知識存入Neo4j圖數據庫。構建流程如圖1所示。
圖1 知識圖譜構建流程圖Fig.1 Flow chart of knowledge graph construction
景點的知識的本體構建選用經典的七步法,并且根據實際情況簡化不必要的步驟。主要分為5個步驟:確定本領域的范疇、獲取爬取的信息、旅游領域標簽確定、抽取本體概念、本體建模。本體構建流程如圖2所示。
圖2 本體構建流程圖Fig.2 Flow chart of ontology construction
本體建模的過程:使用Protégé軟件利用自上而下法進行本體構建、旅游景點知識圖譜的構建。對此擬展開研究論述如下。
(1)確定本領域的范疇。不同的領域本體的構建內容和方式是不同的,研究旨在確定本體領域研究范圍重要的因素。本文著重研究的是旅游領域知識圖譜的構建,所以重點在于以旅游景點為中心的本體構建。
(2)獲取有關信息。通過爬取得到的數據作為景點信息的來源,在其中獲取旅游景點、旅店、餐館的相關的信息。
(3)旅游領域標簽的確定。根據爬取的信息,確定初步的旅游領域的標簽,如:旅游攻略、酒店、餐館、景區(qū)風景、等級等等。
(4)抽取本體概念。通過篩選抽取出來本體的概念有地區(qū)、等級兩個類。
研究得到的本體類層級如圖3所示。根據旅游景點的等級和采集到的數據,可以將景點分為AAAA和AAAAA級景區(qū)。地區(qū)可以根據中國的省份進行劃分,分為:黑龍江省、四川省、吉林省等等。
圖3 本體類層級圖Fig.3 Hierarchical diagram of ontology classes
(5)本體建模。本體建模的具體實現(xiàn)如圖4所示。
圖4 本體建模圖Fig.4 Ontology modeling diagram
(6)部分結果展示。見圖5。
圖5 部分結果展示Fig.5 Part of the results show
相對于文本形式的表達,將各景點以及景點周邊設施的信息以圖的形式展現(xiàn)可以幫助用戶在盡可能短的時間內多角度、全方位地搜索到自己感興趣的目標,功能需求如下:
(1)多樣化輸入法格式。因為每一個用戶的搜索形式不同,有的用戶可能只輸入關鍵詞進行搜索,而有的用戶會輸入整句進行搜索,所以系統(tǒng)要盡可能滿足不同用戶的輸入法格式,無論是輸入關鍵詞、還是整句,都能搜索到相應內容。
(2)多景點圖譜可視化展示。以圖的形式將各景點的信息展示出來,以導航形式將信息串聯(lián)起來,如此用戶使用起來將更加方便。
(3)當用戶點擊某個景點節(jié)點時,與其處于相同等級或者相同地理位置的景點就會被列舉出來,這時用戶可以從中選擇自己感興趣的景點。若要獲得某一景點的周邊服務,例如酒店、餐飲時,只需要點擊該景點,就會實現(xiàn)跳轉,獲得更加詳細的信息。
系統(tǒng)采用B/S架構,對于設計實現(xiàn)中用到的關鍵技術,這里將給出剖析表述如下。
(1)數據爬取與預處理。通過爬取https://www.ctrip.com和https://www.qunar.com作為信息的來源。在爬取方法上,采用分布式爬蟲的方法,能夠提高爬取數據的效率;在搜索策略上,采用廣度優(yōu)先的網頁搜索策略;在分析方法上,采用基于文本的網頁分析算法,很大程度上借用了文本檢索的技術,利用網頁的標簽,快速有效地對網頁信息進行分類和聚類;在爬蟲技術上,分為URL讀取和存儲、頁面元素分析、數據存儲三個模塊,最終將其存儲到csv文件中。
(2)知識圖譜存儲。利用將Phantom JS和Selenium結合搭建爬蟲框架,通過正則化表達式導入存入csv文件中,利用圖數據庫Neo4j自身的import語句導入Neo4j中。Neo4j數據庫中的知識圖譜如圖6所示。知識圖譜中,實體包括:景點、餐館、酒店。景點的屬性有圖片、名稱、電話、簡介、票價、等級、地址;酒店屬性包括酒店的名稱、類型、酒店鏈接、評分、地址、電話、簡介、好評率;餐館包括餐館的名稱、餐館菜系、地址、特色美食、人均費用、評分這幾個屬性。關系則包括:同地區(qū)、相同等級、近鄰。
圖6 Neo4j數據庫中知識圖譜Fig.6 Knowledge graph in Neo4j database
(3)信息檢索。將前端網頁輸入的關鍵詞請求傳送到后臺,調用相關的語句,匹配關鍵詞,返回信息,展示給用戶。
(4)搜索結果可視化。本文采用roc-echarts實現(xiàn)知識圖譜的網頁可視化,后臺通過Cypher語句完成信息檢索。
景點搜索頁面是主要應用知識圖譜的頁面,頁面主要分為四大塊,分別為:左側、上面、中間、下面。旅游景點網站主要展示這個景點的信息,并將信息分成4部分,分別為:基本信息、簡介、小貼士、知識圖譜的可視化。從知識圖譜中可以清晰地看到,景點的信息、和本景點相同地點的景點、和本景點相同等級的景點。本次研發(fā)得到的景點信息頁面如圖7所示。
圖7 景點信息頁面Fig.7 Scenic spots informations page
目前的旅游攻略僅有富文本信息流單一形式,用戶難以獲取足夠的、有關聯(lián)的、真正感興趣的旅游信息,所以專門針對該需求,本次研究開了發(fā)旅游知識圖譜。研發(fā)中,利用Phantom JS和Selenium結合搭建爬蟲框架,獲取精細粒度旅游數據,以景點、旅店、餐廳為對象實體構造知識節(jié)點,持久化在圖數據庫中;在前端使用roc-charts技術實現(xiàn)圖譜的可視化。最終解決信息孤島,實現(xiàn)旅游信息的知識圖譜,并基于圖譜實現(xiàn)搜索系統(tǒng),最終成果將封裝成Web形式提供服務。