胡紹方 高光



摘要:隨著電商平臺的普及,商品推薦系統實現了用戶的個性化推薦,幫助用戶過濾掉無用的信息,提供更感興趣的商品,既提升了用戶體驗,也增加了平臺收益,實現了用戶和平臺的雙贏。文章歸納了推薦算法和推薦系統研究中的關鍵技術,并利用Spark技術完成推薦系統的設計。該推薦系統包括離線推薦和實時推薦兩大部分。離線推薦為用戶提供離線推薦、最近熱門商品、歷史熱門商品和相似商品的推薦結果;實時推薦根據用戶的實時評分行為給出實時的推薦結果。系統推薦結果表現良好。
關鍵詞:Spark;協同過濾算法;隱語義模型;推薦系統
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2024)14-0001-03 開放科學(資源服務)標識碼(OSID) :
0 引言
在大數據時代下,各領域的數據量呈現爆炸式增長。在信息接收過程中,更多的是充斥著無用的信息,電商購物時也會遇到這個問題。面對海量的商品數據,如何高效準確地把用戶感興趣的商品推送到用戶面前,大數據推薦系統的研究顯得尤為重要。
1 相關算法基礎
1.1 推薦算法
1.1.1 基于內容的推薦算法
該算法通過提取用戶歷史購買物品的特征信息,提取商品標簽或描述文本中的關鍵詞作為特征信息,發現物品或內容的相關性,根據特征信息匹配相似內容的商品,提供推薦結果[1]。
1.1.2 基于協同過濾的推薦算法
1) 基于用戶的協同過濾推薦算法:根據用戶歷史行為數據,例如搜索、購買、評分數據,進行歸納分析,計算用戶之間的相似度矩陣,根據與用戶相似度高的其他用戶的歷史評分記錄,找出喜好程度高的物品進行推薦[2]。
2) 基于物品的協同過濾推薦算法:其主要是計算物品之間的相似度矩陣。根據用戶對商品的歷史評分找出喜好程度高的商品,找到與它相似的其他物品,向用戶推薦。
3) 基于模型的協同過濾算法:使用一些機器學習算法進行訓練,對每一個用戶建立模型,來預測用戶對物品的喜愛程度。在大數據的情況下,當用戶與商品成千上萬時,矩陣會很大,而且會有許多空白,計算機處理這樣的矩陣時,會浪費計算資源,且浪費時間,這就是稀疏矩陣的問題。
1.1.3 基于深度學習的推薦算法
ALS(Alternating Least Squares) 算法雖然解決了稀疏矩陣的問題,但仍存在“冷啟動”的問題,即當系統中用戶的數據較少時,無法準確地判斷新用戶的偏好[3]。針對這種問題,就有了基于深度學習的推薦算法。基于CNN(Convolutional Neural Network) 的深度學習方法分析文本特征進行分類,因為使用了深度學習的模型進行自動文本特征提取,相對于傳統的文本分類,文本分類的速度更快且效果更優[4]。
1.2 隱語義模型
基于隱語義模型(Latent Factor Model,LFM) 的推薦算法是一種源于基于模型的推薦算法的思想[5]。LFM是通過降維把原先的用戶物品評分矩陣分為兩個矩陣,一個表示用戶潛在關聯的維度,一個表示物品潛在關聯的維度,每一個維度對應著一個隱性特征,這種隱性特征難以清楚地解釋,但可以作為一種用戶偏好和物品特征的隱含語義去描述。LFM矩陣分解示意圖如圖1所示。
假設一個用戶物品評分的m×n矩陣為R,基于隱語義矩陣的分解是要找出兩個矩陣的乘積R?可以和矩陣R來近似,如公式(1) 所示:
上式中,Puk表示用戶對隱含因子k 的關聯度,Qki表示物品對隱含因子k 的關聯度。為了更好地理解,以用戶user1為例,user1對隱含因子k1、k2、k3的關聯度用P11、P12、P13來表示,物品item1對隱含因子k1、k2、k3的關聯度用Q11、Q12、Q13來表示。user1對item1的偏好值如公式(2) 所示:
隱語義模型是根據這種聯系分析建立用戶偏好特征模型,形成推薦結果[6]。
2 系統體系設計
2.1 系統業務設計
基于Spark的商品推薦系統包含了離線部分和實時部分,離線推薦部分包括統計推薦、基于內容的推薦和基于物品的協同過濾推薦,實時推薦部分則使用基于模型的推薦算法。該系統實現了前端應用、后臺服務、算法設計實現和平臺部署的業務。
用戶可視化部分使用AngularJS2進行實現,通過可視化為用戶提供系統的前端交互和數據展示。綜合業務服務部分主要通過Spring進行構建,負責從數據庫加載或寫入數據,也負責埋點對評分數據采集日志,為離線推薦和實時推薦提供數據支持。系統的業務流程圖如圖2所示。
2.2 系統數據設計
2.2.1 系統初始化部分
通過Spark SQL 將數據集數據加載到MongoDB 中。數據來自經過修改的真實中文亞馬遜電商數據集,該數據集分為商品數據表和評分數據表,分別包含1 000個商品和44 852條評分記錄。每個商品包含商品ID、商品名稱、商品所屬類別、商品圖片的URL 和商品的用戶評價標簽,每條評分記錄包含用戶ID、商品ID、商品評分分值和評分時間。
2.2.2 離線部分
離線統計服務從數據庫加載數據,統計商品的評分數據,根據商品的評分個數多少,結果可作為歷史熱門推薦結果;按時間順序統計商品的評分個數,結果作為最近熱門的商品推薦[7]。離線推薦服務從數據庫中加載數據,使用基于ALS的隱語義模型協同過濾推薦算法,獲得用戶的離線推薦結果,同時也計算出商品相似度矩陣,可以為實時推薦做準備。
2.2.3 實時部分
綜合業務服務會埋點記錄下用戶對商品的打分數據,存入日志文件。Flume監聽日志文件,將日志信息更新到Kafka隊列,Kafka Stream程序會對所收集的日志信息進行過濾處理,將格式化后的數據流發送給另一個Kafka 隊列。Spark Streaming 通過監聽這個Kafka隊列,將收集的評分數據流存儲在Redis中,并進行實時推薦算法的計算,將得到的實時推薦結果合并到數據庫中原有的推薦結果。
2.2.4 綜合業務系統部分
將數據庫中推薦結果進行展示。將用戶在頁面上的操作記錄進數據庫中,會將數據傳輸到Redis緩存[8],同時也將埋點采集的評分數據傳輸到Tomcat的日志中,為實時推薦部分服務。
3 系統實現
3.1 首頁推薦
登錄進入系統主界面中的4個推薦部分。頂欄中有快速鏈接可以進行首頁以及各個推薦結果頁面的跳轉,右上方還可進行賬號的退出操作。首頁主界面有實時推薦、離線推薦、最近熱門商品和好物推薦4個模塊。
實時推薦:首先連接數據庫,加載商品相似度矩陣,創建Kafka和Kafka Stream,對Kafka Stream進行處理,產生評分數據流,經過Spark Streaming的處理,從Redis中取出用戶最近的n次評分,計算每個備選商品的推薦優先級,最后將數據寫回數據庫。
離線推薦:首先連接數據庫,加載商品評分表,使用MLlib的ALS算法訓練隱語義模型,獲取預測評分矩陣,根據該矩陣得到用戶的推薦列表,利用商品的特征向量,兩兩商品計算余弦相似度得出商品的相似度矩陣,最后將數據寫回數據庫。
最近熱門商品和好物推薦:連接數據庫,加載商品評分表,Spark SQL做不同的統計,統計評分個數后降序排序可得到好物推薦的結果,將日期格式化后,先加上一個按日期的降序排序后再排序可得到最近熱門商品的結果,統計商品的評分后計算商品的平均分,將商品平均分表寫回數據庫。
3.2 商品相似推薦
商品詳情頁面的主界面上有兩個部分,第一部分是該商品的相關信息。用戶可以在這里給商品進行打分,表示用戶對該商品的喜愛程度。商品的標簽是根據大部分買家的評價所產生的,代表著這個商品的特征屬性,這些標簽可以作為基于內容推薦中商品的內容特征向量。第二部分是商品相似推薦,分為兩塊,用于展示該商品協同過濾推薦結果和內容推薦結果,實現流程如下:
商品評分:在Spring MVC的Service層中設計評分方法來給Controller響應前端發送來的商品評分請求,Service層會連接MongoDB,將評分數據(用戶ID、商品ID、評分和時間戳)保存或更新到MongoDB和Redis數據庫中。在響應評分請求后,會將該記錄寫入日志文件中。
基于內容的相似推薦:先用空格將標簽進行分詞,定義一個HashingTF工具計算詞匯頻次,定義一個IDF計算TF-IDF,訓練出IDF模型,得出特征向量,將數據進行轉換,兩兩商品配對計算余弦相似度得出商品的相似度矩陣,計算出推薦列表,結果寫回數據庫中。
基于物品的協同過濾推薦:首先統計商品的評分個數,將評分個數通過商品ID連接到原來的評分表上,將評分表按照用戶ID進行兩兩配對,統計兩個商品被同一個用戶評分的次數,對兩個商品做group by,統計用戶ID的數量,即對兩個商品同時評分的人數。之后計算商品的相似度矩陣,得到推薦列表,將結果寫回數據庫。
結果分析:可以直觀地看到基于內容的推薦結果數量較少,基于物品的協同過濾推薦的推薦結果較多。這是因為商品的數據集規模較小,在計算標簽詞匯的頻次時,特征數量會比較少,所以在進行商品標簽的特征向量提取后,進行商品推薦時,對商品的特征向量的相似判斷上要求會比較苛刻;而基于物品的協同過濾推薦,推薦結果依據的是購買商品的用戶群體,當兩個用戶群體擁有比較高的相似度時,兩個商品的相似度也可能會比較高,根據這個思路進行推薦,所以基于物品的協同過濾推薦結果數量會比較多。
4 總結
推薦系統是當下熱門的一個研究方向,推薦系統的研究從2012年開始起步,十多年間,推薦系統逐漸完善、豐富、多樣化。對電商企業來說,一個良好的推薦系統能為電商企業和用戶帶來切實的收益,企業能增加銷售額,用戶能獲得愉快的購物體驗。基于Spark的商品推薦系統對電商平臺上推薦系統的應用進行了模擬,通過部署在Tomcat的綜合業務服務,連接前端和后臺,分別進行了離線推薦和實時推薦,滿足電商平臺不同需求的商品推薦。
參考文獻:
[1] 馬小添.基于Hadoop的推薦系統設計與實現[D].成都:電子科技大學,2020.
[2] 焦健.基于Spark的協同過濾推薦算法研究[J].電腦編程技巧與維護,2020(3):40-41,73.
[3] 張明敏.基于Spark平臺的協同過濾推薦算法的研究與實現[D].南京:南京理工大學,2015.
[4] 劉建國,周濤,郭強,等.個性化推薦系統評價方法綜述[J].復雜系統與復雜性科學,2009,6(3):1-10.
[5] SAVESKI M,MANTRACH A.Item cold-start recommendations:learning local collective embeddings[C]//Proceedings of the 8th ACM Conference on Recommender systems.Foster City,Silicon Valley California USA.ACM,2014.
[6] KALCHBRENNER N, GREFENSTETTE E, BLUNSOM P. A convolutional neural network for modelling sentences[J]. arXiv preprint arXiv:1404.2188,2014.
[7] 徐啟東.基于隱語義模型的個性化推薦系統研究[D].廣州:廣東工業大學,2019.
[8] 薛琳蘭.基于隱語義模型的電商推薦系統的設計與實現[J].數字通信世界,2020(7):99,229.
【通聯編輯:謝媛媛】
基金項目:周口師范學院應用型課程項目(項目編號:YYKC-2024027) ;周口師范學院課程思政教育教學改革研究項目