揭秘 Spotify 三大核心演算法 :用 Python + AI 打造讓你上癮的「每週新發現」歌單!

【我們為什麼挑選這篇文章】 常常很好奇 Spotify 是如何找出每週高度客製化個人推薦歌單?這篇文章整理出線上音樂 App 推薦系統的發展簡史,再介紹 Spotify 如何利用 Python 數據庫、協同過濾模型、自然語言處理(NLP)模型以及卷積神經系統,打造出超精準「每週新發現」歌單。文章將模型應用解釋得非常清楚,值得一讀!(責任編輯:劉庭瑋)

AI 時代音樂 App 的個人推薦系統背後有著什麼樣的技術?本文將以 Spotify 為例為你作出解答。

每週一,超過一億 Spotify 用戶都會接收到等著他們的新版推薦歌單。其中包含了 30 首用戶從未聽過,但很可能會喜歡的音樂。這一功能被稱作 Discover Weekly,它引發了人們的熱議。

本文作者也是 Spotify 的重度用戶,對於 Discover Weekly 更是青睞有加。這一功能讓我感覺到神奇,它的音樂品位超過了我所認識的任何人。每個星期,它都會向我推薦最喜歡的新歌,找到那些我自己永遠無法找到——但喜歡的東西。

我這個星期的 Discover Weekly 歌單。

事實證明,沉迷 Discover Weekly 的並不只是我一個人,現在 Spotify 已經開始轉變思路,試圖在基於算法的歌曲推薦方面投入更大精力了。

自從 Discover Weekly 在 2015 年出現以來,我一直在試圖研究它背後的技術。它是如何每週為你選好 30 首符合口味的新歌的?首先,讓我們先來了解一下流媒體音樂服務和推薦系統,以及為什麼 Spotify 比它的競爭對手們做得更好。

線上音樂 App 發展簡史

回到 21 世紀初,Songza 開啟了線上音樂服務時代,那個時候,App 還是透過人工管理為用戶提供播放列表的。「人工管理」意味著存在一個「音樂專家」團隊或其他監管者在挑選歌曲編寫播放列表,而用戶拿到的歌單多少取決於個人喜好(後來,Beats Music 也使用了相同的策略)。 手工編輯的歌單本身沒有問題,但它們很難符合每位用戶的音樂喜好。

和 Songza 一樣,Pandora 也是線上音樂服務的元老之一,它使用了稍稍先進一些的方法來代替手動編出的歌單——標記歌曲風格。通過讓聽完音樂的用戶為每首歌打上標籤,Pandora 可以簡單地通過篩選標籤的方式來製作播放列表。

與此同時,在著名的 MIT Media Lab 中,Echo Nest 誕生了,它是一個更為先進的個性化音樂推薦系統。Echo Nest 使用算法分析歌曲的聲音和文本內容,這意味著它可以完成音樂識別、個性化推薦、創建歌單和分析等功能。

最後,Last.fm 又採用了另一種方法並一直沿用到了今天,這種被稱為「協同過濾」的方法與其他方法略有不同。

以上是大多數其他流媒體音樂服務採用的推薦形式,Spotify 神奇的推薦引擎似乎比其他方法更加準確,後者是如何做到的呢?

Spotify 的三種推薦模型

Spotify 其實並沒有發展出依靠單一算法的推薦模型——它參考了其他服務採用的方法,並整合出了自己的最佳策略,構建了名為 Discovery 的引擎。

為了創建 Discovery Weekly 歌單,Spotify 主要使用了三種推薦系統:

1. 協同過濾模型(與 Last.fm 使用的類似),透過分析你的行為和其他用戶的行為來工作。
2. 自然語言處理(NLP)模型 ,透過分析文本來工作。
3. 語音模型 ,通過分析原始音軌工作。

讓我們來深入了解一下這些推薦模式的運作方式吧。

推薦模型#1:協同過濾

首先看看背景:當很多人都聽到「協同過濾」這個詞之後就會想起著名線上視頻網站 Netflix,因為這是第一家使用協同過濾驅動推薦引擎的公司之一,Netflix 使用用戶對於電影的打分類獲知人們對電影的喜好程度並向「類似」用戶進行推薦。

