黃鴻 李悅
摘要:針對目前旅游行程生成方法自動化程度較低、操作復雜的問題,提出了一種基于游記語義分析和自然語言處理的行程生成算法。該方法以常見的非結構化游記文本作為數(shù)據(jù)源,采用關鍵詞遍歷、行程時序提取、興趣點名稱提取的方法,獲取游客在旅行目的地的游覽軌跡,生成結構化旅游行程。最后通過多篇同類行程的橫向比較,降低處理結果的冗余度,自動制定具有實用性的旅游行程計劃。
關鍵詞:旅游行程定制;自然語言處理;語義分析
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2018)07-0160-02
1 引言
隨著自由行成為一種熱門的旅游方式,很多游客在規(guī)劃行程時,都會在互聯(lián)網(wǎng)上查閱相關的游記?;ヂ?lián)網(wǎng)上的熱門游記通常是由“旅游達人”把自己的實際體驗總結提煉而成,并包含了他們對目的地前期研究成果,在時間、景點和預算的安排上也具備一定的合理性。對于對旅游目的地尚不熟悉的游客來說,查閱游記就可以繞過海量的碎片化信息,無疑是獲取有用信息的捷徑。
然而,互聯(lián)網(wǎng)上游記的作者和來源都十分復雜,大都通過普通的文本編輯器生成,沒有統(tǒng)一的格式標準。在當下UGC信息爆炸的時代,熱門游記數(shù)量極多,據(jù)螞蜂窩旅游網(wǎng)2016年12月統(tǒng)計,在中國游客偏愛的境外熱門目的地(如東京、曼谷),閱讀量超過2000的游記已有3000多篇,平均長度超過一萬字。每個目的地每天還以超過20篇的速度增長。因此,游客要通過閱讀多篇游記,人工的從中提取中有用信息無疑十分耗費精力,更難以辨別出不同游記中在時間、景點和交通安排上的差異,同時,因為游記格式各異,無法通過簡單的格式標記對其進行結構化,游客自己顯然無法快速批量的從中提取關鍵信息,急需研發(fā)一種自動化的旅游行程生成方法。
2 基本原理
針對上文中提出的問題,本文選擇從旅游大數(shù)據(jù)和自然語言分析的角度,研發(fā)智能化關鍵信息提取系統(tǒng),自動提取游記中的關鍵信息,生成對應的結構化文檔——旅游行程。本文所設計的方法不依賴于游記中的特定標識符,也不用進行復雜的參數(shù)設置。任何由網(wǎng)頁承載的游記文本,只要作者按時間順序組織內(nèi)容,并記錄了經(jīng)過的地點(如城市、景點、餐廳、酒店等),均可由本系統(tǒng)生成規(guī)范的行程文檔,游客無需通讀游記全文即可了解游記的旅游路線,城市、景點間的交通方式和游記作者推薦的美食、商品也能得到清晰的展示。
在這一方法中,則需要針對性的討論如下3個問題:
2.1 按時間順序對游記進行分段的技術路線
游記原文游記是一種對旅行過程的記錄,因此絕大部分游記中均按時間順序寫作,也就包含描述時間的標志性詞匯,而常見的序數(shù)詞匯、日期詞匯、長距離交通描述、重復性分隔符均可以作為具有時間屬性的標志性詞匯。為保證分段方法能夠適用于絕大多數(shù)游記,本文將這些常見的標志性詞匯歸入為“分段符字典”,在對游記進行分段時①,系統(tǒng)會用“分段符字典”中的詞匯依次遍歷游記全文,從而獲得多種分段結果。必須注意的是,一個詞匯可能會產(chǎn)生多種分段結果,因此分段結果的數(shù)量可能遠多于字典中的詞匯數(shù)量。
2.2 解決興趣點名稱多義性和同義性問題的技術路線
針對這個問題,本文從多個維度提出綜合性的解決方案:
(1) 對旅游資源設置多重別名,并分別設置權重參數(shù),根據(jù)不同別名的出現(xiàn)頻次和對應權重,計算出某一旅游資源的匹配概率,以解決“一地多名”的問題。
(2) 建立多個旅游資源之間的關系矩陣,通過上下文分析的方式,確定某一名稱的正確釋義,以解決“多地同名”的問題。
(3) 通過提取游記的旅行目的、旅行行為,設立作者行為參數(shù),對游記中提及某一名稱時的語義進行判定,以解決“一地多類”的問題。
當然,由于旅游資源眾多,人工設定以上參數(shù)的工作量極大,因此本文通過自我訓練的方式,使用大量的游記,讓系統(tǒng)自身完成大部分參數(shù)的設定,以降低人工調(diào)整參數(shù)的工作量。
2.3 對多條同源行程進行合并的技術路線
在設計同源行程的合并算法是,有三個重要的切入點:
(1) 單條行程各天POI訪問記錄的對照分析,找出偏離本條行程的冗余訪問記錄。
(2) 多條行程中對應天POI訪問記錄的對照分析,找出偏離當天行程的冗余訪問記錄。
(3) 找出不同行程在游記原文中的重疊部分②,然后統(tǒng)一刪除重疊部分帶來的冗余訪問記錄。
在使用以上方法去除掉冗余記錄后,在按天合并多條行程(此時可使用合集運算),即可得到一條較為準確的行程。
3 具體算法
游記文本的處理過程如下:
1) 根據(jù)用戶輸入的游記所在網(wǎng)頁的URL,從網(wǎng)絡上獲取WEB文檔,記為Traw。
2) 分析WEB文檔的來源,去除HTML標記、圖片、表格等與正文無關的信息,生成純文本的游記,記為Trefined。
3) 遍歷游記全文,獲取游記的基本信息。具體而言,就是獲取這段旅行的起止時間(分別記為dstart, dend)、目的地國家(記為Cdest)、作者、旅行目的、同行人員、組織方式(有無明確的時序結構)等基本信息。
4) 根據(jù)第3步的獲得的基本信息,對純文本游記(Trefined)進行分段。分段方法是按具有時間屬性的標志性詞匯,遍歷游記全文,從而以這些詞匯的位置把游記切割為多段。
考慮到自然語言的復雜性和多義性,可能有多種分段方案適用于該游記,產(chǎn)生多種分段結果(假設有n種)。設數(shù)組P1為一種分段結果,其內(nèi)容為[p1,1, p1,2, p1,3, …, p1,m],其中p1,2表示使用分段結果P1中的第2段文本,也就是該分段方案中對第2天游記的文字描述。因此,當有多個分段結果時,就產(chǎn)生了分段結果矩陣MP,如式(1)
5) 從旅游專題資源數(shù)據(jù)庫③中,獲得游記訪問國家的所有興趣點(POI)名稱。
技術上,就是讀取全球的旅游POI,根據(jù)第3步中獲取的目的地國家(Cdest)對這些POI進行篩選,得到屬于該目的地國家的POI,將這些POI的名稱放入集合A{a1, a2, a3, …, ak}。
6) 提取游記中每天訪問的POI記錄。
技術上,就是使用POI名稱集合A中的元素分別匹配分段結果矩陣MP中的元素,也就是使用POI名稱對每個分段結果進行匹配④,獲取每種分段結果中,每天的訪問的POI記錄數(shù)組t,以t為元素組成的矩陣,稱為訪問記錄矩陣,記為Mt。該運算過程記為match(MP, A),如式(2)(3)
例如,MP中元素p1,2表示分段結果P1中第2天游記文字描述,用集合A中的元素與p1,2進行名稱匹配,得到訪問記錄數(shù)組t1,2[f1,2,1, f1,2,2, f1,2,3, … , f1,2,u],其中f1,2,1~f1,2,u是指分段結果P1中第2天訪問的各個POI(當天共訪問了u個POI)。
7) 對每種分段結果最后一天的訪問記錄數(shù)組進行清理。
因為每種分段結果都是基于相同的游記文本(Trefined)生成的,因此分段結果中的第一個分段tn,1與最后一個分段tn,m必然會與其它分段結果產(chǎn)生重疊⑤,從而產(chǎn)生大量的冗余訪問記錄(如圖1所示)。為降低后期“去冗余”處理的復雜度,可通過比對相鄰分段結果的方式,提前篩選出冗余的訪問記錄,予以刪除。
8) 對多個分段結果的內(nèi)容進行合并。在技術上,先按時間“對齊”所有分段方案,然后將每天的POI訪問記錄進行對照分析,找到并清除其中偏離當天行程的訪問記錄(即冗余訪問記錄),綜合得出一條行程。要判定某條訪問記錄是否偏離當天行程,通常按式(4)進行,其中Dn,m,1為訪問記錄fn,m,1偏離系數(shù),Rn,m,1,2位訪問記錄fn,m,1和fn,m,2之間的關聯(lián)系數(shù)
9) 對行程進行最后的“去冗余”處理,生成最終行程并輸出,在輸出最終行程時,系統(tǒng)還需對行程的內(nèi)容進行審核,找出其中可能的內(nèi)容缺失和順序顛倒,并向用戶展現(xiàn)修正方案。
4 結論
本文中提出的算法從用戶非結構化文本游記作為數(shù)據(jù)源,直接把游記轉換為結構化的行程,全自動化的提取出游記作者在旅行中訪問的城市、景點、餐廳、商店,和入住的酒店,旅行途中使用的交通方式都被分別列明?;谙到y(tǒng)后臺的旅游資源專題數(shù)據(jù)庫,以上興趣點與交通方式的詳細介紹、位置、花費、預定方式和第三方評價信息都可一鍵瀏覽。自動轉化生成的行程,以及與行程相關的興趣點、交通信息還可供導出,以便用戶查看。這一系統(tǒng)最大程度上減少了用戶在規(guī)劃旅行時的工作量,省去了通過電子地圖、搜索引擎、攻略網(wǎng)站等多個來源查找信息的繁瑣過程。
同時,為完成本文所述的算法,建立包含4000篇以上游記的游記樣本庫,根據(jù)目的地國家、作者、來源對這些游記進行簡單的人工標注,然后將游記導入系統(tǒng)中,使用訓練算法對自然語言分析的模型進行調(diào)整,調(diào)整的目標參數(shù)包括POI別名權重、POI關系矩陣、交通行為判定參數(shù)、消費行為判定參數(shù)等,從而采用自動化手段,持續(xù)性的提升自然語言處理的準確度。
注釋:
① 具體算法流程的第4步。
② 由于不同的游記來源于同一篇游記的不同分段結果,由于分段點的隨機性,這些分段結果之間必然會產(chǎn)生隨機的文字重疊,也就會給行程帶來隨機的冗余訪問記錄。分析這些文字重疊的位置,可以去除掉由它們產(chǎn)生的冗余記錄。
③ 一個包含全球旅游資源信息的數(shù)據(jù)庫,分類存儲了國家、地區(qū)、景點、餐廳、酒店、商店、交通樞紐等于旅游有關的內(nèi)容,對以上內(nèi)容的名稱、地址、坐標、運營或管理狀態(tài)都有描述。該數(shù)據(jù)庫的信息量和準確程度直接決定了本文實現(xiàn)效果。
④ 是指使用POI的別名與分段結果進行模糊匹配,使用的POI別名與匹配結果的完整性,將記錄在訪問記錄矩陣Mt中,并用于行程的“去冗余”處理。具體過程參見第2章技術路線。
⑤ 當游記的敘事結構較為復雜時,其他分段也可能產(chǎn)生重疊。
參考文獻:
[1] 易水強.基于改進的遺傳算法的城市內(nèi)自助游行程規(guī)劃系統(tǒng)研究[D].中國計量學院,2014.
[2] 郭宏蕾,姚天順.自然語言中時間信息的模型化[J]. 軟件學報,1997(6):432-440.
[3] 陳周娟.基于語義的自然語言理解歧義消除[J]. 運城學院學報,2005,23(5):66-67.
[4] 樊治平,肖四漢.基于自然語言符號表示的比較矩陣的一致性及排序方法[J].系統(tǒng)工程理論與實踐,2002,22(5):87-91.
[5] 陸青,梁昌勇,黃永青,等.面向旅游行程規(guī)劃的交互式多智能體遺傳算法[J].計算機應用研究,2008,25(11):3311-3313.