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