標籤:

推薦演算法有哪些?

移動APP, 視頻網站視頻等,如果讓全局優秀的內容被大家看到,同時讓新加入的「好」內容快速被發現和提拔起來?


推薦演算法大致可以分為三類:基於內容的推薦演算法、協同過濾推薦演算法和基於知識的推薦演算法。

基於內容的推薦演算法,原理是用戶喜歡和自己關注過的Item在內容上類似的Item,比如你看了哈利波特I,基於內容的推薦演算法發現哈利波特II-VI,與你以前觀看的在內容上面(共有很多關鍵詞)有很大關聯性,就把後者推薦給你,這種方法可以避免Item的冷啟動問題(冷啟動:如果一個Item從沒有被關注過,其他推薦演算法則很少會去推薦,但是基於內容的推薦演算法可以分析Item之間的關係,實現推薦),弊端在於推薦的Item可能會重複,典型的就是新聞推薦,如果你看了一則關於MH370的新聞,很可能推薦的新聞和你瀏覽過的,內容一致;另外一個弊端則是對於一些多媒體的推薦(比如音樂、電影、圖片等)由於很難提內容特徵,則很難進行推薦,一種解決方式則是人工給這些Item打標籤。

協同過濾演算法,原理是用戶喜歡那些具有相似興趣的用戶喜歡過的商品,比如你的朋友喜歡電影哈利波特I,那麼就會推薦給你,這是最簡單的基於用戶的協同過濾演算法(user-based collaboratIve filtering),還有一種是基於Item的協同過濾演算法(item-based collaborative filtering),這兩種方法都是將用戶的所有數據讀入到內存中進行運算的,因此成為Memory-based Collaborative Filtering,另一種則是Model-based collaborative filtering,包括Aspect Model,pLSA,LDA,聚類,SVD,Matrix Factorization等,這種方法訓練過程比較長,但是訓練完成後,推薦過程比較快。

最後一種方法是基於知識的推薦演算法,也有人將這種方法歸為基於內容的推薦,這種方法比較典型的是構建領域本體,或者是建立一定的規則,進行推薦。

混合推薦演算法,則會融合以上方法,以加權或者串聯、並聯等方式盡心融合。

當然,推薦系統還包括很多方法,其實機器學習或者數據挖掘裡面的方法,很多都可以應用在推薦系統中,比如說LR、GBDT、RF(這三種方法在一些電商推薦裡面經常用到),社交網路裡面的圖結構等,都可以說是推薦方法。


下面貼了一張全局圖,基本可以參考演算法層的那幾個常見演算法(強化、遷移、深度學習也慢慢走入推薦演算法的架構中),每個演算法的存在基本都是以產品功能、形態導向(比如新聞、電商、金融產品在推薦中主體、時效、風險等因素均差異很大,需要使用不同演算法),並且以某個演算法主導,並輔之以其它演算法(來解決主演算法的不足,或優化主演算法),如冷啟動、商品深度、零結果率等問題。


前幾天剛剛做了一個設計推薦系統的分享講座,在這裡我盡量清楚地把講座內容總結、提煉成文字,方便大家理解。

常見的個性化推薦原理

  • 基於用戶基本信息推薦 Demographic-based Recommendation

如:領域、職位、工作年齡、性別、所在地

這個是比較基礎的推薦之一,基於用戶的基本信息,可以根據他的這些信息給他推薦感興趣的或者相關的內容。

  • 基於物品/內容基本信息推薦Content-based Recommendation

文章的一些顯性屬性如:領域、主題、類型、來源

這也是一種基礎的推薦,基於被推薦物的基本信息,或者說是被推薦物的顯性屬性。

前面這兩種都比較基礎,下面這一種會複雜一些。

  • 協同推薦 Collaborative Filtering

a method of making automatic predictions (filtering) about the interests of a user by collecting preferences or taste information from many users(collaborating).

需要通過用戶行為來計算出用戶或者物品間的相關性

- 基於用戶的協同推薦

以人為本,找到和你相似的人後推薦他們看了而你沒有看的內容。

這是一個用戶關注內容的列表,當然是非常簡化之後的。

顯然在這個列表中,小張和小明關注的內容更為相似,那麼就可以給小張推薦比特幣。

- 基於物品的協同推薦

以物為本建立各商品之間的相似度關係矩陣,「用戶看了x也會看y」。

