張 鑫,許璐璐
(1.山東科技大學(xué)測繪與空間信息學(xué)院,山東青島 266590;2.煙臺市鈺豐地質(zhì)技術(shù)服務(wù)有限公司,山東煙臺 264010)
近年來,互聯(lián)網(wǎng)旅游業(yè)呈現(xiàn)爆炸式增長,給人們的生活帶來了巨大影響。在線旅游評論數(shù)據(jù)作為一種反饋機制,為用戶決策提供了重要依據(jù)。然而,海量的旅游景點在為用戶提供更多選擇的同時,出現(xiàn)了信息過載問題。景點推薦是解決當(dāng)前問題的有效方法,其基本思想是通過景點及用戶信息,自動為用戶推薦其感興趣的旅游景點,從而達到景點個性化推薦。
協(xié)同過濾(Collaborative Filtering,CF)是目前使用最為廣泛的推薦技術(shù)[1-2],主要是利用用戶相似性[3-4]或物品相似性[5-6]預(yù)測目標用戶對物品的評分值。現(xiàn)有基于協(xié)同過濾的景點推薦方法主要是基于用戶的協(xié)同過濾[7-9](Userbased Collaborative Filtering,UBCF),即通過用戶的相似用戶對景點的評分值預(yù)測目標用戶的景點評分值,從而對目標用戶進行景點推薦。最初,研究者利用景點評分、瀏覽時間、打卡次數(shù)等數(shù)據(jù)計算用戶之間的相似度[10-12],從而預(yù)測用戶對景點的評分值,該方法有效利用了用戶間的關(guān)聯(lián)進行景點推薦,但由于景點評論數(shù)據(jù)比較稀疏,因此計算精度不高。隨后,許多學(xué)者對UBCF 方法進行了改進。Huang 等[8]在計算相似度時加入季節(jié)因素,從時間和景點兩個維度分析用戶的旅游歷史,從而為用戶進行景點推薦;Zhu 等[13]將景點的位置標簽引入用戶相似度計算,充分考慮了位置信息對用戶進行景點選擇的影響;陳氫等[14]、Xu 等[15]在為用戶進行景點推薦的同時引入景點位置、旅游季節(jié)和天氣因素,充分挖掘了景點的時間和空間信息;李雅美等[16]綜合考慮景點的區(qū)域、時間、主題、類型特征,為景點構(gòu)建標簽,并利用用戶對標簽的評分值計算用戶間的相似度,從而利用相似用戶對目標用戶進行景點推薦。以上方法均是對用戶相似度計算進行改進,通過對景點進行更加細粒度的分析,從而綜合考慮影響用戶相似度的各種因素,加強了各景點間的關(guān)聯(lián),并在一定程度上緩解了數(shù)據(jù)稀疏對結(jié)果的影響,但僅采用用戶對景點的評分不足以表達用戶對景點標簽的喜愛程度,忽略了用戶、標簽、景點之間的關(guān)聯(lián)。
近年來,基于模型的協(xié)同過濾算法——矩陣分解[17-19](Matrix Factorization,MF)推薦技術(shù)成為研究重點,它通過對用戶特征矩陣及物品特征矩陣的預(yù)測計算用戶對物品的評分。傳統(tǒng)基于矩陣分解的推薦算法通常引入大量未知參數(shù)進行物品特征描述[20-21],無法真實反映物品特征,且容易出現(xiàn)過擬合現(xiàn)象,Ma 等[22]、Luo 等[23]通過引入電影類別標簽探究用戶、項目、標簽之間的關(guān)聯(lián),并采用矩陣分解為用戶進行推薦,取得了較好效果;宋威等[24]、方冰等[25]在電影類別的基礎(chǔ)上加入用戶標注標簽,進一步反映了物品的真實特征。然而,現(xiàn)有基于矩陣分解的景點推薦均采用傳統(tǒng)的隱式矩陣表達項目潛在特征,Yong 等[26]在使用傳統(tǒng)矩陣分解模型進行景點推薦的同時,加入時間和旅游成本特征,從而為用戶進行更好的推薦;李廣麗等[27]在傳統(tǒng)矩陣分解的基礎(chǔ)上,結(jié)合出游季節(jié)、出游方式、興趣類別等景點特征計算用戶興趣偏好,從而采用混合推薦方式為用戶進行景點推薦。以上方法均在傳統(tǒng)的矩陣分解推薦模型基礎(chǔ)上加入結(jié)合景點特征的推薦結(jié)果為用戶進行景點推薦,考慮到了景點的部分特征,但在采用矩陣分解時仍采用隱式矩陣表達景點特征,并未真正對景點特征進行挖掘,推薦結(jié)果缺乏可解釋性。
針對上述問題,本文構(gòu)建了景點標簽,將景點標簽引入矩陣分解推薦算法,結(jié)合用戶—景點矩陣及景點—標簽矩陣預(yù)測用戶在景點標簽層面的評分值,從而預(yù)測用戶對未評分景點的評分值,緩解了傳統(tǒng)協(xié)同過濾算法的數(shù)據(jù)稀疏問題,提高了算法預(yù)測精度,同時使矩陣分解推薦算法的潛在特征更加具體,增強了算法的可解釋性,為景點推薦提供了有力支撐。
定義用戶集合為U={u1,u2,...,um},景點集合為V={v1,v2,...,vn},景點標簽集合為L={l1,l2,...,lk}。景點標簽是連接用戶與景點的重要節(jié)點,是對景點細粒度特征的挖掘,它能夠?qū)⒂脩簟包c之間的二元關(guān)系(見圖1(a))轉(zhuǎn)換為用戶—標簽—景點之間的三元關(guān)系(見圖1(b))。
Fig.1 User-attraction/user-tag-attraction relationship圖1 用戶—景點/用戶—標簽—景點關(guān)系
由圖1(b)可以看出,景點標簽與景點之間是多對多的關(guān)系,為提取它們之間的關(guān)聯(lián),首先需要對景點評論文本進行特征詞提取,通過特征詞與景點標簽之間的關(guān)系判斷景點與景點標簽之間是否能夠建立連接,從而進行景點標簽抽取。
(1)特征詞提取。在旅游網(wǎng)站中,用戶往往通過文字評論表達對景點某些特征的喜好。因此,在海量的景點評論數(shù)據(jù)中存在大量表達景點細節(jié)特征的關(guān)鍵詞。本文采用TF-IDF 算法[28-29]計算各景點評論數(shù)據(jù)中關(guān)鍵詞的權(quán)重,TF-IDF 代表詞頻和逆文檔頻率。詞頻(Term Frequency,TF)是指關(guān)鍵詞在文檔中出現(xiàn)的頻率,計算公式如式(1)所示。
其中,w為關(guān)鍵詞,Di為景點評論文本,count(w)表示關(guān)鍵詞w在文檔Di中出現(xiàn)的次數(shù),|Di|表示Di中的總詞數(shù)。
逆文檔頻率(Inverse Document Frequency,IDF)指關(guān)鍵詞的普遍程度,計算公式如式(2)所示。
其中,N表示總文檔數(shù),Di表示含有w的總文檔數(shù)。
文檔Di中關(guān)鍵詞w的權(quán)重計算如式(3)所示。
在完成關(guān)鍵詞權(quán)重計算的基礎(chǔ)上,本文按照關(guān)鍵詞權(quán)重進行降序排序,并提取前2k(k表示景點標簽的數(shù)量)個關(guān)鍵詞作為景點的特征詞。
(2)景點標簽抽取。在景點特征詞提取完成后,遍歷景點特征詞及景點標簽特征詞表,若特征詞包含或包含在某個景點標簽的特征詞表字符串中,則認為景點具有該標簽,否則景點不具有該標簽。
本文首先通過景點標簽抽取構(gòu)建景點標簽矩陣,然后利用景點標簽矩陣以及用戶景點矩陣預(yù)測用戶對標簽的評分值,最終結(jié)合景點對標簽的隸屬度計算用戶對未評分景點的評分值。具體推薦過程如下:
(1)用戶— 景點矩陣。對于用戶集合U={u1,u2,…,um}中的任意用戶ui,依據(jù)ui的歷史旅游景點及景點評分數(shù)據(jù),構(gòu)建用戶—景點向量ri(ri1,ri2,…,rin),其中rij的取值如式(4)所示。
其中,n為景點個數(shù),f表示用戶ui去景點vj的次數(shù),siwj表示用戶ui第w次對景點vj評分值。對全體用戶集合U={u1,u2,…,um},分別采用式(4)計算用戶—景點向量,從而得到用戶—景點矩陣R={r1,r2,…,rm}。
(2)景點— 標簽矩陣。對于景點集合V={v1,v2,…,vn}中的任意景點vi,構(gòu)建景點—標簽向量qj{qj1,qj2,…,qjk},其中qij的取值如式(5)所示。
其中,k為景點標簽個數(shù),qjw表示景點vj對應(yīng)標簽lw的值。對全體景點集合V={v1,v2,…,vn},分別采用式(5)計算景點—標簽向量,從而得到景點—標簽矩陣Q={q1,q2,…,qn}。
(3)用戶—標簽矩陣。在用戶—景點矩陣R 以及景點—標簽矩陣Q 計算完成的基礎(chǔ)上,本文采用含有正則項的矩陣分解模型計算用戶對于景點標簽的喜愛程度。如上所述,景點標簽是對景點特征的細粒度描述,每個景點都有對應(yīng)的景點—標簽向量qj{qj1,qj2,…,qjk}。為此,依據(jù)用戶評分及景點— 標簽向量學(xué)習(xí)用戶— 標簽向量pi{pi1,pi2,…,pik},從而得到用戶對景點標簽的喜愛程度。具體流程如下所示。
初始化用戶—標簽矩陣:首先,采用隨機初始化方式初始化用戶—標簽矩陣P,利用初始化后的P與QT(景點—標簽矩陣Q的轉(zhuǎn)置)的乘積預(yù)測用戶評分矩陣R?,如式(6)所示。
計算損失函數(shù):由式(3)得到用戶ui對景點vj的預(yù)測評分為=pi*qjT,假設(shè)用戶實際評分為rij,為計算預(yù)測值與真實值之間的誤差,引入損失函數(shù)eij2,如式(7)所示。
其中,λ(||pi||2+||qj||2)為避免過擬合加入的正則化項;λ為常數(shù),稱作正則化參數(shù)。
更新用戶—標簽矩陣:沿著梯度下降方向更新pu,如式(8)所示。
其中,α為步長,pi'為更新后的用戶—標簽矩陣。
迭代:循環(huán)計算eij2并更新pi,直到eij2小于設(shè)定的某個閾值或迭代次數(shù)達到最大閾值,從而得到訓(xùn)練后的pi。
(4)景點個性化推薦。根據(jù)訓(xùn)練得到的用戶—標簽矩陣能夠得到用戶對景點標簽的喜愛程度,結(jié)合景點對標簽的隸屬度,即可得到用戶對景點的評分值,從而將評分值高的景點推薦給用戶。
本文結(jié)合Beerli 等[30]、高靜等[31]、李雅美等[16]對旅游景點特征的描述,構(gòu)建了包含景點活動、旅游對象、旅游季節(jié)、門票類型、人文風(fēng)俗、旅游場所、購物等七大因素下的66 種景點標簽,其結(jié)構(gòu)如圖2 所示。
景點標簽是對景點特征的總結(jié),每個景點標簽都對應(yīng)了多個特征詞,本文通過人工標注方式為景點標簽添加了相應(yīng)的特征詞,構(gòu)建了景點標簽特征詞表,以人文風(fēng)俗為例,各標簽的特征詞如圖3 所示。
本文將攜程旅行網(wǎng)(www.ctrip.com)上青島市排名前100 的旅游景點作為研究對象,獲取了2010-2018 年的景點評論數(shù)據(jù)和網(wǎng)站上公布的用戶景點評論數(shù)據(jù),共49 338條。在攜程網(wǎng)上采集到的數(shù)據(jù)存在數(shù)據(jù)缺失、重復(fù)評論等情況,因此需要對采集的數(shù)據(jù)進行清洗,刪除以下幾種類型的評論數(shù)據(jù):①多個重復(fù)語句組成的評論;②同一用戶在一周之內(nèi)多次對單個景點的評論;③謾罵或辱罵等不符合法律規(guī)定的評論;④由無效字符或特殊表情符號構(gòu)成的評論;⑤同一用戶對多個景點使用同一個文本的評論;⑥非中文表達的評論,如英文、韓文;⑦幾乎全部由一個字或某幾個字組成的單條評論,如“棒?。。。。?!”。
Fig.2 Attractions label structure圖2 景點標簽結(jié)構(gòu)
Fig.3 Examples of characteristic words in humanities圖3 人文風(fēng)俗特征詞示例
經(jīng)過數(shù)據(jù)清洗后留下的景點評論數(shù)據(jù)共48 588 條。為了避免冷啟動問題,去除評論數(shù)小于8 的用戶,共得到559 個用戶的10 408 條評論數(shù)據(jù)。
本文使用平均絕對誤差(Mean Absolute error,MAE)和均方根誤差(Root Mean Square Error,RMSE)作為評價標準,如式(9)、式(10)所示。
其中,N表示測試集中的總評分記錄。由式(9)、式(10)可以看出,MAE 和RMSE 越小,表示預(yù)測評分與真實評分之間的差距越小,即推薦精度越高。
融入景點標簽的矩陣分解個性化推薦算法中需要確定的參數(shù)有步長α和正則化參數(shù)λ。為確定算法的最優(yōu)參數(shù),本文采用控制變量法得到最終參數(shù)組合。
在本文實驗過程中,首先利用經(jīng)驗將步長α設(shè)置為0.01,觀察正則化參數(shù)λ對實驗結(jié)果的影響。本文首先通過實驗確定λ的大致取值范圍,然后通過不斷細化的方式確定λ的最終取值,最終結(jié)果如表1 所示。
Table 1 MAE and RMSE under different values of λ表1 λ 不同取值下的MAE 與RMSE
由表1 可知,當(dāng)λ=0.002 時,MAE 和RMSE 的平均值最小,故在實驗中λ取0.002。
在確定了λ的取值后,為了選取合適的α取值,繼續(xù)觀察α不同取值下對實驗結(jié)果的影響,最終結(jié)果如表2 所示。
Table 2 MAE and RMSE under different values of α表2 α 不同取值下的MAE 與RMSE
由表2 可知,當(dāng)α=0.01 時,MAE 和RMSE 的平均值最小。因此,融入景點標簽的矩陣分解個性化推薦算法α、λ的最優(yōu)取值組合為{0.01,0.002} 。
矩陣分解是基于模型的協(xié)同過濾算法,為驗證本文所提出算法的性能,本文選擇以下方法進行景點推薦結(jié)果比較。
算法1 基于用戶的協(xié)同過濾景點推薦:該算法首先利用用戶的歷史旅游數(shù)據(jù)得到用戶對景點的評分值,然后利用用戶對景點的評分值計算各用戶之間的相似度,最終通過相似用戶對景點的評分值預(yù)測目標用戶對景點的評分值,從而完成景點推薦。
算法2 基于標簽的協(xié)同過濾景點推薦:該算法為景點構(gòu)建了景點標簽,利用用戶對景點的評分值計算用戶對標簽的評分值,然后利用用戶對標簽的評分值計算用戶之間的相似度,最終利用相似用戶對景點的評分值預(yù)測目標用戶對景點的評分值,從而完成景點推薦。
算法3 融入景點標簽的矩陣分解個性化推薦:本文方法。
Fig.4 Comparison of experimental results圖4 實驗結(jié)果對比
由圖4 實驗結(jié)果對比可以看出,相比于算法1,算法2的MAE 和RMSE 分別下降了3.84%和3.26%。這表明構(gòu)建的景點標簽?zāi)軌蚋訙蚀_地描述景點特征,一定程度上緩解了傳統(tǒng)協(xié)同過濾算法的數(shù)據(jù)稀疏性問題。相比于算法1,算法3 的MAE 和RMSE 分別下降了68.28%和61.23%;相比于算法2,算法3 的MAE 和RMSE 分別下降了67.02%和59.93%。這表明相比于僅采用景點評分計算用戶對景點標簽的評分值,矩陣分解算法能夠更加準確地描述用戶對景點標簽的喜愛程度,本文提出的算法在預(yù)測用戶對景點評分方面性能更優(yōu)。
本文將景點標簽引入矩陣分解推薦算法,在推薦過程中充分考慮景點的實際特征,能夠更加準確地反映用戶對景點特征的喜愛程度,從而結(jié)合景點特征對用戶進行景點推薦。實驗結(jié)果表明,本文方法在預(yù)測用戶景點評分時明顯優(yōu)于其他算法,能夠進一步提高景點推薦算法的性能,從而為用戶推薦更加符合其愛好的景點。
同時,融合景點標簽的矩陣分解個性化推薦方法研究還需進一步提高,可以加入景點標簽的自動化構(gòu)建,使景點標簽更加準確,從而提高算法計算精度。