《深度學習推薦系統》閱讀筆記 2.前深度學習時代—推薦系統的進化之路-(1)協同過濾—基於鄰域的方法

第二章—前深度學習時代—推薦系統的進化之路-(1)協同過濾—基於鄰域的方法

爲什麼還要學習傳統推薦系統方法

儘管當今推薦系統、計算廣告和其他工業互聯網領域中深度學習已經成爲了主流方法,但瞭解傳統推薦系統方法依然是必要的,理由有二:

  1. 即使深度學習流行的今日,像協同過濾、邏輯迴歸、因子分解機等方法依然憑藉可解釋性強、環境要求低、易於快速訓練和部署簡單等優勢,活躍在大量應用場景中。依然有許多領域把LR當作基線不斷去迭代。
  2. 傳統推薦模型是深度學習模型的基礎。比如,神經網絡的基本單元是神經元,應用廣泛的LR是神經元(感知機)的另一種表示形式。而深度學習中也有很多基於因子分解機的方法。另外,協同過濾中的因子分解方法使用的梯度下降訓練方法更是沿用至深度學習時代。像基於時序信息的協同過濾方法,深度學習也有所借鑑。方法無新舊,瞭解本質才能瞭解每種建模方法背後的深刻認知和原理。

傳統推薦模型的演化關係圖

在這裏插入圖片描述
傳統推薦模型的發展脈絡主要由以下部分組成:
(1)協同過濾算法族(紫色部分)
(2)邏輯迴歸模型族(黃色部分)
(3)因子分解機模型族(綠色部分)
(4)組合模型(橙色部分)

協同過濾算法族

毫無疑問,協同過濾是推薦系統領域影響力最大、應用最廣泛的模型。協同過濾在互聯網領域大放異彩是2003年Amazon發表的論文《Amazon.com Recommenders Item-to-Item Collaborative Filtering》。

協同過濾方法簡介

(以下參考《推薦系統(技術、評估及高效算法)》)
協同過濾方法大致可以分爲兩類:基於鄰域的方法和基於模型的方法。
基於鄰域的方法:基於用戶的推薦和基於物品的推薦。
基於用戶的推薦:目標用戶對某一物品的感興趣程度是利用對物品已經評過分並且和目標用戶有相似評分模式的其他用戶(近鄰)來估計的。
基於物品的推薦:根據某一用戶對相似於目標物品的評分來預測該用戶對目標物品的評分。
基於模型的方法:使用屬性構建用戶和物品之間的聯繫,屬性代表在系統中用戶和物品的潛在特徵。包括貝葉斯聚類、潛在語義分析、潛在狄利克雷分佈、最大熵、玻爾茲曼機、支持向量機和奇異值分解等。
另外,還有混合推薦方法,如通過多個預測結果融合成一個綜合的預測結果等。
基於鄰域方法的優勢

  1. 簡單性:僅有一個參數(用於選取的近鄰數目)需要調整。
  2. 合理性:可以提供簡潔且直觀的解釋性理由。“構建這件物品的用戶也購買了另一件商品”。
  3. 高效性:基於模型的系統需要消耗大量時間在訓練階段。但鄰域方法可以離線預先計算近鄰,線上存儲近鄰只需要很小的內存,可以提供近乎實時的推薦結果。
  4. 穩定性:當用戶、物品、評分增加時受到的影響比較小。比如基於物品的推薦方法,一旦物品相似度計算完成,就可以爲所有用戶作推薦。當新的物品加入時,只需要計算新物品和系統已有物品的相似度。

協同過濾的形式化定義