小張和小明都不約而同地看了產品經理和Google,這可以說明產品經理和Google有相似,那麼之後有看了Google相關內容的用戶就可以給推薦產品經理的相關內容。

基於用戶和被推薦物推薦不需要特別多的數據,比較適合應用在冷啟動階段。

而協同推薦是基於大數據的,所以我前面舉的例子都是簡化之後的,在實際的操作過程中用戶的行為會比前面的例子複雜的多,但是道理都是相通的。

如何設計一個好的推薦系統?

  • UGC 、編輯、熱門

- UGC: 獲取更多用戶行為數據,用戶顯性和隱形的數據

- 編輯: 處於種種目的編輯的運營

- 熱門: 最火最熱門的內容

  • 新用戶的冷啟動

在沒有大數據做基礎的時候,可以有下面兩種解決方案:

- 基於用戶信息的推薦

- 儘快讓用戶表達興趣

  • 稀疏性

有的時候你有的總內容數量遠大於用戶有「打分」的內容數量,對於這種情況的解決方案:

- 用戶隱形打分

- 降維。Matrix of boolean feature,投射到低維空間,再用機器學習

- 結合基於物品基本信息的推薦

  • 多樣性

- 看過什麼,推薦相同類型的;

- 為你推薦你需要也比較適合你的;

- 基於你的性格、興趣等,推薦甚至連自己沒想到過卻真正感興趣的;

這部分推薦聽起來感覺是玄學,但是給我們推薦的一個思路就是不要僅僅局限於某一種類型的推薦上,相同類型、需求甚至挖掘興趣,都是可以考慮的推薦內容。

  • 實時性

根據用戶的行為, 實時的調整。好的推薦系統是在不斷更新的。

如何判斷一個推薦系統做得好不好?

  • 獲得反饋並一直迭代

與推薦系統的交互有用嗎?他們對收到的推薦結果滿意嗎?

設計評測標準

1.能吸引更多的用戶看內容的詳情頁

2.促使單個用戶瀏覽更多內容


就事論事,針對樓主問題,可以分為兩個方面:如何發現全局優秀內容、如何讓新加入的內容被發現,下面分別來說。

1、如何讓全局優秀內容被大家看到

這屬於熱點檢測的範圍。熱點檢測可以針對內容在一段時間內獲取的瀏覽、贊、評論、轉發等數據來做,同時也要考慮到時間維度。因為有些內容已經熱了很長時間,可能會因為馬太效應,即放到熱門欄目曝光增加,而繼續熱下去,這不是我們想要的,所以需要加入時間懲罰因子。

2、如何讓新加入的「好」的內容被發現

新內容如何被發現?需要建立一個預測模型,通過對內容歷史數據,譬如內容歷史上每個小時的熱度,來預測下一個小時的熱度,然後將當前時間的預測熱度和真實熱度進行對比,使用相對熵計算差距,找到熱門趨勢。


推薦應該說分為兩類:個性化推薦和非個性化推薦,「讓全局優秀的內容被大家看到」應該算是非個性化推薦,熱門榜單/最多觀看這類方法可以簡單解決這個問題;不同的人對於「好」的理解不一樣,換句話說也就是偏好不同,所以推薦新加入的好內容我認為是個性化推薦問題。

個性化推薦的兩個主要思想八個字概括之:物以類聚、人以群分。主要的方法及變種應該有很多,像協同過濾、基於內容的推薦、基於標籤的推薦等等。國內項亮著有《推薦系統實踐》,對於解決推薦問題有比較詳細的介紹


最近對推薦演算法初步學習總結了下,見下圖


推薦演算法有很多非常優秀的書供入門,最前沿的話還是技術驅動。

———————————————————————————————————————

非個性化推薦

很多時候簡單粗暴的方式往往也是行之有效的:「如果你不知道該推薦什麼,那麼推薦大家都喜歡的准沒錯「。

基於熱門榜單或者最多使用等方式進行的推薦顆粒度較為粗,執行也相對來說比較容易,同時效果相當不錯,非個性化推薦在新用戶冷啟動、推薦系統冷啟也均應用廣泛。

進一步的,可以利用人口統計學特徵再進一步結合熱門榜進行推薦。用戶的基礎數據如用戶使用的手機,操作系統,版本等「識別」,城市位置,WiFi還是4G,登錄信息如手機號,手機安裝渠道等等,每一項數據都或多或少有其統計學意義,能幫助推薦系統進行更加精準的推薦,如性別-關聯電視劇表,年齡-關聯電視劇表,職業-關聯電視劇表,根據相關表查詢時又可根據權重相互疊加給出推薦列表。利用用戶的人口統計學特徵越多,越能準確的預測用戶興趣。

