這套神奇的演算法,比網易雲音樂更懂你

文/Sophia Ciocca

隨著網易雲音樂的聽歌報告刷屏,音樂軟體背後的個性化推薦演算法用開始被大家熱議。作為全球最大的正版流媒體音樂服務平台Spotify,就擁有一個可以針對7500萬流媒體服務用戶的個性化播放列表——Discover Weekly,它可以收聽習慣以及用戶的喜好,並在每周一花上兩個小時來做一個 「新的發現和深度清理」的更新。今天這位來自紐約時報的數據俠Sophia Ciocca,就為我們揭開了這個深度個性化推薦服務,之所以「深得人心」的秘密。

本文轉自公眾號數問數據科學社區

每周一,超過1億的Spotify用戶都會發現有一張全新的播放列表在等待著他們。歌單里的30首歌,你完全沒有聽過,但是很可能會非常喜歡。這就是Discover Weekly,它就是這麼神奇。

我本人就是Spotify的超級粉絲,且由其愛Discover

Weekly。為什麼呢?因為它讓我感覺自己被關注了。它比任何人都了解我的音樂品味,超過了所有我生活中認識的任何一個人。每周它都能滿足我的耳朵,因為它能為我找到我自己無法找到,或者我根本不知道自己會喜歡的歌。

對於那些在生活中與音樂隔絕的人,請允許我介紹一下我的最好的虛擬朋友:

(圖片說明:作者在Spotify的Discover Weekly歌單)

事實證明,並不是只有我對「Discover Weekly」著迷 - 整個用戶群都為之瘋狂。這甚至使得Spotify徹底重新考慮其發展重心,將更多資源投入到基於演算法的播放列表中。

自「Discover Weekly」在2015年推出以來,我一直非常好奇它是如何工作的(加上我Spotify的一個女粉絲,所以有時我喜歡假裝我在Spotify工作,還會去研究他們的產品)。經過三個星期的瘋狂搜索之後,我非常感激終於得以一瞥幕後的真相。

言歸正傳,Spotify是如何神奇地為每個人每周選擇30首歌呢?它的秘訣在哪?那麼現在,就讓我們先去看看其他音樂服務公司是如何推薦音樂的,然後再看看Spotify是如何做得更好的。

線上音樂推薦(Music Curation)的歷史簡介

早在2000年的時候,Songza用人工推薦率先打開了在線音樂推薦的大門。「人工推薦」(manual curation)的意思是指由一些「音樂專家」或者其他音樂推薦人把那些他們認為好聽的歌放在到播放列表裡,然後讓大家去聽他們的播放列表。

這樣的做法更加符合Curation這個詞的原意,因為curator這個詞原本在英文里,就是指那些在藝術館或博物館中的管理員,負責給大家整理和介紹藝術品。(後來,Beats Music也採用了這種策略。)

人工推薦雖然表現不錯,但它需要手動操作並且過於簡單,因此它無法考慮到每個聽眾個人音樂品味的細微差別。

像Songza一樣,Pandora也是音樂推薦領域的元老之一。它採用了稍微更高級一些的方法人工標記歌曲屬性。當人們聽完各種音樂後會對每首歌選擇一些描述性的詞,然後給這些歌加上標籤。然後Pandora的程序再把這些標籤相同的歌做成歌單,於是就產生了一張擁有相似風格歌曲的歌單了。

大約在同一時間,一個名叫「The Echo Nest」的智能音樂代理在麻省理工學院的媒體實驗室中誕生了,它採用了在當時非常先進的個性化音樂推薦方法。The Echo

Nest使用了演算法去分析音樂的音頻和文字內容,它可以做到音樂識別,個性化推薦,創建音樂列表,而且還能分析。

最後,Last.fm採取了另外一種方法,這種方法至今依然存在,它就是協同過濾(collaborative filtering)。講完歷史,讓我們回到現在。

如果上述就是其他音樂推薦服務的工作方式,那麼Spotify是怎麼推薦音樂的呢?

是什麼使它能夠比別的產品更加準確地撓到用戶的痒痒肉呢?

Spotify的三種音樂推薦模型

Spotify並不是使用了某種革命性的推薦模型,實際上,他們是把其他推薦服務的各種好方法混在一起使用,最終創造了他們獨特而強大的挖掘引擎。

為了能夠做出Discover Weekly,Spotify主要使用了三種推薦模型:

  1. 協同過濾(Collaborative Filtering),也就是最早被Last.fm使用過的,它通過分析你的行為和別的用戶的行為來工作。
  2. 自然語言處理(Natural Language Processing, NLP)通過分析文字內容來工作。
  3. 聲音模型(Raw Audio Model),通過分析原始的音軌文件來工作。

