人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

李澤南發表於2017-10-14
AI 時代音樂 App 的個人推薦系統背後有著什麼樣的技術?本文將以 Spotify 為例為你作出解答。

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

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

它長這個樣子:

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

我這個星期的 Discover Weekly 歌單。

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

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

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

線上音樂 App 發展簡史

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

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

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

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

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

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

Spotify 的三種推薦模型

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

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

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

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

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

推薦模型 #1:協同過濾

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

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

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

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

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

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

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

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

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

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

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

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

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

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

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

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

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

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

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

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

使用者/歌曲矩陣產生兩種型別的向量:使用者向量和歌曲向量。

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

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

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

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

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

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

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

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

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

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

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

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

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

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

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

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

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

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

使用卷積神經網路!

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

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

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

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

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

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

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

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

人工智慧如何幫你找到好歌:探祕Spotify神奇的每週歌單

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

相關文章