個性化推薦

個性化推薦相較於非個性化推薦,即推薦的內容是因人而異的。

  • 基於用戶社交關係推薦

有一種說法,一個人的身價等於他最好的5個朋友的身價的平均值。用戶與誰交朋友與誰關係好,在一定程度上與他自身的品味和需要是正相關的。Amazon的推薦有一種即是基於Facebook好友關係的,向用戶推薦他們好友在亞馬遜上喜歡的東西,推薦理由直接是喜歡過相關物品的好友頭像。

  • 基於用戶的協同過濾演算法(UF)

假設用戶 A 喜歡物品 A,物品 C,用戶 B 喜歡物品 B,用戶 C 喜歡物品 A ,物品 C 和物品 D;從這些用戶的歷史喜好信息中,我們可以發現用戶 A 和用戶 C 的口味和偏好是比較類似的,同時用戶 C 還喜歡物品 D,那麼我們可以推斷用戶 A 可能也喜歡物品 D,因此可以將物品 D 推薦給用戶 A。

基於用戶的協同過濾演算法,兩個步驟:找到和目標用戶興趣相似的用戶集合,找到集合中用戶喜歡且目標用戶沒有聽說過的物品推薦給用戶。首先需要計算用戶相似度。用戶對冷門物品採取行為更能說明他們興趣的相似度。如幾乎所有人都購買過新華字典,但是購買數據挖掘導論的人顯然興趣更加相似。對通用物品權值可考慮進行處理。(相似用戶集合,單個相似用戶)

UserCF推薦著重於反映用戶興趣相似的小群體熱點。具有社交化,反映用戶所在的小興趣群體中物品的熱門程度。

  • 基於物品的協同過濾演算法(CF)

假設用戶 A 喜歡物品 A 和物品 C,用戶 B 喜歡物品 A,物品 B 和物品 C,用戶 C 喜歡物品 A,從這些用戶的歷史喜好可以分析出物品 A 和物品 C 時比較類似的,喜歡物品 A 的人都喜歡物品 C,基於這個數據可以推斷用戶 C 很有可能也喜歡物品 C,所以系統會將物品 C 推薦給用戶 C。

基於物品的協同過濾演算法,目前業界使用最多的演算法。

Amazon的推薦原因:

a)因為你的購物框中有 ***,或者因為你購買過 ***,所以給你推薦類似的 ***)

b)購買此物品的用戶百分之多少也購買了那個物品。

物品A和物品B相似度是因為喜歡物品A的用戶大都喜歡物品B。兩個步驟,計算物品之間的相似度,根據物品的相似度和用戶的歷史行為為用戶生成推薦列表。同上理論,對於熱門物品的權重加一定的懲罰因素。同時,活躍用戶對於物品的相似度的貢獻要小於不活躍用戶。

ItemCF著重於維繫用戶歷史興趣。更加個性化,對用戶興趣的延伸。

  • 基於關聯規則推薦

發現用戶與物品之間的關聯關係。協同過濾推薦。

對於用戶建模:基於用戶基礎數據、第三方數據(如微博登錄)、產品中操作數據(點擊轉發查看頁面停留時間購買評論),建立用戶興趣圖譜,標籤體系樹狀結構配上權重(-1~1)。

對於物品建模:根據物品類型處理,如一首歌有超過 100 個元數據特徵,包括歌曲的風格,年份,演唱者等等。

每個用戶(user)都有自己的偏好,比如A喜歡帶有小清新的、吉他伴奏的、王菲等元素(latent factor),如果一首歌(item)帶有這些元素,那麼就將這首歌推薦給該用戶,也就是用元素去連接用戶和音樂。每個人對不同的元素偏好不同,而每首歌包含的元素也不一樣。

  • 基於知識推薦

某一領域的一整套規則和路線進行推薦。參照可汗學院知識樹。如隨著閱歷的增長,程序員看書越來越專業,有一定的路線可尋。

  • 基於模型的推薦模型

機器學習的方式訓練用戶喜好模型。技術驅動方向。

  • 其他推薦思路