UU : 用戶集合
II : 物品集合
RR : 評分集合
SS : 評分可選的分數集合(如 S=(1,2,3)S=(1,2,3)S=(like,dislike)S=(like,dislike)
ruir_{ui} : 用戶uUu\in U對於特定物品iIi \in I的評分,且rui1|r_{ui}|\leq 1
UiU_i : 集合中已經對物品ii進行了評分的用戶集合
IuI_u : 被用戶uu所評分的物品集合
IuIvI_u \cap I_v : 同時被用戶u和v所評分的物品集合
UijU_{ij} : 同時對物品i和物品j進行了評分的用戶集合
L(Ua)L(U_a) : 用戶uau_a實際最感興趣的N項物品
T(u)T(u) : 根據訓練樣本爲用戶u作出的推薦列表
wuvw_{uv} : 用戶u和v的興趣相近程度
N(u)N(u) : 用戶u的k近鄰,即k個與用戶u相似度最高的用戶v的集合
Ni(u)N_i(u) : k個和用戶u興趣相近且對物品i已做評分的用戶集合
Nu(i)N_u(i) : 用戶u已經評分且和物品i評分相近的物品集合。

推薦系統的問題定義

評分預測和最優N項是推薦系統最重要的兩個問題。
評分預測:預測某個用戶對他未評價過的物品i的評分。
最優N項:沒有評分信息時(比如只有用戶購買物品的列表),問題轉爲向用戶推薦感興趣的列表L(Ua)L(U_a)
評分預測
當有評分值時,定義爲迴歸或分類問題,目標是用學習函數f:UI>Sf: U * I -> S來預測用戶u對於新物品i的評分f(u,i)f(u,i)
評估方法一般用“準確性”,衡量預測準確性的標準一般有兩種:平均絕對誤差(MAE)和均方根誤差(RMAE):
MAE(f)=1RtestruiRtestf(u,i)ruiMAE(f) = \frac{1}{R_{test}}\sum_{r_{ui} \in R_{test}}|f(u,i) - r_{ui}|
RMSE(f)=1RtestruiRtest(f(u,i)rui)2RMSE(f) = \sqrt{\frac{1}{R_{test}}\sum_{r_{ui} \in R_{test}}(f(u,i) - r_{ui})^2 }
最優N項
top-N與評分預測是兩個問題。一個評分預測更好的模型,不一定會帶來更好的top-N推薦。前者是一個list-wise問題,後者是一個point-wise問題。所以在評估時,兩個問題的評價指標也不同。
最優N項的評價方法有準確率和召回率:
Precision(L)=1UuUL(u)T(u)L(u)Precision(L) = \frac{1}{|U|}\sum_{u \in U} \frac{L(u) \in T(u)}{L(u)}
Recall(L)=1UuUL(u)T(u)T(u)Recall(L) = \frac{1}{|U|}\sum_{u \in U} \frac{L(u) \in T(u)}{T(u)}

基於鄰域的推薦—示例

(下列評分例子來自於《推薦系統(技術、評估及高效算法)》)

- The Matrix Titanic Die Hard Forrest Gump Wall-E
John 5 1 2 2
Lucy 1 5 2 5 5
Eric 2 ? 3 5 4
Diane 4 3 5 3

本例中,需要預測用戶Eric是否要租用電影《Titanic》。從評分表格中可以看出,Eric和Lucy有類似的電影品味。而另一方面,Diane和他有不同的品味。

基於用戶的評分預測

基於鄰域用戶推薦方法的核心是利用和用戶u興趣相近且對物品i做了評分的用戶。即用k近鄰來做評分的預測。可以利用近鄰對物品i的平均評分策略來獲得預測評分,公式如下:
r^ui=1Ni(u)vNi(u)rvi\hat{r}_{ui}=\frac{1}{|N_i(u)|}\sum_{v \in N_i(u)}r_{vi}
但這個公式沒有考慮用戶u和每個近鄰用戶對物品評分相近程度的問題(即用戶相似度),所以更通用的解決方式是根據與用戶u的興趣相近程度進行加權,同時做標準化。公式如下:
r^ui=vNi(u)wuvrvivNi(u)wuv\hat{r}_{ui}=\frac{\sum_{v \in N_i(u)}w_{uv} r_{vi}}{\sum_{v \in N_i(u)}|w_{uv}|}
分母用絕對值表示是因爲負值會讓預測評分超過允許範圍。
同樣也可以用wuvαw_{uv}^{\alpha}代替wuvw_{uv},其中α\alpha是放大因子。當α>1\alpha>1時,與用戶u最接近的用戶評分就越重要。
回到例子中:
假設預測Eric對《Titanic》的評分時,用Lucy和Dinae這兩個用戶,並且相似度分別爲0.75和0.15,則預測評分爲:
r^=0.75×5+0.15×30.75+0.154.67\hat{r} = \frac{0.75\times 5+0.15\times 3}{0.75+0.15} \approx 4.67
需要注意:這種方法沒有考慮每個用戶會使用不同的評分尺度來衡量他們對於相同喜歡程度的物品。解決這個問題可以將近鄰評分進行標準化轉換,後面會繼續討論這個問題。
####基於物品的推薦
基於物品的推薦方法是通過用戶評分相近的物品來進行預測。定義Nu(i)N_u(i)爲用戶u已經評分且和物品i評分相近的物品集合。則用戶u對物品i的預測評分可以通過用戶對評分相近物品的評分進行加權平均運算:
r^ui=jNu(i)wijrujjNu(i)wij\hat{r}_{ui}=\frac{\sum_{j\in N_u(i)}w_{ij}r_{uj}}{\sum_{j\in N_u(i)}|w_{ij}|}
回到例子中:
假設預測Eric對《Titanic》的評分時,《Titanic》與《Forrest Gump》和《Wall-E》》的相似度權重分別爲0.85和0.75,而Eric對這兩部電影評分分別是5和4,所以預測評分爲:
r^=0.85×5+0.75×40.85+0.754.53\hat{r}=\frac{0.85\times 5 +0.75\times 4}{0.85+0.75}\approx 4.53
另外,不同用戶有自己獨立的評分尺度,所以也需要對評分標準化(後續討論這個問題)。

基於物品、用戶的推薦方法比較

  1. 準確性:推薦系統準確度很大程度依賴於系統中用戶數和物品數之間的比例。用戶數量遠大於物品數量的商業系統中,基於物品的推薦方法更加準確。用戶數量小於物品數量的系統中(論文推薦系統),採用基於用戶的推薦方法會更有益。
  2. 效率:推薦系統的內存和計算效率也依賴於用戶和物品的比例。用戶遠大於物品數量時,基於物品的推薦方法在計算相似度權重方面需要的內存和時間都小於基於用戶的方法,反之亦然。當然,對於在線推薦的階段,複雜度只依賴於有效物品數和近鄰數的最大值,這對於基於用戶或物品的推薦方法是相同的。
  3. 穩定性:用戶或物品的改變頻率和數量變化。如果系統的有效物品列表對用戶來說相對穩定,則選擇基於物品的推薦方法跟適用。因爲物品相似度依然能將物品推薦給新用戶。對於物品列表經常改變的系統(文章推薦系統),基於用戶的推薦方法更穩定。
  4. 合理性:基於物品的推薦方法更易於證明推薦的合理性。預測中用到的近鄰物品列表和相似度權重都可以解釋給用戶。基於用戶的方法比較難做到這一點,因爲用戶並不認識起到近鄰作用的其他用戶。
  5. 驚喜度:基於物品的推薦方法往往較難給用戶帶來驚喜度,基本只能產生穩妥或有把握的推薦結果。而基於用戶的方法則不然,有可能發覺具有驚喜度的推薦結果。
    驚喜度vs新穎性
    驚喜度:幫助用戶找到感興趣但本不可能發現的物品。
    可以通過一個例子來分辨它與新穎性的差別:推薦給用戶一部他喜歡的導演執導的電影,如果用戶不知道這部電影,則這是一個新穎性的推薦。但不是一個驚喜度的推薦,因爲用戶很可能會自己發現這部電影。
    ##基於鄰域方法的三因素
    除了選擇基於用戶還是物品的推薦方法以外,在上述的論述中其實還有一直沒有談論的三個重要的因素:
    1.評分標準化
    2.相似度權重的計算
    3.近鄰的選擇

評分標準化

用戶對物品打分時,每個用戶都有自己的評價標準,爲了消除這種評價標準的差異,可以對用戶的評分進行一些標準化的處理。其中,均值中心化和Z-score是兩種通用的標準化機制。

均值中心化

思想:與平均分比較,決定一個評分爲正或爲負。
對於基於用戶的推薦方法:
假設ruir_{ui}爲用戶對物品i的原始評分,可通過減去他評價的物品集IuI_u的平均評分ru\overline {r}_u來轉爲均值中心化評分:
h(rui)=ruiruh(r_{ui})=r_{ui} - \overline {r}_u
於是,可以用下式預測用戶評分ruir_{ui}:
r^ui=ru+vNi(u)wuv(rvirv)vNi(u)wuv\hat{r}_{ui} = \overline{r}_u + \frac{\sum_{v\in N_i(u)}w_{uv}(r_{vi} - \overline{r}_v)}{\sum_{v\in N_i(u)}|w_{uv}|}
對於基於物品的推薦方法:
ruir_{ui}爲用戶對物品i的原始評分,可通過減去用戶集合UiU_i對物品i的平均評分ri\overline {r}_i來得到基於物品推薦方法的均值中心化評分。
h(rui)=ruirih(r_{ui})=r_{ui} - \overline {r}_i
於是,可以用下式預測用戶評分ruir_{ui}:
r^ui=ri+jNu(i)wij(rujrj)jNu(i)wij\hat{r}_{ui} = \overline{r}_i + \frac{\sum_{j\in N_u(i)}w_{ij}(r_{uj} - \overline{r}_j)}{\sum_{j\in N_u(i)}|w_{ij}|}
均值中心化有一個有趣的性質:用戶對物品喜好傾向可以直接觀察標準化後的評分值的正負情況。同時評分可以表示用戶對該物品的喜好或厭惡的程度。

Z-score標準化

考慮一種情況:用戶A和B的平均評分都是3,而用戶A評分在1到5之間均勻選擇,用戶B則基本都是3。如果此時用戶B給某一個物品評分5分,這會比用戶A給物品評5分更加意外且更有意義,因爲這反映了用戶B更加喜愛這個物品。
均值中心化移除了針對平均評分的不同感受而導致的偏差,但Z-score標準化還考慮到了個人評分範圍不同帶來的差異性。
基於用戶的推薦方法:
標準化評分等於用戶均值中心化評分除以用戶評分標準差:
h(rui)=ruiruσuh(r_{ui})=\frac{r_{ui}-\overline{r}_u}{\sigma_u}
於是,基於用戶的推薦方法預測評分ruir_{ui}可以通過下式計算:
r^ui=ru+vNi(u)wuv(rvirv)/σvvNi(u)wuv\hat{r}_{ui} = \overline{r}_u + \frac{\sum_{v\in N_i(u)}w_{uv}(r_{vi} - \overline{r}_v)/\sigma_v}{\sum_{v\in N_i(u)}|w_{uv}|}
基於物品的推薦方法:
標準化評分等於物品均值中心化評分除以物品評分標準差:
h(rui)=ruiriσih(r_{ui})=\frac{r_{ui} - \overline {r}_i}{\sigma_i}
於是,可以用下式預測用戶評分ruir_{ui}:
r^ui=ri+jNu(i)wij(rujrj)/σjjNu(i)wij\hat{r}_{ui} = \overline{r}_i + \frac{\sum_{j\in N_u(i)}w_{ij}(r_{uj} - \overline{r}_j)/\sigma_j}{\sum_{j\in N_u(i)}|w_{ij}|}

評分標準化的選擇

如果評分較少時,標準化可能會產生不可預測結果。例如一個用戶只是給予一個評分或者幾個相同的評分,則標準差就是0,導致了一個不可定義的預測值。
當離散評分範圍很大或者是連續值評分時,Z-score方法由於考慮了評分的方差所以更有優勢,且比均值中心化更加敏感。

相似度權重的計算

相似度在基於鄰域的推薦方法中扮演着雙重角色:

  1. 選擇可信的近鄰用於預測評分;
  2. 給予不同近鄰在預測中的權重。
    它直接影響準確性和性能。

基於關聯的相似度

兩個向量的相似度經常通過計算兩個向量的餘弦距離來獲得。在基於物品的推薦方法中,這種方法也可以用來計算用戶的相似度,將用戶u表示爲一個向量xuRIx_u\in R^{|I|},其中|x_{ui}=r{ui}|爲用戶u對物品i的評分,0表示沒有評分。則用戶u和v的相似度爲:
CV(u,v)=cos(xu,xv)=iIuvruirviiIurui2iIvrvj2CV(u,v) = cos(x_u,x_v)=\frac{\sum_{i\in I_{uv}}r_{ui}r_{vi}}{\sqrt{\sum_{i\in I_u}r_{ui}^2 \sum_{i\in I_v}r_{vj}^2}}
其中IuvI_{uv}表示同時被用戶u和v評分的物品。這種方法存在一個問題:它沒考慮到用戶u和v的評分均值以及方差間的差異。
常用的可去除均值和方差差異影響的方法是皮爾遜相關係數
PC(u,v)=iIuv(ruiru)(rvirv)iIuv(ruiru)2iIuv(rvirv)2PC(u,v)=\frac{\sum_{i\in I_{uv}}(r_{ui}-\overline{r}_u)(r_{vi}-\overline{r}_v)}{\sqrt{\sum_{i\in I{uv}}(r_{ui}-\overline{r}_u)^2 \sum_{i\in I_{uv}}(r_{vi} - \overline{r}_v)^2}}
這種方法也同樣可以拓展到計算物品i和j的相似度。

其他相似度計算方法

均方差(Mean Squared Difference, MSD):使用用戶u和v對相同物品評分差的平方總和均值的倒數表示兩個人的相似度。
MSD(u,v)=IuviIuv(ruirvi)2MSD(u,v)=\frac{|I_{uv}|}{\sum_{i\in I_{uv}}(r_{ui}-r_{vi})^2}
斯皮爾曼等級關聯(Spearman Rank Correlation, SRC):綜合考慮評分的排名。
kuik_{ui} : 物品i在用戶u所評分物品中的排位
用戶u和v的相似度通過下式計算。
SRC(u,v)=iIuv(kuiku)(kvikv)iIuv(kuiku)2iIuv(kvikv)2SRC(u,v)=\frac{\sum_{i\in I_{uv}}(k_{ui}-\overline{k}_u)(k_{vi}-\overline{k}_v)}{\sqrt{\sum_{i\in I_{uv}}(k_{ui}-\overline{k}_u)^2\sum_{i\in I_{uv}}(k_{vi}-\overline{k}_v)^2}}
其中ku\overline{k}_u是用戶所評價物品的平均排名。

鄰域的選擇

鄰域數量和選擇鄰域的規則對推薦質量會產生重要影響。選擇鄰域的方法可以分爲兩步:

  1. 全局過濾保持最有可能的近鄰
  2. 預測時選擇最合適的近鄰

過濾預選近鄰數

大型的推薦系統中,由於內存限制不太可能存儲所有用戶和物品的非零相似度。當然即使沒有限制也是極大浪費,因爲只有一小部分有重要影響的值對預測纔是有效的。預選近鄰數是一項基本步驟,可以減少存儲相似度權重的數量,並且可以限制預測的近鄰數目,使得基於鄰域的推薦方法可行。有下列三種方法可選:

  1. top-N過濾:列表中選擇N個近鄰和對應的相似度權重需要保留。N的選擇需要謹慎,太大會讓預測速度變慢並且需要大量內存來存儲。太小會讓覆蓋度太低,使得一些物品永遠無法被推薦。
  2. 閾值過濾:保留所有相似度權重大於給定閾值wminw_{min}的近鄰。雖然更加靈活,但選擇閾值也比較困難。
  3. 負值過濾:過濾負的權重值。通常負評分關聯性比正關聯可靠性要差,因爲兩個用戶正相關說明他們屬於同一個團體,但負相關無法顯示團體之間的差異程度。
    當然這三種過濾方法並不是互斥的,可以根據需要結合在一起。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章