論文閱讀 - Item-Based Collaborative Filtering Recommendation Algorithms


本文是我在閱讀推薦系統經典論文 Item-Based Collaborative Filtering Recommendation Algorithms 時候記錄的筆記。

協同過濾算法

協同過濾算法(collaborative filtering algorithm, CF)基於當前用戶先前的行為(評分、購買記錄等),以及與該用戶相似的用戶的行為,來給當前用戶推薦其可能喜歡的物品(item),或者預測該用戶對某物品的喜歡程度。

問題設定是有一組用戶 \(\mathcal{U}=\left\{u_{1}, u_{2}, \ldots, u_{m}\right\}\) 和一組物品 \(\mathcal{I}=\left\{i_{1}, i_{2}, \ldots, i_{n}\right\}\),每個用戶 \(u_i\) 有一組購買、評價過的物品 \(I_{u i}\)

這里的用戶和物品信息可以構成 user-item 矩陣,用戶對物品的交互信息,構成矩陣中的值。矩陣可以是二值的(買過 0、未買過 1),也可以是多值或連續值(用戶對物品的評分)。利用這個矩陣,可以用來預測用戶對其未交互過的物品的評價值或喜歡的概率,進而可以基於此為用戶產生一組推薦。

傳統的協同過濾算法會從不同角度進行細分。根據是否需要保存 user-item 矩陣,可以分為 Memory-based CF 和 Model-based CF。基於計算用戶相似度還是物品相似度可以分為 Item-based CF 和 User-based CF。

Memory-based CF 和 Model-based CF

協同過濾的思想,無非是找到與當前戶相似的其他用戶,推薦這些相似用戶喜歡的物品給當前用戶。或者找到與當前用戶喜歡過的物品相似的物品,推薦這些相似的物品給該用戶。

早期的 CF 系統,基於 User-Item 評分矩陣來計算用戶或者物品之間的相似度,並依此來產生推薦。這些評分數據要放在內存中,便於計算相似度並生成推薦,因此被稱為 memory-based CF。但是因為 memory-based CF 方法中計算相似度依賴於用戶對物品的評分,因此容易因為評分數據量少,而無法准確地找到相似的用戶或物品。

為了克服上面提到的問題,得出更好的推薦,人們提出了 model-based CF 方法。Model-based CF 是利用用戶的評分數據學習出一個模型,並用此模型產生推薦。這個模型可以是一個數據挖掘或者機器學習的方法。memory-based CF 找相似用戶是利用用戶的向量(即前圖中矩陣中的行)來找相似用戶。但 model-based CF 是通過一個機器學習模型來找相似用戶。保存的數據是模型的參數。

User-based CF 和 Item-based CF

基於用戶的協同過濾算法(User-based CF),從用戶的興趣相似出發,給用戶推薦與其興趣相似的其他用戶喜歡的物品。基本假設是:如果用戶 X 和用戶 Y 對 n 個物品有相似的評價(喜歡或不喜歡、評高分或評低分),那么說明他們具有相似的品味,在未來他們對另一個物品可能依然有相似的評價。因此 User-based CF 的核心是尋找相似用戶。

基於物品的協同過濾算法(Item-based CF),給用戶推薦那些和他們之前喜歡的物品相似的物品。基本假設是用戶的偏好不會劇烈改變,過去喜歡的類型,將來還會喜歡。因此,基於物品的協同過濾,采用的方法是找出與用戶曾經喜歡的物品相似的其他物品,而后將這些物品推薦給該用戶。

協同過濾算法面臨的挑戰

1. 數據稀疏

許多商業的推薦系統,因為涉及的用戶和物品的數量非常龐大,而用戶和物品的交互信息(比如購買、評分等)往往很少,這導致 user-item 矩陣非常稀疏,因為缺乏足夠額數據,導致難以找到相似的用戶和物品。因為沒有足夠多相似的行為,所以相似的用戶不容易被找出。

當新用戶加入系統時,由於該用戶尚未消費記錄,無法給他任何有效的推薦。當新物品加入系統時,因為尚未有人消費過它,它也因此不會被推薦給任何人。這類問題,被稱為冷啟動問題。

數據稀疏還會導致能夠得到推薦的物品的比例(即覆蓋率)很低。覆蓋率指推薦系統可能會推薦的物品在整個物品中的占比。

為了解決數據稀疏性問題,人們提出了不少方法。降維技術,如奇異值分解(Singular Value Decomposition, SVD),移除了不具代表性和不重要的用戶和物品來降低 user-item 矩陣大小。信息檢索中用到的隱含語義指數(Latent Semantic Indexing, LSI)就用到了 SVD。相似的用戶,通過降維后的矩陣來尋找。但是當某些用戶和物品的信息經過降維后消失了,這樣針對他們的推薦效果也會變差。

