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