這是目錄
一、BPR 的介紹
BPR,UAI,2009,來自 Rendle 的論文 BPR: Bayesian Personalized Ranking from Implicit Feedback。
BPR 的提出旨在解決物品之間的順序問題,提出了一個可以應用於各個已有的推薦算法的算法框架,這個算法框架的建模目標是優化物品之間的順序,解決推薦的物品之間的排序問題。
提出的基本假設是,對於一個觀察的交易 (u,i) 和一個未觀察到的交易 (u,j),BPR 傾向於認爲用戶相對於物品 j 來說更加喜歡物品 i。
二、近年來在 BPR 上的經典改進算法
1、WBPR
WBPR,JMLR,2012,來自 Gantner 的論文Bayesian Personalized Ranking for Non-Uniformly Sampled Items。
針對 BPR 中的 negative sampling 進行改進,認爲不應該只簡單的 uniform sampling 而應該對 negative item 賦予相應的權重。
2、GBPR
GBPR,IJCAI,2013,來自 Pan and Chen 的論文GBPR: Group Preference Based Bayesian Personalized Ranking for One-Class Collaborative Filtering。
在 BPR 方法中有兩個基本假設可能不總是成立的:
(1)兩個用戶之間彼此獨立(2)對個體而言,兩個產品的成對偏好。基於此,該論文提出一種新的改進的假設:引入用戶之間豐富的交互作用。作者引入了“羣偏好”的概念,來 relax 之前提到的個體性假設和獨立性假設。作者認爲即使用戶對產品 i 表達過偏好,而對產品 j 沒有表達過偏好;但是用戶 u 可能相比於產品 i 更偏好產品 j 。此外,兩個用戶 u 和 w 可能是相關的,因此他們的聯合似然函數不能分解爲兩個獨立的似然函數。參考鏈接。
3、SBPR
SBPR,CIKM,2014來自 Zhao 的論文Leveraging Social Connections to Improve Personalized Ranking for Collaborative Filtering,提出假設用戶更加傾向於喜歡用戶朋友喜歡的東西。
4、AoBPR
AoBPR,WSDM,2014來自 Rendle and Freudenthaler 的論文Improving pairwise learning for item recommendation from implicit feedback 。
BPR 的目的是加大觀察到的物品和未觀察到的物品之間的差距,但 uniform sampling 似乎不能夠明顯加大這一點,尤其是當物品有長尾分佈現象的時候。因此作者提出了 static sampling 和 Adaptive sampling 兩種策略來進行改進。librec 中實現的是第二種算法。
5、MBPR
MBPR,CIKM,2018來自 Runlong Yu 的短論文Multiple Pairwise Ranking with Implicit Feedback。
BPR將物品分爲觀察到的物品和沒有觀察到的物品,MBPR把物品分爲 positive item、negative item 以及uncertainty negative item,並且提出了下圖的假設。
三、實驗比較BPR算法以及它的改進算法
下面直接使用東北大學郭貴冰老師提出的Librec開源算法庫來比較這些算法的實際效果,對於每一個方法的實現,我們都使用公佈在 Librec 上的最佳參數。
這裏使用 Librec 自帶的 Filmtrust 和 Epinions 數據集進行實驗,評價指標使用的是 Librec 中自帶的排序任務常用的指標:Precision、Recall、AUC、NDCG、Novelty、RR、AP。
下面分別按不同的數據集來進行實驗。
1、使用數據集 Filmtrust 進行實驗
FilmTrust 爲2011年從網站 FilmTrust 完整抓取下來的數據集,由 1508 個用戶以及 2071 個物品組成,共包含 35497 條數據, 保存形式爲 userid, movieid, movieRating。
適用於社會化推薦任務,規模較小,包含用戶對電影的評分信息,同時包含用戶間的信任社交信息。 下面給出的是在 liberc 命令行上運行的相關算法的命令以及最終的結果:
(1) 幾個算法在 librec 上運行的相關命令
BPR 運行命令:librec rec -exec -conf ../core/src/main/resources/rec/cf/ranking/bpr-test.properties
,運行時間<1min
WBPR 運行命令:librec rec -exec -conf ../core/src/main/resources/rec/cf/ranking/wbpr-test.properties
,運行時間1min
GBPR 運行命令:librec rec -exec -conf ../core/src/main/resources/rec/cf/ranking/gbpr-test.properties
,運行時間<1min
SBPR 運行命令:librec rec -exec -conf ../core/src/main/resources/rec/context/ranking/sbpr-test.properties
,運行時間<1min
AoBPR 運行命令:librec rec -exec -conf ../core/src/main/resources/rec/cf/ranking/aobpr-test.properties
,運行時間<1min
(2)幾個算法在 filmtrust 數據集上運行的結果
Method | Precision | Recall | NDCG | AUC | Novelty | AP | RR |
BPR | 0.3410 | 0.6154 | 0.6349 | 0.9197 | 14.2979 | 0.4356 | 0.5878 |
WBPR | 0.3045 | 0.4625 | 0.4610 | 0.8458 | 13.2545 | 0.3227 | 0.4189 |
GBPR | 0.3471 | 0.6361 | 0.6166 | 0.9291 | 11.3029 | 0.4432 | 0.5898 |
SBPR | 0.3298 | 0.5875 | 0.5900 | 0.9068 | 15.7255 | 0.4255 | 0.5630 |
AoBPR | 0.3425 | 0.6127 | 0.6073 | 0.9155 | 13.7258 | 0.4391 | 0.5877 |
結果分析:
從實驗結果的 Precision 和 Recall 以及 AUC 來看,這些算法在 Filmtrust 數據集上的效果真的是非常好的,當然這也不排除 Filmtrust 數據集本身很小的原因。
以上的 5 個算法中,GBPR 在 5 個指標上都取得了最好的實驗結果。(爲什麼?我也不知道怎麼分析這個結果)
2、使用數據集 Epinions 進行實驗
此爲Epinions數據集下載地址,由 Paolo Massa在Epinions.com 網站上進行了爲期5周的爬行(2003年11月/ 12月),數據集包含 49,290 位用戶,至少評價過 139,738 件不同商品,撰寫 664,824 條評論和 487,181 條已發佈的信託聲明。 用戶和項目由匿名數字標識符表示。
該數據集一般適用於社會化推薦任務,規模較大,包含用戶對電影的評分信息,同時包含用戶間的信任社交信息。
在 librec 中默認運行的數據集是 Filmtrust,所以需要另外指定運行 epinions 數據集的命令,具體操作是在命令行加入以下配置參數即可:-D data.input.path=epinions/rating/ratings_data.txt
,另,SBPR 除了使用到評分數據外,還用到了用戶的社交網絡數據,在命令行另加上以下參數配置:-D data.appender.path=epinions/trust/trust_data.txt
。
下面給出的是在 liberc 命令行上運行的相關算法的命令以及最終的結果:
(1) 幾個算法在 librec 上運行的相關命令
BPR 運行命令:librec rec -exec -conf ../core/src/main/resources/rec/cf/ranking/bpr-test.properties -D data.input.path=epinions/rating/ratings_data.txt
,運行時間8min
WBPR 運行命令:librec rec -exec -conf ../core/src/main/resources/rec/cf/ranking/wbpr-test.properties -D data.input.path=epinions/rating/ratings_data.txt
,運行時間大於12h,沒有等下去…
GBPR 運行命令:librec rec -exec -conf ../core/src/main/resources/rec/cf/ranking/gbpr-test.properties -D data.input.path=epinions/rating/ratings_data.txt
,運行時間15min
SBPR 運行命令:librec rec -exec -conf ../core/src/main/resources/rec/context/ranking/sbpr-test.properties -D data.input.path=epinions/rating/ratings_data.txt -D data.appender.path=epinions/trust/trust_data.txt
,運行時間52min
AoBPR 運行命令:librec rec -exec -conf ../core/src/main/resources/rec/cf/ranking/aobpr-test.properties -D data.input.path=epinions/rating/ratings_data.txt
,運行時間6h
(2)幾個算法在 Epinions 數據集上運行的結果
Method | Precision | Recall | NDCG | AUC | Novelty | AP | RR |
BPR | 0.0069 | 0.0140 | 0.0302 | 0.5306 | 67.2000 | 0.0050 | 0.0210 |
GBPR | 0.0062 | 0.0175 | 0.0263 | 0.5287 | 58.8410 | 0.0051 | 0.0173 |
SBPR | 0.0095 | 0.0219 | 0.0433 | 0.5397 | 86.9967 | 0.0098 | 0.0333 |
AoBPR | 0.0068 | 0.0172 | 0.0284 | 0.5307 | 66.9630 | 0.0056 | 0.0184 |
結果分析:
Epinions 數據集相比較於 Filmtrust 數據集大了非常多,所以這些算法運行的時間也都延長了很多,尤其是 WBPR 算法,運行了12個小時,才進行到第10次的迭代更新參數,這裏時間花費最短的是 BPR,值得誇獎!
SBPR 算法在 6 個指標中都拿到了最好的效果,可見“用戶會被朋友影響”這種因素在推薦場景中着實是需要去考慮的。
讀完以上內容,不出意外,您大概已經知道如何使用 librec 庫快速對比 BPR 算法以及它的改進算法了!ヾ(◍°∇°◍)ノ゙
本人目前剛開始學習使用 librec,歡迎同伴一起交流進步,哪裏有寫的不對的地方,歡迎評論指正呀!ヾ(◍°∇°◍)ノ゙
如果這篇博客幫助了您,可以請我喫包5毛錢的辣條嗎?(下面爲微信收款碼)或者點個贊也行呀!您小小的鼓勵會是我持續更新的動力!ヾ(◍°∇°◍)ノ゙