深挖網易雲音歌曲推薦演算法:如何做到物以類聚、人以群分?

網上各種關於網易雲音樂的個性推薦演算法的詳解五花八門,但是官方從未現身說法!為了解開用戶們對每日推薦歌單背後演算法的好奇心,我們闖進網易雲音樂總部里的產品與技術部門,挾持了技術專家,把我們心中的疑惑全都吐了出來。

老鐵們,知道今天是什麼日子嗎?

明知應該說聲節日快樂,但咱們也不能忘記在寒冷狗窩裡坐等國家分配的單身汪們(彷彿說的不是我自己)。

今天一早,當發現朋友圈撒的狗糧已經夠吃 一年後,我還是打開了網易雲音樂,想在熱鬧的評論區尋找同類:另一群單身狗們。

沒想到,他們除了搞出個「單身元年特別訪談」,每日推薦給我推的第一首歌竟然是:

The Best Day of My Life(我人生中最好的一天)。

……

好吧,歌詞「我不會自暴自棄,不要喚醒我,這是我人生中最美好的一天」,讓我嚴重懷疑,網易雲音樂的個性推薦已經洞悉了所有單身狗用戶的生活常態:

「別總在評論區呆著了,請在下個元年來之前,找到自己的幸福。要不然,狗年一過,你的頭銜就會變成『單身豬』。」

情人節快樂,狗年快樂。

在知乎上,「網易雲音樂的歌單推薦演算法是怎樣的」與「網易雲音樂到底好在哪裡」這兩個問題,分別佔據了「網易雲音樂」熱門話題的第三與第八位。

而很大程度上,第一個問題成就了第二個問題。

或許網易雲音樂在知乎上好評一邊倒的原因五花八門(有人說雇了大量水軍,如果是這樣,那應該是筆重金投入。我不會告訴你兩個平台的社群重合度很大的),但歌單質量硬,且個性推薦對比國內競品相對精準,是讓一部分用戶發展成為網易雲音樂死忠粉的關鍵原因之一。

以及,第一個問題也可以解釋,為何你在很多歌的評論區里,都會看到像「日推第一」、「日推第二」、「日推+FM同時推薦」這類的大量評論。

然而,有人把網易雲音樂比作是」獨立且小眾音樂愛好者的天堂「其實並不十分貼切。將那些被大眾忽視的歌重新曝光於你的眼下,很多時候是技術在背後起的作用。

就像你今天下載了一首周杰倫的歌,系統第二天是推給你周杰倫另一首曲風類似的熱門歌曲,還是推一首曲風類似的冷門歌曲,更會讓你感到新奇?

這個答案有點真相

不過倒是讓人有點驚訝,網易雲音樂從來沒有官方披露過自己的推薦演算法與產品應用細節。但這不妨礙大眾對其技術與產品融合的過程產生興趣。

因此,網易雲音樂里的演算法模型與 AI 應用,基本已經被知乎用戶們扒了個底朝天了。

你完全可以在「網易雲音樂的歌單推薦演算法是怎樣的」這個知乎話題里找到非常棒的解答與推測(裡面的高贊答案比媒體的報道簡直不要清楚太多,講的明白易懂)。

而我們之所以要拜訪網易雲音樂的數據挖掘工程師徐家與產品經理沈博文,與其說是揭開演算法秘密,不如說是驗證此前(包括網路上)的種種猜測,以及幫用戶們解答在使用網易雲音樂過程中產生的疑惑。

基礎演算法:人以群分

