Spotify 每周推薦功能:基於機器學習的音樂推薦
原文地址: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)」。
我是 Spotify 的忠實粉絲,尤其喜歡它的每周推薦功能。因為,它讓我感覺到我被重視著。它比誰都了解我的音樂品味,而且每周的推薦都剛好令我滿足。如果沒有它,我可能一輩子都找不到一些我非常喜歡的歌曲。
如果你苦於找不到想聽的音樂,請讓我隆重介紹我最好的虛擬夥伴:
事實證明,痴迷於每周推薦的用戶不僅只有我一個 —— 許多用戶都為它痴狂,這足以讓 Spotify 重新思考其發展重點,將更多的資源投入播放列表推薦演算法中。
每周推薦功能於 2015 亮相,從那時開始,我就非常渴望了解它是如何運作的(我是他們公司的粉絲,所以常常假設自己在 Spotify 工作並研究他們的產品)。在經過三個星期的瘋狂搜索之後,我得以瞟到了其帷幕後的一絲真容。
那麼 Spotify 是如何做出每周為每個用戶選出 30 首歌這個驚人的工作的呢?讓我們先看一看其它一些音樂服務商是如何進行音樂推薦的,然後分析為什麼 Spotify 做的更好。
早在 2000 年,Songza 就開始使用人工編輯來進行在線音樂策展(curation,策劃並展示)。「人工編輯」意味著需要一些」音樂專家「團隊或者其它管理員手動將他們認為很好聽的歌放到歌單中去。(後來 Beats Music 也實行了同樣的策略)。雖然人工編輯運作的很好,但是它需要手動操作並且過於簡單,無法考慮到每個聽眾個人音樂品味的差別。
如 Songza 一樣,Pandora 也是音樂策展的元老之一。它採用的方法較為先進,使用人工標註歌曲屬性的方法。也就是說,有一組人在聽歌之後,為每首歌選擇一些描述性的詞,對各個曲目進行了標註。然後,Pandora 就能利用代碼簡單地對標註進行篩選,得到比較類似的歌單。
與此同時,麻省理工學院媒體實驗室開發出了名為」The Echo Nest「的智能音樂助手,開創了一種更加先進的個性化音樂推薦方式。The Echo Nest 使用演算法分析各個音樂音頻與文本的內容,使其能進行音樂識別、個性化推薦、創建歌單以及進行分析。
此外,至今依然存在的 Last.fm 採用了一種名為協同過濾的不同的方法。它可以識別用戶可能喜歡的音樂。稍後會詳細提到它。
以上就是其它音樂策展服務進行推薦的方法。那麼 Spotify 是如何造出它們神奇的引擎,如何做出更加符合用戶口味的推薦的呢?
Spotify 的 3 種推薦模型
實際上 Spotify 並沒有使用某個革命性的推薦模型 —— 與此相反,他們是將一些其它服務中單一使用的最佳策略混合起來,創建了自己獨特、強大的發現引擎。
Spotify 每周推薦的開發者主要採用了如下三種類型的推薦:
- 協同過濾模型(就是 Last.fm 最開始使用的模型),通過分析你的行為與他人的行為進行運作。
- 自然語言處理(NLP)模型,用於分析文本。
- 音頻 模型,用於分析原始音軌。
下面讓我們深入了解上述各個推薦模型吧!
推薦模型 #1:協同過濾
首先簡述一些背景:當人們聽見」協同推薦「這個詞的時候,大多會想起 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。
推薦模型 #2:自然語言處理(NLP)
Spotify 採用的第二種推薦模型是自然語言處理(NLP)模型。顧名思義,這種模型的數據來源就是傳統意義上的文字 —— 這些文字來源於歌曲的元數據、新聞文章、博客,以及互聯網中的其它文本。
NLP 是一種讓計算機理解人類語言的能力,是一個龐大的領域。在這兒可以採用一些情感分析 API 來實現。
NLP 背後的機制已經超出了本文的討論範圍。不過我們可以這麼來大致概括:Spotify 爬蟲不斷地查找與音樂有關的博客以及各種文本,並了解人們對特定藝術家及歌曲的看法 —— 談到這些歌曲人們通常會用什麼形容詞和語言,以及會同時提到哪些其他的藝術家及歌曲。
雖然我不知道 Spotify 處理數據的細節,但我知道 the Echo Nest 是如何與他們進行協同工作的。他們會將語言處理封裝為「文化向量」或者「高頻短語」。每個藝術家及歌曲都有著數以千計的高頻短語,且每天都在變化。每個短語都有一個權重,用於表示這個短語的重要性(大致來說,就是某人描述這個音樂時會用這個短語的概率)。
the Echo Nest 使用的「文化向量」與「高頻短語」,Brian Whitman 提供表格
接下來與協同過濾一樣,NLP 模型會使用這些短語和權重為每首歌構建一個表示向量,這樣就能判斷兩首歌是否相似了。酷不酷炫?
推薦模型 #3:原始音頻模型
在開始本章之前,你可能會問:
我們已經在前兩個模型中應用了足夠多的數據,為什麼還需要分析音頻本身呢?
首先,引入這第三個模型能使這個驚人的推薦服務的準確率得到進一步的提升。但實際上,使用這個模型還有第二種目的:與前兩個模型不同,原始音頻模型可以用於處理新歌。
舉個例子,你的歌手朋友將他的新歌傳上了 Spotify,然而他僅有 50 名聽眾,如果要使用協同過濾顯然人數太少了。並且他還沒有火起來,在互聯網上任何角落都沒有被提到過,因此 NLP 模型也沒法為他發揮作用。不過幸運的是原始音頻模型不會在乎這是新歌還是老歌,有了它的幫助,你朋友的歌就有可能和那些流行的歌一起被加入每周推薦歌單了!
接下來解釋「如何」對如此抽象的原始音頻進行分析。
…使用 卷積神經網路(CNN)!
卷積神經網路正是人臉識別背後使用的技術。在 Spotify 這個場景中,工程師們使用音頻數據來代替像素。下面是神經網路一中結構的實例:
這個特製的神經網路有 4 層卷積層,它們在圖的左邊,看起來像很厚的木板;它還有 3 層全連接層,它們在圖的右邊,看起來像很窄的木板。輸入值是音頻幀的頻率的表示,在圖中以光譜圖的形式表示。
音頻幀通過這些卷積層後,在最後一個卷積層邊你可以看到一個「全局時間池化」層。這個池化層沿整個時間軸進行池化,高效地根據統計學找出在歌曲的時間序列中找到的特徵。
在此之後,神經網路會輸出它對一首歌的理解,其中包括各種類似時間戳、調性、風格、節奏、音量等典型特徵。下圖為 Daft Punk 的 「Around the World」 一曲中截取 30 秒片段的數據。
圖片版權:Tristan Jehan & David DesRoches (The Echo Nest)
最終,這些由一首歌理解到的各種關鍵的信息可以讓 Spotify 理解不同的歌中的一些本質的相似之處,由此基於用戶的聽歌歷史推斷出此用戶可能會喜歡這首新歌。
以上概況了推薦模型中的三個基本組成部分。正是由這些推薦模型組成的推薦 pipeline,最終構成了強大的每周推薦歌單功能!
當然,這些推薦模型還與 Spotify 更大的生態系統息息相關,這個生態系統中包含了海量的數據,使用大量的 Hadoop 集群對推薦系統踐行規模化運作,使得這些引擎能夠在大尺度、無窮盡的互聯網中順利地分析音樂相關文章以及無比龐大的音頻文件。
我希望本文的信息能滿足你的好奇心(就像我的好奇心被滿足了一樣)。現在我正在通過我個性化的每周推薦找到我喜歡的音樂,了解以及欣賞它背後的各種機器學習知識。??
**資源:
- From Idea to Execution: Spotify』s Discover Weekly (Chris Johnson, ex-Spotify)
- Collaborative Filtering at Spotify (Erik Bernhardsson, ex-Spotify)
- Recommending music on Spotify with deep learning (Sander Dieleman)
- ?How music recommendation works?—?and doesn』t work (Brian Whitman, co-founder of The Echo Nest)
- Ever Wonder How Spotify Discover Weekly Works? Data Science (Galvanize)
- The magic that makes Spotify』s Discover Weekly playlists so damn good (Quartz)
- The Echo Nest』s Analyzer Documentation
掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、React、前端、後端、產品、設計 等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。
推薦閱讀:
※Spotify 為什麼成功?有哪些細節做的很棒?
※大家都是如何使用Spotify的?
※怎樣才能使用 Spotify ?
※2015 年 4 月 Spotify 估值達 84 億美元,有何依據?估值是偏高還是偏低?
※如何評價Taylor Swift將重新上架Spotify?
TAG:Spotify |