- 原文地址:Spotify’s Discover Weekly: How machine learning finds your new music
- 原文做者:Sophia Ciocca
- 譯文出自:掘金翻譯計劃
- 本文永久連接:github.com/xitu/gold-m…
- 譯者:lsvih
- 校對者:ppp-man
在每週週一,超過 1 億位 Spotify 用戶會收到一份新鮮的歌曲播放列表。這個自定義列表中包含了 30 首用戶歷來沒聽過,但可能會喜歡上的歌曲。這個神奇的功能被稱爲「每週推薦(Discover Weekly)」。html
我是 Spotify 的忠實粉絲,尤爲喜歡它的每週推薦功能。由於,它讓我感受到我被重視着。它比誰都瞭解個人音樂品味,並且每週的推薦都恰好令我知足。若是沒有它,我可能一生都找不到一些我很是喜歡的歌曲。前端
若是你苦於找不到想聽的音樂,請讓我隆重介紹我最好的虛擬夥伴:react
事實證實,癡迷於每週推薦的用戶不只只有我一個 —— 許多用戶都爲它癡狂,這足以讓 Spotify 從新思考其發展重點,將更多的資源投入播放列表推薦算法中。android
每週推薦功能於 2015 亮相,從那時開始,我就很是渴望瞭解它是如何運做的(我是他們公司的粉絲,因此經常假設本身在 Spotify 工做並研究他們的產品)。在通過三個星期的瘋狂搜索以後,我得以瞟到了其帷幕後的一絲真容。ios
那麼 Spotify 是如何作出每週爲每一個用戶選出 30 首歌這個驚人的工做的呢?讓咱們先看一看其它一些音樂服務商是如何進行音樂推薦的,而後分析爲何 Spotify 作的更好。git
早在 2000 年,Songza 就開始使用人工編輯來進行在線音樂策展(curation,策劃並展現)。「人工編輯」意味着須要一些」音樂專家「團隊或者其它管理員手動將他們認爲很好聽的歌放到歌單中去。(後來 Beats Music 也實行了一樣的策略)。雖然人工編輯運做的很好,可是它須要手動操做而且過於簡單,沒法考慮到每一個聽衆我的音樂品味的差異。github
如 Songza 同樣,Pandora 也是音樂策展的元老之一。它採用的方法較爲先進,使用人工標註歌曲屬性的方法。也就是說,有一組人在聽歌以後,爲每首歌選擇一些描述性的詞,對各個曲目進行了標註。而後,Pandora 就能利用代碼簡單地對標註進行篩選,獲得比較相似的歌單。web
與此同時,麻省理工學院媒體實驗室開發出了名爲」The Echo Nest「的智能音樂助手,開創了一種更加先進的個性化音樂推薦方式。The Echo Nest 使用算法分析各個音樂音頻與文本的內容,使其能進行音樂識別、個性化推薦、建立歌單以及進行分析。算法
此外,至今依然存在的 Last.fm 採用了一種名爲協同過濾的不一樣的方法。它能夠識別用戶可能喜歡的音樂。稍後會詳細提到它。數據庫
以上就是其它音樂策展服務進行推薦的方法。那麼 Spotify 是如何造出它們神奇的引擎,如何作出更加符合用戶口味的推薦的呢?
實際上 Spotify 並無使用某個革命性的推薦模型 —— 與此相反,他們是將一些其它服務中單一使用的最佳策略混合起來,建立了本身獨特、強大的發現引擎。
Spotify 每週推薦的開發者主要採用了以下三種類型的推薦:
下面讓咱們深刻了解上述各個推薦模型吧!
首先簡述一些背景:當人們聽見」協同推薦「這個詞的時候,大多會想起 Netflix 這個首批採用協同過濾推薦模型的公司。他們使用用戶對影片的評星來肯定將什麼影片推薦給其它喜愛類似的用戶。
當 Netflix 成功使用這種推薦方法以後,開始迅速發展。如今一般被認爲是嘗試使用推薦模型的鼻祖。
與 Netflix 不一樣,Spotify 沒有讓用戶對音樂進行評星。他們採用的數據是隱式反饋 —— 具體來講,包括對用戶聽歌的流數據進行統計,以及收集一些其它的流數據,包括用戶是否將歌曲保存到他們本身的歌單、在聽完歌以後是否訪問了歌手的主頁等等。
那麼什麼是協同過濾,它又是如何運做的呢?這兒用下面這個簡短的對話來作個簡述:
圖中發生了什麼?圖中的兩我的都有一些喜歡的歌曲 - 左邊的人喜歡歌曲 P、Q、R 及 S;右邊的人喜歡歌曲 Q、R、S 及 T。
協同過濾就像用這些數聽說:
」Emmmmm,大家都喜歡 Q、R、S 三首歌,因此大家多是相似的用戶。因此,你應該會喜歡對方愛聽而你還沒聽過的歌。「
也就是說,會建議右邊的人去聽歌曲 P 試試,建議左邊的人去聽聽歌曲 T。這很簡單吧!
但 Spotify 是如何將這種方法落到實處,用於由百萬級別用戶的喜愛歌曲來計算百萬級別用戶的推薦的呢?
……應用數學矩陣,而後使用 Python 庫來實現。
在實際狀況中,你在看到的這個矩陣是巨大無比的,矩陣中的每一行都表明了 Spotify 的 1.4 億用戶(若是你也用 Spotify,那你也會是這個矩陣的一行),每列表明瞭 Spotify 數據庫中的 3000 萬首歌。
接着,Python 庫會長時間、緩慢地對矩陣按照如下分離公式進行計算:
在它完成計算以後,咱們會獲得兩種向量,在這裏用 X 與 Y 表示。X 是用戶向量,表明了單個用戶的口味;Y 是歌曲向量,表明了一首歌的屬性。
如今,咱們有了 1.4 億條用戶向量以及 3000 萬條歌曲向量。這些向量的內容實質上就是一堆數字,自己沒有任何意義。可是對它們進行對比就能起到巨大的做用。
爲了找到哪些用戶和我有着最類似的口味,協同過濾會將個人向量和其它每一個用戶的向量進行對比,最終找到與我最相近的用戶。一樣的,對 Y 向量進行比較,能夠找到與你正在聽的歌最相近的歌。
協同過濾的效果至關不錯,但 Spotify 沒有知足於此,他們知道經過增長一些其它的引擎可使得效果更好。下面讓咱們看看 NLP。
Spotify 採用的第二種推薦模型是天然語言處理(NLP)模型。顧名思義,這種模型的數據來源就是傳統意義上的文字 —— 這些文字來源於歌曲的元數據、新聞文章、博客,以及互聯網中的其它文本。
NLP 是一種讓計算機理解人類語言的能力,是一個龐大的領域。在這兒能夠採用一些情感分析 API 來實現。
NLP 背後的機制已經超出了本文的討論範圍。不過咱們能夠這麼來大體歸納:Spotify 爬蟲不斷地查找與音樂有關的博客以及各類文本,並瞭解人們對特定藝術家及歌曲的見解 —— 談到這些歌曲人們一般會用什麼形容詞和語言,以及會同時提到哪些其餘的藝術家及歌曲。
雖然我不知道 Spotify 處理數據的細節,但我知道 the Echo Nest 是如何與他們進行協同工做的。他們會將語言處理封裝爲「文化向量」或者「高頻短語」。每一個藝術家及歌曲都有着數以千計的高頻短語,且天天都在變化。每一個短語都有一個權重,用於表示這個短語的重要性(大體來講,就是某人描述這個音樂時會用這個短語的機率)。
the Echo Nest 使用的「文化向量」與「高頻短語」,Brian Whitman 提供表格
接下來與協同過濾同樣,NLP 模型會使用這些短語和權重爲每首歌構建一個表示向量,這樣就能判斷兩首歌是否類似了。酷不酷炫?
在開始本章以前,你可能會問:
咱們已經在前兩個模型中應用了足夠多的數據,爲何還須要分析音頻自己呢?
首先,引入這第三個模型能使這個驚人的推薦服務的準確率獲得進一步的提高。但實際上,使用這個模型還有第二種目的:與前兩個模型不一樣,原始音頻模型能夠用於處理新歌。
舉個例子,你的歌手朋友將他的新歌傳上了 Spotify,然而他僅有 50 名聽衆,若是要使用協同過濾顯然人數太少了。而且他尚未火起來,在互聯網上任何角落都沒有被提到過,所以 NLP 模型也無法爲他發揮做用。不過幸運的是原始音頻模型不會在意這是新歌仍是老歌,有了它的幫助,你朋友的歌就有可能和那些流行的歌一塊兒被加入每週推薦歌單了!
接下來解釋「如何」對如此抽象的原始音頻進行分析。
…使用 卷積神經網絡(CNN)!
卷積神經網絡正是人臉識別背後使用的技術。在 Spotify 這個場景中,工程師們使用音頻數據來代替像素。下面是神經網絡一中結構的實例:
這個特製的神經網絡有 4 層卷積層,它們在圖的左邊,看起來像很厚的木板;它還有 3 層全鏈接層,它們在圖的右邊,看起來像很窄的木板。輸入值是音頻幀的頻率的表示,在圖中以光譜圖的形式表示。
音頻幀經過這些卷積層後,在最後一個卷積層邊你能夠看到一個「全局時間池化」層。這個池化層沿整個時間軸進行池化,高效地根據統計學找出在歌曲的時間序列中找到的特徵。
在此以後,神經網絡會輸出它對一首歌的理解,其中包括各類相似時間戳、調性、風格、節奏、音量等典型特徵。下圖爲 Daft Punk 的 「Around the World」 一曲中截取 30 秒片斷的數據。
圖片版權:Tristan Jehan & David DesRoches (The Echo Nest)
最終,這些由一首歌理解到的各類關鍵的信息可讓 Spotify 理解不一樣的歌中的一些本質的類似之處,由此基於用戶的聽歌歷史推斷出此用戶可能會喜歡這首新歌。
以上概況了推薦模型中的三個基本組成部分。正是由這些推薦模型組成的推薦 pipeline,最終構成了強大的每週推薦歌單功能!
固然,這些推薦模型還與 Spotify 更大的生態系統息息相關,這個生態系統中包含了海量的數據,使用大量的 Hadoop 集羣對推薦系統踐行規模化運做,使得這些引擎可以在大尺度、無窮盡的互聯網中順利地分析音樂相關文章以及無比龐大的音頻文件。
我但願本文的信息能知足你的好奇心(就像個人好奇心被知足了同樣)。如今我正在經過我個性化的每週推薦找到我喜歡的音樂,瞭解以及欣賞它背後的各類機器學習知識。🎶
**資源:
掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 Android、iOS、React、前端、後端、產品、設計 等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。