田杰,胡秋霞,司佳豪
(西安航空學院計算機學院,陜西西安 710077)
面對成千上萬的音樂,人們可能會在海量的音樂中聽到一首比較喜愛的音樂,但是不能每次都遇到喜愛的音樂[1-2]。而音樂推薦系統(tǒng)可以很好地為用戶提供想要聽的音樂。
基于網(wǎng)易云的音樂內(nèi)容,平臺會記錄用戶在網(wǎng)易云平臺的所有行為,最終會結合用戶畫像和用戶行為為用戶推薦相關歌曲[3-4]。龔志等[5]提出了基于多模態(tài)的音樂推薦系統(tǒng)。彭程、張瑞旸、胡昌平等分別對睡眠音樂、場景變化的實時音樂和融合個體興趣與群體認知的音樂個性化推薦模型和系統(tǒng)進行了研究[6-8]。鮑美英、李濤等分別設計了基于Android 的音樂推薦系統(tǒng)和基于協(xié)同過濾算法的自動化隱式評分音樂雙重推薦系統(tǒng)[9-10]。
以上研究者在音樂推薦系統(tǒng)方面都取得了一定效果。但是音樂搜索方法已經(jīng)變得越來越落后,所以需要發(fā)展一個更先進的搜索方法更好地為用戶進行音樂推薦。文中設計了基于深度信念網(wǎng)絡(DBN)的音樂推薦,通過深度信念網(wǎng)絡進行無監(jiān)督的訓練,得到可以進行相似度計算的音樂向量,有效地提取到音樂特征并且完成分類,通過深度信念網(wǎng)絡模型的訓練得到音樂彼此之間的向量關系,將這些彼此的音樂向量進行皮爾遜相關系數(shù)的計算,按音樂間彼此的相似度進行降序排序,以此來完成最終的音樂推薦,形成服務于用戶的個性化音樂推薦系統(tǒng)。
文中設計了基于音樂內(nèi)容和深度信念網(wǎng)絡的音樂推薦系統(tǒng),推薦系統(tǒng)的詳細過程如圖1 所示。該音樂推薦系統(tǒng)第一步先將音樂數(shù)據(jù)全部獲取,第二步在得到這些音樂數(shù)據(jù)后將這些數(shù)據(jù)進行預處理,得到適合于模型輸入的數(shù)據(jù),第三步將這些數(shù)據(jù)輸入到已經(jīng)建立好的DBN 模型中進行訓練,第四步是訓練后得到一個音樂推薦列表,最終形成音樂推薦系統(tǒng)。
圖1 音樂推薦系統(tǒng)流程圖
該系統(tǒng)選用的是網(wǎng)易云音樂中的數(shù)據(jù)[11]。網(wǎng)易云是一個人們比較成熟的音樂產(chǎn)品,該文系統(tǒng)在網(wǎng)易云龐大的音樂數(shù)據(jù)中共選擇了1 200 首音樂,一共分為10 類,分別是電子、爵士、搖滾、鄉(xiāng)村、朋克、輕音樂、古典、說唱、民謠和中國風共10 類,這些音樂數(shù)據(jù)就是該文音樂推薦系統(tǒng)所依賴的數(shù)據(jù),在此數(shù)據(jù)上進行構建,如圖2 所示。
圖2 10類音樂數(shù)據(jù)
所采用的音樂數(shù)據(jù)是MP3 格式,所以首先需要處理的是將MP3 格式進行轉換,將格式轉換后接著就要用到梅爾倒譜系數(shù)(MFCC)進行數(shù)據(jù)處理。梅爾倒譜系數(shù)是在Mel標度頻率域提取出來的倒譜系數(shù)。
主要將MP3 格式轉換為輸入模型的數(shù)據(jù)。首先將這些不同類別的音樂用編碼表示,分別是0到9,然后分別讀取每首歌曲,讀取每首歌曲需要耗費的時間是非常巨大的,故在此過程中需要等待將所有的數(shù)據(jù)讀取好,之后使用torchaudio直接讀取MP3文件,通過梅爾倒譜系數(shù)提取原始特征得到一個新的向量[12-14]。
MFCC 參數(shù)提取包括預加重、分幀、加窗、快速傅里葉變換、三角帶通濾波器和離散余弦變換(DCT)計算,其計算流程如圖3 所示。
圖3 MFCC計算流程
2.3.1 輸入和輸出層設計
首先將這些不同類別的音樂用編碼表示,分別是0 到9。然后分別讀取每首歌曲,使用torchaudio可以直接讀取MP3 文件,然后通過MFCC 提取原始數(shù)據(jù)特征得到一個新的向量,因為提取后的數(shù)據(jù)長度太大,無法直接輸入模型,故將數(shù)據(jù),也就是一首歌曲拆分成很多段相同長度的段,每段一共包含2 500 幀,然后將得到的數(shù)據(jù)分別保存成Tensor 形式。Pytorch 的數(shù)據(jù)類型為各式各樣的Tensor,Tensor可以理解為高維矩陣。
讀取上一步的數(shù)據(jù),然后設置數(shù)據(jù)迭代器。迭代器是一種對象,每個迭代器對象代表容器中的確定的地址。batch_size=512 表示每次訓練的批量數(shù)目為512 個,visible_units 表示初始輸入的向量長度為1 000。
2.3.2 隱藏層節(jié)點數(shù)的選擇
輸入層中的神經(jīng)元數(shù)量等于正在處理的數(shù)據(jù)中的輸入變量的數(shù)量。在輸出層中的神經(jīng)元的數(shù)量等于與每個輸入相關聯(lián)的輸出的數(shù)量。
通常,對所有隱藏層使用相同數(shù)量的神經(jīng)元就足夠了。對于某些數(shù)據(jù)集,擁有較大的第一層并在其后跟隨較小的層將導致更好的性能,因為第一層可以學習很多低階的特征,這些較低層的特征可以饋入后續(xù)層中,提取出較高階特征。
該音樂推薦系統(tǒng)RBM 有兩個隱藏層,分別為512和256個單元,DBN 的訓練過程分為兩個步驟,第一個步驟是分別訓練兩個RBM 隱層,RBM 訓練是無監(jiān)督學習,然后到第二個RBM 的隱層,第二個步驟是訓練整個模型。DBN 是由兩個RBM 和一個BP 全連接構成的。
2.3.3 激活函數(shù)的選擇
激活函數(shù)(activation function):在多層的神經(jīng)網(wǎng)絡中,上一層的神經(jīng)元(neuron)信號,即線性單元wx+b算出的結果,要輸入到下一層,但是這個信號在輸入到下一層之前需要一次激活f=sigmoid(wx+b),或f=ReLU(wx+b)。需要選擇一些信號在下一層的神經(jīng)元激活。
文中使用自適應時刻估計算法(Adaptive Moment Estimation,Adam)。該方法通過存儲AdaDelta 的指數(shù)衰減平均值,保持了先前梯度的指數(shù)衰減平均值。這一點與動量類似,該音樂推薦系統(tǒng)應用的就是Adam 算法[15]。
2.3.4 損失函數(shù)的選擇
損失函數(shù)是一種衡量損失和錯誤(這種損失與“錯誤”地估計有關,如費用或者設備的損失)程度的函數(shù)。
交叉熵損失函數(shù)經(jīng)常用于分類問題中,特別是在神經(jīng)網(wǎng)絡做分類問題時,也經(jīng)常使用交叉熵作為損失函數(shù),此外,由于交叉熵涉及到計算每個類別的概率,所以交叉熵幾乎每次都和sigmoid函數(shù)一起出現(xiàn)。
用神經(jīng)網(wǎng)絡最后一層輸出的情況,來看整個模型預測、獲得損失和學習的流程:神經(jīng)網(wǎng)絡最后一層得到每個類別的得分scores,該得分經(jīng)過sigmoid 函數(shù)獲得概率輸出,模型預測的類別概率輸出與真實類別的one hot形式進行交叉熵損失函數(shù)的計算[16-19]。
音樂推薦系統(tǒng)的目標是為在線音樂用戶提供個性化推薦服務,收集用戶在聽音樂過程中的行為,并進行分析,幫助用戶發(fā)現(xiàn)可能感興趣的歌曲,自動生成音樂播放列表。在所有音樂的相似度計算完畢之后,根據(jù)最前的三首歌曲相似度進行推薦。最終得到一個列表,此列表最終呈現(xiàn)的是跟這首歌相似度最高的三首歌曲。
該音樂推薦系統(tǒng)采用Python 語言,使用Pytorch庫。Pytorch 是一個對多維矩陣數(shù)據(jù)進行操作的張量(tensor)庫,廣泛應用在機器學習相關應用場景中。
音樂推薦系統(tǒng)在經(jīng)過了模型訓練之后會生成一個音樂之間的一個向量列表,部分列表如圖4 所示。
圖4 歌曲向量相關系數(shù)
圖4 顯示的是經(jīng)過訓練后所得的歌曲向量相關系數(shù),這些系數(shù)還需要經(jīng)過處理后才可以得到最終的推薦。
得到歌曲向量相關系數(shù)后需要經(jīng)過皮爾遜相關系數(shù)進行計算,經(jīng)過計算后會得到每首歌曲與其他歌曲的相似度,0 為最少,1 為最大,但是相似度1 可能不會出現(xiàn),圖5 是音樂相似度列表。
圖5 顯示的是部分歌曲的相似度。可以看出歌曲本身與自己的相似度是零,但是與其他歌曲的相似度各不相同,有比較低的,也有比較高的,但是最終要形成一個音樂推薦表,還需要進行最終的處理。
圖5 音樂相似度列表
得到音樂相似度之后,需要將最靠前的三首歌曲相似度作為最終的推薦,這三首歌曲就是這一首歌最終得到的推薦歌曲列表,圖6 是部分推薦歌曲的結果。
圖6 中,一共有1 200 首歌曲形成最終的推薦,此圖只是截取了部分歌曲的推薦列表。
圖6 音樂推薦列表
音樂推薦系統(tǒng)可以精確到特定一首歌,比如當聽到Galen Crew-Sleepyhead 這首歌,可以通過此音樂推薦系統(tǒng)得到最高的3 個相似度歌曲Skeeter Davis 的The End of the World、Garth Brooks 的Mom 和Keren Ann 的Right Now &Right Here,意思是對于喜歡聽Galen Crew-Sleepyhead 的用戶來說,這三首歌是最佳選擇。
該系統(tǒng)最終的展示成果就是產(chǎn)生一個最相似的三首歌曲列表,經(jīng)過相似度的比較,共為1 200 首歌曲產(chǎn)生了推薦列表。
該音樂推薦系統(tǒng)基于內(nèi)容和深度信念網(wǎng)絡,首先進行梅爾倒譜系數(shù)的轉換,以網(wǎng)易云音樂中的部分數(shù)據(jù)作為樣本,將音樂數(shù)據(jù)轉換為網(wǎng)絡模型需要的數(shù)據(jù);設計了基于深度信念網(wǎng)絡(DBN)的音樂推薦,利用深度信念網(wǎng)絡的深度學習模型來提取音樂特征。通過無監(jiān)督的訓練得到進行相似度計算的音樂向量,有效地提取到音樂特征并且完成分類,通過深度信念網(wǎng)絡模型的訓練得到音樂彼此之間的向量關系,將這些彼此的音樂向量進行皮爾遜相關系數(shù)計算,得到音樂間彼此的相似度,將這些相似度從大到小進行排序,最終形成相似度最高的三首音樂推薦列表來完成最終1 200 首歌曲的音樂推薦。