「網易云音樂」歌單推薦算法:技術同學體驗反推

8 評論 19678 瀏覽 125 收藏 16 分鐘

推薦算法可以通過APP表現進行反推,不會100%準確,但應該也八九不離十。

推薦依據

推薦算法不是無根之水,它必須借助用戶的數據才可以進行推薦。即使是冷啟動,也需要獲得你的微博、微信(你的登錄方式)或其他已注冊用戶的熱門喜好。

具體的數據包括:

  • 瀏覽記錄
  • 頁面停留時間
  • 歌曲播放次數
  • 點擊歌曲但未播放記錄
  • 點擊歌曲且播放完成記錄
  • 歌曲、歌單、歌手的收藏記錄
  • 歌單播放次數和歌曲所屬標簽
  • 個人屬性(性別,年齡,地理位置等)

……

這樣的數據在算法模型里叫做特征,也就是通過這些歷史行為數據中的特征,推薦算法可以進行非常精準的個性化推薦。在幾年前,網易云音樂其實還沒有那么“神”,很多推薦莫名其妙,但是現在的算法相對來說已經非常精準了。

推薦算法

在說歌單的同時,也會給大家看看網易云音樂這個APP里一共有哪些地方用到了推薦算法:

  • 場景一:開屏廣告(按用戶畫像推薦/全量發布)
  • 場景二:私人FM(實時推薦)
  • 場景三:主頁推薦-每日推薦、歌單推薦、電臺推薦(搜索召回排序、多因素加權)
  • 場景四:云村推薦-云村廣場、好友動態(搜索召回排序、多因素加權)
  • 場景五:視頻推薦(根據歷史行為精準推薦)

場景一:開屏廣告(按用戶畫像推薦/全量發布)

網易云音樂是如何推薦歌單給不同用戶的?

算法:有時候打開的廣告會不一樣,有時候會重復。全屏廣告費用很高,假如不是獨占類型的,那這塊用到的可能有一些簡單的人群匹配或者用戶畫像。如果是單次廣告獨占,則有可能是按照廣告商的要求投放。18年之前沒有這個廣告功能,但是網易要恰飯的,能理解。

場景二:私人FM(實時推薦)

私人FM和電音位于個人主頁的頭部位置,用戶點擊率非常高。因為二者本質上很相似,這里只談FM的算法。

網易云音樂是如何推薦歌單給不同用戶的?

私人FM和單曲、歌單推薦的最大區別是,歌單推薦是一次性生成一個歌曲/歌單列表,但FM只推薦下一首,沒有“上一首”功能,這意味著推薦算法會更關注你的瞬時興趣。因為FM只有喜歡、聽完、切歌三種反饋,相對來說比歌單推薦要簡單很多,但相對的,信息也少了很多。

可以推算,FM用到的具體方式是由“播放、喜歡、切歌”來判斷用戶對推薦結果的喜好程度。使用的算法應該是相似性召回和基于用戶、基于內容的協同過濾三合一,這一點和單曲推薦很相似,甚至兩個功能都使用了用一套推薦算法。

FM有個額外的要求是實時推薦,可以將私人FM理解為一個由動態變化的推薦歌曲組成的歌曲序列,這里面應該使用了深度學習算法中的“下一項推薦”模型來生成,用到的可能有Transformer或GRU/RNN模型。

實時推薦的意思是,上一首是“lemon”,如果你聽完了,那么下一首可能會給你推薦米津玄師的另一首歌,或者相似的日文歌。如果我在聽小英雄的OP,但沒聽完就切歌了,那么序列中的下一首本來是冰海戰紀的ED,此刻可能就會變為一首英文流行歌。

網易云音樂是如何推薦歌單給不同用戶的?

場景三:主頁推薦(這塊包含的比較多,最主要的是“推薦歌單”功能)

網易云音樂是如何推薦歌單給不同用戶的?

算法反推:頁面可以拆開來看

網易云音樂是如何推薦歌單給不同用戶的?

(1)每日推薦(多因素加權)

這里用到的是單曲推薦,具體算法不難想到,從我的每日推薦歌曲來看,基本是:

  • 我聽過的歌手的其他單曲
  • 我聽過的歌曲所屬分類的其他熱門歌曲
  • 我聽過、收藏過、評論過的歌曲
  • 聽過我聽過歌曲的人,聽過的其他熱門歌曲

