李維



摘要:在智慧旅游的大目標以及旅游網站功能落后的背景下,解決信息過載問題的推薦系統引起學者的關注。文章以浙江省750個景點為例,基于案例推理法,通過多線程爬取、預處理旅游網站的數據來構建旅游案例庫。系統基于Flask框架敏捷開發,設計了基于Word2Vec詞嵌入向量技術計算文本相似度的案例匹配算法,調用MongoDB數據庫索引以及Find引擎,實現了耦合層次的搜索,根據用戶的旅游偏好給用戶提供個性化旅游景點、游記等服務。
關鍵詞:案例推理;旅游推薦系統;文本相似度
一、引言
隨著旅游信息化的發展和智慧城市的建設,智慧旅游成為我國各旅游目的地信息化建設的重點。而國內的旅游網站基本停留在旅游產品的簡單搜索上,服務項目比較單一,且旅游產品種類繁多,無法滿足人們對個性化旅游信息服務的需求。在智慧旅游的大目標以及旅游網站的功能落后的背景下,可以解決信息過載問題的推薦系統被廣大學者重視。傳統的推薦系統雖然已經取得了不小的發展,但仍存在數據稀疏性、冷啟動、行業特殊性等問題。本文將案例推理法應用到旅游推薦系統的研究中,通過與用戶交互,根據用戶的旅游偏好快速推薦出旅游目的地信息和游記信息,一定程度上改進了現有旅游推薦系統存在的數據稀疏性和冷啟動等問題。
二、旅游智能推薦系統的原理及技術
(一)工作原理
本旅游智能推薦系統的設計目標有以下幾點。
1. 根據用戶的旅游偏好,提供個性化旅游目的地信息和游記信息列表推薦服務。
2. 實現用戶管理及后臺管理員職能。
3. 系統功能模塊化,交互界面友好,快速響應,可拓展性強。
根據案例推理的基本流程,先確定案例的表示方法,接著多線程爬取在線旅游網站的景點和游記數據并預處理,構建旅游案例庫。然后基于Flask框架敏捷開發,在系統后端,設計了基于Word2Vec詞嵌入向量技術計算文本相似度的案例匹配算法,調用下層MongoDB數據庫索引以及Find引擎,實現了耦合層次的搜索。具體的工作原理有以下幾點。
1. 對旅游目的地文獻進行研究,構造旅游偏好模型和旅游目的地模型,進一步確定旅游案例的表示方法。
2. 設計并實現基于Python語言的數據收集模塊,多線程爬取在線旅游網站的相關景點和游記信息。
3. 根據系統的設計目標,設計并實現基于Python語言的數據預處理模塊,包括對數據進行分類、清洗等進一步處理,并構建索引表即旅游案例庫。
4. 基于Python Flask框架開發系統,采用前后端分離的MVC框架。在系統后端,構建基于Word2Vec詞嵌入向量技術計算文本相似度的案例匹配算法,調用下層MongoDB數據庫索引以及Find引擎,實現了耦合層次的搜索,提供根據相似度排列的推薦結果。
5. 實現用戶管理及后臺案例庫管理的管理員職能,根據用戶的瀏覽行為,修正旅游數據庫中的解決方案,完成案例庫的更新。
(二)案例推理
案例推理法(Case-based reasoning,簡稱CBR)借鑒人類處理問題的方式,運用過往的經驗和知識解決問題,成為了人工智能領域的一個研究熱點。案例推理法來源于認知科學:人類能把感知的信息傳達至大腦,大腦會將這些信息存儲起來。而今后遇到類似的問題時,這種被存儲的信息就為問題的求解帶來可借鑒的參考經驗。CBR系統一般包括4個循環過程:檢索(Retrieve)、重用(Reuse)、修正(Revise)、保留(Retain)。CBR系統首先會對比問題案例和先前案例的相似性,去先前案例庫里檢索出相似的案例來解決問題案例,并修正先前的解法,而新的解決問題的方法和問題案例都會被系統記錄并存儲,先前案例庫就得到了更新。這種增量式學習方法使得CBR系統的學習能力不斷提高。
(三)自然語言處理之計算文本相似度
互聯網迅猛發展,每時每刻都在產生大量的文本、圖片、音頻等數據,自然語言處理(Natural Language Processing, NLP)技術可對數據進行處理并挖掘其中的價值,廣泛應用于語音合成、文本分類、詞性標注等領域。文章中主要應用了Word2Vec詞嵌入向量技術來計算文本相似度。Google在2013年提出Word2Vec詞向量訓練算法,將詞轉換為實數向量。Word2Vec采用的詞向量是Hinton于1986年提出的Distributed Representation,其基本思想是通過訓練,將某種語言中的每一個詞映射成一個固定長度的向量。Word2Vec工具采用了CBOW(Continuous Bag-Of-Words)模型和Skip-gram模型。CBOW模型是根據上下文的詞計算中心詞的概率分布,在模型的訓練中,耗時較短,句法分析的準確率較高,但訓練結果受限于上下文,難以正確反映在此范圍外的語義關系。而Skip-gram模型是通過中心詞來計算上下文的詞的概率,在模型的訓練中由于計算量較大,耗時較長,但語義分析的準確性較高。將文本表示成詞向量,文本的相似度就可以轉化為詞與詞的相似度。詞與詞的語義相似度可以通過向量余弦表示,相似度越高,余弦值越大。
三、旅游案例庫的構建
(一)案例表示
在案例推理中,案例的有效表示是案例推理運行的基礎。常見的案例表示方法為<問題描述,解決方案>的二元組形式,其中問題描述是問題發生的背景和原因,通過對比待解決案例和已有案例的問題描述,實現案例的推理;解決方案是提供相似的已有案例的解決過程。本文首先構建了旅游偏好模型。旅游偏好模型體現了游客對下一次旅游的興趣偏好,了解用戶的偏好是后續進行推薦的基礎。本文在已有旅游目的地文獻研究基礎上,構建了旅游偏好模型如下:<目的地類型,出發月份,出行天數,出行人物,人均費用,交通方式,住宿設施,餐飲方式>,其中目的地類型分為10類:自然景觀、歷史文化、紅色旅游、主題游樂、度假休閑、鄉村旅游、工業旅游、博物館、科技教育、其他;出發月份分為1~2、3~4等;出行天數分為3天以下、4~7天、8~14天、15天以上;出行人物分為一個人,和朋友,情侶/夫妻,帶孩子,其他;人均費用分為1~999元、1000~5999元、6000~19999元、20000元及以上。
接著構建了旅游目的地模型。旅游目的地指的是能夠滿足游客游憩目的的地點。本文根據研究需要,構建了旅游目的地模型如下:<景點名稱、景點簡介、景點開放時間、景點門票價格、交通線路、景點游記>,其中景點游記是過往游客記錄該旅游目的地的游覽經歷。
在已經構建的旅游偏好模型和旅游目的地模型的基礎上,本文將旅游案例表示為<{目的地類型,出發月份,出行天數,出行人物,人均費用,交通方式,住宿設施,餐飲方式}, {景點名稱、景點簡介、景點開放時間、景點門票價格、交通線路、景點游記}>,其中旅游偏好模型是案例的問題描述,即待推薦用戶的偏好,旅游目的地模型是案例的解決方案,即根據待推薦用戶的偏好從案例庫中匹配出相似偏好的案例進行推薦。
(二)案例收集
國內熱門的旅游領域的垂直搜索引擎主要有馬蜂窩、攜程、去哪兒等,存有海量旅游目的地信息和游記信息。本文以知名旅游勝地浙江省為研究對象,目的是構建基于CBR的浙江旅游智能推薦系統。由于馬蜂窩運營時間較早,旅游目的地攻略專業,群眾基礎較大,游記信息量豐富,因此設計基于Python語言的網絡數據收集模塊,爬取馬蜂窩網站上浙江省景點及游記的文本信息。
由于在線旅游網站反爬蟲,設置了IP訪問量限制,如果單個IP在短時間內大量訪問網站將會被封禁。在網絡數據挖掘時,本文將多線程(multithread)代理、隨機瀏覽器、代理IP地址三種反反爬蟲技術進行結合。首先多線程,代理IP地址,隨機User-Agent,隨機休眠,得到景點下所有游記鏈接,再多線程爬取每一篇游記的文本信息,最終得到浙江省景點共750個,游記共6410篇,返回3個文檔:“馬蜂窩浙江景點.csv“文檔中收集了景點名稱、景點介紹url、景點簡介、景點下游記list的url;“merged_links.csv”文檔中收集了景點下游記list的url、具體游記url、游記標題;”res“文件夾中以json格式返回了景點信息”interest.json”和游記信息”youji.json”,其中景點信息包括景點介紹url、交通線路、景點門票價格、景點簡介信息、景點營業時間,游記信息包括出行人物、出發時間、人均費用、游記作者、出行天數、具體游記url。
(三)案例分類和清洗
先進行案例分類。文章參照浙江省文化和旅游廳官網的景區及對應景區類型信息,將“馬蜂窩浙江景點.csv“文檔中的750個景點根據上節10類旅游目的地類型進行歸類。對于浙江文旅官網有的景點名稱,直接引用景區類型,剩下沒有的,將結合景點介紹人為進行分類,例如 “杭州蕭山國際機場”、“杭州東站”等歸為“其他”一類。最終整理得到“浙江景點及類型匹配表.xlsx”,并與“馬蜂窩浙江景點.csv“文檔進行合并,新增景點類型信息。
接著進行案例清洗。本小節做的是數據的初步清洗,主要是刪除爬取的文本信息中的網絡符號、無效字符以及重復的數據等。由于基于Python的爬蟲爬取的是HTML格式的網頁數據,保存時會帶有例如
,
等HTML符號,這些符號屬于噪聲數據,在寫入文檔前需要被過濾掉。本文在爬蟲程序new_scrawler.py中引入BeautifulSoup庫解析網頁,將HTML數據解析成對象來處理,將全部頁面轉變為字典或數組,從而實現將網絡符號全部過濾。
(四)案例庫的構建
1. 建立索引表
一個景點鏈接對應多個游記鏈接,即存在映射關系。將原始數據進行匹配整合,新增一個空字典mapping{},根據映射關系向字典中增加景點和游記信息的鍵值對。在“馬蜂窩浙江景點.csv”文檔和“merged_links”文檔中,以景點下游記list的url作為主鍵進行匹配;在”res“文件夾和“merged_links”文檔中,以具體游記url為主鍵進行匹配,最終將3張表中的信息進行合并導入CSV文檔,得到索引表_V5,如結構圖1所示。
鑒于后續開發的旅游智能推薦系統具備根據用戶輸入的旅游偏好:目的地類型、出發月份、出行天數、出行人物、人均費用等檢索出符合條件的景點和游記信息,需要對索引表進行以下處理。對于表中數值類型數據如出發時間、出行天數等要抽取出數值列,對于文本類型數據如目的地類型等無需處理,后續可直接調用find()函數查找。對于索引表中以字典形式{簡介、交通線路、景點營業時間、景點門票價格}存儲的景點信息,需拆開獨立成列,以字符串格式呈現。
為實現以上處理,設計了基于Python語言的數據預處理模塊。定義了split_csv()函數:把索引表的interest_info中的類目拆開單獨寫入表格;將所有游記中出發時間、出行天數、人均費用缺失為空的列記為-1000;把\n替換成‘
、亂碼 替換成空格;把數據進一步清洗,提取出int類型的出發月份,int類型的人均費用,int類型的youji_day,最終得到索引表V_7。
2. 構建案例庫
將索引表_V7寫入進MongoDB。MongoDB是一個基于分布式文件存儲的數據庫。在MongoDB中新建Travel數據庫來存儲游記信息,將原本存在硬盤的索引表_V7讀進內存。
四、旅游智能推薦系統的實現
(一)開發環境
實驗采用的操作系統為Win10,開發語言為Python 3.5,開發環境IDE為Pycharm,網站主要是基于 Flask框架開發,采用前后端分離的MVC框架。使用的數據庫為MongoDB。
(二)案例匹配
為實現旅游智能推薦系統,本文定義了兩個搜索引擎。第一個搜索引擎是根據用戶篩選旅游偏好:目的地類型、出發月份、出行天數、出行人物、人均費用,調用下層MongoDB數據庫索引以及Find引擎,由于大量游記存在出發月份、出行天數、人均費用中一個或多個缺失的情況,返回的檢索結果將包括所有符合篩選的偏好以及缺失該偏好的游記。第二個搜索引擎是基于Word2Vec詞嵌入向量技術的搜索引擎,根據用戶輸入的自定義旅游需求,計算其與第一個搜索引擎的搜索結果的文本相似度,將搜索結果按相似度由高到低推薦給用戶。該搜索引擎的基本原理是用Jieba模型將句子切割成詞組,用Word2Vec工具將詞組變成64維的向量,返回用戶輸入的旅游需求和第一次搜索結果的相似度打分并排序,按照順序返回前端頁面顯示,實現耦合層次的搜索。
文章中計算文本相似度采用的是余弦相似性算法,詞組x和詞組y分別對應m維詞向量和詞向量,二者的相似度為兩向量的余弦值,如公式(1),其中,表示向量的點積,||||表示向量的模。
sim(x,y)=con(,)=(1)
具體代碼函數實現如圖2所示。
(三)案例庫更新
用戶在輸入旅游偏好后,系統會推薦出符合偏好的旅游目的地和游記列表,如圖3所示。用戶對推薦結果的瀏覽點擊情況一定程度上可以反映對推薦結果的采納程度,對后續旅游案例庫的更新有一定的依據價值。在MongoDB數據庫新增一個User數據庫存儲用戶信息,將用戶注冊信息、用戶搜索記錄、用戶瀏覽歷史等信息寫入。在網頁后端注冊管理員帳號,實現管理員管理用戶和管理后臺案例庫的職能,可以根據用戶的瀏覽行為修正Travel數據庫中的解決方案,也可以往Travel數據庫中新增案例,從而實現案例庫的更新,完成CBR的增量式學習。
五、結論
通過對用戶的旅游偏好和旅游目的地建模,基于案例的推理方法,結合網絡爬蟲技術構建浙江省景點和游記案例庫,結合深度學習構建案例匹配算法,基于Flask框架設計并實現了基于案例推理的浙江旅游智能推薦系統。該系統根據用戶的偏好輸入,匹配旅游案例庫中的解決方案,提供旅游目的地信息和游記信息列表,給用戶提供個性化定制旅游景點、游記等服務。該系統具有良好的穩定性和較強的可拓展性,對其他旅游目的地的研究也有一定的借鑒意義。
參考文獻:
[1]Watson I. Case-based reasoning is a methodology not a technology[J].Knowledge-Based Systems,1999,12(5-6).
[2]Rumelhart D E, Hinton G E, Williams R J.Learning representations by back-propagating errors[J].Nature,1986,323(6088).
[3]Zahran M A, Magooda A, Mahgoub A Y, et al. Word Representations in Vector Space and their Applications for Arabic[M].Computational Linguistics and Intelligent Text Processing,Springer International Publishing,2015.
[4]侯玉梅,許成媛.基于案例推理法研究綜述[J].燕山大學學報(哲學社會科學版),2011(04).
[5]Shardanand U. Social Information Filtering:Algorithms for automating“word of mouth”[C].Proc. Conference on Human Factors in Computing Systems,Denver,CO.ACM Press,1995.
(作者單位:同濟大學經濟與管理學院)