文/祁明明 馬文明 單榮杰
(煙臺(tái)大學(xué) 山東省煙臺(tái)市 264000)
隨著科學(xué)技術(shù)的飛速發(fā)展,人們的生活節(jié)奏逐漸加快,工作壓力也隨之增大。過(guò)去人們都是通過(guò)手動(dòng)搜索關(guān)鍵詞的方式獲得旅游地點(diǎn),但當(dāng)越來(lái)越多的旅游地點(diǎn)通過(guò)互聯(lián)網(wǎng)呈現(xiàn)在人們面前時(shí),手動(dòng)搜索已經(jīng)不能滿(mǎn)足人們的需求,因此開(kāi)發(fā)一個(gè)高效的旅游地點(diǎn)個(gè)性化推薦系統(tǒng)平臺(tái)顯得尤為重要。旅游推薦平臺(tái)既能夠避免用戶(hù)瀏覽大量無(wú)關(guān)信息使其節(jié)約時(shí)間,又能提高用戶(hù)對(duì)于推薦平臺(tái)的依賴(lài)增加平臺(tái)收入。
旅游地點(diǎn)推薦平臺(tái)最關(guān)鍵的部分在于推薦算法模型設(shè)計(jì)與實(shí)現(xiàn),推薦算法的質(zhì)量決定了平臺(tái)的高度。許多研究學(xué)者為了解決旅游地點(diǎn)推薦問(wèn)題提出了不同的推薦算法,下面將介紹一些常見(jiàn)的旅游地點(diǎn)推薦算法。
協(xié)同過(guò)濾(Collaborative Filtering)算法是最經(jīng)典的推薦算法之一,分為基于用戶(hù)的協(xié)同過(guò)濾算法和基于物品的協(xié)同過(guò)濾算法。其中基于用戶(hù)的協(xié)同過(guò)濾算法通過(guò)計(jì)算用戶(hù)之間相似度,再將相似度高的其他用戶(hù)去過(guò)的旅游地點(diǎn)推薦給用戶(hù);基于物品的協(xié)同過(guò)濾算法則是計(jì)算旅游地點(diǎn)之間的相似度,根據(jù)用戶(hù)去過(guò)的旅游地點(diǎn),將相似的旅游地點(diǎn)推薦給用戶(hù)。
矩陣分解(Matrix Factorization,MF)推薦算法是隱反饋模型中代表算法,該算法的實(shí)現(xiàn)步驟為首先假設(shè)有N 個(gè)用戶(hù),M 個(gè)旅游地點(diǎn),建立起用戶(hù)-旅游地點(diǎn)矩陣(N*M),根據(jù)用戶(hù)歷史行為記錄將用戶(hù)去過(guò)的地點(diǎn)標(biāo)記為1,未去過(guò)的地點(diǎn)標(biāo)記為0,接著將該矩陣分解成兩個(gè)小矩陣P 與Q,P(N*K)矩陣為N 個(gè)用戶(hù)與K 個(gè)主題之間的關(guān)系,Q(K*M)矩陣為K 個(gè)主題與M 個(gè)旅游地點(diǎn)之間的關(guān)系,其中P 與Q 矩陣中的值為0 到1 之間隨機(jī)產(chǎn)生的數(shù)值,然后通過(guò)隨機(jī)梯度下降算法動(dòng)態(tài)更新P 和Q 矩陣中數(shù)值,最后將P與Q 矩陣還原成用戶(hù)—旅游地點(diǎn)矩陣。矩陣分解算法是將預(yù)測(cè)評(píng)分值最高的旅游地點(diǎn)推薦給用戶(hù)。
混合推薦算法為多種不同算法的組合與疊加,具體表現(xiàn)為將一種推薦算法模型作為另一種推薦方法的輸入。同時(shí)使用LDA 主題模型把旅游地點(diǎn)信息與用戶(hù)信息融入模型,旅游地點(diǎn)信息包括地點(diǎn)的地理位置、氣候等,用戶(hù)信息包括用戶(hù)的年齡、性別、職業(yè)等。該算法的優(yōu)點(diǎn)在于即使數(shù)據(jù)稀疏,模型也有很好的推薦性能。
上面幾種推薦算法都是將用戶(hù)整體簽到點(diǎn)中最感興趣的旅游地點(diǎn)推薦給用戶(hù),但都忽略了用戶(hù)的出行時(shí)序。比如用戶(hù)前三天分別去了南京的中山陵,南通的中華恐龍園和無(wú)錫的太湖,由此可以大概推算出用戶(hù)的游玩地在江蘇,考慮第四天用戶(hù)的去向,較大的概率也是在江蘇的某個(gè)旅游景點(diǎn),而上述的幾種推薦方式可能第四天推薦的地點(diǎn)在新疆或西藏,這顯然是不合理的,所以時(shí)序問(wèn)題對(duì)于旅游地點(diǎn)推薦尤為重要。針對(duì)上述時(shí)序問(wèn)題本篇文章提出了基于深度學(xué)習(xí)LSTM 神經(jīng)網(wǎng)絡(luò)的旅游地點(diǎn)推薦算法。

