用深度學習打造自己的音樂推薦系統
姓名:閆偉 學號:15020150038
轉載自:https://zhuanlan.zhihu.com/p/44188154,有刪節。
【嵌牛導讀】:深度學習如今已經在生活的各個方面都被廣泛應用。它也可以用來進行打造音樂推薦系統。
【嵌牛鼻子】:深度學習 音樂推薦系統
【嵌牛提問】:如何用深度學習發現一首歌屬於哪個流派?
【嵌牛正文】:
這些年我(作者 Matt Murray——譯者注)在音樂上可沒少花錢,經常到一個叫JunoDownload的網站上付費下載 MP3 歌曲。這個數字音樂下載網站在 DJ 圈裡很火,在上面能買到各種流派的歌曲。
總之這是一個非常不錯的音樂資源,為在售的每首歌都提供了一個 2 分鐘的 MP3 格式的試聽樣本。唯一的問題是····在這個網站上找到一首老歌實在是太困難了。
這個網站極度熱衷推廣新歌曲,當然這也說得過去,因為新歌賣得火就意味著賺的更多了。但是那些以前的老歌呢?
音樂推薦
其實在 JunoDownload 網站上已經存在一些推薦歌曲,在網站主介面上有在售歌曲排行榜,新歌排行榜,以及由一些 DJ 和網站編輯建立的推薦歌單。
在每首歌的頁面上,視窗右手邊顯示了“購買了這首歌曲的人還買了”,“該歌手釋出的其它歌曲”和“該唱片公司釋出的其它歌曲”,這些資訊倒也有用。
但是坐擁這麼大的一個音樂資料庫,我覺得這個網站上卻唯獨缺少基於內容的推薦型別,比如“你可能還喜歡”,也就是根據使用者當前所聽的歌曲和已購買的歌曲,向使用者推薦他可能喜歡的同類歌曲。
當然我也知道,現在幾乎所有的音樂 App 都已經有這種功能,但是親自用深度學習技術建立一種能幫自己發現歌曲的系統,還是很酷的,對吧?所以我決定搭建一款音樂推薦系統。
過程
要想實現這個目標,需要幾個步驟,包括獲取資料、處理資料和訓練模型。
整個工作流程涉及:
下載 MP3 檔案
我需要做的第一件事就是下載大量 MP3 樣本檔案用作資料。
在爬取網站上超過 40 萬首歌曲檔案的單曲資訊後,我會任意選擇 9 種不同的音樂流派,並按這 9 個流派從每個流派中隨機選擇 1000 首歌曲。
這 9 個歌曲流派是:
碎拍音樂
雷鬼樂
慢搖
鼓打貝斯
經典電音
嘻哈樂
極簡音樂
搖滾樂
迷幻舞曲
在接下來幾天內,我下載了全部 9000 首 MP3 檔案。
將音訊轉換為聲譜圖
一份音訊檔案內包含的資料非常多,所以這一步的大部分工作實質上就是濃縮音樂中的資訊,提取主要特徵並去除所有的噪聲資料。基本上這是一項降維操作,首個步驟就是把音訊轉換為影象形式。
利用離散傅立葉變換法,我將音訊訊號轉換為頻域,以這種方式處理了全部 9000 個 MP3 音訊檔案,為每首歌儲存了它們的聲譜圖。所謂聲譜圖就是聲音訊率的頻譜隨著時間變化的視覺化表示。圖譜中顏色的深淺表示該頻率下的聲音大小。
我選擇建立單色的聲譜圖,如下所示:
這是從嘻哈單曲中生成的約為 20 秒的音訊,其中聲譜圖中 X 軸為時間,Y 軸為聲音訊率。
將影象分為 256 x 256 的正方圖
如果用這些資料訓練模型,我需要將所有的影象具有相等的維度,所以我將全部聲譜圖分割為 256 x 256 的正方圖。這表示每張圖上約為 5 秒的音訊。
現在我總共有超過 18 萬 5 千張影象,每張影象都有一個標籤,註明了音樂流派。
我將資料分為包含 12 萬張影象的訓練集、包含 4 萬 5 千張影象的驗證集和 2 萬張影象的 Holdout 驗證集。
用影象訓練一個卷積神經網路
我用我的影象資料訓練了一個 CNN 網路,我需要教它來識別不同型別的音樂在聲譜圖影象中“看起來”是怎樣的,所以我使用了音樂流派標籤訓練它從影象中識別音樂流派。
下面是 CNN 工作流的視覺化圖:
首先以上圖左上角的聲譜圖開始,將它轉換為一個由表示每個畫素中顏色的數字組成的矩陣。從這裡開始,資料會經過工作流中的多個層級,每經過一層,矩陣的形狀就會被轉換,直到最終抵達右下角的 softmax 分類器。這個分類器是一個由 9 個數字組成的向量,包含了 CNN 將 9 個音樂流派分配給聲譜圖的概率。
還有一步就是全連線層,這是一個由 128 個數字組成的向量,它們實質上是在影象經過多個網路層傳遞後從中提取的 128 個音樂特徵。思考這一層的另一種方法是原始影象中的所有關鍵資訊都已濃縮為“解釋”影象的 128 個數字。
那麼我們怎麼使用 CNN 模型呢
經過訓練後,模型能夠以 75 的準確率分類音樂流派,我覺得這個準確率還可以,因為劃分音樂流派有時是相當主觀的,而且音樂有時常常也不止一個流派。下面是模型分配各個流派的準確率:
碎拍音樂:91%
雷鬼樂:90%
慢搖:79%
鼓打貝斯:78%
經典電音:71%
嘻哈樂:71%
極簡音樂:70%
搖滾樂: 63%
迷幻舞曲:61%
模型為歌曲分配音樂流派的效果還是很不錯的,我懷疑嘻哈樂、鼓打貝斯和慢搖之間可能存在一些交叉,這可能導致了分類準確率降低。由於碎拍樂和其它 8 種流派區別很大,所以這可能是為何模型分類它的準確率很高的原因。
不過,這些數字對我來說並不是最重要的,我真正關心的是模型能否區分不同型別的音樂。
音樂推薦系統
現在我已經訓練了一個能在聲譜圖上“看”音樂的神經網路,不再需要 softmax 分類器了,所以移除了這一層,併為資料集中全部 18 萬 5 千張影象提取了它們的 128 個音樂特徵向量。
每張影象僅表示大約 5 秒長的音訊,樣本 MP3 檔案總共長 2 分鐘,我大約有 23 張影象——因此每個音樂檔案會有 23 個特徵向量。我計算了每首歌的平均向量,得到了 9000 個特徵向量,每個對應我最初下載的 9000 首歌曲中的每一首。
和開頭一樣,我把這 9000 個音訊檔案轉換為 9000 張聲譜圖,將它們分割為 18 萬 5 千張更小的聲譜圖,再用它們訓練一個卷積神經網路。然後我從這些影象中提取了 18 萬 5 千個特徵向量,為 9000 個原始音訊檔案計算了它們的平均向量。
此時已經從音樂檔案中提取了 128 個特徵,這些音樂檔案都有不同的音樂特點。那麼為了建立能推薦具有相似特點的歌曲的推薦系統,我只需找到哪些向量彼此最相似。要得到這個結果,我需要計算出 9000 個向量的餘弦相似性。
歌曲推薦
最後一步就是隨機選擇一首歌,然後讓模型從我下載的 9000 首 MP3 歌曲資料集中返回相似音樂(具有最大餘弦相似性的歌曲)的最佳推薦。
結語
我覺得整件事情最酷的地方就是完全不用人監督,想象一下,如果你自己一首接一首的聽完這 9000 首歌曲,為它們標記好流派,這得花多長時間啊。假設你有一百萬首歌曲呢?
所以我對我建立的這款音樂推薦系統還是很知足的,它能在無需人類事先聽取音訊的情況下,很好地找到風格很相似的歌曲。
本專案程式碼地址:
https://github.com/mattmurray/music_recommendergithub.com
mattmurray/juno_crawlergithub.com
參考資料:http://mattmurray.net/building-a-music-recommender-with-deep-learning/
相關文章
- 雲音樂推薦系統(二):推薦系統的核心演算法演算法
- 深度學習在推薦系統中的應用綜述(最全)深度學習
- 實時增量學習在雲音樂直播推薦系統中的實踐
- RecSys提前看 | 深度學習在推薦系統中的最新應用深度學習
- 實時增量學習在雲音樂直播推薦系統中的工程實踐
- 一文綜述用於推薦系統的所有深度學習方法深度學習
- 《推薦系統學習》之推薦系統那點事
- 網易雲音樂基於使用者的推薦系統
- 我的推薦系統學習之路
- 網易雲音樂推薦系統簡單實現系列
- YouTube深度學習推薦系統的十大工程問題深度學習
- 推薦系統遇上深度學習(二十一)--階段性回顧深度學習
- Spotify 每週推薦功能:基於機器學習的音樂推薦機器學習
- 「推薦系統的廣泛和深度學習」- 論文閱讀和翻譯深度學習
- 問題解決:構建基於深度學習架構的推薦系統!深度學習架構
- 基於深度學習的圖書管理推薦系統(附python程式碼)深度學習Python
- 如何自己打造一個深度學習伺服器?深度學習伺服器
- 機器學習/深度學習書單推薦及學習方法機器學習深度學習
- 推薦系統實踐學習系列(三)推薦系統冷啟動問題
- 用Mcafee打造自己的安全系統詳解
- 19期推薦系統實踐學習(二)
- 基於深度學習模型Wide&Deep的推薦深度學習模型IDE
- 智慧教育深度學習推薦系統---1.2.合成推薦演算法CKE解讀和演算法實現1深度學習演算法
- 乾貨 | 個性化推薦系統五大研究熱點之深度學習(一)深度學習
- 在Python中實現你自己的推薦系統Python
- 【恩墨學院】深度學習在美團點評推薦平臺排序中的運用深度學習排序
- 學習Django的推薦Django
- 推薦系統[八]演算法實踐總結V0:騰訊音樂全民K歌推薦系統架構及粗排設計演算法架構
- 深度學習實驗資料集網站推薦深度學習網站
- Flink + 強化學習 搭建實時推薦系統強化學習
- 【推薦】最常用的Python機器學習及深度學習庫合集!Python機器學習深度學習
- Linux系統推薦學習的程式語言以及經驗Linux
- 推薦系統
- Talroo使用Analytics Zoo和AWS利用深度學習在工作推薦上的應用深度學習
- 教你用深度學習LSTM網路預測流行音樂趨勢(附程式碼)深度學習
- 學Python用什麼系統環境好?推薦Linux系統!PythonLinux
- 達觀資料:深度學習來一波,受限玻爾茲曼機原理及在推薦系統中的應用深度學習
- 【推薦系統篇】--推薦系統之訓練模型模型