在 Netflix 成功之後,這種方法很快傳播開來,現在評分系統通常是所有推薦模型的基礎。

但與 Netflix 不同,Spotify 不會讓用戶為歌曲評分。取而代之的是,Spotify 的數據來自於隱式反饋——流媒體服務會記錄我們所聽的歌曲,同時留意其他一些數據 ,包括用戶是否將歌曲保存在自己的歌單中,以及是否在聽完歌後訪問了藝術家的主頁等等。

但什麼是協同過濾?它是如何工作的?簡而言之,就像 Daft Punk 所演示的:

這裡面發生了什麼?兩個人都有一些自己喜歡的歌,左邊那位喜歡 P、Q、R 和 S,右邊那位喜歡 Q、R、S 和 T。

協同過濾使用以上數據我們可以這樣認為:

「看來你們都喜歡 Q、R 和 S,所以你們很可能是相同類型的用戶。所以你們應該聽聽對方喜歡——而自己沒聽過的那幾首歌。」

所以我們應該給 Thomas(左)推薦歌曲 P,給 Guy-Manuel(右)推薦歌曲 T,很簡單是不是。

但是把這個方法套用在 Spotify 上,實際上需要分析的是數百萬用戶的喜好,推薦的也是數百萬用戶的歌單,所以我們需要用上 Python 庫。

在這裡,你看到的矩陣是龐大的。每一行代表 Spotify 的 1.4 億用戶的一個(如果你是 Spotify 的用戶,你在裡面有自己的位置),每一列代表 Spotify 3000 萬歌曲庫裡的一首。

在矩陣交點處,當某用戶聽過一首歌后標記為 1,否則為 0。如果我聽了 Michael Jackson 的《Thriller》,那麼在我這行里代表 Thriller 的位置會標記為 1。(注意:Spotify 已經在嘗試讓其中的數字更加複雜,不再僅限 1 和 0)

隨後我們得到了一個非常稀疏的矩陣——所有人聽過的歌都沒有未聽過的歌多,所以這個矩陣的大部分位置都會被「0」填充。但是,少量的「1」包含著決定性的信息。

隨後,Python 庫會運行下面這個公式:

做一些複雜的數學運算……

當這項工作完成後,我們會得到兩種類型的向量,分別由 X 和 Y 來代表。X 是用戶向量,代表一個用戶的歌曲喜好,Y 是歌曲向量,代表一首歌的熱度。

用戶/歌曲矩陣產生兩種類型的向量:用戶向量和歌曲向量。

現在我們擁有了 1.4 億個用戶向量和 3000 萬歌曲向量了。它們本身只是一些數字,但我們可以使用它們來進行很多比較。為了使用這些數據找到與我相近的用戶,協同過濾使用點積比較了我的向量與所有其他用戶的向量。同樣的事情也發生在歌曲向量上,你可以用這種方法來找同類型的歌曲。

協同過濾是一個不錯的方法,不過 Spotify 還要做得更好。

推薦模型#2:自然語言處理(NLP)

Spotify 採用的第二種推薦模型是自然語言處理(NLP)模型。顧名思義,這種模型的數據源來自元數據、新聞、部落格、評論和網路上能找到的其他各種文本。

自然語言處理是讓計算機理解人類語言含義的技術,在業界通常通過情緒分析 API 來實現,NLP 是人工智能下的一個龐大領域。

NLP 背後的技術本文無法詳細解釋,但在此可以介紹一下高級層面上發生的事情:Spotify 會不斷瀏覽網頁, 不斷尋找有關音樂的部落格和其他文本,然後 試圖分析人們對於特定的藝術家和歌曲評價如何——對於這些歌曲,他們都用了哪些形容詞? 在討論歌曲本身的同時, 其他哪些藝術家和歌曲被同時提到了?

