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