2. 可擴展性

隨着用戶和物品的數據急劇增加,傳統的 CF 方法顯得有些力不從心了,消耗的計算資源在實踐上變得難以接受。在還有幾百萬乃至千萬用戶的系統中,即使是 O(n) 的復雜度都已經很大了。而且一些系統還要做到實時地根據用戶最新行為作出響應。

Item-based CF

基於物品的協同過濾算法(Item-based CF),給用戶推薦那些和他們之前喜歡的物品相似的物品。這種算法的前提是用戶會喜歡與他以前購買過的物品相似類型的物品。比如電影推薦場景下,用戶喜歡看《復仇者聯盟》,那么他就很可能喜歡看《美國隊長》。但是在應用商店的場景下,用戶已經安裝了高德地圖后,他就鮮有可能會再安裝其他地圖軟件。因此 User-based CF 和 Item-based CF 都要根據具體場景來決定是否適用。

物品相似度計算

Item-based CF 需要尋找與用戶喜歡的物品相似的其他物品。兩個物品的相似度可以從多個角度來考慮,對電影而言,電影的主題、演員陣容、類型都可以是相似的依據。但是在協同過濾里面,相似並不會考慮物品的具體屬性,而是從 user-item 矩陣出發的。這是協同過濾的優勢所在,它發掘出的相似關系,往往優於直接從物品的屬性出發,因為它依靠的是群體的智慧。

這里物品相似度計算的基本思想是,如果兩個物品同時被 N 個人評分過。而且這 N 個人對兩個物品的評價(比如評分)都完全相同。這說明這用戶們對兩個物品的評價是一樣的(要么兩個物品都喜歡,要么都不喜歡)。對於這 N 個人而言,他們對這兩個物品有相同的評價,評價有好有壞。這說明這兩個物品在很多人眼里,有相同的地位(有相似性)。考慮如果很多人都認為兩個物品很相似,那么這兩個物品往往就真的很相似。這里的相似,是用戶的感覺,這種相似也正是算法想要的。

用戶覺得《復仇者聯盟》和《美國隊長》相似,但是從這兩電影的屬性出發,很難衡量兩者的相似度。但觀眾對這兩部電影的評價,會說明這兩部電影有很大的相似性。因為很多漫威迷們看過這兩部電影,而且都給出了差不多的評價。

那么對於優秀的電影,比如《阿甘正傳》和《泰坦尼克號》,這兩部電影的評分都很高,幾乎看過的人都給 5 顆星,那么這兩部電影是不是就非常相似了呢?它們的相似性是大家都認為它們是好電影。但從屬性上看,他們沒有很大相似度。

下面列出了基於 user-item 矩陣計算相似度的幾種方法。

1. 基於向量的余弦相似度(Vector Cosine-Based Similarity)

兩個向量的夾角越小,說明其方法越相似,夾角越小,其余弦值就越大。在矩陣中,每個 item 都對應一個向量,這個向量是所有用戶對該 item 的評分。

要計算兩個 item 間的相似度,采用如下計算公式:

\[w_{i, j}=\cos (\vec{i}, \vec{j})=\frac{\vec{i} \bullet \vec{j}}{\|\vec{i}\| *\|\vec{j}\|} \]

其中 \(\vec{i}\)\(\vec{j}\) 是兩個 item 對應的向量。

2. 改進的余弦相似度

使用基本的余弦相似度存在一個缺點,沒有將用戶的打分尺度考慮進去。比如有的用戶的打分范圍在 1~5 之間,而有的用戶在 2~4 之間(即不太願意給最高分和最低分)。比如,有兩個用戶對兩個 item 的打過分, item 的向量分別為 (10, 2),(10, 3)。但 user1 習慣打高分,他認為最差的 item 也能得到 6 分,而 user2 較嚴格,4 分在他看來已經是很棒的電影了。

從下圖中可以看出,在計算兩個向量的夾角的時候,由於一個方向的值較大,兩個向量的夾角很小,user2 的評分作用被大大削弱,結果算出來的相似度會很高。

為了讓要求嚴格、打分低的用戶的數據也能起到作用,而不是被其他習慣於打高分的用戶的數據蓋掉,從評分中減掉平均值。可以看到,圖中右邊的兩個向量,角度差異變大了,即不那么相似了。

計算 item i 和 item j 的相似度時,減去了各個用戶的評分均值,這就消除了不同用戶評分標准不同的問題:

\[sim(i, j)=\frac{\sum_{u \in U}\left(R_{u, i}-\overline{R}_{u}\right)\left(R_{u, j}-\overline{R}_{u}\right)}{\sqrt{\sum_{u \in U}\left(R_{u, i}-\overline{R}_{u}\right)^{2}} \sqrt{\sum_{u \in U}\left(R_{u, j}-\overline{R}_{u}\right)^{2}}} \]