在這之中 Spotify 最常提到的就是「文化向量(cultural vector)」或「頂級敘述詞(top term)」了。每個藝人和每首歌曲都有數千個頂級敘述詞。每個詞都有相應的權重,權重則揭示了敘述詞的重要性。(大概是人們用這個詞形容這種音樂的概率)

「文化向量」或「頂級敘述詞」。表格來自 Brian Whitman

 

隨後,與協同過濾類似,NLP 模型會將這些敘述詞的權重生成向量,代表歌曲的屬性,同時比較出類似的歌曲。就是這樣。

推薦模型#3:原始音檔模型

有了以上兩種分析方式,你可能會問這個問題:

我們為什麼還需要分析音檔本身呢?

首先,加入更多的模型可以再次提升推薦系統的準確性。不過事實上,這是引入第三種模型的次要目的: 原始音檔模型主要用於處理新歌推薦任務。

舉個例子,你的音樂人朋友在 Spotify 上發布了新歌——他/她可能只有 50 個聽眾——這意味著幾乎不會有人會對新歌進行協同過濾,由於作者不太知名,網絡上也沒有人討論它,所以 NLP 模型也不會抓取到訊息。幸運的是,原始音檔模型不會關注新歌的出處,有了它的幫助,你朋友的新歌就會和流行歌曲一樣出現在不少人的 Discovery Weekly 上了!

所以,現在的問題是「how」——我們如何透過音檔來分析音樂的風格?這似乎是抽象的。

使用卷積神經網絡!

卷積神經網絡是面部識別系統經常會用到的技術。在 Spotify 上,它被用於處理音頻而不是像素。下圖是一個神經網絡架構的示例:

這個神經網絡由四個卷積層,由圖中左側四個厚一些的矩形表示,三個緻密層,由圖中右側三個矩形表示。輸入訊息是以時間-頻率的形式表示的音檔幀,他們隨後被級聯形成了頻譜圖。

音檔幀通過這些卷積層,隨後在最後一個卷積層會遇到「全局時域池化」層,它會對整個時間軸進行池化,可以有效地計算整首歌中學習到的特徵並進行統計。

所有這些訊息最後都被傳遞到輸出層中,在這裡系統會給出自己對於歌曲風格的理解:它是快節奏的嗎?它是不插電版本的嗎?它適合用作舞曲嗎?所有這些特徵都可以用神經網絡在音檔文件上準確地分析出來。

神經網絡可以分析出節拍、重要部分、風格、速度和吵鬧程度。下圖是 Daft Punk 歌曲《Around the World》30 秒鐘片段的分析示例。

最後,這些對於歌曲的理解讓 Spotify 分析出不同歌曲之間的相似之處,把和用戶收聽列表中存在歌曲的類似新歌推送給你。綜合以上三種方法,Discover Weekly 歌單形成了!

當然,這些推薦模型也與 Spotify 的整個生態系統鏈接,其中包含大量數據,使用大量 Hadoop 聚集推薦結果,並讓這些模型能夠穩定運行在大量數據組成的矩陣、無數網絡文字以及音樂文件之上。現在,每個人都可以擁有自己的專屬新歌單了。(附上 原文連結

(本文經 機器之心    授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈深度| 人工智能如何幫你找到好歌:探秘 Spotify 神奇的每週歌單  〉。)

延伸閱讀

史上最帥人工智慧科學家!他不只是 AI 專家、模特兒,還是個創業家
比人工智慧更迷人的東西是白花花的鈔票——你覺得台灣的新台幣應該要長怎樣?
《MIT 人工智慧產業應用調查》:80% 的產業業者都知道 AI 重要,卻因為高層腦袋水泥轉型不成
【遊戲工程師要失業了?】人工智慧只「看」2 分鐘超級瑪莉歐,就能完美複製它
終結阿茲海默症!人工智慧提早 10 年「認出」失智症患者,準確率高達 84%


科技報橘 LinkedIn 上線!

最新科技產業動態、技術新突破、專業職能技巧提升 ....... 鎖定 TO  LinkedIn 專業品牌,提升職能與產業 Know-how,躋身產業菁英之列 https://www.linkedin.com/showcase/techorange

點關鍵字看更多相關文章: