閱讀156 返回首頁    go 阿裏雲 go 技術社區[雲棲]


私人定製——使用深度學習Keras和TensorFlow打造一款音樂推薦係統

https://yq.aliyun.com/cloud

隨著生活水平的極大提高,人們在很多情況下都會邊聽音樂邊做一些事情,比如在健身房、出行路上等,越來越多的人也開始慢慢走在Hifi發燒友的這一條不歸路上,頻繁地換耳機、換功放等,小編在這裏勸一下大家不要向某米公司的為發燒而生,要學習某米公司的高性價比,發燒永無止境,適可而止就好。那大家有沒有關注一些音樂APP呢,國內做的好的音樂APP有網易雲、蝦米音樂及QQ音樂等,我們會發現這些APP中都會有兩個類似的功能——我喜歡的音樂及每日歌曲推薦,其中我喜歡的音樂這個功能會記錄你喜歡的音樂,而每日歌曲推薦是根據你喜歡的音樂風格來推薦給你一些你未曾聽過的音樂,看起來是不是很黑科技呢?其實這種技術早就存在,被稱作推薦算法,在生活中隨處可見。根據百度百科的定義推薦算法是計算機專業中的一種算法,通過一些數學算法,推測出用戶可能喜歡的東西,目前應用推薦算法比較好的地方主要是網絡。所謂推薦算法就是利用用戶的一些行為,通過一些數學算法,推測出用戶可能喜歡的東西。比如淘寶購物、頁麵定位廣告等。

言歸正傳,本文將利用深度學習向讀者展示一個音樂推薦係統的搭建,感興趣的讀者可以動手嚐試下。國外的音樂獲取沒有國內這麼便利及免費,這也說明國外的月亮一定比國內圓,國內的有些服務確實比國外做的方便。本文作者(後續將以“我”代替)最近幾年已經junodownload網站花了很多錢,主要是購買購買mp3音樂,該網站是一個主要用於DJ數字下載網站,並且是一個巨大的銷售跟蹤平台。

7a069ebc7396db2c12841bb0ab3898d70e2a0bc8

從圖上看該網站是一個豐富的音樂資源分享網站,他們每一首出售提供慷慨的2分鍾試聽MP3文件(國內還是良心)。唯一遇到的問題是網站上尋找一個不是最新的或目前不在銷售排行榜的音樂真的很難。

該網站主要側重於推廣新的內容,並認為新的音樂產生最多的收益,但對於網站上的99%其他銷售能全部跟蹤

78dd01c558fa4794b50497415b826f7371d1d53b

網站目前已經有一些跟蹤建議。在主頁上還有銷售列表、新發布的歌單人員DJ策劃的大量的推薦列表。

最重要的是,在每個單獨的跟蹤/單網頁,窗口的右側會引薦買了這首歌曲的那首歌(類似於亞馬遜網站賣電子書籍)”、“藝術家的其他版本其他版本家唱片公司,這也是有用的

對於這樣一個大型音樂數據庫,我覺得還是缺少根據用戶目前正在聽一的歌曲推薦一些可能也會喜歡歌曲建議一些類似的歌曲類型,這也會增加到購物中的機會等。

如果你能發現音樂是幾年前發布的,並且類似於你喜歡的一個新的歌曲,會不會很酷?當然,Juno網站錯過了不提供這種類型的推薦帶來的潛在銷售

受到最近閱讀博客的啟發,對自己的音樂庫中的歌曲進行音樂流派分類,我決定嚐試用類似的方法來建立一個音樂推薦係統

實現過程

實現這一目標需要采集大量數據、處理和模型訓練步驟。下麵是所有涉及的步驟:

首先要做的第一件事就是下載大量樣本的MP3文件。

網站上超過400000的音樂文件可供銷售,隨意挑選了9不同的音樂流派,然後從每種流派中都隨機選擇1000首。

9流派:

  • 碎拍
  • 舞廳
  • 慢搖
  • 與貝斯
  • 經典電音
  • 嘻哈/ RB
  • 微聲舞曲
  • 搖滾/獨立音樂
  • 迷幻舞曲

在接下來的幾天日子裏,我下載了這些流派總共9000個MP3文件。

一個音頻文件包含的數據太多,所以在這部分的整個過程中的很大一部分本質上是試圖將信息從音樂中濃縮、提取主要特征消除所有的“噪音”。它本質上是一個降維的預處理,這第一階段是音頻轉換成圖像格式。

利用離散傅裏葉變換音頻信號轉換到頻域,處理收集的9000MP3音頻文件,每首歌保存為光譜圖像。光譜圖是一種表示聲音的頻譜隨時間變化可視化,圖片上顏色的強度代表該頻率的聲音振幅。

本文選擇創建單色光譜圖,如下圖所示

3fad27a826eea2b95ca2f8cb3b3555e7aed06369

上圖是20秒左右嘻哈音樂產生的聲音。X軸表示時間Y軸表示聲音的頻率。

為了對這些數據訓練一個模型,需要所有的圖像統一為相同的尺寸,所以所有的光譜圖分割為256×256大小

de7136440cb7f13b961ff0554eaec5bd7ebc4516

切割完圖片後,總共得到185000多張圖片,每一張圖像都標記與它所代表的音樂流派的標簽。

下麵將數據分為訓練集120000張、驗證集45000測試集20000

利用上部分中的圖像數據訓練一個卷積神經網絡,該網絡要學習不同類型的音樂對應的頻譜圖像,所以使用類型標簽訓練該網絡能從圖像識別音樂的類型

38f49f16518ac3c7ab35d26f4d28bf9a9ee4cfbb

上圖是本文搭建的卷積神經網絡模型,可以看到,左上邊的光譜圖像將圖像轉換成一個表示每個像素的顏色數字矩陣;之後數據經過卷積層、池化層以及全連接層等處理後送入到右下角softmax分類器,分類器給出一個9位數的矢量,其中每位分別對應著9音樂流派的概率,最後選擇其中最大概率位置的流派為最終識別流派

卷積神經網絡的表現如何呢?

本文搭建的卷積神經網絡模型能夠以75%的精度分類歌曲的音樂流派,我個人認為結果還是比較好(後續可以調參及調整網絡模型提高識別精度),這是音樂是主觀的,一首歌曲常常會有一個以上的類型。

下麵是每種類型歌曲的分類精度的詳細情況

  • 迷幻舞曲:91%
  • 與貝斯:90%
  • 舞廳:79%
  • 碎拍:78%
  • 經典電音:71 %
  • 慢搖:71 %
  • 搖滾/獨立音樂:70%
  • 微聲舞曲:63%

從結果中可以看到在分類迷幻電音時候表現優異,而分嘻哈/ RB音樂時效果不是很好可能的原因是數據集之間有一些交叉可能導致分類精度較低,比如嘻哈、碎拍和舞廳比較類似迷幻電音完全不同其他8個類型的音樂這可能是其表現優異的原因吧

關於音樂推薦係統

現在有了訓練的神經網絡,該網絡能夠“看清”音樂的頻譜圖,因此我們不再需要softmax分類器,所以移除模型中的全連接層

每個圖像代表超過5秒的音頻信息而每個MP3文件大約2分鍾長,因此每個音樂文件大約對應著23圖像,即獲得23特征向量;然後計算這23個特征向量的均值向量總共得到9000的特征向量;每個特征向量對應著之前下載的9000首歌

回顧整個過程–開始收集9000音頻文件,將其轉化為9000個頻譜圖然後將頻譜圖分成185000個更小的頻譜,並利用這些圖像訓練搭建的卷積神經網絡。最後從所有這些圖像提取185000個特征向量計算其均值得到9000個對應原始音頻文件的平均向量。

基於已經音樂文件提取128個特征,這些特征能夠確定音樂所屬的類型為了創建有著類似特征的推薦歌曲,所以需要找到最相似的向量。為此計算9000向量之間的餘弦相似性。

最後一步是隨意選擇一首歌,然後訓練好的模型從9000首歌曲集中推薦一首與之最類似的音樂(最大的餘弦相似)。

圖是推薦的幾個例子播放的第一首歌是隨機選擇的,第3個例子獲得了類似的推薦。由於網絡受限,播放需要通過外網,圖片下麵對應著播放鏈接。

109019893f688afe0ad73a9f223522e700fa6d97

31f42448ec360ce1afeaac1bc9fa6ed3b13caa1b

214a27a8623331dfe41f33d423b370be451b4cb0

7ba68537ebab14a10702d9b087724ebf52274844

5b7dee5cf5309180a9066325e3d556bd55eab741

5c57e7412c62dc9ee572e1e4d7f3c507a692a82b

整個過程完全無監督的,這點是很厲害的。想象一下,如果聽完這9000首歌後並評估這些歌曲的不同的特征和類別需要花多少時間類似的工作也在潘多拉進行,已經開始嚐試這種音樂基因工程根據這篇文章25個音樂分析師聽完並對10000首歌進行類所花的時間是一個月,而本文的整個項目從開始到完成三個星期,並提取了多達450個不同的音樂特征。該模型的表現與人類的表現類似,並且在查找歌曲不需要任何人預音頻,此外花費極少的時間。

相關代碼

Matthew Murray:數據科學家和分析師

個人主頁https://mattmurray.net/

Linkedinhttps://www.linkedin.com/in/mattsrm/

Github: https://github.com/mattmurray

本文由北郵@愛可可-愛生活老師推薦,阿裏雲雲棲社區組織翻譯。

文章原標題《Building a Music Recommender with Deep Learning》,作者:Matthew Murray譯者:海棠,審閱:李烽

文章為簡譯,更為詳細的內容,請查看原文

最後更新:2017-08-13 22:41:26

  上一篇:go  Psychz租用Switch公司兩個數據中心的空間
  下一篇:go  linux服務器虛擬機配置過程