個性化推薦技術

如果說過去的十年是搜索技術大行其道的十年,那麼個性化推薦技術將成爲未來十年中最重要的革新之一。目前幾乎所有大型的電子商務系統,如Amazon、CDNOW、Netflix等,都不同程度地使用了各種形式的推薦系統。而近來以“發現”爲核心的網站正開始在互聯網上嶄露頭角,比如側重於音樂推薦的八寶盒,側重於圖書推薦的豆瓣等等。
 
那麼,一個好的推薦系統需要滿足什麼目標呢?
個性化推薦系統必須能夠基於用戶之前的口味和喜好提供相關的精確的推薦,而且這種口味和喜歡的收集必須儘量少的需要用戶的勞動。推薦的結果必須能夠實時計算,這樣才能夠在用戶離開網站前之前獲得推薦的內容,並且及時的對推薦結果作出反饋。實時性也是推薦系統與通常的數據挖掘技術顯著不同的一個特點。
 
一個完整的推薦系統由三部分構成:行爲記錄模塊、模型分析模塊和推薦模塊。行爲記錄模塊負責記錄能夠體現用戶喜好的行爲,比如購買、下載、評分等。這部分看起來簡單,其實需要非常仔細的設計。比如說購買和評分這兩種行爲表達潛在的喜好程度就不盡相同完善的行爲記錄需要能夠綜合多種不同的用戶行爲,處理不同行爲的累加。模型分析模塊的功能則實現了對用戶行爲記錄的分析,採用不同算法建立起模型描述用戶的喜好信息。最後,通過推薦模塊,實時的從內容集篩選出目標用戶可能會感興趣的內容推薦給用戶。因此,除了推薦系統本身,爲了實現推薦,還需要一個可供推薦的內容集。比如,對於音樂推薦系統來說,一個音樂庫就是這樣的內容集。我們對內容集本身需要提供的信息要求非常低,在經典的協同過濾算法下,內容集甚至只需要提供ID就足夠。而對於基於內容的推薦系統來說,由於往往需要對內容進行特徵抽取和索引,我們就會需要提供更多的領域知識和內容屬性。這種情況下,還是拿音樂舉例,歌手、流派之類的屬性和音頻信息就成爲必需的內容集信息。

迄今爲止在個性化推薦系統中,協同過濾(Collaborative Filtering)技術是應用最成功的技術。目前國內外互聯網上有許多大型網站已經應用這項技術爲用戶更加智能的推薦內容。如果你想要研究協同過濾,一定不能錯過MovieLens(http://movielens.umn.edu/)。它是協同過濾最著名的研究項目之一。
 
第一代的協同過濾技術,又被稱爲基於用戶(User-based)的協同過濾。基於用戶的協同過濾,基本原理是基於用戶行爲選擇的相關性。用戶的行爲選擇這裏指的是下載、購買、評價等等能夠顯式或者隱式體現出用戶喜好的行爲。在一個典型的基於協同過濾技術的推薦系統中,輸入數據通常可以表述爲一個m×n 的用戶內容矩陣R,m是用戶數,n是內容數。矩陣的值與內容的類型有關,通常由行爲記錄模塊決定。如果內容是網上書店中的書,則矩陣的值可以表示用戶購買與否,例如1表示購買,0表示沒有購買;或者表示用戶對它的評價有多高,這樣的評價值就可以有幾個等級,比如常見的1~5級評價制。
 
基於用戶的協同過濾,通過比較目標用戶的一系列行爲選擇和其他用戶之間的相似性,來識別出一組相互具有類似喜好的用戶,又可以稱爲“同好”。一旦系統能夠識別一個用戶的同好用戶,就能夠將他們最感興趣的內容作爲當前用戶的推薦結果推薦給這個用戶。也就是說,以前的行爲選擇與你相似的用戶,在以後的行爲中很可能也會和你相似。因此將這些用戶做爲基準來向你推薦內容。
 
協同過濾的核心問題是尋找與目標用戶興趣相近的一組用戶。這種相似用戶通常被稱爲最近鄰居(Nearest Neighbor)。用戶之間的相似度是通過比較兩個用戶的行爲選擇矢量得到的。目前,比較行爲選擇矢量的相似度計算方法有許多種,比較經典的算法包括泊松相關係數(Person Correlation Coefficient)和餘弦相似性(Cosine-based Similarity)。
 
“最近鄰居”產生後,我們就能夠計算得到用戶最可能感興趣的內容集(也叫做TopN推薦集)。爲了得到推薦集,分別統計“最近鄰居”中的用戶對不同內容的興趣度,取其中排在最前面的內容作爲推薦集。下面是一個簡化的示例:假如用戶張三有兩個同好:李四和王五。
 
張三喜歡看電影A;
李四喜歡看電影A,B,C和D;
王五喜歡看電影A,B,D,E和F;
 
這樣,推薦系統就能夠過濾出相似用戶都喜歡的電影B和D作爲張三最可能也會喜歡的電影推薦給張三。
 
基於用戶的協同過濾技術在個性化推薦系統中獲得了極大的成功,但它有自身的侷限性。推薦集的產生方式意味着一個內容只有已經被用戶選擇(購買)後纔有機會被推薦給其他用戶。對於一個網上書店來說,新上架的書因爲還沒有被相當數量的用戶購買或者評價的記錄,便很少有機會被用戶的“最近鄰居”篩選進入推薦集。這個問題,也被稱之爲協同過濾的“冷啓動”問題。
 
此外,因爲計算用戶的相似度時,是通過將目標用戶的歷史行爲記錄與其他每一個用戶的記錄相比較得出的,所以對於一個現實的推薦系統來說,擴展性將成爲非常嚴重的問題。設想一下,對於一個擁有上百萬用戶的網站來說,每計算一個用戶都將涉及到上百萬次的比較,更不要說其中會帶來的大量數據庫IO操作的開銷。
 
於是第二代基於內容項(Item-based)的協同過濾技術就產生了。與基於用戶的技術不同的是,這種方法比較的是內容項與內容項之間的相似度。Item-based 方法同樣需要進行三個步驟獲得推薦:1)得到內容項(Item)的歷史評分數據;2)針對內容項進行內容項之間的相似度計算,找到目標內容項的“最近鄰居”;3)產生推薦。這裏內容項之間的相似度是通過比較兩個內容項上的用戶行爲選擇矢量得到的。舉個例子,假設用戶和內容項如下:
 
  電影A 電影B 電影C 電影D
