东南亚版“QQ 音乐”:JOOX 的音乐推荐重构之路
作者:karrysong,騰訊 CDG 應用研究員
通過大量使用 Embedding 的策略,對 JOOX 的推薦系統進行了一次重構。
JOOX 是一個在國內低調,在海外尤其是東南亞地區卻可以和 Spotify、YouTube Music 等知名大廠形成市場份額五五開的音樂播放產品。
為了進一步提高用戶體驗,讓用戶能夠更輕松的享受音樂。我們通過大量使用 Embedding 的策略,對 JOOX 的推薦系統進行了一次重構。
Why All In Embedding
JOOX 的音樂推薦場景和我們熟知的 QQ 音樂等比較相似,主要包含 Daily Music、動態歌單、專輯、歌手等場景的推薦。不同的是涉及到的國家地區比較多,會遇到語言、風俗習慣、品味差異等在國內極少遇到的問題。與此同時,我們還面臨著計算資源緊張、數據存儲壓力大、GPU 資源匱乏等不可抗力因素的制約。
上述的種種問題就需要我們能夠建立一套不怎么耗費資源且高效的系統進行內容推薦,而且還要保證結果的可控性。特別是面對馬來西亞、泰國等風俗習慣特殊的國家,錯誤的推薦內容會讓他們認為是產品 Bug。同時,在音樂等內容推薦的場景中,我們其實是很難給計算機找到一個合適的表達,告訴他這是什么并讓他理解這個內容的含義,除非你愿意人工的給每個音樂和用戶打上各種標簽。
Embedding 向量作為一種復雜特征的降維表達,在 ML 中具有非常重要的意義,說他是最強的Info Representation也不為過。除了可以直接用于 CTR 模型的特征外也可以通過 Embedding 的結果計算 Item 或者 User 之間相似度進行推薦。同時,Embedding 不需要太過實時的學習,一次學習,受用一周,極大的減少了資源的消耗。而且當前訓練好的模型可以作為下次訓練的 Pre Trained 模型,等于是一個可持續發展的模型,通過不斷的構造新的“語料”,模型甚至可以和你的產品一起進行成長。
What Is Important For Embedding
無論是什么 Based Embedding,都離不開下面幾個核心的問題:
構建 Doc(訓練樣本)的方式----不同的 Doc 構建方式(樣本收集)代表了 Embedding 不同的表達內容。
如何通過模型讓 Vector學到東西----包含模型的選擇“label”確定。
效果的評估----形如 Word2Vector 這種非監督的模型,效果的評估是非常重要的。
使用方式----不同的 Embedding 如何應用到合適的場景中。
下面的內容,也將主要圍繞這幾個方向介紹我們的策略。
How To Embedding
推薦系統的核心就是尋找用戶和內容之間的關系,因此我們的 Embedding 也主要分為這兩大部分。不過基于不同的內容和場景,我們采用的 Embedding 的方式也不盡相同。
歌曲
Word2Vector
Doc 的選擇
一個session內用戶產生有效收聽的歌曲 list,我們嘗試了基于時間維度的 session、基于 action 的 session、基于聽歌數量的 session 分別做 Doc 進行訓練。最終發現基于用戶截斷 action 的 session 做 Doc 效果是最好的。
直接使用用戶自建歌單做 Doc,并通過內容和數量的限定來保持 Doc 的可用性。
Model and Train
由于用戶聽歌行為 List 是一個非常Dense的序列,采用常規的 SKIP-GRAM Object 用 Negative Sampling 訓練即可。
評估
除了一些主要的離線指標之外,我們主要依賴各個地區的編輯反饋我們計算出來的相似歌曲和 ABTest 來進行評估。
在驗證的過程中,我們發現不僅能將同“品味”的歌曲聚合在一起,還能將不同風格的歌曲聚合在一起。
基于 CNN 的音頻頻譜特征提取
歌曲除了歌詞和風格之類的特征外,還有音頻信號所代表的音色、音調等信息,這些特征如果用 Vector 表示出來也是一個非常 powerful 的信息。
我們選擇將音樂的音頻信號轉化為頻譜,然后通過CNN做一個圖片分類,Label 是一個 128 維的向量,代表這個音樂的音色信息。
我們將最終 softMax 輸出的結果作為一種 Music 的表示。
User
NN Based
這里我們參考了Youtube之前發的一個 paper,通過一個 DNN 來同時獲取 user 和 item 的 Embedding 表示。
這里最關鍵的得到 User 的 Embedding 表示,因此我們用到的特征都是 User 相關的,如用戶的長短期興趣、用戶的行為數據、用戶畫像等。Label 就是用戶感興趣的歌曲,大概 30W 個左右。
模型訓練完成后,我們需要將 DNN 的Last Layer作為 User 的 Embedding 表示,SOFTMAX 的權重就是 Item 的 EMbedding 表示。
Music Average
另外還有一種簡單的方式得到用戶的 Embedding,就是將用戶最近收聽的歌曲 Embedding 做均值得到。
How To Use Embedding
Embedding 的建立對整個推薦系統來說是一個非常重要的環節,不僅可以用于召回源的構建,也可以作為 CTR 模型的特征,提高模型準確率。
召回策略
相似歌曲、用戶、歌手
當我們有了 Music 的 Embedding 表示后,就可以通過cosine距離來計算得到用戶喜好歌曲、歌手的相似歌曲、歌手來給用戶進行推薦。
同樣的,也可以通過相似用戶的計算,給用戶推薦相關歌曲。
inner product
之前提到的 NN Based 方式獲取的 Embedding,由于 User 和 Item 的 Vector 是在同一個向量空間的,因此我們可以通過內積的方式計算一個分值,倒排后給用戶進行推薦。
精排特征
User Interest Embedding
用戶喜好的歌手和歌曲是非常多的,但是興趣值卻相差甚遠。如果簡單的用 Average 來得到歌手或者歌曲的興趣表示其實是有一定問題的。因此,我們采用了 CNN 中POOLING的策略,將用戶歌手、歌曲的興趣做了重分配。
User Short Interest Embedding
用戶最近收聽的歌曲按照時間前后分配不同的權重對歌曲 Embedding 進行Average處理。
用戶搜索點擊的 Token Embedding。
User Dislike Embedding
主要包含用戶不喜歡的歌手、歌曲的 Embedding
JOOX Embedding In The Future
目前我們采用的 Embedding 方式都是較為簡單的 word2vector 或者 DNN 的方式,前期主要是為了高效的完成整個流程驗證策略的可行性。后續也是我們現在正在做的,要通過一些更為高階的方式構建 User 和 Item 的 Embedding,例如 Transform 和 Graph Embedding 的種種方式,進一步的提高 Embedding 的表征能力。
騰訊技術課直播預告:
4月28日(今天)晚上8點-9點
總結
以上是生活随笔為你收集整理的东南亚版“QQ 音乐”:JOOX 的音乐推荐重构之路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三年之久的 etcd3 数据不一致 bu
- 下一篇: Golang 性能优化实战