LibRec 學習筆記(五):使用 LibRec 快速復現 BPR 算法以及對比它的改進算法

一、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 自帶的 FilmtrustEpinions 數據集進行實驗,評價指標使用的是 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毛錢的辣條嗎?(下面爲微信收款碼)或者點個贊也行呀!您小小的鼓勵會是我持續更新的動力!ヾ(◍°∇°◍)ノ゙
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章