1. 程式人生 > >BPR [Bayesian Personalized Ranking] 演算法詳解及應用實踐

BPR [Bayesian Personalized Ranking] 演算法詳解及應用實踐

在推薦系統的實現中,幾乎總會遇到從較多候選集中為使用者選取特定的少數幾個物品進行推薦,這本質上是一個Ranking問題。

在推薦場景中使用者更缺乏耐性,對推薦結果的消費也十分有限。因此,排序的好壞直接決定了使用者對一個準確率為90%的推薦候選集的滿意度是否真的有90%。

其本身並不優化使用者對物品的評分,而只藉由評分來優化使用者對物品的排序。按照論文的說法:it is a real ranking algorithm.

BPR演算法過程詳解:

資料pair化預處理:

    BPR演算法將使用者對物品的評分(顯示反饋“1”,隱式反饋“0”)處理為一個pair對的集合<i,j>,其中i為評分為1的物品,j為評分為0的物品。假設某使用者有M個“1”的評分,N個“0”的評分,則該使用者共有M*N個pair對。

    這樣資料集就由三元組 <u,i,j>表示,該三元組的物理含義為:相對於物品“j”,使用者“u”更喜歡物品“i”。

資料假設:

  • 每個使用者之間的偏好行為相互獨立
  • 同一使用者對不同物品的偏序相互獨立

則優化問題為極大化如下目標:

     

   其中theta為所求模型,具體包括:表示使用者的隱含因子矩陣P,及表達物品的隱含因子矩陣Q。

其中關於似然部分:

      

我們假設先驗服從如下分佈:

     

則先驗的概率密度函式為:

    

基於上述假設,優化目標進一步展開得到:

     

對應的最小化問題為:——其中 λθ 為正則係數"model specic regularization parameters"。

    

採用SGD求解上述最小化問題,分別針對pqqj求偏導如下:

    

偏導即為梯度下降方向,模型迭代求解的公式如下:

     

其中α為學習速率。

關於偏序關係構造的問題:

論文中將使用者有過反饋(如點選、瀏覽、購買等)的物品標記為“1”,而將矩陣中剩餘其他所有的物品都標記為“0”。

論文作者認為:

基於pair-wise的偏序優化,可以避免point-wise模型在對feature-item進行預測時失效(因為feature-item在訓練時全被標記為“0”)的問題。

而且feature-item包括兩類:1,使用者真正討厭的;2,使用者missing的。

對於某個使用者來說,在訓練時都被標為"0"的item,在預測時的評分也可以排序,因此不影響ranking任務的完成。

我認為:

即使用pair-wise的優化方式,可以對訓練時標記為“0”的item在預測時進行ranking。

但這本身是“矬子裡面拔高個”,且訓練資料與使用者的實際偏好不符。而且,從資料量考慮,也很不經濟。

合理的做法:

一般推薦業務場景,都是將一個有限的物品集合(全部物品的子集,通常很小)提供給使用者。

我們只將提供給使用者,但使用者未有反饋的物品標記為“0”。對“未知”給與足夠的尊重。

而且,將資料pair化過程限制在某次互動(或某個session)內。

如下圖示: ——使用者U1同有兩次互動,共10個item

則pair化後的資料為: