推薦引擎概述(2015/4/21)

1 分類

1.1 不同的用戶推薦是否相同

1.1.1 根據大衆行爲的推薦引擎

對每個用戶都給出同樣的推薦,這些推薦可以是靜態的由系統管理員人工設定的,或者基於系統所有用戶的反饋統計計算出的當下比較流行的物品,比如TOPN推薦。

1.1.2 個性化推薦引擎

對不同的用戶,根據他們的口味和喜好給出更加精確的推薦,這時,系統需要了解需推薦內容和用戶的特質,或者基於社會化網絡,通過找到與當前用戶相同喜好的用戶,實現推薦。

1.2 根據數據源

1.2.1 基於內容的推薦

根據推薦物品或內容的元數據,發現物品或者內容的相關性。

特點:

(1)需要對物品進行分析和建模,推薦的質量依賴於對物品模型的完整和全面程度。

(2)沒有冷啓動的問題。

(3)適用於類新聞推薦的應用。這類應用的特點是物品的數量遠遠大於用戶的數量,計算量小。

1.2.2 基於協同過濾的推薦

根據用戶的行爲,包括其它用戶的行爲(這就是協同的意思),發現用戶或物品之間的相關性。

1.3 根據推薦模型的建立方式

1.3.1 基於物品或用戶

基於物品和用戶本身的,這種推薦引擎將每個用戶和每個物品都當作獨立的實體,預測每個用戶對於每個物品的喜好程度,這些信息往往是用一個二維矩陣描述的。

1.3.2 基於關聯規則

基於關聯規則的推薦(Rule-basedRecommendation):挖掘一些數據的依賴關係,典型的場景就是購物籃問題,通過關聯規則的挖掘,我們可以找到哪些物品經常被同時購買,或者用戶購買了一些物品後通常會購買哪些其他的物品,當我們挖掘出這些關聯規則之後,我們可以基於這些規則給用戶進行推薦。

1.3.3 基於模型

基於模型的推薦(Model-basedRecommendation):這是一個典型的機器學習的問題,可以將已有的用戶喜好信息作爲訓練樣本,訓練出一個預測用戶喜好的模型,這樣以後用戶在進入系統,可以基於此模型計算推薦。這種方法的問題在於如何將用戶實時或者近期的喜好信息反饋給訓練好的模型,從而提高推薦的準確度。

1.4 混合的推薦機制

在現行的 Web 站點上的推薦往往都不是單純只採用了某一種推薦的機制和策略,他們往往是將多個方法混合在一起,從而達到更好的推薦效果。關於如何組合各個推薦機制,這裏講幾種比較流行的組合方法。

加權的混合(Weighted Hybridization): 用線性公式(linear formula)將幾種不同的推薦按照一定權重組合起來,具體權重的值需要在測試數據集上反覆實驗,從而達到最好的推薦效果。

切換的混合(Switching Hybridization):前面也講到,其實對於不同的情況(數據量,系統運行狀況,用戶和物品的數目等),推薦策略可能有很大的不同,那麼切換的混合方式,就是允許在不同的情況下,選擇最爲合適的推薦機制計算推薦。

分區的混合(Mixed Hybridization):採用多種推薦機制,並將不同的推薦結果分不同的區顯示給用戶。其實,Amazon,噹噹網等很多電子商務網站都是採用這樣的方式,用戶可以得到很全面的推薦,也更容易找到他們想要的東西。

分層的混合(Meta-Level Hybridization): 採用多種推薦機制,並將一個推薦機制的結果作爲另一個的輸入,從而綜合各個推薦機制的優缺點,得到更加準確的推薦。

2 應用

2.1 亞馬遜

Amazon作爲推薦引擎的鼻祖。對應於上面介紹的各種推薦機制,Amazon 採用的是分區的混合的機制,並將不同的推薦結果分不同的區顯示給用戶

Amazon利用可以記錄的所有用戶在站點上的行爲,根據不同數據的特點對它們進行處理,並分成不同區爲用戶推送推薦:

