推薦系統的應用案例剖析

jopen 8年前發布 | 40K 次閱讀 推薦系統 推薦引擎

在《程序員》雜志12期A中,我們介紹了推薦系統的數學原理和應用案例,本章將繼續講述推薦系統的應用案例。為了說明推薦系統的詳細實施方案,本章首先詳細介紹了一個音樂系統推薦的實施案例,之后為了讓讀者清晰大型推薦系統的原理,簡要介紹一個淘寶周邊興趣點推薦的技術方案。

音樂推薦

音樂推薦系統是一個很好的說明說明推薦系統工作原理的例子。

1. 音樂推薦特點

  • 物品空間大 。物品數很多,物品空間很大,這主要是相對于書和電影而言。
  • 消費每首歌的代價很小 。對在線音樂來說,音樂都是免費的,不需要付費。
  • 物品種類豐富 。音樂種類豐富,有很多的流派。
  • 聽一首歌耗時很少 。聽一首音樂的時間成本很低,不太浪費用戶的時間,而且用戶大都把音樂作為背景聲音,同時進行其他工作。
  • 物品重用率很高 。每首歌用戶都會聽很多遍,這和其他物品不同,比如用戶不會反復看一個電影,不會反復買一本書。
  • 用戶充滿激情 。用戶很有激情,一個用戶會聽很多首歌。
  • 上下文相關 。用戶的口味很受當時上下文的影響,這里的上下文主要包括用戶當時的心情(比如沮喪的時候喜歡聽勵志的歌曲)和所處情境(比如睡覺前喜歡聽輕音樂)。
  • 次序很重要 。用戶聽音樂一般是按照一定的次序一首一首地聽。
  • 很多播放列表資源 。很多用戶都會創建很多個人播放列表。
  • 不需要用戶全神貫注 。音樂不需要用戶全神貫注地聽,很多用戶將音樂作為背景聲音。
  • 高度社會化 。用戶聽音樂的行為具有很強的社會化特性,比如我們會和好友分享自己喜歡的音樂。

上面這些特點決定了音樂是一種非常適合用來推薦的物品。

2. 音樂推薦的實現方案

目前大部分做推薦的應用推薦邏輯應該都是多種邏輯并行。編輯推薦和用戶推薦的歌曲一般會有專門的版塊展示。

個性化推薦理論上來講都是通過算法直接從音樂庫里面由程序產出的。

  • 冷啟動(用戶第一次使用)的時候基于熱度的推薦會比較多,推薦流行熱點音樂總是不會錯的。
  • 在用戶使用一段時間,用戶行為達到一定樣本量以后,程序開始通過內容和社交關系邏輯產出內容,并且與熱門內容按照一定比例推送給用戶。
  • 程序推薦和編輯人員人工推薦結合。
  • 各個用戶好友的歌單的交互。

用戶所有的行為(包括下載/喜歡、評論、播放完成度、播放次數等)都會以不同的權重呈現在后續的推薦邏輯中。比如,一種權重的設置方法為:

下載+播放 > 喜歡+播放 > 搜索+播放 > 播放 > 下載 > 喜歡

至于準確不準確,合不合口味這個事情,與推薦算法的關系其實是不大的。做內容推薦的關鍵是內容質量是否過關。也就是音樂庫里面對不同歌曲,不同歌手的音樂基因標記的是否正確,是否夠專業,Jing.FM可能是近兩年相對專業一些的個性化電臺。

3. 關于實現方案的分析

先從相似度的問題說起。大多數用戶一開始會先從自己熟悉的歌曲開始,然后一般都會給出非常相關的推薦,比如你聽周杰倫的任何歌曲,他的其他熱門歌曲肯定都會非常相關,比如周杰倫的《東風破》,周杰倫的《游園會》,周杰倫的《七里香》,也不失為一個好的推薦。但是你會發現全都是周杰倫,單調死了。全是周杰倫的理由很簡單,因為很多用戶都連著聽下去呀,聽完一首周杰倫到下一首周杰倫,聽完這個專輯聽下個專輯。如果你往后再翻翻,估計還能找到別歌手的歌曲,但是請記著:你的屏幕就這么大,坑就這么多,再好的推薦不能在靠前的位置被用戶看到和消費到終歸也還是沒用。現在我們來嘗試解決這個問題,我們先來做個簡單的多樣化過濾,我們限制來自同一個歌手的推薦數量,這樣后面更多歌手的歌去被推上來了。

