推薦演算法總結Recommendation

    目前為止,我們常推薦演算法有好多種,比較常見的有協同過濾(Collaborative Filtering Recommendations)這個在Mahout裡的ItemCF和UserCF比較常用,還有一種比較新的執行在Spark上的交替性最小二乘ALS也是一種協同過濾的演算法,但是其它的推薦演算法也有很多,在日常中也用的比較多,就做個總結吧。

1、基於內容的推薦演算法(Content Based Recommendation 簡稱CB)

這種推薦是從資訊檢索,和文字檢索裡來的,個人理解為是搜尋引擎裡的搜尋排行。TD-IDF計算文章的詞頻和反文件頻率計算出關鍵詞在文件中的權值,最後構成某篇文章的特徵向量。基於該文章的特徵向量和其它文章的特徵向量進行餘弦相似度計算,從而返回最匹配相似的文章來給予推薦。

可以簡單概括為: 抽取item的特徵向量 -> 計算餘弦相似度 -> 推薦

item可以是使用者過去喜歡的電影,商品,問題等等。

基於內容的過濾建立了每個商品、使用者的屬性(或是組合)用來描述其本質。比如對於電影來說,可能包括演員、票房程度等。 使用者屬性資訊可能包含地理資訊、問卷調查的回答等。這些屬性資訊關聯使用者使用者後即可達到匹配商品的目的。 當然基於內容的策略極有可能因為資訊收集的不便而導致無法實施。

CB的優點:

1. 使用者之間的獨立性(User Independence):既然每個使用者的profile都是依據他本身對item的喜好獲得的,自然就與他人的行為無關。而CF剛好相反,CF需要利用很多其他人的資料。CB的這種使用者獨立性帶來的一個顯著好處是別人不管對item如何作弊(比如利用多個賬號把某個產品的排名刷上去)都不會影響到自己。

2. 好的可解釋性(Transparency):如果需要向使用者解釋為什麼推薦了這些產品給他,你只要告訴他這些產品有某某屬性,這些屬性跟你的品味很匹配等等。

3. 新的item可以立刻得到推薦(New Item Problem):只要一個新item加進item庫,它就馬上可以被推薦,被推薦的機會和老的item是一致的。而CF對於新item就很無奈,只有當此新item被某些使用者喜歡過(或打過分),它才可能被推薦給其他使用者。所以,如果一個純CF的推薦系統,新加進來的item就永遠不會被推薦:( 。

CB的缺點:

1. item的特徵抽取一般很難(Limited Content Analysis):如果系統中的item是文件(如個性化閱讀中),那麼我們現在可以比較容易地使用資訊檢索裡的方法來“比較精確地”抽取出item的特徵。但很多情況下我們很難從item中抽取出準確刻畫item的特徵,比如電影推薦中item是電影,社會化網路推薦中item是人,這些item屬性都不好抽。其實,幾乎在所有實際情況中我們抽取的item特徵都僅能代表item的一些方面,不可能代表item的所有方面。這樣帶來的一個問題就是可能從兩個item抽取出來的特徵完全相同,這種情況下CB就完全無法區分這兩個item了。比如如果只能從電影裡抽取出演員、導演,那麼兩部有相同演員和導演的電影對於CB來說就完全不可區分了。

2. 無法挖掘出使用者的潛在興趣(Over-specialization):既然CB的推薦只依賴於使用者過去對某些item的喜好,它產生的推薦也都會和使用者過去喜歡的item相似。如果一個人以前只看與推薦有關的文章,那CB只會給他推薦更多與推薦相關的文章,它不會知道使用者可能還喜歡數碼。

3. 無法為新使用者產生推薦(New User Problem):新使用者沒有喜好歷史,自然無法獲得他的profile,所以也就無法為他產生推薦了。當然,這個問題CF也有。

2、基於協同過濾的推薦演算法(Collaborative Filtering Recommendations)

基於協同過濾的推薦,可以理解為基於使用者行為的推薦。依賴於使用者過去的行為的協同過濾,行為可以是過往的交易行為和商品評分,這種方式不需要顯性的屬性資訊。協同過濾通過分析使用者和商品的內在關係來識別新的 user-item 關係。

協同過濾領域主要的兩種方式是最近鄰(neighborhood)方法和潛在因子(latent factor)模型。最近鄰方法主要集中在 item 的關係或者是 user 的關係,是比較基礎的過濾引擎。而潛在因子模型並不是選取所有的關係,而是通過矩陣分解的技術將共現矩陣的分解,比如提取20-100個因子,來表示原始矩陣資訊(可以對比上面提到的音樂基因,只不過潛在因子模型是通過計算機化的實現)。

最鄰近:

基於使用者的協同過濾演算法: 基於一個這樣的假設“跟你喜好相似的人喜歡的東西你也很有可能喜歡。”所以基於使用者的協同過濾主要的任務就是找出使用者的最近鄰居,從而根據最近鄰
居的喜好做出未知項的評分預測。

item based CF 基於物品相似的協同過濾。

user based CF 基於使用者相似的協同過濾。

潛在引子模型:

SVD奇異值分解矩陣

ALS交替最小二乘

總結為: 使用者評分 -> 計算最鄰近  -> 推薦

3、演算法對比

各種推薦方法都有其各自的優點和缺點,見表1。
表1 主要推薦方法對比
推薦方法 優點 缺點
基於內容推薦 推薦結果直觀,容易解釋;

不需要領域知識
新使用者問題;

複雜屬性不好處理;
要有足夠資料構造分類器
協同過濾推薦 新異興趣發現、不需要領域知識;

隨著時間推移效能提高;
推薦個性化、自動化程度高;
能處理複雜的非結構化物件
稀疏問題;

可擴充套件性問題;
新使用者問題;
質量取決於歷史資料集;
系統開始時推薦質量差;
基於規則推薦 能發現新興趣點;

不要領域知識
規則抽取難、耗時;

產品名同義性問題;
個性化程度低;
基於效用推薦 無冷開始和稀疏問題;

對使用者偏好變化敏感;
能考慮非產品特性
使用者必須輸入效用函式;

推薦是靜態的,靈活性差;
屬性重疊問題;
基於知識推薦 能把使用者需求對映到產品上;

能考慮非產品屬性
知識難獲得;

推薦是靜態的

四、 Mahout裡的推薦演算法

五、總結

    沒有最那一種演算法能解決所有問題,混合演算法有效結合每個演算法的利弊才能達到最好的效果。

一個比較成功的內容過濾是 pandora.com 的音樂基因專案,一個訓練有素的音樂分析師會對每首歌裡幾百個獨立的特徵進行打分。這些得分幫助pandora推薦歌曲。還有一種基於內容的過濾是基於使用者人口統計特徵的推薦,先根據人口統計學特徵將使用者分成若干個先驗的類。對後來的任意一個使用者,首先找到他的聚類,然後給他推薦這個聚類裡的其他使用者喜歡的物品。這種方法的雖然推薦的粒度太粗,但可以有效解決註冊使用者的冷啟動(Cold
Start)的問題。

參考文獻:

http://baike.baidu.com/link?url=En0sSiwP9wghUjBkT6BxvVODH1YbwhGqQ7ECEuesuARi_Hcz1G25WMlm3Q0actt6LRyNd00TmY5MBH3u76hQM_

http://www.cnblogs.com/breezedeus/archive/2012/04/10/2440488.html

http://www.bjt.name/2013/06/recommendation-system/

http://hnote.org/big-data/mahout/mahout-movielens-example-matrix-factorization

http://blog.fens.me/mahout-recommendation-api/