1. 程式人生 > >網易雲音樂是如何推薦歌單給不同使用者的?

網易雲音樂是如何推薦歌單給不同使用者的?

因為考慮到非技術從業者,這篇文章我會寫的非常通俗,不出現任何難懂的名詞和概念,更不會有任何涉及到線代、演算法底層的東西。
先宣告一點,下面不會出現任何具體演算法實現細節,這是公司機密,但推薦演算法其實是可以通過APP的表現來反推的,不會100%準確,但應該也八九不離十。
推薦依據   推薦演算法不是無根之水,它必須藉助使用者的資料才可以進行推薦。即使是冷啟動,也需要獲得你的微博、微信(你的登入方式)或其他已註冊使用者的熱門喜好。具體的資料包括
  • 瀏覽記錄
  • 頁面停留時間
  • 歌曲播放次數
  • 點選歌曲但未播放記錄
  • 點選歌曲且播放完成記錄
  • 歌曲、歌單、歌手的收藏記錄
  • 歌單播放次數和歌曲所屬標籤
  • 個人屬性(性別,年齡,地理位置等)
…… 這樣的資料在演算法模型裡叫做特徵,也就是通過這些歷史行為資料中的特徵,推薦演算法可以進行非常精準的個性化推薦。在幾年前,網易雲音樂其實還沒有那麼“神”,很多推薦莫名其妙,但是現在的演算法相對來說已經非常精準了。
  推薦演算法   在說歌單的同時,也會給大家看看網易雲音樂這個APP裡一共有哪些地方用到了推薦演算法: 場景一:開啟APP時的彈出廣告(很煩人對吧,我都懶得點跳過)   演算法:有時候開啟的廣告會不一樣,有時候會重複。全屏廣告費用很高,假如不是獨佔型別的,那這塊用到的可能有一些簡單的人群匹配或者使用者畫像。如果是單次廣告獨佔,則有可能是按照廣告商的要求投放。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. 雲村廣場:網易雲音樂以前總是被人說清高、不接地氣、評論太文青。現在這個雲村廣場(為了回答這個問題,我第一次點進去看),就是雲音樂開始接地氣的證明。點進去,我以為自己打開了抖音+快手。
這裡用到的短視訊推薦演算法應該和快手、抖音一樣,使用短視訊的屬性、標籤和使用者的口味、標籤做匹配,相似性高的或者比較熱門的就進行推薦。具體流程也是先召回再排序,可使用的模型較多,這裡不好猜。不過短視訊時代,最吸引眼球的就是圖裡這種內容,比什麼演算法都好使。 2. 好友動態:這裡的動態推薦演算法和朋友圈一樣,但是比朋友圈簡單,就是按你的關注的人的動態,以時間倒序(最新的排在最前面)進行排序。   場景五:視訊推薦 視訊是雲音樂後來推出的一大功能,應該也是按照短視訊推薦的方法來進行精準推薦,不同點在於這些視訊主題更加明確,比如第一個就是華晨宇的採訪,直接推送給聽過華晨宇歌曲、買過華晨宇專輯的使用者即可。
問題分析 用雲音樂這麼久,有一些問題大家肯定也比較困惑,這裡做個簡單分析 問題1:馬太效應 19年之前網易雲的推薦演算法存在一個明顯的問題:什麼熱門推什麼。比如下面這個歌單,在我的推薦歌單列表中出現過不下100次,我懷疑給每個聽過英文歌的使用者都推了這個歌單,在座的如果有人聽過,麻煩評論區留個“1”,一起驗證一下。 這樣的問題在於,越是熱門的歌單越容易得到曝光,曝光越多也就越熱門,而新歌單就很難得到曝光。這個問題在很多APP上都存在,解決方法也比較成熟。可以看到,從2019年開始,雲音樂的演算法團隊做了改進,把基於熱門的召回降低了權重,所以現在這種現象在逐漸減少。(也不排除是我的聽歌口味變了) 問題2:重複推薦 現在很多推薦演算法存在一個致命問題,就是重複推薦。在雲音樂裡,當你聽過一些歌曲,就使勁推送相似的歌曲,比如我有一次聽了小鱷魚,之後就使勁給我推兒歌,這很容易引起使用者的反感。 這其實是推薦演算法中著名的EE(Exploitation,Exploration)問題。EE問題中的Exploitation(開發)就是:對使用者比較確定的興趣,當然要儘可能迎合使用者口味,而Exploration(探索)就是:光對著使用者已知的興趣使用,使用者很快會膩,所以要不斷探索使用者新的興趣才行。如何解決這個問題,我想雲音樂一定使用了BANDIT一類的強化學習方法來優化,下面我舉個例子幫助大家理解:
一個賭徒,要去搖Tigger機,走進賭場一看,一排Tigger機,外表一模一樣,但是每個Tigger機吐錢的概率可不一樣,他不知道每個Tigger機吐錢的概率分佈是什麼,那麼每次該選擇哪個Tigger機可以做到最大化收益呢? 最好的辦法是去試一試,不是盲目地試,而是有策略地快速試一試,這些策略就是Bandit演算法。假設我們已經通過一些資料,得到了當前每個Tigger機的吐錢的概率,如果想要獲得最大的收益,我們會一直搖哪個吐錢概率最高的Tigger機,這就是Exploitation。 但是,當前獲得的資訊並不是Tigger機吐錢的真實概率,可能還有更好的Tigger機吐錢概率更高,因此還需要進一步探索,這就是Exploration。
  最後,雲音樂裡很多模組的推薦演算法其實都非常相似,但因為具體實施的演算法團隊不同,細節上肯定有所差異,效果也不會完全一樣。對於EE問題的解決,以及如何提高使用者粘性,想必演算法團隊也做了很多嘗試,所以才有了這幾年介面、體驗的不斷改善。 其實,有個問題不解決,推薦演算法做的再好也沒用——版權,網易雲音樂的未來將何去何從,讓我們保持關注吧。