網易雲音樂每日歌曲推薦的原理是什麼?

不得不承認,個人愛上網易雲音樂的一大原因便是網易雲音樂的每日推薦,大部分歌曲都非常符合口味,現在每天聽推薦曲目已成一種習慣,然而我一直不是很明白它的工作原理是怎樣的?如何做到如此準確地向用戶推薦符合口味的歌曲?


原理就是在海量的用戶數據(行為記錄等)中對用戶進行劃分,對同一群體的用戶推薦其餘用戶喜歡的音樂。

這樣說起來很粗糙,這其中的演算法很複雜,涉及到具體的推薦演算法網易雲音樂肯定不會對外公布,但是再厲害的演算法都是有建立的基礎的,剛好在前幾日看到一篇類似的推薦思路,這裡可以推薦給大家:個性化推薦演算法:為什麼網易雲音樂推薦歌單那麼精準

1.給音樂進行歸類並建立評分規則

這是我們前面說到的給內容分類,是每個平台推薦前要做好的準備。簡單說就是把音樂貼標籤,把相同/相似標籤的音樂歸到一塊,所以一首歌可能會被歸到多個類別里,比如說同一個歌手的歌、同種曲風或者表達某一個情緒等等。

其次對用戶聽音樂行為建立評分規則有助於更好分析用戶的喜好從而進行更精確的推薦,比如以下行為:

僅作舉例,規則應該根據用戶明確的行為來建立

2.建立用戶模型

制定評分規則後,就可以得到每個用戶和該用戶相關的每首歌的一個得分,那麼根據這些數據就可以給用戶建立相應的模型從而為其做精確推薦。

同為舉例隨意列的數字

3.尋找相似的用戶

是時候介紹一下專業的詞了,常用的計算相似度評價值的體系有兩種:歐幾里得距離和皮爾遜相關度。後者有點複雜,這裡簡單介紹歐幾里得距離。

歐幾里得距離非常直觀,如下圖,根據上面得出的評分,我們可以製作二維圖,簡單明了看出用戶在哪個位置,比如 A 用戶就與 D 用戶距離最近,所以可以給 A 推薦 D 喜歡的歌曲。

有人說還沒看懂,那我說一個簡化版本的。你經常聽民謠,喜歡的歌曲很大一部分都是民謠,於是網易雲音樂把你歸到了民謠這個群體,民謠這個群體裡面還有一個人叫趙雷,有一天趙雷聽了一首歌叫《成都》並且點了喜歡和收藏。系統發現你並沒有聽過這首歌,於是在後面的某一天,網易雲音樂悄悄的把這首歌放進了你的每日推薦裡面,你一聽,真好聽。這只是最簡單的情況,而網易雲音樂的推薦遠沒有這麼簡單。


專業對口來簡單做一個猜測,這個東西核心演算法肯定不會告訴你對吧。。

關於推薦演算法現在討論的也很多,比較基本的兩種是

collaborative filtering(CF) 和 content-based (CB)兩種,整個推薦系統的核心我覺得就是找兩個objects(可以是歌曲,可以是用戶)之間的相似度

大概意思就是說,CB就是根據用戶自己提供的信息,比如建立賬號時生日啊歲數啊喜好啊,還有你用了產品之後的一些操作,比如 @路人甲提到的那個表格其實就是一種可能。

CF則是基於一個前提,假設甲喜歡產品a, 乙也喜歡產品a,那麼乙如果買了產品b並說好,那麼甲也很有可能會覺得b不錯,所以就推薦給你,當然真實操作肯定不會只用一個產品確定這種聯繫。

這是簡單的背景,如今很多公司,比如淘寶還是亞馬遜,任何推薦演算法本身都不可能只是單一的一種,一般都是複合型的(hybrid)。其實還有很多其他的推薦演算法不過就不說了。

假設你選定了一個演算法,那麼你就得用那個來量化相似度,因為有了量化的相似度,你才能排序,才能按照順序從可能喜歡到最不可能喜歡推薦給用戶。具體量化方法,歐幾里得距離是比較簡單和方便的那種。其實這個就是數學概念的矢量,可以有很多個dimensions,然後算數學距離。

那麼現在你有了這個排名,你得不斷更新,因為不可能一下子就完全把用戶的喜好口味抓住,你得通過長時間的使用讓屬於你的data更多,這樣出來的結果也會更準確,這也是為啥你新註冊賬號,如果亂選或者喜歡的音樂差異較大,推薦的內容就比較不穩定。

關於具體的實現,網易的我肯定不知道,不過我想如果你真想自己做一個,寫好這個之後租一個伺服器,定時跑一次就可以了,大部分創業公司都是這樣。

ps. 我聽音樂怕毀了推薦內容,所以是網易雲和apple music一起用,一個專門聽古典一個聽其他,不知道是不是強迫症,反正我覺得音樂種類在演算法中的權重應該是相當重的。


你可能以為網易是用一天時間做一個大數據的計算,辛苦推薦出來。但是我今天做了一個試驗。推薦的全是我平時不聽的華語音樂。我全部點了不感興趣。然後再點進去每日推薦,神奇的事情出現了,每日推薦又滿了。再全部消掉,再點進去,又滿了。說明網易的推薦其實是可以瞬間完成的,平時的每日推薦只不過是每天六點強制刷新一次。

這三次推薦都是我不聽的華語音樂。我開始尋找原因。原來紅心裡最新添加了幾首華語歌。全部刪掉,再點開推薦,就換風格了。重複這個操作,可以發現,推薦的歌曲並不是和紅心的所有歌曲有關係,而是和最近紅心的十首以內的歌曲有關。我沒有測試具體數字。

再試驗另一個方面,我把所有紅心刪掉,這次沒有推薦。我加上了一首金屬音樂。這次下面出現幾首金屬音樂。上面出現的竟然都是我剛開始用網易音樂時期的推薦。我猜想網易有一個音樂庫,無論喜歡的音樂是什麼。在新手時期都可能推薦這個音樂庫裡面的音樂。重度用戶會減少這個庫的推薦。


2.11更新

一個月前的回答無人問津到突然破千贊是怎樣的感受?感謝大家,第一個破千贊的回答開心。

以下為原答案:

大家好,我是網易一位小員工,我每天的工作就是挑音樂放到各位的每日歌曲推薦里。這份工作看似簡單實則不然,我要在一天內聽完你喜歡的音樂,然後根據你喜歡什麼類型的歌從曲庫中挑歌在早上6點準時放到你的歌曲推薦中,為此我天天熬夜。所以不要驚訝每日歌曲推薦那麼人性化,因為我TM純粹是在騙你


其實剛開始不管選擇什麼種類的音樂,到了最後都會轉向電音。


應該是按照 我喜歡 來推薦的,推薦相同標籤的歌,而且往往是按照你最近加的歌來推薦。所以會有前一天加了一首歌,第二天的推薦里有好幾首相同風格的歌。

每天按照每日推薦來聽的話,基本會在純音的路上越走越遠┐(′-`)┌


甲聽了A歌點了個紅心表示很喜歡,又聽了B歌點了紅心表示很喜歡。

乙聽了B歌點了個紅心表示很喜歡,又聽了C歌點了個紅心表示很喜歡.

然後當甲再次聽歌的時候,網易雲向甲推薦了C歌,甲一聽,哎呦不錯噢!


先給歌曲分類,再根據你最近喜歡的歌曲從相似的類型裡面推薦,很多時候會推薦最近收藏的翻唱版,或者是最近收藏歌手的其他歌曲。


「網易雲音樂的推薦演算法就是amazon發明的「喜歡這個商品的人,也喜歡某某」演算法。其核心是數學中的「多維空間中兩個向量夾角的餘弦公式」。」


網易雲音樂推薦給用戶應該優化之後的基於用戶的協同過濾與基於產品的協同過濾,我將其進行建議解釋和概念轉換——即一種是從用戶出發,一種是從歌曲出發。

一、從用戶出發

各種購物軟體大家應該都用過,最早從用戶出發歸納用戶訊息和偏好來源於Amazon的推薦。在我小學時噹噹等也應用了這種推薦方式:例如與此類似的書、看過這本書的人也看過這本。當然這一切都建立在海量的數據上。

我們將聽歌的這個行為類推在購物上便於理解:你在進行購物時,後台都有一個數據分析統計,對你在該頁面的停留時間(這首歌是否完整聽完),是否收藏了這個商品(收藏到歌單),購買(下載),回購(聽歌頻率及是否單曲循環),推薦給朋友(分享),從而計算每一個商品的引流量及變現能力、商品頁面成交轉化率等。

假設一個用戶1在A店購買了商品甲,又在B店購買了商品乙,這時用戶2在A店瀏覽,那麼系統就有一定概率認定用戶2可能也是B的目標消費人群。

當然會存在某些小眾音樂不被大部分用戶所喜歡的可能性,例如某些音樂評價嚴重兩極分化,有人會單曲循環一百遍,有人前奏的撐不過,那麼如果有增益的加權項,就應該對應有降權的量表,如:頁面停留不超過五秒(沒聽到半分鐘就關了)、移除購物車(刪除歌單)等。

但由於音樂是一種與人審美相關的領域,並且心理學界已經認可了音樂對人情緒的影響,所以這種統計方式有其不完善之處。

用戶可能因某些因素而導致資料庫推薦給你的都是基於你日常操作的權重以及大部分與你日常品味相同人喜歡的歌曲——為了避免誤判導致該功能引起你的反感可能只推薦給你與你某一需求相似性大的歌曲。

1.風格跨度大(工作時穿正裝閑暇時刻是穿著小短褲的花臂少女)

例如:用戶喜歡搖滾也喜歡古典樂,我們暫定為50/50。系統基於資料庫的篩選始終給你推薦搖滾音樂,由於你確實喜歡搖滾於是你聽搖滾的頻率大大增加,你數據中的搖滾權重就會增高,該增益就越明顯,占你聽歌總比例就越高,於是搖滾/古典升高為70/30,然而從你的角度始終都是50/50,卻因為軟體對你進行的用戶引導導致數據有偏差。

2.被情緒影響(平時都在聽春天在哪裡一夜之間情緒波動開始聽命運交響曲)

用戶平時都挺愉快的,突逢打擊開始聽憂傷的歌曲,但基於用戶行為產生的數據並沒有太多關於憂傷歌曲的選項,導致你明明已經烏雲蓋頂了系統還推薦給你窮開心。

3.長期循環同一列表導致的審美疲勞(一道很喜歡的菜也不能天天吃)

用戶曾經很喜歡某一首歌長期循環,當達到某一循環點(厭煩的上限)之後開始產生反作用,比如再喜歡吃麥當勞頓頓吃也想吐,但隔一陣子又開始突然很想吃,即過了該厭倦的曲線突然很想吃,我將其看作A循環和B循環,當長期循環A之後對A的類似產生厭惡感,在B循環達到上限之後想重新開始A循環系統卻始終向你推薦B的近似。

二、從歌曲出發

音樂大多根據流派區分,如rock、bules、jazz、RB等不同流派,大概類似於你購物時的服飾、化妝品、文具等類別。在音樂建檔時就有由上傳者建立並貼上的流派標籤,流派可以便捷地將音樂歸類,這樣再結合PART1中的用戶操作權重,就可以尋找到相同流派中最受歡迎的音樂。

網易雲音樂增添了歌單這一功能,用戶可以自主選擇,將喜歡的音樂添加到歌單中去。用戶通常自行對音樂的類型及進行劃分,避免不同風格的自己喜愛的音樂混雜在同一歌單中影響聽歌時的心情,導致跳轉過快造成心理落差和不適感,或者按照工作場景來歸納音樂。網易雲音樂允許用戶為建立的歌單添加tag,用戶可以選擇自己認為最適合的tag對歌單進行分類,tag應該也是會分配到每首歌曲上的。當tag數據量大了之後,系統就可以選擇更符合該音樂素描的tag作為該音樂的 標籤。

歌單還有用戶收藏功能,收藏應該也作為權重對該歌單的質量和標題複合進行評判,從而篩選出與你經常聽的、最常聽的歌曲tag重疊度最高、權重最高的歌曲。

如A曲的tag為X,Y,Z,那麼系統就會推薦給你同為X,Y,Z(根據數據篩選之後的排名順序前三)的收藏量最高或者歸納到同一歌單次數最多的(判定為用戶認為更相似)的歌曲。

個人認為網易雲音樂的演算法是基於這兩種演算法綜合出的,具體的模型可能會有偏差,最近開始進行版權收費後可能也會有其他用於變現疊加的高級演算法,不在此贅述,歡迎討論。


網易日推這麼懂你,你是否有被科技窺視的恐懼?


補充:

網易雲音樂主要使用常見的推薦演算法,但是要把推薦系統做好,絕不僅僅是疊加推薦演算法,是需要無數的細節和優化的。

常見推薦演算法有哪些呢:

  • item-based cf 基於音樂的協同過濾

也就是說計算用戶對所有音樂的評分,根據最相似音樂的評分來計算未評分的音樂。比如你喜歡A這首歌,那麼根據相似度得到B也不錯,這樣就會推薦給你B。

  • user-based cf 基於用戶的協同過濾

item-based可以看作是基於商品計算相似度,user-based就可以看作基於用戶來計算相似度。在推薦音樂的場景下,可以看做找到和你最相似的用戶B,B用戶喜歡C,這樣就推薦給你C歌曲。

  • content-based

前面我說到了雲音樂在推薦歌曲時利用到了歌曲的音頻特徵和歌曲風格等標籤,那麼利用content計算相似度,可以推薦給用戶風格最為類似的歌曲,也就解答了為什麼一直聽民謠就會推薦民謠的問題。

  • 其他

同時,針對冷啟動問題或者冷用戶問題,這種情況推薦熱門歌曲即可。

那麼每日歌曲是怎麼來的呢?

這部分答案不準確,說實話我也不知道,但是我這裡列幾個比較重要的點:

  1. 基於聽歌歷史的協同過濾推薦(item-based cf)
  2. 基於標籤和風格的補充

怎麼理解呢,如果你是一個經常聽歌和反饋的用戶,比如說你經常收藏歌單,經常點贊,這樣根據你的歷史行為就可以推薦出合適的歌曲。 如果你是一個行為比較少的用戶,這樣就要通過歌曲標籤和風格等content-based的方法補充方法(1)的不足。

當然不止這些

  1. 控制推薦列表中各個語種的比例,語種比例應該接近用戶的最近聽歌語種比例
  2. 隨機策略,理解為隨機放一些歌,就當做是給用戶機會改變自己的風格吧
  3. 負反饋,比如用戶經常切過某些風格、歌手、語種的歌,就會把這些歌加到黑名單

我能想到的就是這些,以後也許不會補充了

原文如下:

在網易工作的強答一記,

我覺得最重要的是對歌曲打了很多標籤,比如民謠、搖滾、嘻哈等等;除此之外還用到了歌曲本身的音頻上的特徵(和其他軟體不一樣的地方)。

結合上述兩點,就較容易的基於用戶聽歌的歷史,結合其他回答說到的協同過濾演算法,推薦出比較相關的音樂了。

有空我可以補充一下內部公開的資料。


我也曾經在思考 為什麼有時候網易推送的歌曲這麼沁入心脾 正好是我想聽的或者正好是我紅心的調調 後來我理性的統計了下 其實日推到後面很多時候是不準的 一次日推可能只有1-2個紅心 當然除非你聽歌不是雜食 比如你只愛聽古典 那推送的紅心幾率就很大 比如你只聽雷鬼音樂 那推送的風格正好符合你的愛好 那對於雜食的人來說 其實這種推送也就是在「猜悶」

那到底準不準呢 因人而異吧 只能說網易這方面做的工作相對其他軟體提前了一些 什麼員工篩選 我是打死也不信的


我雖然不懂,但是覺得網易雲、蝦米、淘寶、阿里在猜「你可能喜歡的東西」時用的技術是一樣的。


聽了個極樂凈土第二天日推第一是大悲咒

聽了倆純音後面的日推就沒幾首有歌詞的了


不好意思。。。對於個人來講,推薦的很糟糕....


本狗宅覺得網易雲一定入侵了我的手機知道我下了b站等軟體,所以推薦給我那種歌ㄟ( ▔, ▔ )ㄏ,XD


自從我聽了籠目歌,它天天給我推薦日本黑暗致郁恐怖歌曲。每天。


我手機里的網易雲和B站有說不清道不明的神奇關係……


原理同意最高票答案

推薦大部分聽著還是符合心意的

可它的演算法還沒有那麼成熟

我所理解的大數據處理來推薦的歌曲,應該符合正態分布,偏差受偶然因素影響較小

而不是我今天突發奇想聽了幾首備胎情歌,第二天對著那幾首推薦我欲哭無淚,滿屏尷尬

這點得改進哈


推薦閱讀:

求有限元分析軟體dynaform的教程?
為什麼 MATLAB 的矩陣表達這麼反直覺,代碼不優雅,並且符號計算這麼差,還是有這麼多人用它?功能實現上比 C 好在哪裡?以及如此流行是因為它功能強大兼/或易用嗎?
破解 Root 許可權用哪個軟體好?
如何看待360那些危言聳聽的話?

TAG:音樂 | 軟體 | 推薦 | 網易雲音樂 |