3. Correlation-Based Similarity

這里采用 Pearson correlation 來計算兩個 item 的相似度:

\[sim(i, j)=\frac{\sum_{u \in U}\left(R_{u, i}-\overline{R}_{i}\right)\left(R_{u, j}-\overline{R}_{j}\right)}{\sqrt{\sum_{u \in U}\left(R_{u, i}-\overline{R}_{i}\right)^{2}} \sqrt{\sum_{u \in U}\left(R_{u, j}-\overline{R}_{j}\right)^{2}}} \]

其中 \(U\) 是所有同時評價過的 item i 和 item j 的用戶的集合。\(R_{u,i}\) 是 user u 對 item i 的評價。而 \(\overline{R}_{i}\) 是所有用戶對 item i 的平均評價。

其中 U 是對兩個物品同時進行過評分的用戶的集合。

如上圖中所示,計算 item i 和 item j 的相似度,采用的是虛線框中的數據,因為只有這些數據被某個用戶共同評分過。

如果是計算 user 的相似度,那么減去的就是用戶評分的平均值。這是為了考慮到不同用戶評分時候的嚴格程度是不同的。如下圖:

兩個用戶雖然給不同的電影評分都不同,但他們兩者的趨勢是一致的。

而計算 item 間相似度時,這里減去 item 的評分均值,是為了突出不同用戶的評分差異。比如用戶對這兩部電影的評分為 10 和 9 (滿分10分),看上去這用戶對這部電影的評價都很高。但是如果該電影的平均評分為 9.5 分,那么這兩個用戶評分的差異就很大了。

推薦結果的計算

知道了如何計算 item 間的相似度,面對的其他問題是,計算那個 item 與其他 item 的響度,找到了相似 item 之后如何產生推薦結果。

對於用戶未評分過的 item i,即圖中標黑色的 item,首先找出與 item i 最相似的 k 個 item(這個可以提前計算好)。然后從這 K 個 item 中找出用戶評分過的物品,即圖中標 R 的 item.

1. 加權和

為了生成推薦,需要找出一組他沒有評價過的 item,預測出他對這些 item 的評分,然后取預測評分最高的 item 作為推薦。

用戶評價過的 item 與 item i 之間存在一個相似度,計算 item i 的評分的方法是,用用戶的對 item N 的評價與 item i 和 item N 之間的相似度做加權求和。

下面的式子中,N 為與 item i 相似的且用戶評價過的 item,其評分為 \(R_{u, N}\)

\[P_{u, i}=\frac{\sum_{\text {all similar items}, N} \left(s_{i, N} * R_{u, N}\right)}{\sum_{\text {all similar items}, N }\left(\left|s_{i, N}\right|\right)} \]

分母上進行了歸一化,保證計算出的評分在合適的區間內。

2. Regression

前面的方法是使用評分和相似度來加權求出對未評分物品的評分。直接使用用戶 u 的評分 \(R_{u, N}\) 顯得有些草率, Regression 的想法是構造兩個 item 的評分之間的關系。

\[\overline{R}_{N}^{\prime}=\alpha \overline{R}_{i}+\beta+\epsilon \]

訓練一個回歸模型,讓 item N 的評分,可以通過 item i 的評分計算出來。

說實在的,回歸這塊我沒有看明白,不知道我理解的對不對

這里提到的推薦策略,是對每個 item i 找到相似 item,然后再找出用戶評價過的 item,然后給每個 item 估計一個評分。在實際推薦的時候,顯然可以從用戶已經評分過的 item 出發。

系統性能

Item 相對 User 而言更加穩定,User 可能在一天內就會產生很多與 item 的交互行為,這會大大影響 User 的相似度計算,而 Item 則沒有這個問題。因此 Item 的相似度可以預先離線計算好,然后使用很長一段時間。而 User 的相似度則需要更加頻繁地離線計算,或者實時計算。

計算 item 的相似 item 需要的時間復雜度為 \(O(n^2)\),然后給每個 item 保留最相似的 K 個 item。

總結

本文講述了經典的基於物品的協同過濾算法的基本過程,這是我學習推薦系統時閱讀的第一篇論文。第一次閱讀是 2018 年 5 月份,那時候很多地方理解的不到位,今天重新讀了一遍,並將當時以及之后記錄的筆記進行了整理。

本文對 item-based CF 的推薦結果具體產生過程描述的不是特別清楚,應該在補充閱讀 2003 年亞馬遜發布的那篇論文 - Item-to-Item Collaborative Filtering。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM