網(wǎng)易云音樂推薦系統(tǒng)的冷啟動(dòng)技術(shù)
一、問題背景:冷啟動(dòng)建模的必要性和重要性
作為一個(gè)內(nèi)容平臺,云音樂每天都會有大量的新內(nèi)容上線,雖然相較于短視頻等其它平臺,云音樂平臺的新內(nèi)容數(shù)量相對較少,但實(shí)際數(shù)量可能遠(yuǎn)遠(yuǎn)超出大家的想象。同時(shí),音樂內(nèi)容與短視頻、新聞、商品推薦又有著顯著的不同,音樂的生命周期跨度極長,通常會以年為單位,有些歌曲可能在沉寂幾個(gè)月、幾年之后爆發(fā),經(jīng)典歌曲甚至可能經(jīng)過十幾年仍然有著極強(qiáng)的生命力。因此,對于音樂平臺的推薦系統(tǒng)來說,發(fā)掘冷門、長尾的優(yōu)質(zhì)內(nèi)容,并把它們推薦給合適的用戶,相比其他類目的推薦顯得更加重要。
冷門、長尾的 item(歌曲)由于缺乏用戶交互數(shù)據(jù),對于主要依賴行為數(shù)據(jù)的推薦系統(tǒng)來說,想要做到精準(zhǔn)分發(fā)是非常困難的。理想情況是允許拿出一小部分流量做探索分發(fā),在探索中積累數(shù)據(jù)。但是,線上的流量又十分珍貴,探索往往容易破壞用戶體驗(yàn)。而推薦作為直接對業(yè)務(wù)指標(biāo)負(fù)責(zé)的角色,不允許我們?yōu)檫@些長尾 item 做過多不確定的探索。因此,我們需要做到從一開始就能較為精準(zhǔn)地找到 item 潛在的目標(biāo)用戶,也就是零交互記錄 item 冷啟動(dòng)。
二、技術(shù)方案:特征選取、模型建模
接下來分享云音樂采用的技術(shù)方案。
核心問題在于:如何找到冷啟動(dòng) Item 的潛在目標(biāo)用戶。我們將問題拆解成兩個(gè)部分:
冷啟動(dòng) Item在沒有用戶點(diǎn)擊播放的情況下,還有哪些有效的信息可以作為特征幫助我們進(jìn)行分發(fā)?這里我們使用了音樂的多模態(tài)特征。
如何利用這些特征來做好冷啟動(dòng)分發(fā)建模?針對這一點(diǎn),我們將分享兩個(gè)主要的建模方案:
- I2I建模:自引導(dǎo)對比學(xué)習(xí)增強(qiáng)冷啟算法。
- U2I建模:多模態(tài) DSSM 用戶興趣邊界建模。
歌曲本身是一種多模態(tài)信息,除了語種、曲風(fēng)這些標(biāo)簽信息之外,歌曲的音頻、文本(包含歌名與歌詞)包含了大量的信息,理解好這些信息,并發(fā)掘它們與用戶行為之間的關(guān)聯(lián)性,是做好冷啟動(dòng)的關(guān)鍵。目前,云音樂平臺采用了 CLIP 框架來實(shí)現(xiàn)多模態(tài)特征表達(dá)。對于音頻特征,我們首先使用一些音頻信號處理的方法,將其進(jìn)行視頻領(lǐng)域的變換,然后使用序列模型如 Transformer 模型進(jìn)行特征提取和建模,最終得到一個(gè)音頻向量。對于文本特征,使用 BERT 模型進(jìn)行特征提取。最后,使用 CLIP 自監(jiān)督的預(yù)訓(xùn)練框架,將這些特征進(jìn)行序列化,最終得到歌曲的多模態(tài)表征。
對于多模態(tài)建模,業(yè)界有兩種做法。一種是將多模態(tài)特征放到業(yè)務(wù)的推薦模型中進(jìn)行端到端的一階段訓(xùn)練,但這種方法的成本較高。因此,我們選擇了兩階段的建模。首先進(jìn)行預(yù)訓(xùn)練建模,然后將這些特征輸入到下游業(yè)務(wù)的召回模型或精排模型中進(jìn)行使用。
如何將一首沒有用戶交互行為的歌曲分發(fā)給用戶呢?我們采用的是間接建模方案:把歌曲到用戶(I2U)問題轉(zhuǎn)化為歌曲-相似歌曲-用戶(I2I2U)問題,即先找到與這首冷啟動(dòng)歌曲相似的歌曲,然后這些相似的歌曲與用戶有一些歷史交互記錄,例如收藏等比較強(qiáng)的信號,可以找到一批目標(biāo)用戶。然后將這首冷啟動(dòng)歌曲分發(fā)給這些目標(biāo)用戶。
具體的做法如下,首先第一步是監(jiān)督學(xué)習(xí)的任務(wù)。在歌曲特征方面,除了剛才提到的多模態(tài)信息外,還包括歌曲的標(biāo)簽信息,如語種、曲風(fēng)等,以此來幫助我們進(jìn)行個(gè)性化建模。我們將所有特征聚合到一起,輸入到一個(gè) encoder 中,最終輸出歌曲向量,每個(gè)歌曲向量的相似度可以通過向量內(nèi)積來表示。學(xué)習(xí)的目標(biāo)是基于行為計(jì)算出的 I2I 的相似度,即協(xié)作過濾的相似度,我們在協(xié)同過濾數(shù)據(jù)的基礎(chǔ)上加了一層后驗(yàn)校驗(yàn),即基于 I2I 推薦后,用戶反饋效果較好的一對 item 對作為學(xué)習(xí)的正樣本,以確保學(xué)習(xí)目標(biāo)的準(zhǔn)確度。負(fù)樣本采用全局隨機(jī)采樣構(gòu)建。損失函數(shù)采用 BPR loss。這是推薦系統(tǒng)中非常標(biāo)準(zhǔn)的 CB2CF 的做法,即基于歌曲的內(nèi)容、標(biāo)簽信息去學(xué)習(xí)歌曲在用戶行為特征上的相似度。
第二步迭代,在上述做法的基礎(chǔ)上引入了對比學(xué)習(xí)的方法。之所以要引入對比學(xué)習(xí),是因?yàn)檫@一套流程學(xué)習(xí)的仍然是 CF 數(shù)據(jù),需要基于用戶的交互行為進(jìn)行學(xué)習(xí),會出現(xiàn)“熱門物品學(xué)得多,冷門物品學(xué)得少”的問題,導(dǎo)致存在偏差。雖然我們的目標(biāo)是希望從歌曲的多模態(tài)內(nèi)容到歌曲的行為相似性進(jìn)行學(xué)習(xí),但實(shí)際訓(xùn)練中發(fā)現(xiàn)仍然存在熱門和冷門的偏差問題。
因此我們引入了一套對比學(xué)習(xí)算法,旨在增強(qiáng)冷門 Item 的學(xué)習(xí)能力。首先,我們需要有一個(gè) Item 的表征,這個(gè)表征是通過之前多模態(tài) encoder 學(xué)習(xí)得到的。然后,對這個(gè)表征進(jìn)行兩個(gè)隨機(jī)變換,這是 CV 中一些常見的做法,在特征上做隨機(jī)的 mask 或者加噪。由同一個(gè) Item 產(chǎn)生的兩個(gè)經(jīng)過隨機(jī)變化的表征被認(rèn)為是相似的,由不同Item 產(chǎn)生的兩個(gè)表征被認(rèn)為是不相似的,這樣的對比學(xué)習(xí)機(jī)制是對冷啟動(dòng)學(xué)習(xí)的數(shù)據(jù)增強(qiáng),通過這樣的方式生成對比學(xué)習(xí)知識庫樣本對。
在特征增強(qiáng)的基礎(chǔ)上,我們還引入了關(guān)聯(lián)分組機(jī)制。
關(guān)聯(lián)分組機(jī)制:首先計(jì)算 item 每一對特征之間的相關(guān)性,即維護(hù)一個(gè)相關(guān)性矩陣,且該矩陣會隨著模型訓(xùn)練更新。然后依據(jù)特征間的相關(guān)性將 item 的特征分為 2 組,具體做法是,隨機(jī)選擇一個(gè)特征,然后將與該特征最相關(guān)的那一半特征放入一組,將剩下的放入另一組。最后分別對每組特征進(jìn)行隨機(jī)變換,從而形成對比學(xué)習(xí)的樣本對。這樣,一個(gè) batch 內(nèi) N 個(gè) item 將生成 2N 個(gè) view,來自同一 item 的一對 view 作為對比學(xué)習(xí)的正樣本,來自不同item的一對 view 作為對比學(xué)習(xí)的負(fù)樣本。對比學(xué)習(xí)的 loss 采用 infoNCE,并與前面監(jiān)督學(xué)習(xí)部分的 BPR loss 疊加作為最終 loss。
線上部署和推理流程:離線訓(xùn)練完畢后,對所有存量歌曲的向量構(gòu)建向量索引。對一個(gè)新的冷啟動(dòng) Item,通過模型推理得到其向量,然后從向量索引內(nèi)檢索與之最相似的一些 item,這些 item 是過去一些存量 item,因此存在一批與它們有歷史交互行為的用戶(如播放、收藏行為等),將這個(gè)需要冷啟動(dòng)的 Item 分發(fā)給這批用戶,完成對該 Item 的冷啟動(dòng)。
我們對該冷啟動(dòng)算法進(jìn)行了評估,包括離線和線下指標(biāo)的評估,取得了非常好的效果,如上圖所示,冷啟動(dòng)模型計(jì)算得到的歌曲表征對不同曲風(fēng)的歌曲可實(shí)現(xiàn)優(yōu)秀的聚類效果。部分成果已有公開論文發(fā)表(Bootstrapping Contrastive Learning Enhanced Music Cold-Start Matching)。在線上,該冷啟動(dòng)算法在找到更多的潛在目標(biāo)用戶(+38%)的同時(shí),還實(shí)現(xiàn)了冷啟動(dòng)item 的收藏率(+1.95%)、完播率(+1.42%)等業(yè)務(wù)指標(biāo)的提升。
在此基礎(chǔ)上我們又思考:
- 在上述 I2I2U 的方案中,未使用任何用戶側(cè)特征。
- 如何引入用戶特征幫助 Item 冷啟動(dòng)?
U2I 冷啟動(dòng)方案采用多模態(tài) DSSM 建模方法。該模型由一個(gè) ItemTower 和一個(gè) UserTower 組成。我們將之前歌曲的多模態(tài)特征繼承到 ItemTower 中,用戶塔創(chuàng)建了一個(gè)常規(guī)的用戶塔。我們對用戶序列進(jìn)行了多模態(tài)的學(xué)習(xí)建模,模型訓(xùn)練基于全量的item 空間,無論是冷門還是熱門歌曲,都會作為樣本去訓(xùn)練模型。推理時(shí),只對圈選好的新歌或冷門歌曲池進(jìn)行推理。這樣的做法與之前一些雙塔方案類似:對于熱門的item,構(gòu)建一個(gè)塔,對于新的或冷門的 item,構(gòu)建另一個(gè)塔來處理。然而,我們更獨(dú)立地處理了常規(guī)的 item 和冷啟動(dòng)的 item。我們?yōu)槌R?guī)的 item 使用常規(guī)的召回模型,而對于冷門的 item,則使用專門構(gòu)建的 DSSM 模型。
由于冷啟動(dòng)的 DSSM 模型只用于對冷門或新歌曲進(jìn)行推理,我們發(fā)現(xiàn)對用戶的 BIAS 進(jìn)行建模非常重要,因?yàn)槲覀儾荒鼙WC所有用戶都喜歡冷門或新的 Item。候選集本身是一個(gè)非常大的池子,我們需要對用戶 Item 進(jìn)行建模,因?yàn)槟承┯脩艨赡芷珢蹮衢TItem,而推薦池中可能缺少他喜歡的 Item。因此,在傳統(tǒng)方法的基礎(chǔ)上,我們建立了一種稱為“興趣邊界”的塔來對用戶的偏好進(jìn)行建模。利用興趣邊界將正負(fù)樣本分開,訓(xùn)練時(shí),使用興趣邊界分?jǐn)?shù)劃分每個(gè)用戶的正負(fù)樣本;推理時(shí),比較物品得分和用戶興趣邊界得分來決定是否推薦該物品。訓(xùn)練時(shí),我們使用興趣邊界向量和用戶興趣向量進(jìn)行內(nèi)積計(jì)算來得到邊界的表征向量。在上圖 loss 基礎(chǔ)上,使用傳統(tǒng)二分類的交叉熵做建模。負(fù)樣本會將用戶興趣邊界抬高,而正樣本會將用戶興趣邊界壓低,最終,訓(xùn)練后會達(dá)到一個(gè)平衡狀態(tài),用戶的興趣邊界將正負(fù)樣本分開。在線上應(yīng)用時(shí),我們根據(jù)用戶的興趣邊界來決定是否將冷門或長尾的 Item 推薦給該用戶。
三、總結(jié)
最后做一個(gè)總結(jié)。云音樂推薦的多模態(tài)冷啟建模主要工作包括:
- 特征方面,采用了 CLIP 預(yù)訓(xùn)練框架下對多模態(tài)進(jìn)行建模。
- 建模方案上采用了兩種建模方案,I2I2U 間接建模和冷啟動(dòng)多模態(tài) DSSM 直接建模。
- Loss & 學(xué)習(xí)目標(biāo)上,Item 側(cè)引入了 BPR & 對比學(xué)習(xí),User 側(cè)興趣邊界增強(qiáng)冷門 Item 學(xué)習(xí)和用戶學(xué)習(xí)。
未來優(yōu)化主要有兩個(gè)方向,一是使用內(nèi)容和行為特征多模態(tài)融合建模,另一個(gè)是召回和排序全鏈路優(yōu)化。
四、問答環(huán)節(jié)
Q1:音樂冷啟動(dòng)的核心指標(biāo)是什么?
A1:我們會關(guān)注多方面的指標(biāo),其中比較重要的是收藏率和完播率,收藏率=收藏 PV/播放 PV,完播率=完整播放的 PV/播放 PV。
Q2:多模態(tài)特征是端到端訓(xùn)練還是預(yù)訓(xùn)練出的?第二步對比視圖生成時(shí),輸入 x 具體是什么特征?
A2:我們目前采用的方案是基于 CLIP 框架進(jìn)行預(yù)訓(xùn)練,并使用預(yù)訓(xùn)練得到的多模態(tài)特征來為下游的召回和排序業(yè)務(wù)提供支持。這是一個(gè)兩階段的預(yù)訓(xùn)練過程,而非端到端的訓(xùn)練。雖然從理論上講,端到端的訓(xùn)練可能會更好,但與之相對,對機(jī)器的要求和成本也會更高。因此,我們選擇進(jìn)行預(yù)訓(xùn)練,這也是基于成本方面的考慮。
x表示歌曲的原始特征,包含歌曲的音頻、文本多模態(tài)特征以及語種曲風(fēng)等標(biāo)簽類特征。這些特征經(jīng)過分組和 2 個(gè)不同的隨機(jī)變換 F’a 和 F’’a 得到 x’ 和 x’’。f 是 encoder,也是模型的主干結(jié)構(gòu),g 加在 encoder 輸出之后的一個(gè) head,僅用在對比學(xué)習(xí)部分。
Q3:對比學(xué)習(xí)訓(xùn)練時(shí)兩組增強(qiáng)的塔的 embedding 層和 DNN 都是共享的嗎?為什么對比學(xué)習(xí)對于內(nèi)容冷啟動(dòng)有效,是會專門針對非冷啟動(dòng)內(nèi)容做負(fù)采樣嗎?
A3:模型始終只有一個(gè) encoder,也就是一個(gè)塔,因此并沒有參數(shù)是否共享的問題。
至于說為什么會對冷門的 item 有幫助,我是這么理解的,因?yàn)椴⒉皇菍溟T item 去做額外的一些負(fù)采樣之類的工作。其實(shí)如果只是單純的在監(jiān)督學(xué)習(xí)這個(gè)基礎(chǔ)上去學(xué)習(xí)歌曲的 embedding 表征,可能會導(dǎo)致偏差,因?yàn)閷W(xué)習(xí)的是 CF 的數(shù)據(jù),還是會出現(xiàn)熱門歌曲學(xué)得多的問題,最終 embedding 向量也是有偏差的。通過引入對比學(xué)習(xí)機(jī)制,在最終的 loss 引入對比學(xué)習(xí)的 loss,它是對學(xué)習(xí) CF 數(shù)據(jù)的糾偏過程。因此,通過對比學(xué)習(xí)的方式,是改善向量本身空間分布,并沒有去對冷門的 item 去做額外的處理。
Q4:興趣邊界那里是多目標(biāo)建模嗎?看起來又不太像,可以介紹一下 ? 和 p 這兩個(gè)量嗎?
A4:多模態(tài) DSSM 建模中包含一個(gè) ItemTower 和一個(gè) UserTower,然后在UserTower 的基礎(chǔ)上,我們?nèi)?user 特征額外建模了一個(gè)塔稱之為興趣邊界塔。這三個(gè)塔分別輸出一個(gè)向量,在訓(xùn)練時(shí),我們會對 item 向量和 user 向量進(jìn)行內(nèi)積,得到 item 得分,然后將 user 向量和 user 的興趣邊界向量進(jìn)行內(nèi)積,表示用戶的興趣邊界得分。參數(shù)? 是一個(gè)常規(guī)的樣本加權(quán)參數(shù),用于平衡正負(fù)樣本對loss的貢獻(xiàn)比例。p是item最終得分,計(jì)算方式為…將 item 向量和 user 向量的內(nèi)積得分減去 user 向量和 user 興趣邊界向量的內(nèi)積得分,并通過 sigmoid 函數(shù)計(jì)算得到的最終得分。在計(jì)算過程中,正樣本會把 item 和 user 的內(nèi)積的分?jǐn)?shù)拉高,把 user 和 user 興趣邊界的內(nèi)積得分降低,負(fù)樣本反之。理想情況下,user 和 user 興趣邊界的內(nèi)積得分可以劃分正負(fù)樣本。在線上推薦階段,我們使用興趣邊界作為參考值,將得分更高的 item 推薦給用戶,而得分較低的 item 不予推薦。如果一個(gè)用戶只對熱門 item 感興趣,那么理想情況下,這個(gè)用戶的邊界分,也就是他的 user 向量與他的興趣邊界向量的內(nèi)積會非常高,甚至高于所有的冷啟動(dòng) item 得分,因此不會向該用戶推薦一些冷啟動(dòng)的 item。
Q5: 用戶塔(userTower)和興趣邊界塔在結(jié)構(gòu)上有什么區(qū)別,看起來輸入似乎是一樣的?
A5:二者輸入確實(shí)是一樣的,結(jié)構(gòu)也是類似的,只是參數(shù)不共享。最大的區(qū)別僅體現(xiàn)在 loss 的計(jì)算上。用戶塔的輸出用于與 item 塔的輸出做內(nèi)積計(jì)算,得到的是 item 得分。興趣邊界塔的輸出與用戶塔的輸出做內(nèi)積計(jì)算,得到的是邊界分,訓(xùn)練時(shí)二者相減后參與二分類 loss 的計(jì)算,推理時(shí)比較二者的大小來決定是否將這個(gè) item 推給用戶。