·      今日推薦 (Today's Recommendation For You): 通常是根據用戶的近期的歷史購買或者查看記錄,並結合時下流行的物品給出一個折中的推薦

·      新產品的推薦 (New For You): 採用了基於內容的推薦機制 (Content-based Recommendation),將一些新到物品推薦給用戶。在方法選擇上由於新物品沒有大量的用戶喜好信息,所以基於內容的推薦能很好的解決這個“冷啓動”的問題

·      捆綁銷售 (Frequently Bought Together): 採用數據挖掘技術對用戶的購買行爲進行分析,找到經常被一起或同一個人購買的物品集,進行捆綁銷售,這是一種典型的基於項目的協同過濾推薦機制

·      別人購買 / 瀏覽的商品 (CustomersWho Bought/See This Item Also Bought/See): 這也是一個典型的基於項目的協同過濾推薦的應用,通過社會化機制用戶能更快更方便的找到自己感興趣的物品

值得一提的是,Amazon 在做推薦時,設計和用戶體驗也做得特別獨到:

Amazon利用有它大量歷史數據的優勢,量化推薦原因。

·      基於社會化的推薦,Amazon 會給你事實的數據,讓用戶信服,例如:購買此物品的用戶百分之多少也購買了那個物品

·      基於物品本身的推薦,Amazon 也會列出推薦的理由,例如:因爲你的購物框中有 ***,或者因爲你購買過 ***,所以給你推薦類似的 ***

另外,Amazon 很多推薦是基於用戶的profile 計算出來的,用戶的 profile 中記錄了用戶在 Amazon 上的行爲,包括看了那些物品,買了那些物品,收藏夾和 wish list 裏的物品等等,當然 Amazon 裏還集成了評分等其他的用戶反饋的方式,它們都是 profile 的一部分,同時,Amazon 提供了讓用戶自主管理自己profile 的功能,通過這種方式用戶可以更明確的告訴推薦引擎他的品味和意圖是什麼。

2.2 豆瓣

豆瓣是國內做的比較成功的社交網站,它以圖書,電影,音樂和同城活動爲中心,形成一個多元化的社交網絡平臺,自然推薦的功能是必不可少的,下面我們看看豆瓣是如何推薦的。

當你在豆瓣電影中將一些你看過的或是感興趣的電影加入你看過和想看的列表裏,併爲它們做相應的評分,這時豆瓣的推薦引擎已經拿到你的一些偏好信息,那麼它將給你展示如圖 8 的電影推薦。

豆瓣的推薦是通過豆瓣猜,爲了讓用戶清楚這些推薦是如何來的,豆瓣還給出了豆瓣猜的一個簡要的介紹。

你的個人推薦是根據你的收藏和評價自動得出的,每個人的推薦清單都不同。你的收藏和評價越多,豆瓣給你的推薦會越準確和豐富。每天推薦的內容可能會有變化。隨着豆瓣的長大,給你推薦的內容也會越來越準。”

這一點讓我們可以清晰明瞭的知道,豆瓣必然是基於社會化的協同過濾的推薦,這樣用戶越多,用戶的反饋越多,那麼推薦的效果會越來越準確。

相對於 Amazon 的用戶行爲模型,豆瓣電影的模型更加簡單,就是看過想看,這也讓他們的推薦更加專注於用戶的品味,畢竟買東西和看電影的動機還是有很大不同的。

另外,豆瓣也有基於物品本身的推薦,當你查看一些電影的詳細信息的時候,他會給你推薦出喜歡這個電影的人也喜歡的電影”。

3 算法

3.1 基於用戶 VS 基於物品

前面介紹了 User CF Item CF 的基本原理,下面我們分幾個不同的角度深入看看它們各自的優缺點和適用場景:

·      計算複雜度

Item CF User CF 是基於協同過濾推薦的兩個最基本的算法,User CF 是很早以前就提出來了,Item CF 是從 Amazon 的論文和專利發表之後(2001 年左右)開始流行,大家都覺得 Item CF 從性能和複雜度上比 User CF 更優,其中的一個主要原因就是對於一個在線網站,用戶的數量往往大大超過物品的數量,同時物品的數據相對穩定,因此計算物品的相似度不但計算量較小,同時也不必頻繁更新。但我們往往忽略了這種情況只適應於提供商品的電子商務網站,對於新聞,博客或者微內容的推薦系統,情況往往是相反的,物品的數量是海量的,同時也是更新頻繁的,所以單從複雜度的角度,這兩個算法在不同的系統中各有優勢,推薦引擎的設計者需要根據自己應用的特點選擇更加合適的算法。

·      適用場景

在非社交網絡的網站中,內容內在的聯繫是很重要的推薦原則,它比基於相似用戶的推薦原則更加有效。比如在購書網站上,當你看一本書的時候,推薦引擎會給你推薦相關的書籍,這個推薦的重要性遠遠超過了網站首頁對該用戶的綜合推薦。可以看到,在這種情況下,Item CF 的推薦成爲了引導用戶瀏覽的重要手段。同時 Item CF 便於爲推薦做出解釋,在一個非社交網絡的網站中,給某個用戶推薦一本書,同時給出的解釋是某某和你有相似興趣的人也看了這本書,這很難讓用戶信服,因爲用戶可能根本不認識那個人;但如果解釋說是因爲這本書和你以前看的某本書相似,用戶可能就覺得合理而採納了此推薦。

研究推薦引擎的學者們在相同的數據集合上分別用 User CF Item CF 計算推薦結果,發現推薦列表中,只有 50% 是一樣的,還有 50% 完全不同。但是這兩個算法確有相似的精度,所以可以說,這兩個算法是很互補的。

關於推薦的多樣性,有兩種度量方法:

第一種度量方法是從單個用戶的角度度量,就是說給定一個用戶,查看系統給出的推薦列表是否多樣,也就是要比較推薦列表中的物品之間兩兩的相似度,不難想到,對這種度量方法,Item CF 的多樣性顯然不如 User CF 的好,因爲 Item CF 的推薦就是和以前看的東西最相似的。

第二種度量方法是考慮系統的多樣性,也被稱爲覆蓋率 (Coverage),它是指一個推薦系統是否能夠提供給所有用戶豐富的選擇。在這種指標下,Item CF 的多樣性要遠遠好於 User CF, 因爲 User CF 總是傾向於推薦熱門的,從另一個側面看,也就是說,Item CF 的推薦有很好的新穎性,很擅長推薦長尾裏的物品。所以,儘管大多數情況,Item CF 的精度略小於 User CF但如果考慮多樣性,Item CF 卻比 User CF 好很多。

如果你對推薦的多樣性還心存疑惑,那麼下面我們再舉個實例看看 User CF Item CF 的多樣性到底有什麼差別。首先,假設每個用戶興趣愛好都是廣泛的,喜歡好幾個領域的東西,不過每個用戶肯定也有一個主要的領域,對這個領域會比其他領域更加關心。給定一個用戶,假設他喜歡 3 個領域 A,B,CA 是他喜歡的主要領域,這個時候我們來看 User CF Item CF 傾向於做出什麼推薦:如果用 User CF, 它會將 A,B,C 三個領域中比較熱門的東西推薦給用戶;而如果用 ItemCF,它會基本上只推薦 A 領域的東西給用戶。所以我們看到因爲 User CF 只推薦熱門的,所以它在推薦長尾裏項目方面的能力不足;而 Item CF 只推薦 A 領域給用戶,這樣他有限的推薦列表中就可能包含了一定數量的不熱門的長尾物品,同時 Item CF 的推薦對這個用戶而言,顯然多樣性不足。但是對整個系統而言,因爲不同的用戶的主要興趣點不同,所以系統的覆蓋率會比較好。

從上面的分析,可以很清晰的看到,這兩種推薦都有其合理性,但都不是最好的選擇,因此他們的精度也會有損失。其實對這類系統的最好選擇是,如果系統給這個用戶推薦 30 個物品,既不是每個領域挑選 10 個最熱門的給他,也不是推薦 30 A 領域的給他,而是比如推薦 15 A 領域的給他,剩下的 15 個從 B,C 中選擇。所以結合 User CF Item CF 是最優的選擇,結合的基本原則就是當採用 Item CF 導致系統對個人推薦的多樣性不足時,我們通過加入 User CF 增加個人推薦的多樣性,從而提高精度,而當因爲採用 User CF 而使系統的整體多樣性不足時,我們可以通過加入 Item CF 增加整體的多樣性,同樣同樣可以提高推薦的精度。

3.2  Apache Mahout

Apache Mahout 是 Apache Software Foundation (ASF) 旗下的一個開源項目,提供一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序,並且,在 Mahout 的最近版本中還加入了對 Apache Hadoop 的支持,使這些算法可以更高效的運行在雲計算環境中

支持基於用戶、基於物品、slope one算法。

3.2.1  slope One算法

3.2.1.1基本slope one算法

slope one的基本算法很簡單。 例, 用戶X, Y和A都對Item1打了分。 同時用戶X,Y還對Item2打了分, 用戶A對Item2可能會打多少分呢?

User

Rating to Item 1

Rating to Item 2

X

5

3

Y

4

3

A

4

?

圖1

根據slope one算法, 應該是:4 +((3-5) + (3-4)) / 2 = 2.5。

解釋一下。用戶X對Item1的rating是5, 對Item2的rating是3, 那麼他可能認爲Item2應該比Item1少2分。 同時用戶Y認爲Item2應該比Item1少1分。 據此我們知道所有對Item1和Item2都打了分的用戶認爲Item2會比Item1平均少(2+1)/2=1.5分。 所以我們有理由推薦用戶A可能會對Item2打(4+(-1.5))=2.5分。

很簡單是不是? 找到對Item1和Item2都打過分的用戶, 算出rating差的平均值, 這樣我們就能推測出對Item1打過分的用戶A對Item2的可能rating, 並據此向A用戶推薦新項目。這裏我們能看出slope one算法的一個很大的優點, 在只有很少的數據時候也能得到一個相對準確的推薦, 這一點可以解決冷啓動(Cold Start)問題。

3.2.1.2加權slope one算法(weighted slope one)

如果有100個用戶對Item1和Item2都打過分, 有1000個用戶對Item3和Item2也打過分, 顯然這兩個rating差的權重是不一樣的。 因此我們的計算方法是

3.2.1.3雙極slope one算法(bi-polar slope one)

user

item1

item2

item3

item4

平均值

A

5

7

9

8

7.25

B

6

2

10

2

5

C

1

3

4

10

4.5

D

10

1

6

?

4.25

圖 2

雙極slope one算法是在加權slope one算法上進行了優化。

以userA爲例,userA的評分的平均值爲(5+7+9+8)/4=7.25,據此我把item分爲兩類,like item和dislike items。其中like item是評分小於平均值7.25的item,包括item1(5);dislikeitem是評分小於均分7.25的item,包括item2(7)、item3(9)、item4(10)。

 

同理userB,likeitem包括item1、item3;dislike item包括item2、item4。

userC,like item包括item4;dislikeitem包括item1,item2,item3。

userD,like item包括item1、item3;dislike item包括item2。

計算rating差的兩個item要麼均是like item,要麼均是dislike item,否則過濾掉。例如計算 rating 3 to 4。在userC的評分中,item3是dislike item 而item4是like item;userB評分中,item3是like item而item4是dislikeitem;userA評分中,item3和item4均是like item。所以計算rating 3 to 4 時,只需關注userA。rating 3 to 4 = 6 + (8 - 9)

同理,計算item 2 to 4,需關注userB。所以item 2 to 4 =1 + (2 - 2)

計算item 1 to 4時,沒有符合條件的user。最終我們估計userD對item4的評分是

(1* rating 3 to4 + 1* item 2 to 4 + 0* item 1 to 4) / (1+1+0)。

3.2.1.4 總結

這就是 Slope One 推薦的基本原理,它將用戶的評分之間的關係看作簡單的線性關係:Y = mX + b; m = 1 時就是Slope One,也就是我們剛剛展示的基本slope one算法例子。

該算法的簡潔特性使它們的實現簡單而高效,而且其精確度與其它複雜費時的算法相比也不相上下。該系列算法也被用來改進其它算法。

3.3 相似度的計算

加入有兩個用戶,user1和user2,這兩個用戶對物品評分如下表。

 

Item 1

Item 2

Item 3

User1

5

4

1

User2

3

5

1

3.3.1 歐幾里德距離(Euclidean Distance)

最初用於計算歐幾里德空間中兩個點的距離,假設 xy n 維空間的兩個點,它們之間的歐幾里德距離是:

可以看出,當 n=2 時,歐幾里德距離就是平面上兩個點的距離。

當用歐幾里德距離表示相似度,一般採用以下公式進行轉換:距離越小,相似度越大。

3.3.2  cosine相似度

3.3.3 皮爾遜相關係數(Pearson CorrelationCoefficient)

我們需要考慮用戶間的評分習慣的差異,d用戶可能喜歡打高分,e用戶喜歡打低分,f用戶喜歡亂打分。

pearson其實做的事情就是先把兩個向量都減去他們的平均值,然後再計算cosine值。

3.3.4 Tanimoto 係數(Tanimoto Coefficient)

Tanimoto 係數也稱爲 Jaccard 係數,是 Cosine 相似度的擴展,也多用於計算文檔數據的相似度:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章