現在出現了一個新的問題,陳奕迅這時候發新專輯了,用戶一下子蜂擁去聽他的新專輯了,包括周杰倫的擁躉們也跑去觀望了一下,這樣的情況持續了一個多月,這下好了,用戶看到的推薦里面現在幾乎都能看到陳奕迅的這些歌了,盡管他這的歌跟周杰倫的歌原本不至于這么相關。而且由于這個效應,更多的人從推薦里面點進去了聽陳奕迅的這些歌,造成了一個惡性循環,使得你的基于相似度的算法以為他們真的相關,這時候其他真正相關的優質推薦卻被擠壓到后面了。我們來嘗試解決這個問題,最簡單的莫過于是計算相似度的時候過濾掉“過于”熱門的歌曲了,把這些歌曲推后吧,感覺問題應該也能解決了。

這種結合就是基于熱度的推薦和用戶行為推薦的結合。

現在一波未平一波又起,假設現在一個非常優秀的新歌手,唱的歌也好有周杰倫的早年的風采,反正就是非常相關,周杰倫的歌迷肯定會喜歡那種。這位新歌手剛出道,宣傳力度不大,也只有少數幾個地方能聽到他的歌曲,只有被小數的幾個周杰倫迷給發掘出來了,現在問題來了,我們該如何使得這個歌手被發掘出來呢?這個基本上與上一個問題相反,這是冷門的優秀推薦很難被發掘。這時候我們可以用歸一化(Normalization)的小伎倆微調一下。值得一提的是,歸一化更能給解決一下上一個提及的太過熱門的問題。可以說怎樣歸一化才是各大廠家的殺手锏吧,雖然都可能大同小異,但是不同行業還是需要細分。

實際上,基于相似度的算法的確是非常自然的推薦算法,事實上當數據足夠大、足夠干凈和精確的時候,基于相似度的算法是很難被打敗的。但是設想如果是網易音樂發展初期,沒有很多用戶數據的情況下呢?又如果是網易音樂急速擴張時期,用戶數據很多但是很稀疏的時候呢?又從用戶角度切入,設想是一個剛加入的新用戶,并沒有其它用戶數據來源來提供推薦的情況下呢?這些冷啟動問題,又該如何解決呢?難道就應該放棄這些用戶?可能我們可以做更多的小把戲來調整我們的算法,也可以去嘗試一些其他算法,嘗試去做一些混合推薦算法系統。但是由于產品的研發周期會變長,開發投入變大,系統變復雜,維護的消耗更大,然后更糟糕的是因為進展緩慢,用戶一直看的就是不好的推薦,用戶開始流失,數據更加稀疏,最后導致惡性循環。

這時,可以嘗試通過別的途徑來解決這些問題。

我們先從做一個首頁顯示熱門榜單開始,這是一個非常容易實現的功能,計數、排序、簡單分類:中國、歐美、日本和韓國,按流派也行:流行、搖滾、古典,甚至按年齡段或者群體,不外乎是幾個數據庫搜索的事情。但是這些熱門排行榜卻作用非凡,用戶可以從中發現當前的大趨勢(Trending),比如說,現在張杰比周杰倫風頭要盛,聽聽張杰的看看怎樣。由此榜單也能幫助用戶發現他本來興趣圈以外的東西。這么容易實現的功能,卻也可以帶來不少的好處。