(圖片說明:Spotify推薦模型,圖片來源:Spotify的Chris Johnson)

那麼就讓我們來看看這些推薦模型是如何工作的吧!

推薦模型1:協同過濾

首先,先來點背景介紹:當很多人聽到這個「協同過濾」這個詞的第一反應就是Netflix,總所周知Netflix是首批使用協同過濾來強化他們推薦系統的公司。他們使用用戶對電影的星級評價來幫助他們決定應該推薦什麼電影給「相似」的用戶。

當Netflix獲得巨大成功之後,這種用法得以快速傳播。所以現在通常被認為是推薦模型的起點。

不同的是,Spotify並沒有像Netflix那樣讓用戶給音樂進行星級評價,而是隱性反饋(implicit

feedback)。這其中包括許多播放數據,首當其衝的是播放次數(stream

counts),也包括這首歌是否被添加到歌單,或者用戶是否有訪問歌手的頁面等等。

那但協同過濾在哪裡呢?它又是如何在Spotify上工作的呢?下面的這幅圖很好的把這個複雜的問題概括到了一個簡單的對話中:

(圖片來源:Erik Bernhardsson)

這圖裡發生了什麼呢?這兩個傢伙中的每一個都有一些自己喜歡的歌,左邊的那個人喜歡P,Q,R和S;右邊的那個人喜歡Q,R,S和T。

協同過濾看到這些數據之後會認為:

「既然這樣。你們兩個有三首共同喜歡的歌Q,R和 S,所以你們可能是類似的用戶。因此,你們很可能會喜歡對方喜歡的,但是你沒聽過的歌。

因此右邊的人可能會喜歡P,左邊的人可能會喜歡T。非常簡單的邏輯,對吧?

但Spotify在實踐中如何實際使用這個概念來給數以百萬用戶推薦歌曲的呢?要知道這些推薦是基於其他數以千萬的用戶喜好來推薦的。

答案就是矩陣運算,用Python庫來實現!

上圖的矩陣只是一個例子。實際上,真正的矩陣是巨大無比的。每一行代表了1.4億Spotify用戶中的一個用戶(如果你也是Spotify用戶,那麼其中有一條就代表了你);每一列代表了Spotify資料庫中3000萬首歌中的一首。

然後,Python庫就會運行這個又長又複雜的矩陣分解公式:

嗯,就是個複雜的數學公式。。。

當矩陣運行完這個公式後,我們會得到兩種類型的向量,這裡用X和Y表示。X是一個用戶向量(user vector),表示一個用戶的喜好,Y是一個歌曲向量(song vector),代表一首歌曲的資料。

這個用戶歌曲矩陣產生兩種向量:用戶向量和歌曲向量

現在我們得到了1.4億個用戶向量(每個向量代表了一個用戶),以及3000萬個歌曲向量。這些向量的實際內容只是一堆本質上沒有意義的數字,但它們用來做比較的時候卻非常有用。

為了找到和我擁有最相似品味的用戶,協同過濾演算法會把我的向量和其他所有用戶的向量進行比較,最終找出和我最相似的用戶。同樣的道理對歌曲向量也是一樣,把一首歌的向量和其他所有歌曲向量進行比較,然後發現那些和你要找的歌最相似的歌曲。

協作過濾的表現效果其實已經很不錯了,但是Spotify知道,通過添加另一個引擎,他們可以做得更好。這就講到了另外一個模型NLP。

推薦模型2:自然語言處理(Natural Language Processing, NLP)

第二種Spotify用的推薦模型是自然語言處理。顧名思義,這些模型的數據來源,就是互聯網上的各種文字數據,音軌的元數據,新聞文章,博客和其他網路上的文本。

自然語言處理,即電腦理解人類語言的能力,本身就是一個廣闊的領域,經常使用在情感分析(sentiment analysis)API上。

NLP背後的確切機制已經超出了本文的範圍,在概念上解釋起來就是:Spotify不斷地在網上爬各種博客文章和其他關於音樂的文字,並找出哪些人們會對特定歌手和歌曲的評價。什麼形容詞和語言經常被用於描述這些歌曲,以及哪些其他歌手和歌曲也同時被一起討論。

儘管我不知道具體Spotify是怎麼對數據進行選擇和分析的,但我可以介紹一下the Echo Nest曾經是怎麼做的。the Echo Nest會把他們分成所謂的「文化向量」或「高頻辭彙」。

