基於音頻信號的深度音樂推薦

(翻譯整理自Dieleman的博客)

針對不同用戶推薦合適的音樂是每個音樂類軟體都希望實現的目標。本文從傳統的協同過濾方法的優缺點說起,引出一套基於音頻信號的音樂推薦演算法,並在最後對實現的深度神經網路進行可視化剖析,理解模型的運行原理。

協同過濾

協同過濾是音樂推薦的一種基礎方法,基本原理是通過歷史使用數據來判斷用戶的喜好。舉個例子,如果有兩個用戶聽了大量相同的歌曲,那他們的興趣應該是基本類似的。從歌曲角度來講,如果兩首歌被同一組人群聽過的話,那這兩首歌曲也可以被認為是類似的。上面說的兩個角度也就是所謂的User-based和Item-based。這些信息是可以用來作為推薦的。

單純的協同過濾是不需要知道歌曲內容的,同樣一開始也不需要知道你是個什麼樣的人。所以這個方法的優勢就是其適用性非常強,可以同樣用於書本推薦和電影推薦等。

然而這個方法也有一個非常大的缺點,由於它採用的是歷史使用數據,這也導致了那些比較流行與大眾的內容更容易被推薦,而小眾或者不知名的歌曲則基本不會被推薦到。這也使得這類推薦演算法得到的結果會稍顯無聊。

另一個問題是用戶在聽歌的時候,歌曲的分布是不純粹的,當你在聽某個專輯的時候其實有很多歌並非是你喜歡的,另外專輯中有很多類似轉場的音樂的內容其實對於推薦來說是無關的。協同過濾並不會考慮著一些問題。

不過綜合下來,最大的問題還是那些新歌和非主流的歌曲無法被推薦。這個可以被認為是一個冷啟動問題。我們希望能夠把合適的新歌及時推薦給用戶,或者推薦一個用戶從沒聽說過的樂隊。為了這些目標,我們需要尋找一個不一樣的方案。

基於內容的推薦

對於歌曲而言,可以獲取到的內容信息包括了:標籤、歌手、專輯信息、歌詞、用戶評論以及音頻信息本身。在這些信息中,最難高效利用的應該是音頻信號本身。在歌曲音頻和用戶偏好之間有一個較大的鴻溝,需要我們通過各種方法從音頻中提取信息,比如一些比較便於提取的像:音樂的類型或者使用的樂器等等。剩餘的一些信息稍微難一些,比如歌曲所傳達的情緒,歌曲所在的時期。還有一些信息基本從音頻是不可獲取的:歌手的地區和歌詞的主題。

儘管有那麼多挑戰,但有一點是很清晰的,歌曲的音樂本身會決定了你是否喜歡這首歌。對於歌曲音頻信號本身的分析是非常重要且有意義的。

深度學習預測聽歌習慣

本文採用的方案是通過現有的協同過濾模型進行訓練,訓練得到一個回歸模型(深度神經網路),可以通過這個模型預測得到每首歌的隱含表達式。

這個方法的理念是根據協同過濾模型把用戶和歌曲投影到一個低維度的隱含空間里,歌曲的位置包含了所有影響用戶聽歌習慣的因素。如果兩首歌在這個空間中非常靠近,那麼可以說它們是類似的曲目。如果一首歌非常靠近某個用戶,那這也許是一個很好的推薦選項(假設用戶還沒有聽過)。如果我們可以通過歌曲的音頻預測出歌曲在空間中的位置,那我們就可以在不使用歷史數據的情況下推薦音樂了。

訓練後的模型可以通過t-SNE演算法降維到二維空間用於可視化展示,可以從下圖看到,同類型的歌曲會聚集到一起,比如下圖中左上角是Rap,而最下方是電子樂。

架構

音樂推薦深度神經網路的架構圖如下所示,包含了四個卷積層和三個稠密層,可以看出對於音頻和圖像,卷積層的設計差別還是非常大的。

這裡省略了細節設計,如果感興趣的話可以直接閱讀原文。

分析

這裡可以說是最酷的部分了。到底這個神經網路學到了什麼?這些特徵到底看起來是什麼樣子的?使用卷積神經網路來處理這個問題的主要原因是在於,通過音頻信號推薦音樂是一個非常複雜的問題,需要很多級的抽象。如同處理圖像分類問題一樣,連續的神經網路層級可以提取更多複雜的抽象特徵。

1. 輸入層

首先是神經網路的輸入,這裡每一次的輸入是3秒鐘音頻片段的頻譜。對於一段長音頻來說,可以把3秒作為一個時間窗口,把歌曲可以切成N多個片段,把這麼多個片段的預測值做一個平均。

這裡具體的計算是將音頻信號的各個窗口做一次傅里葉變換,每一次傅里葉變換可以構成一幀,這些連續幀連接在一起形成一個聲音頻譜。最後一步是將頻率的時間軸從線性轉換為梅爾刻度以降低維度。最終的輸入是梅爾頻譜(599幀/128個頻點)。

2. 隱含層第一層

讓我們來觀察第一個卷積層(直接對應的是輸入頻譜),這個卷積層已經學習到了一組filter,而這些filter是可以簡單可視化的,如下圖所示,負值是紅色,正值藍色,0是白色。每一個filter僅包含4幀的寬度,各個filter之間以垂直紅線分割。

橫軸是時間軸,縱軸是頻率從下至上由低到高

從圖像中可以看出,大部分filter在各個頻率下,紅藍分布很均勻,說明它們過濾出了歌曲的背景音樂或者是和聲部分。而另一些filter則指向性很明確,在某些特定的頻率出現升高或降低,說明這些filter探測到了演唱者的人聲。

進一步的測試發現了一些有意思的現象(原文中包含了某些測試集的演示),這些filter甚至探測出了音頻中特定的音高與和弦,可見這些細微的因素也會影響到人們對於歌曲的偏好。

3. 隱含層最後一層

神經網路的每一層都會從前一層的輸入中提取更高維度的抽象並傳輸給下一層。輸出層前一層的全連接網路基本可以挑選出歌曲的子類型了。這裡已經不需要通過頻譜進行可視化分析了,每一個filter基本可以代表一個特定的分類或者某幾個分類。有些filter還很有意思地區分了語言(比如中文歌曲),還有些定位了某種語言下的特定歌曲類型(像西班牙Rap音樂)。

這一層的設計主要參考了AlexNet,可見除了圖像分類問題,這些filter對於音頻信號的信息提取也非常有用。

4. 輸出層

輸出層為一個40維的空間向量。我們可以將測試數據放入訓練完成後的模型,對每一首歌找到各自距離最相近的其它歌曲,從而可以列出多個基於相似度生成的歌單。從結果來看,效果雖然不是最完美,但還是非常不錯的,這裡就不列出結果了,感興趣也可以去原文看。

總結

這篇文章整理了基於內容的深度學習音樂推薦系統,系統的具體設計內容都可以在這篇論文Deep content-based music recommendation里找到。


推薦閱讀:

數據分析神器Tableau——讓你的數據會說話
BOSS直聘行業信息爬取與分析(二)
可視化辭典 Visual vocabulary
人民日報中央廚房獲評「2017年大數據優秀應用案例」
運動軌跡熱力圖中的台灣導彈基地安全隱患

TAG:深度學習DeepLearning | 音樂 | 數據可視化 |