CSDDN特約專稿 個性化推薦技術漫談

2021-04-16 15:22:11 字數 3398 閱讀 9220

如果說過去的十年是搜尋技術大行其道的十年,那麼個性化推薦技術將成為未來十年中最重要的革新之一。目前幾乎所有大型的電子商務系統,如amazon、cdnow、netflix等,都不同程度地使用了各種形式的推薦系統。而近來以「發現」為核心的**正開始在網際網路上嶄露頭角,比如側重於**推薦的八寶盒,側重於圖書推薦的豆瓣等等。

那麼,乙個好的推薦系統需要滿足什麼目標呢?

個性化推薦系統必須能夠基於使用者之前的口味和喜好提供相關的精確的推薦,而且這種口味和喜歡的收集必須盡量少的需要使用者的勞動。推薦的結果必須能夠實時計算,這樣才能夠在使用者離開**前之前獲得推薦的內容,並且及時的對推薦結果作出反饋。實時性也是推薦系統與通常的資料探勘技術顯著不同的乙個特點。

迄今為止在個性化推薦系統中,協同過濾(collaborative filtering)技術是應用最成功的技術。目前國內外網際網路上有許多大型**已經應用這項技術為使用者更加智慧型的推薦內容。如果你想要研究協同過濾,一定不能錯過movielens(

http://movielens.umn.edu/)。它是協同過濾最著名的研究專案之一。

基於使用者的協同過濾,通過比較目標使用者的一系列行為選擇和其他使用者之間的相似性,來識別出一組相互具有類似喜好的使用者,又可以稱為「同好」。一旦系統能夠識別乙個使用者的同好使用者,就能夠將他們最感興趣的內容作為當前使用者的推薦結果推薦給這個使用者。也就是說,以前的行為選擇與你相似的使用者,在以後的行為中很可能也會和你相似。因此將這些使用者做為基準來向你推薦內容。

協同過濾的核心問題是尋找與目標使用者興趣相近的一組使用者。這種相似使用者通常被稱為最近鄰居(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

張三

喜歡

李四

喜歡

喜歡

喜歡

喜歡

王五

不喜歡

不喜歡

不喜歡

趙六

喜歡

喜歡

喜歡

[1]。當然,在降低了計算量的同時,完全基於內容項的推薦技術也在推薦的準確度上做了小小的犧牲。大多數情況下,基於使用者的推薦技術表現要略好於基於內容項的方法。這是因為基於內容的方法忽略了相似使用者之間的組群特徵。

不論是第一代的基於使用者方法,還是第二代的基於內容項方法,都不可避免的遇到資料稀疏的問題。在任何乙個**中,使用者的評分記錄或者購買記錄,相對整個可供選擇的內容集來說,都是很小的一部分。所以在許多推薦系統中,每個使用者涉及的資料量相當有限,在一些大的系統如amazon中,使用者最多不過就評價過上百萬本書的1%,造成評估資料相當稀疏。當使用者評價過的內容之間找不到交集時,就難以判斷使用者的口味是否相似,難以找到相似使用者集,導致推薦效果大大降低。為了解決使用者資料的稀疏問題,最方便的辦法就是將使用者對沒有選擇過的內容項的評分設為乙個固定的預設值,例如使用者的平均評分。針對如何**遺漏的評分業內又提出了很多種方法,不過一般來說採用最簡單的改進方法就可以有效地提高協同過濾推薦系統的準確度。

另外一方面,即便採用了基於內容項的方法,在資料量巨大的時候,計算複雜度仍然成為效能瓶頸。為了進一步解決協同過濾技術的擴充套件效能問題,目前比較有效的辦法是在使用者評分資料上做一次聚類分析(clustering)。聚類技術首先將具有相似興趣愛好的使用者分配到相同的分類中。聚類產生之後,它或者將「最近鄰居」搜尋物件限制在最相近的聚類中,根據類中其他使用者的評價**目標使用者的評價,或者用聚類的中心作為近似提取推薦結果。由於使用者之間的分類相對變化比較小,因此聚類過程往往可以離線進行,而無需實時計算,這樣就大大降低了實時推薦的計算壓力,提高推薦系統的速度。一般來說,聚類將使用者分為多少個類,推薦系統的整體速度就能夠提高多少倍。具體選擇什麼樣的聚類演算法,又會因應用領域和資料的分布特性而不同。如果聚類演算法選擇不當,反而會降低推薦的準確性。近年來,推薦系統的演算法技術的發展也有了一些新的方向,比如slopeone,svd等方法,就不一一枚舉了。

在我看來,乙個商用推薦系統的尤其關鍵之處在於對海量使用者資料的處理。因為推薦系統是資料優先,資料的積累越多對推薦的精度就越有好處。而當使用者的行為資料真正積累到上百萬甚至上億時,如何在合理時間內得出有效的推薦,就是對推薦技術最大的考驗。除此之外,乙個優秀的推薦系統需要能夠結合內容相似與使用者行為相。傳統的協同過濾方法是忽略內容本身的屬性的,這一方面固然是對資料要求少的優點,但另一方面也帶來了難以避免的「冷啟動」問題。其實,隨著標籤系統在網際網路上的廣泛應用,標籤本身就不失為是一種很好的內容屬性。如何利用也是值得大家**的。充分利用到內容本身的屬性,將不同的相似性結合起來,這會給基於協同過濾的推薦技術帶來新的動力。最後一點,設計良好的推薦技術要能夠從使用者對推薦內容的反饋中自行調整和學習。因為實際上每個使用者對於推薦的內容都有不同的要求,比如有的使用者可能偏好比較熱門的內容,有的使用者更願意發現冷門的內容。針對不同使用者的反饋來不斷學習每個使用者的特徵,才能夠避免所採用演算法本身先天的偏差,獲得較為理想的效果。

本文為**八寶盒(

http://www.8box.cn/) co-funder 大為提供

CSDDN特約專稿 個性化推薦技術漫談

如果說過去的十年是搜尋技術大行其道的十年,那麼個性化推薦技術將成為未來十年中最重要的革新之一。目前幾乎所有大型的電子商務系統,如amazon cdnow netflix等,都不同程度地使用了各種形式的推薦系統。而近來以 發現 為核心的 正開始在網際網路上嶄露頭角,比如側重於 推薦的八寶盒,側重於圖書...

個性化推薦技術

如果說過去的十年是搜尋技術大行其道的十年,那麼個性化推薦技術將成為未來十年中最重要的革新之一。目前幾乎所有大型的電子商務系統,如amazon cdnow netflix等,都不同程度地使用了各種形式的推薦系統。而近來以 發現 為核心的 正開始在網際網路上嶄露頭角,比如側重於 推薦的八寶盒,側重於圖書...

個性化推薦漫談

如果說過去的十年是搜尋技術大行其道的十年,那麼個性化推薦技術將成為未來十年中最重要的革新之一。目前幾乎所有大型的電子商務系統,如amazon cdnow netflix等,都不同程度地使用了各種形式的推薦系統。而近來以 發現 為核心的 正開始在網際網路上嶄露頭角,比如側重於 推薦的八 寶盒,側重於圖...