周巧扣 倪紅軍
(南京師范大學泰州學院信息工程學院 江蘇 泰州 225300)
在推薦系統(tǒng)中,用戶的行為記錄可以分為顯式反饋和隱式反饋。顯式反饋是指用戶對已購買商品的評分數(shù)據(jù),通常為一段區(qū)間的整數(shù)值,例如1~5分。隱式反饋是指用戶瀏覽記錄、購買記錄等,通常為二值形式,例如“0”表示未購買,“1”表示已購買。兩者之間的區(qū)別在于,顯式反饋反映了用戶對商品的真實喜好程度,而隱式反饋表達了用戶喜好存在著一定的“不確定性”。目前,大多數(shù)推薦算法都將顯式反饋作為研究的對象,根據(jù)用戶已有的評分數(shù)據(jù),預測用戶對其他商品的評分,根據(jù)預測評分產(chǎn)生商品推薦列表。例如:基于用戶的近鄰模型[1]、基于概率的隱語義模型[2]以及矩陣分解模型[3-4]等,然而這些算法在隱式反饋上的推薦效果并不理想。
針對隱式反饋,文獻[5]提出一種面向排序的基于貝葉斯概率模型的推薦算法BPR(Bayesian Personalized Ranking)[5]。其核心思想是從用戶的隱式反饋中推導出用戶喜好商品的偏序?qū)Γ宰顑?yōu)化商品排序為目標,利用偏序?qū)τ柧毻扑]模型。該算法具有推薦內(nèi)容排序精度高,易于擴展等優(yōu)點,許多學者以該算法為基線進行了相關研究[6-8]。文獻[6]利用用戶的社交關系建立偏序?qū)ΓJ為與沒有反饋的商品相比,用戶更喜歡好友喜歡的商品,提出了一種基于用戶社交關系的推薦算法。文獻[7]對不同的隱式反饋進行分析,將隱式反饋分為:購買行為和瀏覽行為。利用不同反饋表達的不同喜好程度產(chǎn)生偏序關系,提出一種自適應的推薦算法。李滿天等[8]提出了一種融合顯式反饋和隱式反饋的面向排序的推薦算法,提升推薦算法的性能。
雖然隱式反饋在表達用戶喜好時存在著“不確定性”,但比顯式反饋更加豐富。例如,用戶對某個商品的多次購買,可以明確表達用戶對該商品的喜愛。此外,用戶購買商品的時間也可以表達用戶偏好的變化。本文在BPR算法的基礎上,結合用戶購買商品的次數(shù)和時間,提出一種基于多種隱式反饋數(shù)據(jù)的商品推薦算法MBPR(Multiple implicit feedback BPR)。利用更細粒度的偏序?qū)τ柧毻扑]模型,進一步提高推薦算法的性能,并在真實的數(shù)據(jù)集上進行測試,驗證了算法的有效性。
設有m個用戶和n個商品,X∈Rm×n為用戶對商品的評分矩陣。矩陣分解模型是一種隱因子模型,將X通過分解的方法映射成兩個低維度矩陣的乘積,其定義如下所示:
X≈WHT
(1)

(2)

BPR算法采用商品偏序?qū)Φ乃枷耄鋬?yōu)化的目標是對商品進行正確的排序而不是對單個商品的評分。BPR算法認為用戶對隱式反饋商品的偏好大于沒有反饋的商品,因此為每個用戶u構建一個商品的偏好序列>u,將商品偏序?qū)ψ鳛橛柧殧?shù)據(jù),商品偏序?qū)Φ臉嬙爝^程如下:
(3)
P(Θ|>u)∝P(>u|Θ)P(Θ)
(4)
假設所有用戶是相對獨立的,并且每個用戶u對商品(i,j)的排序與其他商品的排序相對獨立,則可以將P(>u|Θ)改寫為單體概率的積,如下所示:
(5)
用戶u相比j更喜歡i的單體概率計算公式如下所示:
(6)
式中:σ(·)是一個logistic函數(shù),其定義為:
(7)

P(Θ)服從一個均值為0,方差-協(xié)方差矩陣為ΣΘ的正態(tài)分布。
P(Θ)~N(0,ΣΘ)
(8)
BPR算法的一般性優(yōu)化函數(shù)如下:
(9)
式中:R(Θ)是與模型參數(shù)Θ相關的正則項。BPR算通過以上優(yōu)化函數(shù)訓練模型參數(shù)Θ,具體的模型可以是鄰域模型或矩陣分解模型。
在推薦算法中,最為關鍵的步驟是根據(jù)用戶已經(jīng)購買的商品記錄,分析出用戶的偏好屬性,然后向用戶推薦用戶喜歡的商品。然而,在BPR算法中,只能根據(jù)式(3)在已經(jīng)購買商品和未購買商品之間產(chǎn)生商品偏序?qū)Γ雎粤艘奄徺I商品之間的偏序關系,導致所構建的用戶偏好屬性不能真實反映用戶的偏好,從而影響了推薦算法的性能。在實際情況中,可以根據(jù)用戶的隱式反饋推導出更豐富的偏序關系。例如用戶對商品的購買次數(shù)和時間都可以表達對商品偏好的強弱。
如表1所示,相比i2,用戶u1更喜歡i1,因為在購買時間相同的情況下,u1在i1上有更多的購買次數(shù)。用戶u2可能更喜歡i1,因為在購買次數(shù)相同的情況下,u2在i1上的行為時間更近。對于用戶u3而言更偏好i1,因為他在i2上沒有任何隱式反饋。

表1 隱式反饋數(shù)據(jù)集

confid(fui,tui)=(1+αlog(1+fui/ε))e-β(t-tui)
(10)
式中:fui表示u對i的購買次數(shù),tui表示u購買i的時間,t為當前時間,α為fui的影響因子,控制fui對整個置信度的影響,ε為縮放因子壓縮購買次數(shù)的范圍[9]。這里采用常用的指數(shù)函數(shù)e-β(t-tui)作為置信度的衰減函數(shù)[10],β為衰減因子控制置信度隨時間的衰減強度。

(11)
為了方便MBPR算法的描述,令Eu為集合E中與特定用戶u相關的偏序集合,同樣令Du為集合D中與特定用戶u相關的偏序集合。
對于一個用戶u,可以同時使用Du和Eu中的偏序?qū)τ柧毮P蛥?shù)Θ。設U為所有用戶的集合,在BPR算法優(yōu)化函數(shù)的基礎建立如下的優(yōu)化函數(shù):
(12)
(13)
式中:bi表示商品i的偏離度。因此,模型參數(shù)Θ可以表示為參數(shù)集合{wu,hi,hj,bi,bj}。確定了模型參數(shù)Θ后,正則項R(Θ)可以表示為如下形式,其中λ為正則項系數(shù):
(14)
采用隨機梯度下降SGD(Stochastic gradient descent)算法優(yōu)化式(12)的目標函數(shù)。首先求得優(yōu)化函數(shù)在每個參數(shù){wu,hi,hj,bi,bj}處的梯度,然后沿著梯度相反的方向更新相應的參數(shù)。具體的更新公式如下:
(15)
(16)
(17)
(18)
(19)
其中,γ表示每次模型參數(shù)迭代的步長。訓練模型參數(shù)Θ時,首先隨機選取一個用戶u∈U,然后判斷與u相關的Eu集合是否為空,如果不為空,則從中隨機取出偏序?qū)?u,i,j)更新模型參數(shù)Θ,接著從與u相關的Du集合中隨機取出偏序?qū)?u,i,j)更新模型參數(shù)Θ,直到模型參數(shù)收斂,最后返回Θ。每次模型的迭代分別從Eu集合和Du集合中獲取偏序?qū)τ柧毮P蛥?shù),Eu集合中的偏序?qū)νㄟ^商品購買次數(shù)和購買時間建模用戶的偏好屬性,而Du集合中的偏序?qū)νㄟ^已購買商品和未購買商品之間的對比為用戶的偏好屬性建模。同時利用Eu集合和Du集合中的偏序?qū)τ柧毮P蛥?shù),增強了用戶偏好屬性的準確性。模型參數(shù)訓練算法的詳細描述如下:
1: PROCEDURE Learn_MBPR(U,D,E,Θ)
2: initializeΘ
3: REPEAT
4: uniformly sample au∈U;
5: IFEu≠?
6: draw(u,i,j) fromEu
7: updatewu,hi,hj,bi,bjaccording to Eq (15)~(19)
8: END IF
9: draw(u,i,j) fromDu
10:updatewu,hi,hj,bi,bjaccording to Eq (15)~(19)
11: UNTIL convergence
12: RETURNΘ
13: END PROCEDURE
隱式反饋在實際的推薦系統(tǒng)中是非常普遍的,但目前還沒有這樣的公開數(shù)據(jù)集,因此在本文的實驗中,采用公開的數(shù)據(jù)集Netflix來模擬隱式反饋數(shù)據(jù)。Netflix數(shù)據(jù)集包含48萬個匿名用戶對1萬7千多部電影的1兆多個電影評分。電影文件中的數(shù)據(jù)以四元組(電影ID,用戶ID,評分,日期)的記錄形式存在的,其中評分數(shù)值是1~5的整數(shù)區(qū)間,評分日期的時間跨度為1998年10月-2005年12月。由于Netflix數(shù)據(jù)集中的數(shù)據(jù)太多,評分數(shù)據(jù)多數(shù)集中在2005年,因此實驗中從Netflix數(shù)據(jù)集中隨機抽取2 000部評分較多的電影,以及1 000名用戶在2005年的157 760個評分記錄,記錄的時間分布如圖1所示。隨機抽取50%的數(shù)據(jù)作為訓練數(shù)據(jù),剩下的50%作為測試數(shù)據(jù)。在訓練數(shù)據(jù)集中又隨機抽取50%的評分為3~5的數(shù)據(jù)將其轉(zhuǎn)換為購買次數(shù)為1~3次的數(shù)據(jù),其余數(shù)據(jù)不關心其具體的評分將其轉(zhuǎn)換為二值數(shù)據(jù)。測試數(shù)據(jù)集也做同樣的處理。

圖1 評分記錄的時間分布
為了測試MBPR算法的性能,文中使用推薦算法中常用的性能指標Precision@N和AUC,其中Precision@N表示向用戶推薦的N個商品中用戶喜歡商品所占的比例,定義如下:
(20)

AUC的定義如下:
(21)
式中:E(u)的定義如下:
E(u):={(i,j)|(u,i)∈Stest∧(u,j)?(Stest∪Strain)}
(22)
式中:Stest和Strain分別表示測試集和訓練集。AUC越高代表了越準確的排序質(zhì)量。一個隨機正態(tài)分布的AUC是0.5,AUC的上限是1。
本節(jié)將通過實驗對MBPR算法以及相關算法的性能進行測試。在實驗中,矩陣分解模型中的隱因子數(shù)目k,模型參數(shù)Θ迭代的步長γ,正則項R(Θ)中的正則項系數(shù)λ經(jīng)過多次實驗取其最佳值,分別設置為:k=50,γ=0.01,λ=0.01,其他參數(shù)在具體實驗中設定。實驗指標Precision@N中的N取值為10。
3.3.1 購買次數(shù)與時間的影響
實驗中單獨測試購買次數(shù)和購買時間產(chǎn)生的偏序關系對推薦算法性能的影響。為了方便描述,分別稱只考慮購買次數(shù)的算法為MBPR(N),只考慮購買時間的算法為MBPR(T)。具體做法是:在MBPR(N)算法中將式(10)中的β設置為0,這樣只考慮了購買次數(shù)對置信度的影響,同時α設置為10,ε設置為0.01;同理,在MBPR(T)算法中,將α設置為0,只考慮購買時間對置信度的影響,同時β設置為0.02。α、β以及ε的取值均為多次實驗的最佳值。實驗結果如圖2和圖3所示。

圖2 購買次數(shù)與時間對Precision@N的影響

圖3 購買次數(shù)與時間對AUC的影響
從實驗結果看,MBPR(N)算法的性能最優(yōu),而MBPR(T)性能優(yōu)于BPR。證明將購買次數(shù)與時間融入BPR算法中可以提高算法的性能,并且購買次數(shù)更能反映出用戶對商品偏好的強弱。實驗結果中,MBPR(N)算法相比BPR算法在Precision@N指標和AUC指標上分別提升了0.100 8和0.066 5。
3.3.2MBPR、BPR以及MF算法的比較
實驗中將購買次數(shù)和時間同時融入到置信度的計算,產(chǎn)生偏序?qū)τ柧毮P蛥?shù),α設置為10,β設置為0.02,ε設置為0.01。對MBPR、BPR以及MF算法的性能進行比較,實驗結果如圖4和圖5所示。

圖4 三種算法在Precision@N上的對比

圖5 三種算法在AUC上的對比
從實驗結果看,MBPR算法在Precision@N和AUC性能指標上都有顯著的提升。相比較BPR算法,Precision@N指標上提升了0.121 7,在AUC指標上提升了0.081 6。此外,隨著迭代次數(shù)的增加,MBPR算法有著更好的收斂性。另一方面,從圖5可以看出,MBPR算法和BPR算法與MF算法相比,在AUC指標上的差異比較明顯,說明基于排序的推薦算法能產(chǎn)生更好的排序質(zhì)量。
本文主要研究了隱式反饋數(shù)據(jù)上的商品推薦問題。首先分析了隱式反饋的特點,介紹了目前主流的推薦算法。接著,在BPR算法的基礎上進行擴展,將隱式反饋中的購買次數(shù)和購買時間融入到偏序?qū)Φ臉嫿ǎ褂酶毩6鹊钠蜿P系訓練目標模型參數(shù)。最后,通過仿真實驗,對本文提出的算法與相關算法的性能進行了比較和分析。實驗結果表明,本文提出的算法在Precision@N以及AUC兩個性能指標上都有明顯的提升。在實際的推薦系統(tǒng)中,與顯式反饋相比,隱式反饋數(shù)量更加龐大,內(nèi)容更加豐富,形式更加多樣化。如何更好使用隱式反饋的特性,進一步提升推薦算法的性能,是下一步工作的重點。