推薦是一個情景化的事。利用上下文信息進行推薦,利用用戶訪問推薦系統的時間、地點、心情、網路環境等進行推薦,將上下文信息,尤其是地點和時間信息加到推薦演算法中,讓推薦系統能準確預測某個特定時間以及特定地點的興趣。以看視頻為例,上班時間看下班後看,在家看還是在父母家看,一個人看和朋友一起看,都是上下文信息,結合上下文信息推薦會差別很大。用戶上班下班的興趣不一樣,周末和上班興趣不一樣,上廁所閱讀和在辦公室閱讀不一樣。早上用戶更會看一看科技新聞,周末以及晚上會看搞笑視頻。用戶要是wife環境的話,給多推視頻。

現行的推薦往往不是單純用一種推薦模型,而是多種方式混合:加權混合、切換混合、分區混合、分層混合。


這是我收藏的經典演算法網站,對題主或許有用

有很多遊戲開發相關的演算法介紹:

http://www.gamedev.net

http://theory.stanford.edu/~amitp/GameProgramming

http://www.gamasutra.com

http://www.sudoku.com

俄羅斯方塊遊戲的演算法網站:

http://gforge.inria.fr/projects/mdptetris http://colinfahey.com/tetris/tetris.html

leetcode,最近很火的演算法網站:

http://www.leetcode.com

Topcoder,也很經典,每周都有競賽,有獎金的:

http://community.topcoder.com/tc

晉中教育網的「信息學競賽輔導」:

http://www.jzsyz.jzedu.cn/xxjs/suanfa/index.html

很多大學也有自己的競賽題庫,比如:

北大: http://poj.org/

杭電: http://acm.hdu.edu.cn/

華中科技大學: http://acm.hust.edu.cn/vjudge/toIndex.action


阮一峰寫過一系列基於用戶投票的排名演算法的文章。

這是第一篇:http://www.ruanyifeng.com/blog/2012/02/ranking_algorithm_hacker_news.html


基於行為:關聯規則,協同過濾(包括各種矩陣分解。



基於內容:向量空間模型,回歸模型


機器學習:點擊反饋。


基於人口統計學的推薦、基於內容的推薦、協同過濾推薦、基於關聯規則的推薦、混合推薦等


我結合58招聘推薦的場景,基於長期的業務實踐,寫了一篇《分散式離線加實時增量更新的協同過濾演算法》,希望能和大家一起學習交流。


推薦演算法現在一般說的都是個性化推薦,出現最早的應該就是基於內容的推薦,剛出現的時候是對郵件進行過濾,因為內容推薦需要提取物品特徵,才可以產生推薦,但是好多東西沒有辦法提取特徵,比如電影,音樂等。後來出現協同過濾推薦,協同過濾推薦一般是依靠商品的評分,從而實現推薦的,像現在亞馬遜,就是通過協同過濾推薦實現的。前兩年亞馬遜和facebook合作,以後應該就會出現根據朋友來進行推薦。現在購物網站上,評分呈現多元化,很多評分都會通過隱性方式獲得,比如你瀏覽了什麼物品。就像我們現在逛淘寶的時候,退出去以後,去其他網站瀏覽,其他網站上會給我們一些淘寶上的產品推薦,這些推薦的產品都是我們以前瀏覽過的類似的物品。以後推薦系統一個趨勢就是,基於社交的,利用用戶反饋進行實時推薦。多種推薦演算法進行混合,從而達到一個較好的推薦結果。


都是大牛,我不懂技術,但想認識更多的這方面的專業人士,有需要相關機會的可以找我喲!


推薦演算法的分類前面的同學說的大概都很全面了,我想重點說下協同過濾,其實協同過濾不僅包含item user cf。其實,熱傳導 物質傳播這類的基於圖的推薦演算法,還有基本svd分解的推薦演算法,也可以歸為協同過濾的變種,其目的,都是為了更好或更方便的獲得物品之間的相似度,或者是用戶和物品之間的聯繫程度,比如,熱傳導演算法,就是模擬了恆溫熱源的環境下,熱商品向冷商品的能量傳遞,可能對長尾商品的推薦更加適用,個人拙見


我現在正在做一個電影/歌曲推薦系統,計劃實現不同的推薦演算法,感興趣的可以私信我一起做哇,最好會點前端和Ruby on rails


用的最多的當然是協同過濾,另外還有基於網路的推薦演算法等~~


推薦演算法的基礎無非是分類、聚類、關聯。。。等待專業人士回答


推薦閱讀:

OCR文字識別用的是什麼演算法?
怎麼描述一個人的興趣呢,如何數學建模?

TAG:推薦演算法 |