每個歌手,每首歌都有上千條每天不斷變化地高頻辭彙。每個詞條都有權重,這個權重表示了這個描述的重要性(簡單來說,就是一個人要描述這首歌最可能用的辭彙)。

(圖片說明:「文化向量」「常用辭彙」是the Echo Nest的叫法;圖片來源:Brian Whitman)

然後,很像協同過濾的做法,NLP模型用這些詞和權重,創造出一個向量來代表歌曲,然後用這個向量來兩兩判斷歌曲是否相似。

聽起來是不是很酷?

推薦模型3:原始音頻模型

寫了這麼多了,你可能會想:

「等等,我們不是已經通過前兩個模型來分析這麼多數據了嗎?為什麼我們還要分析音頻自身呢?」

首先,加入第三個模型可以提升推薦服務的準確性。但是實際上這個模型還有另一個目的:不同於前兩個模型,原始音頻可以把新歌考慮進去。

比如說,你有個創作型歌手朋友在Spotify上傳了一首新歌。也許它只有50個播放量,所以沒有其他的聽眾協同過濾它。另外,網上沒有任何地方會提到它,所以NLP模型也找不到它。但好在還有原始音頻模型,它不會在意一首歌是新歌還是熱門歌曲。所以在它的幫助下,你朋友的歌曲可能會和其他流行歌曲一起出現在「Discover

Weekly」的播放列表中!

好吧,現在我們來分析一下原始音頻數據是如何運作的。

聽起來是不是很抽象呢?這要如何分析?

其實答案就是:卷積神經網路(Convolutional Neural Networks)!

卷積神經網路就是面部識別使用的技術。Spotify已經能夠將它從像素上,轉而應用在音頻文件上了。下面的圖是一個神經網路結構:

(圖片來源:Sander Dieleman)

圖中的神經網路有四個卷積層,就是左邊的四個很厚的條形,而右邊是三個更加細的密集層。輸入是音頻幀的時頻表示,然後將其連接以形成頻譜圖。

音頻幀經過這四個卷積層之後,你可以看到一個「全局時間池」層,該層在整個時間軸上彙集,有效地計算在歌曲時間內所學特徵的統計量。

經過這個處理後,神經網路對歌曲有了一個了解,包括這首歌的拍子記號(time

signature),音調(key),調式(mode),速度(tempo)和響度(loudness)等特徵。 以圖是Daft Punk的「Around the World」的一個30秒片段的數據圖。

(圖片來源:Tristan Jehan & David DesRoches (the Echo Nest))

最終,對歌曲關鍵特徵的理解使得Spotify能夠理解歌曲之間的本質上的相似性,從而用戶會享受這些根據自己的收聽歷史得到的推薦歌曲。

寫在最後

上文涵蓋了推薦建議渠道的三種主要推薦模式的基礎知識。這三種模型聯合起來最終形成了強大的每周推薦播放列表!

當然,上述這些推薦模式都與Spotify更大的系統相連,其中包括大量的存儲數據,並使用大量的Hadoop集群來擴展推薦,使這些模型能對付巨型矩陣,還有數不清的互聯網上的音樂文章以及大量的音頻文件。

最後,希望這篇文章給你提供了有用的信息,激起了你對它的好奇心。現在,我將通過自己的「Discover Weekly」來探索我喜歡的新音樂了,這一切都得感謝幕後的機器學習演算法。

註: 本文編譯自Medium文章《Spotify』s Discover Weekly: How machine learning finds your new music 》,點擊「閱讀原文」查看,內容僅為作者觀點,不代表DT財經立場。

編譯 | 毛哥 Chelsea

題圖 | 視覺中國

期待更多數據俠乾貨分享、話題討論、福利發放?在公眾號DT數據俠(ID:DTdatahero)後台回復「數據社群」,可申請加入DT數據社群。

數據俠門派

本文數據俠Sophia Ciocca,現任紐約時報軟體工程師,畢業於賓夕法尼亞大學。

加入數據俠

「數據俠計劃」是由第一財經旗下DT財經發起的數據社群,包含數據俠專欄、數據俠實驗室系列活動和數據俠聯盟,旨在聚集大數據領域精英,共同挖掘數據價值。了解數據俠計劃詳情請回復「數據俠計劃」,投稿、合作請聯繫datahero@dtcj.com。


推薦閱讀:

遊戲中渲染層實體如何平滑的做插值?
Google旗下機器人Atlas步行演算法再升級,成功挑戰困難地形
圖解嵌入式系統開發之演算法篇:冒泡排序
5/7 演算法題詳解:Compute all mnemonics for a phone number 從一個手機號碼得到所有可能的字元組合

TAG:网易云音乐 | 大数据 | 算法 |