楊佳鵬, 俎毓偉, 紀(jì)佳琪, 陳麗芳
(1 華北理工大學(xué) 理學(xué)院, 河北 唐山 063210; 2 河北民族師范學(xué)院, 河北 承德 067000;3 河北省文化旅游大數(shù)據(jù)技術(shù)創(chuàng)新中心, 河北 承德 067000)
互聯(lián)網(wǎng)技術(shù)的發(fā)展引發(fā)了信息超額問題,從快速增長(zhǎng)數(shù)據(jù)中找到符合需求的信息需要花費(fèi)大量的時(shí)間和精力,而形成的海量數(shù)據(jù)也促進(jìn)了大數(shù)據(jù)分析以及各種推薦系統(tǒng)的發(fā)展。 目前隨著人們生活水平的提高,外出旅游已成為一種重要的休閑方式。但由于相關(guān)知識(shí)和經(jīng)驗(yàn)的不足,游客難以對(duì)復(fù)雜多樣的景點(diǎn)信息做出最優(yōu)決策,對(duì)游客而言,符合用戶特征的大數(shù)據(jù)推薦系統(tǒng)是一種不錯(cuò)的選擇[1]。 目前,已有研究人員根據(jù)用戶歷史數(shù)據(jù)及用戶評(píng)分構(gòu)建旅游景點(diǎn)推薦系統(tǒng),但該系統(tǒng)并不能在流數(shù)據(jù)上運(yùn)行,并且推薦結(jié)果存在很大差異,不符合用戶需求,具有局限性。 根據(jù)用戶意向和景點(diǎn)信息的相似度推薦景點(diǎn),可以更有效地滿足用戶的特定化需求,對(duì)實(shí)現(xiàn)智能化生活以及大數(shù)據(jù)推薦系統(tǒng)具有積極意義。
結(jié)合圖神經(jīng)網(wǎng)絡(luò)和用戶情感畫像的協(xié)同過濾算法是旅游推薦最常用的方法,研究人員結(jié)合圖神經(jīng)網(wǎng)絡(luò)和用戶情感畫像推動(dòng)了數(shù)據(jù)分析與信息挖掘快速發(fā)展[2-4],然而此類算法無(wú)法滿足用戶的特殊需求。 圖神經(jīng)網(wǎng)絡(luò)運(yùn)用注意力機(jī)制[5]獲取景點(diǎn)序列中游客的長(zhǎng)短期偏好,根據(jù)用戶歷史游玩行為信息推薦景點(diǎn),而用戶的歷史游玩信息和長(zhǎng)短期偏好容易受到客觀環(huán)境影響;用戶情感畫像依據(jù)景點(diǎn)評(píng)分進(jìn)行推薦,具有很強(qiáng)的主觀性。 因此,該方法無(wú)法在流數(shù)據(jù)上使用,并且不能實(shí)時(shí)應(yīng)對(duì)用戶需求的變化。
根據(jù)用戶評(píng)論和評(píng)分的協(xié)同過濾算法也是一種常用的方法,譚云志等學(xué)者[6]提出根據(jù)文本評(píng)論信息學(xué)習(xí)項(xiàng)目特征,將不同特征分布及用戶偏好同時(shí)引入?yún)f(xié)同過濾推薦系統(tǒng)中。 楊家慧學(xué)者[7]引入巴氏系數(shù)[8]減少共同評(píng)分的影響,使用Jaccard 系數(shù)[9]增加協(xié)同過濾的共同評(píng)分項(xiàng)占比。 由于不合理因素可能會(huì)造成用戶的情感產(chǎn)生一定的偏差,并導(dǎo)致少量用戶打出極端的評(píng)分,這就會(huì)使推薦結(jié)果出現(xiàn)明顯誤差。
針對(duì)以上問題,本文提出基于瀑布型融合的旅游推薦系統(tǒng)(WFRA)對(duì)用戶的想法進(jìn)行實(shí)時(shí)分析,因此在面對(duì)用戶興趣突然發(fā)生更改的情況時(shí),系統(tǒng)可以分析用戶最新的想法去重新推薦景點(diǎn),實(shí)時(shí)更新模型。 在該系統(tǒng)中將構(gòu)建2 個(gè)過濾層。 第一個(gè)過濾層采用SimHash 算法,該算法能夠?qū)崿F(xiàn)大規(guī)模文檔相似性的精確檢測(cè),同時(shí)在實(shí)際應(yīng)用中對(duì)程序運(yùn)行速度有所保障,能夠?qū)|萬(wàn)旅游數(shù)據(jù)進(jìn)行快速過濾,從而降低后面過濾層的壓力;第二個(gè)過濾層采用TF-IDF 和余弦相似度相結(jié)合的算法進(jìn)行過濾,能夠進(jìn)一步把握語(yǔ)義。 實(shí)驗(yàn)結(jié)果表明龐大的旅游數(shù)據(jù)在經(jīng)過2 個(gè)過濾層篩選后所推薦得到的結(jié)果更具有針對(duì)性和精準(zhǔn)性。
在瀑布型融合模型中,構(gòu)建了SimHash 算法和余弦相似度算法兩個(gè)過濾層。 經(jīng)過SimHash 算法對(duì)海量數(shù)據(jù)進(jìn)行降維操作,把文本比較次數(shù)從最初的上億次減少到幾百萬(wàn)次,大大降低了時(shí)間成本,該設(shè)計(jì)思路為海量數(shù)據(jù)的精準(zhǔn)處理提供了創(chuàng)新性的改善策略。
在首層過濾所得數(shù)據(jù)的基礎(chǔ)上,再選擇余弦相似度算法和TF-IDF 算法進(jìn)行第二次過濾。 通過程序執(zhí)行窗口,用戶可以輸入自己想去做的事情,系統(tǒng)會(huì)反饋給用戶TOP-100 個(gè)推薦結(jié)果,其中包含景點(diǎn)所在城市、景點(diǎn)名稱、評(píng)分、門票價(jià)格、銷量、以及景點(diǎn)所在的省市區(qū)等相關(guān)信息。 如果用戶想要繼續(xù)了解其中某幾個(gè)景點(diǎn)的地理位置信息、各省市推薦景點(diǎn)的數(shù)量以及平均票價(jià)在地圖上的分布情況,可以繼續(xù)執(zhí)行程序,得到相關(guān)數(shù)據(jù)的可視化結(jié)果,設(shè)計(jì)思路如圖1 所示。
根據(jù)上述設(shè)計(jì)思路,將上述的系統(tǒng)架構(gòu)分為X層,系統(tǒng)架構(gòu)如圖2 所示。 由圖2 可看到,對(duì)系統(tǒng)結(jié)構(gòu)中各層設(shè)計(jì),擬展開研究分述如下。
圖2 系統(tǒng)架構(gòu)Fig. 2 The architecture of the system
(1)Data 層。 Data 層利用Spark 讀取得到的景點(diǎn)數(shù)據(jù),存儲(chǔ)在原始旅游景點(diǎn)數(shù)據(jù)庫(kù)中進(jìn)行備份,以備后續(xù)使用,同時(shí)創(chuàng)建一個(gè)空白的推薦數(shù)據(jù)庫(kù)存儲(chǔ)最終的推薦結(jié)果。
(2)處理層。 該系統(tǒng)在處理層搭建了2 個(gè)過濾層,根據(jù)用戶輸入的文本,過濾層會(huì)對(duì)數(shù)據(jù)流進(jìn)行篩選,每經(jīng)過一個(gè)過濾層,就把推薦結(jié)果存入推薦數(shù)據(jù)庫(kù)中,作為下一個(gè)過濾層的輸入。
(3)輸出層。 系統(tǒng)在輸出層輸出最終的推薦結(jié)果,用戶可以在推薦結(jié)果中選取興趣景點(diǎn),輸出層會(huì)對(duì)這些興趣景點(diǎn)做統(tǒng)計(jì)分析,并進(jìn)行地圖可視化來(lái)展示景點(diǎn)的詳細(xì)信息與位置。
1.3.1 SimHash 算法
Liu 等學(xué)者[10]提出SimHash 算法,其主要思想是對(duì)特征向量進(jìn)行降維,利用2 個(gè)向量的漢明距離來(lái)計(jì)算相似度。
Yu 等學(xué)者[11]證明,SimHash 算法在處理億萬(wàn)級(jí)別的數(shù)據(jù)時(shí)不僅擁有運(yùn)行速度優(yōu)勢(shì),也具有較高的準(zhǔn)確性和魯棒性。 該算法不僅大大降低了運(yùn)行時(shí)間成本,也有效地減少了第二過濾層的工作量,使用戶能更快地得到推薦結(jié)果。 SimHash 流程如圖3 所示。
圖3 SimHash 流程Fig. 3 SimHash process
1.3.2 余弦相似度算法與IF-IDF
在第一層過濾掉了大量景點(diǎn)后,第二過濾層采用余弦相似度算法,通過提取關(guān)鍵詞進(jìn)一步精簡(jiǎn)文本信息,從而提升系統(tǒng)的效率。 假定用戶輸入的特征向量a為[x1,y1],某個(gè)景點(diǎn)的介紹、即向量b為[x2,y2],那么能將余弦定理改寫成式(1):
余弦的這種計(jì)算方法對(duì)n維向量也成立。 假定A和B是2 個(gè)n維向量,這里A是[A1,A2,…,An],B是[B1,B2,…,Bn] ,則A與B的夾角θ的余弦為式(2):
利用式(2),就可得到A與B的相似度。 綜上所述,本文在第二層使用的余弦相似度算法和TF-IDF算法的步驟如下:
(1)用TF-IDF 算法計(jì)算詞頻向量找出每段文本的關(guān)鍵詞。
(2)將每段文本取出的若干個(gè)關(guān)鍵詞合并成一個(gè)文本庫(kù),計(jì)算每段文本對(duì)于該文本庫(kù)中關(guān)鍵詞的詞頻,并使用相對(duì)詞頻可以避免文本長(zhǎng)度的差異。
(3)獲得兩段文本各自的詞頻向量。
(4)計(jì)算兩段文本的余弦相似度。
本文對(duì)原始數(shù)據(jù)集進(jìn)行初步整理得到34 個(gè)省市的景點(diǎn)數(shù)據(jù)。 其中包括省市、景點(diǎn)名稱、星級(jí)、評(píng)分、票價(jià)、銷量、簡(jiǎn)介以及所在?。校瘏^(qū),北京市部分景點(diǎn)數(shù)據(jù)見表1。
表1 北京市部分景點(diǎn)數(shù)據(jù)Tab. 1 Data of some scenic spots in Beijing
傳統(tǒng)的數(shù)據(jù)庫(kù)[12]在應(yīng)用上存在著一定技術(shù)瓶頸,主要表現(xiàn)在2 個(gè)方面:
(1)MySQL 等數(shù)據(jù)庫(kù)的數(shù)據(jù)處置能力有限,數(shù)據(jù)量的大幅度增加會(huì)使Join、GroupBy、OrderBy 等操作速度受到很大的限制,有可能出現(xiàn)資源成本過高從而導(dǎo)致運(yùn)行失敗的情況;其次,將數(shù)據(jù)存儲(chǔ)轉(zhuǎn)移到分布式系統(tǒng)的代價(jià)太大。
(2)無(wú)法進(jìn)行跨數(shù)據(jù)源的訪問。 比如,對(duì)Hive Table 和MySQL 的數(shù)據(jù)混合進(jìn)行查詢。 大多數(shù)做法是將數(shù)據(jù)源進(jìn)行轉(zhuǎn)移。 過程中涉及的技術(shù)應(yīng)用包括Sqoop[13]、Hive[14]外表等,不過這些技術(shù)需要很高的時(shí)間成本,且Sqoop 在對(duì)特殊字符的處理中也存在著問題與不足。
Spark 作為開源的大數(shù)據(jù)處理平臺(tái)[15],通過將Resilient Distributed Datasets 以分布式的形式存儲(chǔ)在集群的內(nèi)存中和將計(jì)算壓力轉(zhuǎn)移到Hadoop 集群中來(lái)提高執(zhí)行效率。 利用Spark 讀取整理好的數(shù)據(jù)集并進(jìn)行預(yù)處理操作,清洗不符合要求的數(shù)值;通過高德地圖API 和Echarts 將景點(diǎn)的地理位置轉(zhuǎn)換為經(jīng)緯度坐標(biāo),以利于后續(xù)進(jìn)行可視化處理。
為了能夠更具有針對(duì)性地向用戶推薦旅游景點(diǎn),開發(fā)了基于瀑布型融合的旅游推薦系統(tǒng)。 用戶輸入自己的想法,便可以得到系統(tǒng)推薦的景點(diǎn),用戶還可以從推薦結(jié)果中選擇興趣景點(diǎn),并查看其詳細(xì)信息和地圖上的具體位置。 本文主要通過應(yīng)用不同的算法搭建過濾層對(duì)用戶期待體驗(yàn)的文本描述和景點(diǎn)信息進(jìn)行匹配來(lái)挖掘用戶感興趣的景點(diǎn)。
(1)打開并運(yùn)行旅游景點(diǎn)推薦程序,會(huì)有文字提示用戶輸入想要去做的事情,例如:用戶輸入:我突然想去泡個(gè)溫泉,最好是專門的中心。 用戶在輸入想做的事情后按下回車鍵,系統(tǒng)會(huì)反饋給用戶100 個(gè)推薦結(jié)果。 根據(jù)推薦結(jié)果可知,該算法反饋給用戶推薦景點(diǎn)的針對(duì)性較強(qiáng),具有較高的精準(zhǔn)性。
在得到TOP-100 個(gè)景點(diǎn)的數(shù)據(jù)后,將其按照省市分類得到各省市興趣景點(diǎn)的數(shù)量及票價(jià)的平均值,如圖4、圖5 所示。
圖4 各省市興趣景點(diǎn)的平均票價(jià)Fig. 4 Average ticket prices for attractions of interest in various provinces and cities
圖5 各省市興趣景點(diǎn)的數(shù)量Fig. 5 Number of attractions of interest in each province and city
(2)用戶還可以選擇興趣景點(diǎn)所對(duì)應(yīng)的序號(hào),得到其在地圖上具體地理位置的分布情況,以及清晰、直觀的3D 可視化結(jié)果。
(3)用戶可以選擇繼續(xù)獲取各省市興趣景點(diǎn)的數(shù)量以及平均票價(jià)的相關(guān)信息,最終以地圖和柱狀圖的形式進(jìn)行可視化。 如果想了解某個(gè)省市的興趣景點(diǎn)分布數(shù)量以及平均票價(jià),只需將鼠標(biāo)移動(dòng)至該省市的柱子上,就會(huì)動(dòng)態(tài)展示相關(guān)信息。 其中,lng和lat分別表示該省市的經(jīng)緯度,alt表示該省市所包含興趣景點(diǎn)的個(gè)數(shù),value表示該省市興趣景點(diǎn)的平均票價(jià)。
本文提出的基于瀑布型融合的旅游景點(diǎn)推薦系統(tǒng)在測(cè)試中具有很強(qiáng)的針對(duì)性和較高的精準(zhǔn)度。 其本質(zhì)是根據(jù)用戶的想法,對(duì)各旅游景點(diǎn)的信息進(jìn)行過濾,在每一個(gè)過濾層除去不符合條件的景點(diǎn),篩選出更符合用戶意愿的景點(diǎn)。 該系統(tǒng)不僅能夠更好地滿足用戶的個(gè)性化需求,還能靈活地應(yīng)對(duì)用戶興趣更改的情況,達(dá)到實(shí)時(shí)分析的效果,在某種程度上實(shí)現(xiàn)智能化旅游推薦,使用戶能夠在任何時(shí)候都能得到符合當(dāng)下內(nèi)心想法的推薦結(jié)果,使旅游推薦更加智能化。 由于在處理海量旅游景點(diǎn)數(shù)據(jù)過程中,第一過濾層采用SimHash 算法降低了整個(gè)算法的時(shí)間成本,并使程序的運(yùn)行速度得到明顯提升,整個(gè)算法的結(jié)構(gòu)體系具有很強(qiáng)的實(shí)用性。
在后續(xù)的研究中,可搭建并行過濾層分別針對(duì)不同特征屬性進(jìn)行過濾篩選,并根據(jù)數(shù)據(jù)集的大小、算法的時(shí)間復(fù)雜度、系統(tǒng)運(yùn)行效率,以及利用景點(diǎn)與景點(diǎn)之間的相似度進(jìn)行橫向推薦等多個(gè)角度進(jìn)行改進(jìn),從而獲得更加智能的推薦結(jié)果。