李林,譚瀾蘭,覃嶺
(成都師范學院計算機學院,四川 成都 611730)
隨著各種智能設備和移動互聯網絡的飛速普及,數字音樂已深入人們生活的方方面面[1-2]。個性化音樂推薦現已被眾多互聯網公司和研究機構高度重視,成為最熱門研究課題之一。由于互聯網音樂結構復雜、形式多樣、數據量大等特點,導致廣大受眾群體容易產生信息疲勞[3-4]。為此如何采用新興的個性化推薦技術幫助廣大用戶從海量互聯網音樂數據中提取個人感興趣的曲目就顯得非常必要和有價值。
近年來,國外研究表明,基于上下文的信息,如活動、情緒狀態、一天中的分段時間等等,會對用戶的偏好產生巨大影響。因此,在不少研究人員提出音樂推薦時應考慮這些建議。為此提供基于情感的音樂選擇是其中選擇之一[5]。數字媒體的變革改變了生活的不同方面,也改變了音樂產業和聽眾的收聽習慣。便捷的電子設備和瀏覽器音樂收聽服務的推出,減少了訪問大量音樂的機會。然而,這種訪問最終會給客戶帶來不利影響,即為明確的事務或情緒選擇正確的音樂。用戶在選擇音樂時通常會被許多歌曲淹沒。雖然純粹的推薦性能通常與用戶滿意度相關,但可解釋性對其他因素有積極影響,如信任和寬恕,這些因素最終對保持用戶忠誠度至關重要[6]。
研究人員發現,用戶的情緒狀態對用戶的音樂偏好有很大影響。因此,提及推薦系統中的情緒會以積極的方式影響用戶滿意度,從而使其成為生成音樂推薦時應考慮的重要特征之一[7]。研究者觀察到,當用戶悲傷時,他或她更喜歡聽悲傷和緩慢的音樂,但當用戶高興時,他/她更喜歡聽快樂和歡快的音樂。這在心理學研究領域也被稱為情緒一致性效應。這種情緒一致性可以通過應用情緒分析的概念來計算。這是積極的、消極的還是中性的過程以及在什么背景下發生對推薦有重要影響。最近,許多工作都結合文本數據、語音數據的情感分析進行推薦,取得了不錯的效果[8]。
國內對數字音樂推薦研究同樣發展良好,涌現了大量卓有成效的研究成果[9]。也出現很多知名的個性化音樂電臺,如國內的著名網站:QQ 音樂和163 音樂網站等,但其推薦結果的準確率和覆蓋率都較低,缺乏個性化,往往并不能令用戶真正滿意。
音樂推薦與傳統電影、圖書等其他基于內容推薦相比較為特別,比如:用戶偏好一般用隱式途徑得到。用戶使用音樂可以作為循環播放或者作為工作背景音樂,選擇音樂往往和使用者心情有很高的關聯度。推薦播放列表具有隨機播放特性或者用戶自由選擇,具有很高的隨意性。因此個性化音樂推薦考慮個人偏好和心情特征進行推薦將更具有現實意義[10]。
個性化音樂推薦系統一般包含推薦算法、用戶偏好模型和音樂資源表征所組成。推薦算法有基于內容的、基于協同過濾的和基于深度學習方法的算法。用戶偏好模型有基于用戶瀏覽或者收聽等行為的模型。音樂資源表征要根據歌曲、歌手和專輯等信息進行分析,進行數據預處理比如歸一化、數據清洗等,從而構建音樂特征數據集,作為后續推薦模型的輸入數據[11]。
當前,個性化推薦主要是采用推薦策略或者算法改進來提高推薦效率,往往對推薦對象和用戶的一些語義分析不足。音樂資源特征描述在音樂推薦中具有極其特殊重要性,這涉及音樂文件屬性的類別描述,使用者對歌曲的個人偏好理解以及音樂數字信號特征描述等,這些信息對最終的推薦極具價值。
為此,本文從音樂資源特征描述著手,結合資源數字信號特征分析,從而構建特征模型,在此基礎上實現對音樂的個性化特征推薦。以此為基礎上采用Python語言,通過Django平臺構建了一個實用的個性化音樂推薦系統。
對音樂的語義特征分析顯得尤為重要,音樂中包含大量語義信息。分析這些語義信息中對于個性化推薦極其必要,將極大地提升音樂推薦的準確性,更好地滿足用戶個性化服務需求。
本系統語義特征構建如圖1所示。

圖1 音樂語義特征構建框架
首先,構建音樂語義特征數據集,這里包括各種音樂資源信息的初步語法分析:比如分詞處理,包括中文分詞和英文分詞,然后合并預處理信息輸出到下一環節。
其次,對輸入的音樂語義信息進行分詞處理,提取到關鍵詞。
第三,然后結合語義詞典和音樂領域本體,通過語義映射,對于符合邏輯推理的特征信息直接返回。
第四,對不符邏輯推理的信息,再進一步通過句子相似度分析,結合語義詞典構建語義特征信息,對滿足要求的特征信息并返回結果,否則丟掉這部分信息。
音樂數字特征對推薦有重要的作用,提取方法如圖2所示。