然后我們來聘請一批專業的媒體編輯員,讓他們根據我們歌曲庫里的內容,生成比較專業的榜單,比如:“高逼格小清新”,“喧囂中,不妨試的調調” 還有 “被遺忘的經典華語女聲”。用過其它的歌曲軟件的人估計對這個也不陌生,比如說蝦米。這個也能很大程度上幫助用戶發現興趣圈以外的東西,而且由專業人員生成的歌單,更有目的性,比如說你喜歡蘇打綠是因為“小清新”,那么在“小清新”的歌單里的,就是一大批高質量的,對你而言非常優秀的推薦了。這樣的功能也能很快組織和實現起來,好處也是大大的。

這其實就是人工推薦和程序推薦的結合。

最后,看到了知乎的威力以后,我們考慮做UGC。從做一個簡單的UGC功能開始,我們現在另開一個數據庫,允許用戶保存自己的歌單,并在個人主頁推薦這些歌單。同時我們在主頁中定期置頂一些訪問量較大的歌單。功能上非常容易實現。UGC所激發的用戶潛能可以使得用戶產生與專業編輯員質量相當的、甚至更高的歌單。功能上的實現實在是再簡單不過,效果更是不言而喻。

這就是不同歌單之間的交互。

這時,我們的很大一部分問題得到解決,就算是我們的基于相似度的算法所產生的推薦并不是那么好的時候,我們的用戶并不會由此而失去發現音樂的途徑。聽歌的人多了,老用戶們持續產生高質量的數據,之前的個性化推薦算法也能有更好數據來調整參數,從而產生更好的音樂推薦,更好好的用戶群體也能推動熱門榜單與UGC的發展,進入良性循環。

大型推薦系統的技術方案

我們知道,電子商務的公司需要定制化界面。否則手機那么小的界面,根本沒有辦法呈現用戶所需的信息,用戶很容易流失。所以,因人而異,制定不同的定制化頁面是移動互聯網時代的制勝關鍵。那么如何制作一個大型的商品推薦系統呢?比如制作一個類似淘寶口碑那樣的興趣點商品推薦系統。

在制作技術方案時,要考慮用戶需求的種類,無非是分:

  • 你可能需要買的東西(普遍性需求);
  • 你現在想要買的東西(即時剛需);
  • 你潛在想要買的東西(潛在普遍性需求和潛在即時剛需)。

這跟淘寶一直標榜的個性化搜索差不多,首頁中有很多廣告位,其中以首頁的焦點圖第2,3,4頁最為明顯,這里的圖片都是商家拍下廣告位然后投放的,拍廣告位的時候可以選擇通投、地域、興趣點等等。

通投就是所有的人都可以看到的

地域是按不同的地方投放,

興趣點就是淘寶對你以往的購買記錄進行分析,以及你的搜索情況等,計算出你可能感興趣的。

在具體的商品推薦技術實現上,淘寶/天貓的商品推薦采用了邏輯回歸算法,用了上百億的特征,并基于庫存等約束來進行商品推薦。由于邏輯回歸的算法本質上屬于一種單層神經網絡系統,所以大致的結構如下所示:

其中layer1代表輸入的商品特征,比如可以是目前的所有商品,以及其他所能想到的各種特征,layer2可以是目前的所有商品。目的是:當用戶購買了一些商品之后,向用戶推薦別的**商品。所以訓練數據是:輸入用戶購買的數據的各種特征(沒購買或瀏覽的商品的特征可以為零),輸出是用戶隨后購買的商品(沒購買的商品可以設置輸出為零)。所以通過大量數據訓練后,可以得到一個神經網絡,這個神經網絡就是所求的推薦系統。這樣,每一個用戶所看到的商品都是不同的,而且都是她/他很有可能要購買的。

值得一提的是,谷歌或者非死book的推薦系統也采用了邏輯回歸算法。

綜上所述,我們已經把推薦系統的應用案例剖析講完了。我們將從下一期開始講述LBS應用中的數據挖掘方法。

作者簡介:

賈雙成,阿里巴巴資深工程師,擅長于數據編譯、數據挖掘的系統分析和架構設計,主持研發過多個高端車載導航及adas數據編譯器。曾發表發明專利、論文四十余篇,著有《LBS核心技術揭秘》、《數據挖掘核心技術揭秘》。

來自: http://www.csdn.net/article/2015-12-23/2826545

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!