每個部分都分配有不同權重,權重高的,推薦的位置(排序機制)就會靠前,權重低的則會靠后。比如我的列表里,藍蓮花排名第一,但是我最近并沒有聽過藍蓮花,也沒聽過許巍的歌。但是我聽過民謠/搖滾標簽類的歌曲,并且很容易猜到,聽過這個標簽的人,基本都會聽藍蓮花(熱門)。那么我的列表里,第1項和第4項的權重應該是更高的。

網易云音樂是如何推薦歌單給不同用戶的?

現在的算法幾乎都是千人千面,所以每個用戶都有自己的個性化匹配機制,也就是張三的權重和李四的權重是不同的,這也反映出一種個人喜好。而相對于FM,這里的推薦更關注用戶的長期興趣。由用戶最近一個月、一個周的行為數據構成。

上面這4種只是主要推薦方式,在具體應用時,算法團隊會有更多機制來篩選這些歌曲并在列表內排序,提高對新用戶、不活躍用戶的推薦精度,而這里用到的算法有協同過濾,基于內容召回以及相似性召回等。對算法具體原理感興趣的可以自行搜索,這里不展開講。

(2)歌單推薦(搜索召回排序)

點進“歌單”按鈕,會跳到一個歌單廣場,但是我平時不怎么用,這里和主頁推薦歌單放在一起講,因為兩個模塊的算法應該是一樣的。

推薦歌單是網易云音樂的主要流量通道,95%以上的用戶每天打開APP會首先看這些推薦歌單。推薦歌單算法,網易云在全球范圍內都屬于做的很不錯,因為歌單這個東西和歌曲不一樣,里面有很多首歌組成,并且每首歌的調性有可能相似,也有可能不同,比傳統推薦要更難。B站、Youtube都有類似算法,比如通過用戶的收藏夾推薦相似的收藏夾。

網易云音樂是如何推薦歌單給不同用戶的?

歌單有個特點就是UGC(用戶生成內容),UGC歌單是實時的,即用戶有收聽歌曲行為后可實時帶來推薦變化,比如刷新一下,會推送不一樣的歌單給你。

具體的推薦過程大概如下圖,大家只需要知道“召回”和“排序”就行。

  • 召回,是從數以百萬計的曲庫進行初步篩選,選出幾百個相對符合用戶口味的候選歌曲;
  • 排序,是把這幾百個候選歌曲通過深度學習、因子分解機等算法進行精準的個性化排序。

網易云音樂是如何推薦歌單給不同用戶的?

召回的三種主要方式大概解釋一下:

  • 協同過濾,基于用戶的行為數據,如聽過的歌曲或者個人標簽找到相似用戶或者相似內容;
  • 基于內容,內容標簽化,構建完整的用戶畫像,然后根據內容相似度進行匹配;
  • 基于熱門 ,和你相似品味的用戶聚合成一個圈,圈里的人喜歡什么,就推給你什么。

這一塊涉及技術太多,感興趣的同學也可以自行搜索。

(3)電臺推薦(搜索召回排序)

電臺推薦就是以前的FM頻道,現在整合了很多欄目。基本的流程和推薦算法其實和上面的歌單推薦一樣,只不過歌單變成了電臺,推薦的依據也從歌單里的歌曲、評論、收藏、用戶,變成了電臺的聽眾、主播、標簽等。

網易云音樂是如何推薦歌單給不同用戶的?

場景四:云村推薦

(1)云村廣場(搜索召回排序)

網易云音樂以前總是被人說清高、不接地氣、評論太文青?,F在這個云村廣場(為了回答這個問題,我第一次點進去看),就是云音樂開始接地氣的證明。點進去,我以為自己打開了抖音+快手。

這里用到的短視頻推薦算法應該和快手、抖音一樣,使用短視頻的屬性、標簽和用戶的口味、標簽做匹配,相似性高的或者比較熱門的就進行推薦。具體流程也是先召回再排序,可使用的模型較多,這里不好猜。不過短視頻時代,最吸引眼球的就是圖里這種內容,比什么算法都好使。

(2)好友動態(時間倒序)

這里的動態推薦算法和朋友圈一樣,但是比朋友圈簡單,就是按你的關注的人的動態,以時間倒序(最新的排在最前面)進行排序。

網易云音樂是如何推薦歌單給不同用戶的?

場景五:視頻推薦(根據歷史行為精準推薦)

視頻是云音樂后來推出的一大功能,應該也是按照短視頻推薦的方法來進行精準推薦,不同點在于這些視頻主題更加明確,比如第一個就是華晨宇的采訪,直接推送給聽過華晨宇歌曲、買過華晨宇專輯的用戶即可。

網易云音樂是如何推薦歌單給不同用戶的?

問題分析

用云音樂這么久,有一些問題大家肯定也比較困惑,這里做個簡單分析:

問題1:馬太效應

19年之前網易云的推薦算法存在一個明顯的問題:什么熱門推什么。

比如下面這個歌單,在我的推薦歌單列表中出現過不下100次,我懷疑給每個聽過英文歌的用戶都推了這個歌單,在座的如果有人聽過,麻煩評論區留個“1”,一起驗證一下。

網易云音樂是如何推薦歌單給不同用戶的?

這樣的問題在于,越是熱門的歌單越容易得到曝光,曝光越多也就越熱門,而新歌單就很難得到曝光。這個問題在很多APP上都存在,解決方法也比較成熟。

可以看到,從2019年開始,云音樂的算法團隊做了改進,把基于熱門的召回降低了權重,所以現在這種現象在逐漸減少。(也不排除是我的聽歌口味變了)

問題2:重復推薦

現在很多推薦算法存在一個致命問題,就是重復推薦。在云音樂里,當你聽過一些歌曲,就使勁推送相似的歌曲,比如我有一次聽了小鱷魚,之后就使勁給我推兒歌,這很容易引起用戶的反感。

這其實是推薦算法中著名的EE(Exploitation,Exploration)問題。EE問題中的Exploitation(開發)就是:對用戶比較確定的興趣,當然要盡可能迎合用戶口味,而Exploration(探索)就是:光對著用戶已知的興趣使用,用戶很快會膩,所以要不斷探索用戶新的興趣才行。

如何解決這個問題,我想云音樂一定使用了BANDIT一類的強化學習方法來優化,下面舉個例子幫助大家理解:

一個賭徒,要去搖老虎機,走進賭場一看,一排老虎機,外表一模一樣,但是每個老虎機吐錢的概率可不一樣,他不知道每個老虎機吐錢的概率分布是什么,那么每次該選擇哪個老虎機可以做到最大化收益呢?

最好的辦法是去試一試,不是盲目地試,而是有策略地快速試一試,這些策略就是Bandit算法。假設我們已經通過一些數據,得到了當前每個老虎機的吐錢的概率,如果想要獲得最大的收益,我們會一直搖哪個吐錢概率最高的老虎機,這就是Exploitation。

但是,當前獲得的信息并不是老虎機吐錢的真實概率,可能還有更好的老虎機吐錢概率更高,因此還需要進一步探索,這就是Exploration。

最后,云音樂里很多模塊的推薦算法其實都非常相似,但因為具體實施的算法團隊不同,細節上肯定有所差異,效果也不會完全一樣。對于EE問題的解決,以及如何提高用戶粘性,想必算法團隊也做了很多嘗試,所以才有了這幾年界面、體驗的不斷改善。

其實,有個問題不解決,推薦算法做的再好也沒用——版權。所以網易云音樂的未來將何去何從,讓我們保持關注吧。

歡迎在文末或者關注公眾號留言交流~

 

作者:圖靈的貓,香港中文大學 (深圳) 計算機博士;微信公眾號:「圖靈的貓」

本文由 @圖靈的貓 原創發布于人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基于CC0協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 1

    來自浙江 回復
  2. 對于網易云音樂APP來說沒有周杰倫歌曲版權這一點真的將大量用戶拒之門外,要不是因為喜歡網易的推薦歌單,我可能真的要完全卸載了

    回復
    1. +1

      來自上海 回復
    2. 咪咕音樂有

      來自中國 回復
  3. 有理有據,清楚明了,學習了!

    回復
  4. 更多文章,歡迎關注公號~

    來自河北 回復
  5. 多臂老虎機可以算強化學習了嗎 ?

    來自陜西 回復
  6. 感謝!受教了 酷~

    回復