張三 喜歡      
李四 喜歡 喜歡 喜歡 喜歡
王五 不喜歡   不喜歡 不喜歡
趙六 喜歡 喜歡   喜歡
 
可以看出,電影A與D是最相似的。因爲張三喜歡A,所以電影D就可以推薦給張三。
 
和基於用戶的推薦系統相比,基於內容項的推薦系統最大的改進是更具有擴展性。基於內容項的方法通過計算內容項之間的相似性來代替用戶之間的相似性。對於通常的互聯網應用來說,提供的內容項數量相對較爲穩定。比如一個大型網上書店,可能出售的書籍數量也就在幾十萬上下,而用戶數量就可能達到幾百萬。所以,比起用戶,內容項之間的相似性計算需要的計算量要少很多,從而大大降低了在線計算量,提高系統性能。基於內容項的推薦系統應用最爲成功的是Amazon。Amazon爲此還申請了一項專利叫做”Collaborative recommendations using item-to-item similarity mappings”[1]。當然,在降低了計算量的同時,完全基於內容項的推薦技術也在推薦的準確度上做了小小的犧牲。大多數情況下,基於用戶的推薦技術表現要略好於基於內容項的方法。這是因爲基於內容的方法忽略了相似用戶之間的組羣特徵。
 
不論是第一代的基於用戶方法,還是第二代的基於內容項方法,都不可避免的遇到數據稀疏的問題。在任何一個網站中,用戶的評分記錄或者購買記錄,相對整個可供選擇的內容集來說,都是很小的一部分。所以在許多推薦系統中,每個用戶涉及的數據量相當有限,在一些大的系統如Amazon中,用戶最多不過就評價過上百萬本書的1%,造成評估數據相當稀疏。當用戶評價過的內容之間找不到交集時,就難以判斷用戶的口味是否相似,難以找到相似用戶集,導致推薦效果大大降低。爲了解決用戶數據的稀疏問題,最方便的辦法就是將用戶對沒有選擇過的內容項的評分設爲一個固定的缺省值,例如用戶的平均評分。針對如何預測遺漏的評分業內又提出了很多種方法,不過一般來說採用最簡單的改進方法就可以有效地提高協同過濾推薦系統的準確度。
 
另外一方面,即便採用了基於內容項的方法,在數據量巨大的時候,計算複雜度仍然成爲性能瓶頸。爲了進一步解決協同過濾技術的擴展性能問題,目前比較有效的辦法是在用戶評分數據上做一次聚類分析(clustering)。聚類技術首先將具有相似興趣愛好的用戶分配到相同的分類中。聚類產生之後,它或者將“最近鄰居”搜索對象限制在最相近的聚類中,根據類中其他用戶的評價預測目標用戶的評價,或者用聚類的中心作爲近似提取推薦結果。由於用戶之間的分類相對變化比較小,因此聚類過程往往可以離線進行,而無需實時計算,這樣就大大降低了實時推薦的計算壓力,提高推薦系統的速度。一般來說,聚類將用戶分爲多少個類,推薦系統的整體速度就能夠提高多少倍。具體選擇什麼樣的聚類算法,又會因應用領域和數據的分佈特性而不同。如果聚類算法選擇不當,反而會降低推薦的準確性。近年來,推薦系統的算法技術的發展也有了一些新的方向,比如SlopeOne,SVD等方法,就不一一列舉了。
 
在我看來,一個商用推薦系統的尤其關鍵之處在於對海量用戶數據的處理。因爲推薦系統是數據優先,數據的積累越多對推薦的精度就越有好處。而當用戶的行爲數據真正積累到上百萬甚至上億時,如何在合理時間內得出有效的推薦,就是對推薦技術最大的考驗。除此之外,一個優秀的推薦系統需要能夠結合內容相似與用戶行爲相。傳統的協同過濾方法是忽略內容本身的屬性的,這一方面固然是對數據要求少的優點,但另一方面也帶來了難以避免的“冷啓動”問題。其實,隨着標籤系統在互聯網上的廣泛應用,標籤本身就不失爲是一種很好的內容屬性。如何利用也是值得大家探討的。充分利用到內容本身的屬性,將不同的相似性結合起來,這會給基於協同過濾的推薦技術帶來新的動力。最後一點,設計良好的推薦技術要能夠從用戶對推薦內容的反饋中自行調整和學習。因爲實際上每個用戶對於推薦的內容都有不同的要求,比如有的用戶可能偏好比較熱門的內容,有的用戶更願意發現冷門的內容。針對不同用戶的反饋來不斷學習每個用戶的特徵,才能夠避免所採用算法本身先天的偏差,獲得較爲理想的效果。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章