協同過濾的實現
1、收集用戶偏好及標准化處理
要從用戶的行為和偏好中發現規律,並基於此給予推薦,如何收集用戶的偏好信息成為系統推薦效果最基礎的決定因素。用戶有很多方式向系統提供自己的偏好信息,而且不同的應用也可能大不相同。
以上列舉的用戶行為都是比較通用的,推薦引擎設計人員可以根據自己應用的特點添加特殊的用戶行為,並用他們表示用戶對物品的喜好。在一般應用中,我們提取的用戶行為一般都多於一種,關於如何組合這些不同的用戶行為,基本上有以下兩種方式:
- 將不同的行為分組:一般可以分為“查看”和“購買”等等,然后基於不同的行為,計算不同的用戶 / 物品相似度。比如:“購買了該圖書的人還購買了 ...”,“查看了圖書的人還查看了 ...”
- 根據不同行為反映用戶喜好的程度將它們進行加權,得到用戶對於物品的總體喜好。一般來說,顯式的用戶反饋比隱式的權值大,但比較稀疏,畢竟進行顯示反饋的用戶是少數;同時相對於“查看”,“購買”行為反映用戶喜好的程度更大,但這也因應用而異。
2、數據減噪和歸一化
收集了用戶行為數據,我們還需要對數據進行一定的預處理,其中最核心的工作就是:減噪和歸一化。
- 減噪:用戶行為數據是用戶在使用應用過程中產生的,它可能存在大量的噪音和用戶的誤操作,我們可以通過經典的數據挖掘算法過濾掉行為數據中的噪音,這樣可以是我們的分析更加精確。
- 歸一化:如前面講到的,在計算用戶對物品的喜好程度時,可能需要對不同的行為數據進行加權。但可以想象,不同行為的數據取值可能相差很 大,比如,用戶的查看數據必然比購買數據大的多,如何將各個行為的數據統一在一個相同的取值范圍中,從而使得加權求和得到的總體喜好更加精確,就需要我們 進行歸一化處理。最簡單的歸一化處理,就是將各類數據除以此類中的最大值,以保證歸一化后的數據取值在 [0,1] 范圍中。
進行的預處理后,根據不同應用的行為分析方法,可以選擇分組或者加權處理,之后我們可以得到一個用戶偏好的二維矩陣,一維是用戶列表,另一維是物品列表,值是用戶對物品的偏好,一般是 [0,1] 或者 [-1, 1] 的浮點數值。
3、找到相似的用戶或物品
當已經對用戶行為進行分析得到用戶喜好后,我們可以根據用戶喜好計算相似用戶和物品,然后基於相似用戶或者物品進行推薦,這就是最典型的 CF 的兩個分支:基於用戶的 CF 和基於物品的 CF。這兩種方法都需要計算相似度。關於相似度的計算,現有的幾種基本方法都是基於向量(Vector)的,其實也就是計算兩個向量的距離,距離越近相似度越大。在推薦的場景中,在用 戶 - 物品偏好的二維矩陣中,我們可以將一個用戶對所有物品的偏好作為一個向量來計算用戶之間的相似度,或者將所有用戶對某個物品的偏好作為一個向量來計算物品之間的相似度。
3.1 常用的相似度計算方法
- 歐幾里德距離(Euclidean Distance)
- 皮爾遜相關系數(Pearson Correlation Coefficient)
- Tanimoto 系數(Tanimoto Coefficient)
3.2 相似鄰居的計算
- 固定數量的鄰居:K-neighborhoods 或者 Fix-size neighborhoods
- 基於相似度門檻的鄰居:Threshold-based neighborhoods
4、計算基於用戶的協同過濾(User CF)
例子:
對於用戶 A,根據用戶的歷史偏好,這里只計算得到一個鄰居 - 用戶 C,然后將用戶 C 喜歡的物品 D 推薦給用戶 A。
5、計算基於物品的協同過濾(Item CF)
例子:
對於物品 A,根據所有用戶的歷史偏好,喜歡物品 A 的用戶都喜歡物品 C,得出物品 A 和物品 C 比較相似,而用戶 C 喜歡物品 A,那么可以推斷出用戶 C 可能也喜歡物品 C。