實際上,網易雲音樂個性化推薦的演算法與今日頭條、B 站還有很多 O2O 電商平台應用的基礎推薦演算法大同小異。這個得到了徐家的認證,就是我們熟知的那類基礎演算法:

  • 協同過濾演算法

  • 這個演算法要歸功於亞馬遜工程師的發明——一個客戶買了這個東西,那麼他也可能買另一個東西。

    簡單來說,該演算法的預測標準取決於人與人之間相似的消費模式。譬如,我喜歡這兩首歌,而你的歌單里也有這兩首歌,所以你歌單里有可能存在其他我喜歡的歌。

    以上的說法只是便於理解。實際上,協同過濾演算法其實應該分為兩類:基於用戶與基於項目(單曲)。

    1、基於用戶:我與小明收藏的歌單相似度很高,那麼在判斷我們口味相似的基礎上,可以給小明推薦我歌單里她沒收藏過的單曲。

    圖片來源:數據挖掘工人

    2、基於項目(單曲):就是將用戶對一首歌的偏好作為向量計算單曲之間的相似度,比對相似度後,根據這個用戶歷史偏好為另一位用戶推薦單曲。

    舉個例子,小歆下載了《勇氣》《小情歌》兩首單曲,而小宜下載了《勇氣》《天黑黑》和《小情歌》,而小藝下載了《勇氣》…

    那麼根據這些用戶的歷史偏好,網易雲音樂可以判斷《勇氣》與《小情歌》是相似的,喜歡《勇氣》的可能也會喜歡《小情歌》,那麼可以把《小情歌》推薦給小藝。

    圖片來源:數據挖掘工人

    總之,如果你覺得對於「協同過濾」這種演算法仍然理解困難,那可以只記住一個詞:人以群分。

    在這裡要歪個樓:正是這種本質上基於用戶偏好相似度的推薦模型,在無形中讓用戶在聽音樂中組成了一個個「彼此聊得來」的社群。

    因此,沈博文並沒有把「以後可能會發展成全國最大的婚戀交友網站」看作是一個無厘頭的笑話。而是認為這種基於音樂喜好的社交趨勢,反而比當下的交友平台更靠譜:

    好奇心日報之前曾做過一個調查,有關於人類找到靈魂伴侶的主要參考標準是什麼?——是音樂品味。

    神經網路模型下的「物以類聚」

    可以看到,這種推薦演算法絕對缺不了用戶歷史數據的支撐。在數據量龐大且足夠乾淨的時候,協同過濾演算法是非常強大的。

    那麼反過來想,假如我是一個新用戶,或者我使用網易雲音樂的頻率特別低。也就是說,在數據稀少的情況下,網易雲音樂該怎麼獲知我的口味?

    這種冷啟動問題,意味著不同演算法模型交叉使用的必然性。或許下面的第二大類演算法能在一定程度上消除這個障礙。

  • 基於內容的推薦演算法。

  • 這是以區分單曲內容實質為核心的推薦方式,就看做是「物以類聚」吧。

    全球著名音樂流媒體平台 Spotify 內容推薦模型的建立者之一 Sander Dieleman(現在是 DeepMind 研究科學家),曾在一篇名為《卷積神經網路在音樂推薦里的應用》的博文中具體闡釋了使用單一協同過濾演算法會存在的誤差:

    1.由於這種演算法除了用戶及消費模式信息外,不涉及被推薦單曲本身的任何信息。因此,熱門音樂就比冷門音樂更容易得到推薦,因為前者擁有更多的數據。而這種推薦往往是很難讓人感到驚喜的。

    2.而基於項目(單曲)的協同過濾,也有一個問題,就是相似使用模式下的內容異質。

    例如你聽了一張新專輯裡面全部的歌,但除了主打歌,其他的一些插曲、翻唱曲以及混音曲可能都不是歌手的典型作品,那麼協同過濾在這個時候,就會因為這些「噪音」而產生偏差。

    當然,它最大的問題便是「沒有數據,一切皆失效」。

    因此,基於內容的推薦演算法更像是對協同過濾演算法以上缺陷的一種補充——假如沒有大量用戶數據,或者想聽冷門歌曲,我們就只能從音樂本身尋找答案了。

    徐家與沈博文兩位專家明確表示,網易雲音樂針對這些問題採取了基於內容的複雜演算法。但較為遺憾,二位對具體細節並沒有進行過多解釋。

    因此,根據我們的猜測,他們運用的應該與 Spotify、Youtube 等流媒體平台一樣的方法——利用深度學習建立基於音頻的推薦模型。

    首先,如果要對比單曲與單曲之間的內容差異,那麼維度就太多了,譬如藝術家及專輯信息、歌詞、音樂本身的旋律及節奏、評論區里的夸夸其談、VIP 下載歌曲、付費與否等等元素。

    可以想像,這是一個多麼龐大的計算量。不過暴力全量計算不失為一種方法……

    因此,要通過特徵 embedding 和降維方法,把這麼多特徵映射到低維的隱變數空間里(如同下圖)。

    可想而知,在這個空間里,每首歌都可以有一個坐標,而坐標數值就是包括音頻特徵、用戶偏好在內的多重編碼信息。

    那麼,假如我們直接預測了一首歌曲在這個低維空間中的準確位置,也就明確了這首歌的表徵(包括用戶偏好信息)。

    這樣就能夠把它推薦給合適的聽眾,且並不需要歷史使用數據。

    因此,掌握了大量歌曲數據源信息與用戶行為數據映射出來的隱含特徵,再以此建立基於音頻特徵的神經網路預測模型,用短音頻片段訓練網路,是很多流媒體正在採取的方式。(具體方法可以去翻翻 Sander Dieleman 的論文,如果你懂這個,給我們來講一課!)

    當然,在訓練網路過程中,工程師門還是會通過「丟棄」(Dropout)等方法來降低過濾模型隱藏表徵與音頻預測之間的標準差(不能讓數據集離散度太高),而這樣做主要是為了降低歌曲人氣對推薦系統的影響。

    沒錯,這就是你能夠收到更加小眾歌曲推薦的緣由。

    當然,以上無論哪種演算法,其實都會基於一定的「相似度」。

    譬如網易雲音樂也同時應用了機器學習排序模型,這種模型仍然是基於用戶行為數據與相似度(也是很普遍的一種模型)。

    體現在應用上,通俗來講,就是你的「每日推薦」歌單里,第一首歌通常是系統認為與你的喜好匹配度最高的一首「很多人常常在評論區喊出的『日推第一』,其意義還是蠻大的」。

    而知乎里有大 V 提到的推薦模型「潛在因子矩陣」,徐家則認為已經過時了,現在用的人已經很少。

    計算方法——我們歌單相似度到底怎麼算出來的?

    據徐家透露,網易雲音樂則主要運用了兩種度量方式:

    歐式距離與餘弦相似度。

    CDSN 一位技術專家的博客已經把兩者之間的差異解釋的非常清晰了(下圖):

    來自名為Ying的CDSN技術博客

    前者是被看作坐標系中的兩個點,來計算兩點之間的距離。

    譬如上圖數據 A 和 B 在坐標圖中當做點時,兩者相似度為兩點之間的絕對距離 dist(A,B)。

    而後者是看成坐標系中兩個向量,來計算兩向量之間的夾角。

    譬如圖中的 cosθ,夾角越小,相似度越高。

    你會發現,仍然是在這張圖上,如果 B 的位置不變,A 點的位置沿 A 到原點這條線的反方向不斷延伸,A 與 B 的餘弦夾角就是永遠不變的,但兩點的絕對距離卻發生了變化。

    這種差異,導致他們需要被用於不同的數據分析模型。

    徐家解釋,能夠突出數值絕對差異的歐氏距離,在計算歌曲本身相似度時用的比較多。

    舉個例子,A 歌曲 1 萬人喜歡,而 B 歌曲 2 萬人喜歡,由於樣本量足夠大了,可以把所有用戶對歌曲的喜好看成一樣的強度,那麼就可以直接用歐式距離來算。

    在歐式距離下,用戶對歌曲的偏好都可以被認為是一樣的分數,可以簡化歌曲相似度的計算。

    而餘弦相似度更多是從用戶偏好方向上區分差異。

    譬如網易雲音樂可以用該方法,通過用戶對內容評分(有下載、收藏、搜索、不感興趣等不同評分權重)來區分用戶興趣的相似度。

    總之,結合了上述演算法與計算方式,網易雲音樂的個性推薦在大眾里的口碑還不錯。

    但這種「還不錯」,如果僅僅依靠技術就能達成,恐怕亞馬遜在中國的業務就不會這麼糟糕了(我其實在吐槽它的界面)。

    坦白講,再牛逼的演算法也有不足。

    對於所有音樂產品,用戶體驗的分值都是由編輯及項目協作、界面設計喜好、音樂版權豐富程度以及音樂偏好預測、技術能力、問題反饋速度共同構成的。

    這也是為何有人為網易雲音樂的推薦歌單瘋狂打 Call,而也有不少人稱,「聽歌比較雜的人可能用網易雲音樂真的很心累」。

    舉個例子,你是一個忠實的歐美音樂圈粉絲,但卻在最近偶爾下載了一首中文歌。

    那麼我可以確定,你第二天的推薦歌單里,一定會有一首中文歌。接下來只能不停地對出現在歌單里的中文歌狂點「不感興趣」了。

    推薦演算法設定了基於不同用戶行為的權重,「下載」最高,收藏、搜索、分享其次,此外你也可以點擊「不感興趣」,或許會避開這類歌。

  • 人工不可缺少

  • 除了演算法推薦,在很大程度上,一個流媒體平台也一定會承擔人工過濾職責,從產品及運營角度確立人工規則,篩除不符合條件的選項。

    沈博文告訴我們,他們不只是依賴演算法,而是希望通過一些人工的力量,來補償演算法的一些不足。

    因此,除了有單獨的演算法團隊,網易雲音樂也有一個強大的編輯團隊。

    一方面,他們幫助在一開始推薦內容上面做一層篩選,找出那些比較優質的內容,保證整一個推薦庫的健康。

    而另一方面,他們也需要解決演算法的一些收斂問題。

    「因為如果純粹依靠演算法推薦的話可能會對一些新內容響應較慢,我們也會用一些人工編輯的方式。去尋找出一些可能我們覺得非常優質的內容,然後推薦給大家」,沈博文表示。

    此外,即便客服系統在一定程度上依賴AI技術,但由網易雲音樂客服部門與技術部門共同組成的「人工反饋小組」,才是讓用戶對網易雲音樂好感up的重要原因。

    很多「秒回」的技術解決方案還被用戶戲稱為「原來網易雲音樂的小編真的是活的」。

    在平台發展初期,數據量尚不能滿足建立推薦演算法模型時,就像知乎一位名叫沙克的互聯網作者描述的那樣:

    你之所以能得到高逼格推薦,很可能就是最早來源於一個名為」高逼格小清新「專業編輯推薦歌單。

    他們有效地引導了興趣相投的用戶去發現這些音樂,大多跟你有相似品味的人都聽過並感覺不錯,再經過 fancy 的演算法」沉澱「、」發酵「,繼而產生了很好的相似度,從而生成了了這麼優秀的推薦並推送了給了你。

    最後,大家被「驚艷」到了,更多的新用戶加入,Perfect。


    推薦閱讀:

    寶寶吃什麼對眼睛好?嬰兒護眼食譜推薦
    做發糕時加兩物,蒸出來的發糕又香又甜,比饅頭還暄軟,強烈推薦
    【轉】社工讀研首選院校推薦:北大 人大 復旦 華理 ...
    膳食醫生推薦給白領的十大護眼果蔬
    手機聽歌用什麼APP比較好?知乎用戶推薦的手機聽歌APP

    TAG:演算法 | 推薦 | 推薦演算法 | 歌曲 | 網易 | 做到 | 算法 | 網易雲 |