圖1:旅游地點(diǎn)推薦平臺(tái)結(jié)構(gòu)圖

圖2:基于深度學(xué)習(xí)LSTM 推薦算法模型
為了滿(mǎn)足不同用戶(hù)的需求,平臺(tái)設(shè)計(jì)主要分為兩部分,一部分為非個(gè)性化推薦,另一部分為個(gè)性化推薦。其中非個(gè)性化推薦主要針對(duì)新注冊(cè)用戶(hù),而個(gè)性化推薦針對(duì)有歷史行為的用戶(hù)。旅游地點(diǎn)推薦系統(tǒng)平臺(tái)如圖1 所示。
基于循環(huán)神經(jīng)網(wǎng)絡(luò)的旅游地點(diǎn)推薦系統(tǒng)平臺(tái)前臺(tái)采用HTML、CSS 和JS,前臺(tái)框架使用為bootstrap 和jQuery,后臺(tái)采用MVC三層設(shè)計(jì)模式并使用SSM 框架,編程語(yǔ)言使用java 語(yǔ)言,前后臺(tái)交互通過(guò)Ajax 并結(jié)合Json 數(shù)據(jù)傳輸格式,數(shù)據(jù)庫(kù)使用了MYSQL57。其中對(duì)于用戶(hù)個(gè)性化推薦模型使用Python 語(yǔ)言以及PyTorch 深度學(xué)習(xí)框架對(duì)用戶(hù)進(jìn)行數(shù)據(jù)分析并生成推薦。系統(tǒng)的功能分為個(gè)性化推薦功能與非個(gè)性化推薦功能,其中非個(gè)性化推薦功能包括登錄注冊(cè)模塊、旅游地點(diǎn)搜索模塊、分類(lèi)旅游地點(diǎn)熱度排行、周旅游地點(diǎn)熱度排行、月旅游地點(diǎn)熱度排行,個(gè)性化推薦功能包括推薦結(jié)果模塊與用戶(hù)反饋模塊。
針對(duì)新注冊(cè)用戶(hù),本系統(tǒng)采用非個(gè)性化推薦。由于新用戶(hù)在平臺(tái)上沒(méi)有任何旅游地點(diǎn)記錄,故不能采用個(gè)性化推薦。其中對(duì)于有明確需求的用戶(hù)可以通過(guò)旅游地點(diǎn)搜索模塊查找自己喜歡的地點(diǎn),如果用戶(hù)沒(méi)有明確的需求,則可通過(guò)旅游地點(diǎn)類(lèi)別查看各類(lèi)旅游地點(diǎn)的熱度,選擇熱度高的作為旅游地點(diǎn),或通過(guò)旅游地點(diǎn)周排行和月排行來(lái)選擇自己喜歡的旅游地點(diǎn)。
對(duì)于數(shù)據(jù)庫(kù)中存在歷史行為的用戶(hù),本系統(tǒng)采用個(gè)性化推薦,個(gè)性化推薦功能通過(guò)挖掘用戶(hù)歷史旅游信息為用戶(hù)生成最優(yōu)推薦結(jié)果。
本篇文章個(gè)性化推薦策略是使用深度學(xué)習(xí)LSTM 神經(jīng)網(wǎng)絡(luò)處理時(shí)序問(wèn)題,其優(yōu)點(diǎn)在于基于深度學(xué)習(xí)的推薦模型能夠利用非線性激活函數(shù)對(duì)數(shù)據(jù)中的非線性進(jìn)行建模以此獲得復(fù)雜的用戶(hù)旅游地點(diǎn)交互項(xiàng),同時(shí)深度神經(jīng)網(wǎng)絡(luò)能夠有效的從輸入數(shù)據(jù)中自動(dòng)學(xué)習(xí)用戶(hù)潛在偏好,并且LSTM 神經(jīng)網(wǎng)絡(luò)在一定程度上解決了長(zhǎng)時(shí)依賴(lài)問(wèn)題,由此可以解決傳統(tǒng)算法沒(méi)有考慮過(guò)的時(shí)序問(wèn)題。推薦策略架構(gòu)圖如圖2 所示。
Pt-1,Pt到Pt+n為用戶(hù)去過(guò)按照時(shí)間順序排列的歷史旅游地點(diǎn),n 通過(guò)人為設(shè)置,Pt+n+1為預(yù)測(cè)推薦地點(diǎn),user 代表某一個(gè)具體用戶(hù),ht-1,ht到ht+n是LSTM 遞歸神經(jīng)網(wǎng)絡(luò)中的隱藏層。Qt-1,Qt,Qt+n是LSTM 神經(jīng)網(wǎng)絡(luò)的輸出向量,Qt+n+1和U 分別為預(yù)測(cè)的旅游地點(diǎn)和用戶(hù)user 經(jīng)過(guò)激活函數(shù)得出的輸出向量。Tanh,relu,sigmoid 為激活函數(shù),引入激活函數(shù)的目的是讓神經(jīng)網(wǎng)絡(luò)能夠擁有非線性化建模的能力。cat(Qt+n, Ot+n+1, U)為三個(gè)輸出向量的橫向拼接,其中輸入層都是使用Embedding 的方式將用戶(hù)和旅游地點(diǎn)進(jìn)行向量化,優(yōu)點(diǎn)是能夠在神經(jīng)網(wǎng)絡(luò)中通過(guò)調(diào)整向量參數(shù)自動(dòng)學(xué)習(xí)用戶(hù)偏好。最后一層通過(guò)sigmoid 激活函數(shù)得到預(yù)測(cè)的地點(diǎn)作為推薦旅游地點(diǎn)的概率。最后將推薦地點(diǎn)按概率從小到大進(jìn)行排列。
為了驗(yàn)證本篇文章提出的推薦算法有效性,本文采用了2012年4月12日至2013年2月16日從Foursquare 收集的紐約市長(zhǎng)期(約10 個(gè)月)登機(jī)的數(shù)據(jù)集,其中包含1083 個(gè)用戶(hù)、38333 個(gè)旅游地點(diǎn)、以及到達(dá)旅游簽到時(shí)間。經(jīng)過(guò)測(cè)試其中每個(gè)用戶(hù)至少去過(guò)100 個(gè)地點(diǎn)。對(duì)于用戶(hù)的歷史行為數(shù)據(jù)我們需要進(jìn)行數(shù)據(jù)預(yù)處理,首先對(duì)這些用戶(hù)和地點(diǎn)進(jìn)行為一編碼,然后剔除在數(shù)據(jù)集中出現(xiàn)次數(shù)少于10 次的地點(diǎn),接著將用戶(hù)去過(guò)的地點(diǎn)按照時(shí)間順序進(jìn)行升序排列,最后將預(yù)處理后數(shù)據(jù)的80%作為訓(xùn)練集送入模型訓(xùn)練,20%作為測(cè)試集來(lái)驗(yàn)證算法有效性。
個(gè)性化推薦算法使用準(zhǔn)確率作為性能指標(biāo),和其他傳統(tǒng)算法相比本文在旅游地點(diǎn)推薦準(zhǔn)確率上提高13%,有效的提高了旅游地點(diǎn)推薦的準(zhǔn)確率,因而證明算法的有效性。
基于深度學(xué)習(xí)LSTM 的旅游地點(diǎn)推薦系統(tǒng)平臺(tái)所用的數(shù)據(jù)信息都存儲(chǔ)在數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)中包括用戶(hù)信息表、旅游地點(diǎn)信息表、用戶(hù)歷史行為記錄信息表以及推薦結(jié)果表。數(shù)據(jù)庫(kù)表的設(shè)計(jì)具有良好的結(jié)構(gòu)化和高獨(dú)立性,同時(shí)系統(tǒng)為數(shù)據(jù)庫(kù)中的數(shù)據(jù)建立索引提高查詢(xún)的速度。
基于循環(huán)神經(jīng)網(wǎng)絡(luò)的旅游地點(diǎn)推薦平臺(tái)同時(shí)擁有非個(gè)性化推薦功能與個(gè)性化推薦功能,能夠幫助用戶(hù)能快更準(zhǔn)確的找到旅游地點(diǎn),因此具有一定的實(shí)用價(jià)值。其中針對(duì)個(gè)性化推薦功能本系統(tǒng)使用深度學(xué)習(xí)LSTM 神經(jīng)網(wǎng)絡(luò)既能解決傳統(tǒng)算法沒(méi)有解決的時(shí)序問(wèn)題又能自動(dòng)學(xué)習(xí)用戶(hù)對(duì)旅游地點(diǎn)的潛在偏好。未來(lái)本篇文章可以在個(gè)性化推薦深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上融合更多的元素比如旅游地點(diǎn)文本描述信息,旅游地點(diǎn)圖片,用戶(hù)描述信息等。隨著時(shí)代的發(fā)展,旅游地點(diǎn)推薦系統(tǒng)平臺(tái)將會(huì)越來(lái)越成熟。