圖2 音樂數字特征提取
首先,通過對每幀數據分解,采用FFT 或DWT 變換,將信息轉換到傅里葉域或離散小波域。
其次在不同子信道上提取特征,合并形成音色特征。
最后,將相鄰音色特征進行特征整合形成瞬時特征。
結合前兩步形成的特征,進行系統表現層的設計,如圖3所示。

圖3 推薦模塊框架
首先將用戶偏好模型與音樂特征集合,推薦通過用戶特征、評論等信息特征化后,結合系統的音樂特征、訓練模型,采用相應的推薦算法進行個性化推薦,構建針對性的推薦結果列表。
推薦和分析結果以BS 方式呈現,采用HTML、jQuery和Django框架等方式進行設計。
系統架構采用Python、Django、Node開發。
前端通過Python、HTML5、jQuery 和Django 平臺實現前端UI 界面。顯示數據通過JSON 接口獲取數據。
服務端通過Django 和Node 實現,采用服務接口提供JSON數據供客戶端調用。同時服務端實現對數據表的增加、讀取、修改、刪除(CRUD)功能。
數據庫采用MySQL 8.0作為數據存儲的軟件。
整個系統涉及表較多,此處僅列出核心表。
1)音樂表結構(music)

表1 music表
音樂表主要記錄歌曲的相關信息,musicName 為歌曲名稱,musicAddress 記錄歌曲播放路徑,music-Type 為歌曲類型,musicLength 為歌曲時長,lyricName為專輯名稱,lyricAddress為專輯鏈接地址。
2)用戶播放表結構

表2 playlist表
用戶播放記錄用戶對歌曲播放的相關信息,userId是用戶編號,musicId 是歌曲編號,playTime 是播放時間,durationTime是播放持續時間長度。
3)推薦表結構
該表記錄系統推薦結果,userId 是用戶編號,musicId 是歌曲編號,Sim 是計算userId 和musicId 之間相似度的值。推薦根據歌曲之間相似度大小,從高到低出現在推薦列表之中。

表3 recommendation表
這三個表中,music 表中id,在playlist 和recommendation 表中misicId 以外鍵方式呈現,Music 和recommendation表中userId為外鍵。
本系統分為前后兩端:
1)前端系統包括
①首頁,用戶進入系統,各子功能導航。
②查詢音樂:查詢數據庫中音樂信息等。
③風行推薦:根據音樂語義信息進行音樂推薦等。
④新歌上線:對系統中當前最新歌曲進行推薦等。
⑤個人偏好:考慮個人偏好信息的語義音樂推薦。
前端首頁如圖4所示,可以看到當前最風行音樂推薦、最新歌曲推薦和根據個人偏好進行的推薦。

圖4 推薦系統前端首頁
2)后端系統
①系統用戶管理:實現對系統用戶和普通前端用戶的管理,實現基本的用戶添加、修改、查詢和刪除功能。
②音樂專輯管理:實現對歌手專輯信息管理,實現基本的專輯信息添加、修改、查詢和刪除功能。
③下載信息管理:管理歌曲下載,實現基本的下載添加、修改、查詢和刪除功能。
④偏好信息管理:設置用戶的偏好,這個對推薦系統非常重要,實現基本的偏好信息添加、修改、查詢和刪除功能。
⑤播放信息管理:管理播放管理,實現基本的添加、修改、查詢和刪除功能。
⑥推薦數據管理:管理推薦數據,實現基本的推薦數據添加、修改、查詢和刪除功能。
⑦評論信息管理:管理評論信息,實現基本評論的添加、修改、查詢和刪除功能。
⑧用戶角色管理:管理用戶角色,實現基本角色的添加、修改、查詢和刪除功能。
⑨歌曲信息管理:管理歌曲基本信息,實現歌曲的添加、修改、查詢和刪除功能。
后端例子如圖5,在一個統一界面中,實現對各種信息的添加、修改、查詢和刪除功能管理。

圖5 后端歌曲信息維護
通過本項目的實施,收獲頗豐,總結如下:
1)重要音樂特征數據集對推薦系統非常重要,這對訓練模型,構建有效推薦系統很關鍵。其次數據的預處理對后期的開發也極具價值,對推薦合理性和準確率影響很有幫助。
2)構建適合于特定數據集的個性化推薦算法。其中涉及音樂中出現的音樂種類、流派和描述信息等信息的特征提取和語義類別判定。
3)推薦具有針對性和用戶特殊性,對不同的用戶群體推薦策略。對于懂得音樂的聽眾,往往需要采用綜合推薦方法,考慮一些更為細致的信息輔助推薦,這樣個性化程度更高。
4)既要用好音樂語義信息,也高度關注用戶相關的社交行為。比如用戶在社交網絡上的活動(比如好友互動、分享信息、搜藏信息等)提供豐富有價值的推薦特征,如果能夠很好地加以利用,則可以更好地對客戶特征進行刻畫,在充分了解基礎的上開展的推薦將會更加精準和有效。
5)構建美觀和跨平臺的UI 設計,對于推薦項目,合理和科學的UI 很重要,對產品的實用性非常重要。本系統采用了最新UI平臺和設計技術,做到了界面美觀,貼近實用。