騰訊音樂:全民K歌推薦系統(tǒng)架構(gòu)及粗排設(shè)計(jì)
編輯整理:張振、于洋
導(dǎo)讀:騰訊音樂娛樂集團(tuán) ( TME ) 目前有四大移動(dòng)音樂產(chǎn)品:QQ音樂、酷狗音樂、酷我音樂和全民K歌,總月活超8億。其中,全民K歌與其他三款產(chǎn)品有明顯的差異,具體表現(xiàn)如下:以唱為核心,在唱歌的功能上又衍生出了一些音樂娛樂的功能及玩法,目前有超過1.5億的月活。推薦在全民K歌各個(gè)場(chǎng)景中起著重要作用,極大地影響著平臺(tái)的內(nèi)容分發(fā)狀況及生產(chǎn)者與消費(fèi)者的關(guān)系。本文將主要介紹全民K歌的推薦系統(tǒng)架構(gòu)及粗排設(shè)計(jì),具體從以下幾方面展開:
-
業(yè)務(wù)背景
-
推薦系統(tǒng)架構(gòu)及挑戰(zhàn)
-
粗排模塊算法設(shè)計(jì)
-
多樣性調(diào)節(jié)算法設(shè)計(jì)
全民K歌涉及多樣化的推薦場(chǎng)景,涵蓋內(nèi)容、直播、歌房、用戶等多種形態(tài)。
具體的推薦功能如上圖所示,主要包括以下幾類:
① 基于內(nèi)容的推薦,包括優(yōu)質(zhì)UGC推薦、關(guān)注流推薦、同城社交推薦等功能模塊。
-
優(yōu)質(zhì)UGC推薦,將平臺(tái)原生原創(chuàng)的優(yōu)質(zhì)音視頻內(nèi)容進(jìn)行推薦
-
關(guān)注流推薦,對(duì)關(guān)注的內(nèi)容進(jìn)行混排
-
同城社交推薦,基于同城的社交進(jìn)行推薦
② 除了內(nèi)容推薦外,我們也會(huì)負(fù)責(zé)一些其他類型的推薦,包括直播推薦、點(diǎn)歌推薦、歌房推薦和點(diǎn)評(píng)推薦,都是在K歌生態(tài)下獨(dú)有的推薦。
-
索引類的召回:主要根據(jù)畫像的結(jié)果做精準(zhǔn)的ID類召回,比如對(duì)用戶感興趣的歌曲進(jìn)行召回,以及用戶感興趣的創(chuàng)作者進(jìn)行召回。
-
泛社交的召回:主要基于用戶在站內(nèi)豐富的社交關(guān)系,比如用戶可能會(huì)關(guān)注一些其他的用戶,也可能加入一些家族,我們會(huì)根據(jù)這些社團(tuán)的發(fā)現(xiàn)結(jié)果做泛化召回。
-
模型的召回:基于模型的召回的方法比較多,在后面會(huì)展開介紹。
2. 粗排層
粗排層到精排層相當(dāng)于是一個(gè)承上啟下的作用,它會(huì)把我們召回到的一些萬量級(jí)的作品進(jìn)一步篩選到千量級(jí),既要考慮打分的性能問題,又要考慮排序粗排精準(zhǔn)度的問題。一般來說,粗排模型會(huì)用一些模型蒸餾的方法,包括特征蒸餾或者基于模型本身的結(jié)構(gòu)蒸餾,以及把這些不同的蒸餾方法組合起來等等。在粗排層,除了做粗排的打分外,我們還會(huì)重點(diǎn)做生態(tài)的控制,特別在一些內(nèi)容推薦場(chǎng)景或者直播推薦場(chǎng)景中,我們會(huì)注重這里面的內(nèi)容生態(tài),包括時(shí)效性,內(nèi)容的調(diào)性,多樣性等等。
3. 精排層
粗排層之后就來到了精排層,精排層主要根據(jù)千量級(jí)的作品進(jìn)一步的進(jìn)行精排打分來篩選到百量級(jí)的作品。在精排層,我們主要注意以下幾方面:
-
一個(gè)就是精排模型本身,我們?cè)缙谝膊捎昧祟愃芁R的線性模型和LightGBM這樣的樹模型,之后隨著深度模型的技術(shù)發(fā)展,我們所有的場(chǎng)景都切換到了深度模型,并且隨著深度網(wǎng)絡(luò)的設(shè)計(jì)復(fù)雜度,以及樣本規(guī)模的逐步增加,讓早期基于TF訓(xùn)練的一些深度模型引擎,在訓(xùn)練的速度以及對(duì)模型大小規(guī)模的限制,已經(jīng)對(duì)我們產(chǎn)生了影響。所以我們現(xiàn)在已經(jīng)過渡到基于參數(shù)服務(wù)器框架下,訓(xùn)練深度模型。
-
在精排前,除了模型怎么訓(xùn)練構(gòu)造外,另外兩個(gè)比較重要的是特征和樣本的構(gòu)造,以及在這個(gè)場(chǎng)景下的多目標(biāo)設(shè)計(jì)。特別是多目標(biāo)的問題,可能還涉及到具體的網(wǎng)絡(luò)結(jié)構(gòu)如何做,以及最后的結(jié)果如何融合。
4. 重排層
從精排層排序出百量級(jí)的作品后,就會(huì)進(jìn)入到重排層。重排層會(huì)基于業(yè)務(wù)規(guī)則進(jìn)行進(jìn)一步的干預(yù),比如同一首歌曲的視頻不能連續(xù)出現(xiàn),同一個(gè)創(chuàng)作者的視頻不能連續(xù)出現(xiàn)等等。除了基于規(guī)則性的限制外,我們也會(huì)考慮使用模型化的方法做多樣性的打散,并且在第4部分,我們也會(huì)具體介紹DPP算法的原理和思想。除了模型方法之外,我們也在考慮通過list wise的方法做內(nèi)容的重排。
1. 粗排模塊定位和方案路線
粗排模型和精排模型不同,它可能既需要解決模型預(yù)測(cè)的準(zhǔn)確性,又需要解決模型預(yù)測(cè)的效率。接下來,為大家介紹我們整個(gè)推薦系統(tǒng)如何在線上真實(shí)運(yùn)轉(zhuǎn)。
粗排模塊主要包含兩部分:
第一部分是粗排的排序部分,這一部分主要就是為了解決一個(gè)大規(guī)模item的預(yù)排序問題。
第二個(gè)部分是多樣性控制部分,作為一個(gè)UGC平臺(tái),我們需要考量內(nèi)容在整個(gè)內(nèi)容生態(tài)中的分發(fā)狀況,以及均衡的考量生產(chǎn)者跟消費(fèi)者之間的關(guān)系。我們是通過多樣性調(diào)節(jié)算法來間接實(shí)現(xiàn)這個(gè)目的的。
讓我們?cè)倩仡櫹虑懊嫠岬降恼麄€(gè)召回系統(tǒng)架構(gòu),我們可以看到它其實(shí)是一個(gè)典型的節(jié)點(diǎn)架構(gòu),從內(nèi)容發(fā)現(xiàn)到召回,到粗排到精排,然后重排,最后把合適的內(nèi)容推薦給用戶。由于我們是一個(gè)比較大的UGC生產(chǎn)平臺(tái),從一個(gè)UGC平臺(tái)的角度來考慮,我們傾向于分發(fā)較為新的作品,因?yàn)樾碌淖髌返姆职l(fā)會(huì)為那些活躍的創(chuàng)作者帶來一定的流量激勵(lì),使得生產(chǎn)端跟消費(fèi)端產(chǎn)生聯(lián)動(dòng),促進(jìn)了一種正向的循環(huán)。
我們以三個(gè)月內(nèi)的站內(nèi)發(fā)布作品為例,三個(gè)月內(nèi)的站內(nèi)發(fā)布作品大概會(huì)到十的九次方量級(jí),然后我們通過一些內(nèi)容挖掘跟優(yōu)質(zhì)內(nèi)容發(fā)現(xiàn)的方式,從中找到更為優(yōu)質(zhì)的一部分內(nèi)容,這部分內(nèi)容仍然有十的七次方量級(jí),相當(dāng)于從百萬量級(jí)的作品庫做興趣的召回。這是一個(gè)非常大的候選集場(chǎng)景,從優(yōu)質(zhì)內(nèi)容的發(fā)現(xiàn)到召回,是整個(gè)UGC平臺(tái)和推薦系統(tǒng)的連接,背后承載著我們對(duì)整個(gè)UGC的分發(fā)、內(nèi)容生態(tài)的理解。這一部分我們會(huì)在第三個(gè)環(huán)節(jié)去做進(jìn)一步詳細(xì)的介紹。召回可以看到有十的七次方的候選集召回,通常完成召回過程之后仍然有十的五次方候選集,而精排通常只能去處理一個(gè)千級(jí)別的規(guī)模,所以我們看到這中間存在一個(gè)比較大的漏斗,很多時(shí)候會(huì)成為我們?cè)谛Ч蛘咭恍┦找嫔系钠款i。這時(shí),粗排模塊的重要性就體現(xiàn)出來了。粗排模塊的一個(gè)重要的作用就是防止召回到精排之間的漏斗過大,導(dǎo)致過多的信息損失。
大家可能比較了解的是,召回跟精排召回更像是一個(gè)集合,選擇的過程更側(cè)重于選擇效率最高的方法,至于topk中item之間的先后順序,其實(shí)不是最關(guān)心的因素;而精排環(huán)節(jié)相對(duì)來說它更強(qiáng)調(diào)次序,也就是說item A跟item B的先后順序是非常敏感和關(guān)鍵的。
粗排夾在召回跟精排之間,它的定位是什么?相比于召回,粗排更強(qiáng)調(diào)排序性,也就是更強(qiáng)調(diào)topk內(nèi)部的排序關(guān)系;相對(duì)于精排,粗排更強(qiáng)調(diào)性能,因?yàn)榫磐ǔS蟹浅?fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),非常大的參數(shù)量,這也意味著它在實(shí)際應(yīng)用的過程中比較難去處理一個(gè)較大規(guī)模量級(jí)的候選集的打分,這時(shí)粗排就必須要解決這個(gè)問題,所以它在性能上會(huì)相較于精排有更多的要求。現(xiàn)在主流的粗排方案有兩條路線,這兩條路線是基于兩個(gè)出發(fā)點(diǎn)來思考的:
第一條路線是把粗排當(dāng)成是召回的一種延伸,它的技術(shù)選型會(huì)像是一種集合,選擇的方案和目標(biāo)是選出效率最高的子集。常用的方式,簡單的可以通過實(shí)時(shí)的serving或者一些實(shí)時(shí)的指標(biāo)對(duì)召回排序的結(jié)果做一個(gè)選擇??傮w來說,這條技術(shù)路線最大的優(yōu)點(diǎn)是算力消耗非常小、性能非常好,但是它的缺點(diǎn)是本身的表達(dá)能力是有限的,可以明顯預(yù)估到它的天花板。
第二條路線是從精排的角度,把粗排當(dāng)成是精排的遷移或壓縮,也就是說這是一條排序的路線,它的建模目標(biāo)是預(yù)估值。這種方法的好處是它的表達(dá)能力很強(qiáng),因?yàn)橥ǔ?huì)用到一些比較復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),而且它跟精排的聯(lián)動(dòng)性是更好的,可以讓粗排跟精排的目標(biāo)保持某種程度上的一致性。同時(shí),它的缺點(diǎn)也凸顯出來了,就是我們用到了復(fù)雜的方法,算力的消耗一定也會(huì)相應(yīng)的提升。因此,需要著重解決的是如何在有限的算力下盡可能地突破表達(dá)能力上限。在這種路線下,我們通常會(huì)在架構(gòu)選擇上選擇雙塔結(jié)構(gòu)模型,右下圖所示。
接下來,介紹下粗排雙塔模型實(shí)戰(zhàn)相關(guān)細(xì)節(jié)。
2. 粗排雙塔模型實(shí)踐
我們通過把user和item的feature進(jìn)行結(jié)構(gòu)解耦與分開建模,然后完成整個(gè)架構(gòu)的設(shè)計(jì),在模型訓(xùn)練完畢之后,我們會(huì)通過user serving實(shí)時(shí)的產(chǎn)出user embedding,再通過索引服務(wù)把該用戶所有的候選集合的ID給取出來,最后在user embedding跟item embedding之間做內(nèi)積的運(yùn)算,得到一個(gè)粗排的預(yù)估值,作為整個(gè)粗排階段的排序依據(jù)。
這么做的優(yōu)勢(shì)是user/item 結(jié)構(gòu)是解耦的,內(nèi)積計(jì)算的算力消耗小。
同時(shí),它的缺點(diǎn)也非常的明顯:
-
第一個(gè)是它在特征表達(dá)上是缺失的,因?yàn)閡ser跟item解耦之后,很難使用一些交叉特征,一旦用了交叉特征,有多少item就得進(jìn)行多少次預(yù)估,這違背了我們使用雙塔模型的初衷。
-
第二個(gè)是它在結(jié)構(gòu)上也是有缺陷的,我們回憶一下上面這幅框架圖,可以看到user跟item的交互非常少,這會(huì)限制它的表達(dá)能力的上限。
如果我們選擇了這種技術(shù)方案,我們可以保障它的性能,但是我們需要進(jìn)一步的考慮如何避免這種簡易的結(jié)構(gòu)所帶來的效果上的損失。在這種情況下,我們通常會(huì)使用一些模型蒸餾的方式。
模型蒸餾有兩個(gè)關(guān)鍵詞,第一個(gè)是它本質(zhì)上是一種遷移學(xué)習(xí),也就是transfer learning,第二個(gè)是transfer的方式是通過所謂的label,區(qū)別于我們平時(shí)理解的樣本label離散值,變?yōu)榱?到1之間的一個(gè)連續(xù)值。左下角是一個(gè)常見的蒸餾模型架構(gòu)圖,這個(gè)里面會(huì)有涉及到兩個(gè)模型,第一個(gè)模型叫做教師模型,叫做teacher,第二個(gè)模型是學(xué)生模型,叫做student。這兩個(gè)模型的總體思路是teacher模型是一個(gè)非常大、非常復(fù)雜、學(xué)習(xí)到的東西非常多的模型,teacher模型會(huì)把學(xué)習(xí)到的知識(shí)傳導(dǎo)給student模型,受限于某些原因,該模型沒有辦法做得很復(fù)雜,或者它的規(guī)模必須限制在一定范圍內(nèi)的子模型。
具體流程如下:
-
準(zhǔn)備訓(xùn)練樣本,對(duì)teacher模型預(yù)訓(xùn)練,即得到了teacher模型;
-
把teacher模型最后一層或倒數(shù)第二層的輸出結(jié)果,作為傳遞給student模型的信息,這部分通常是logits或softmax的形式,也叫做soft labels;
-
把soft labels傳導(dǎo)到student模型,作為模型loss的一部分,因?yàn)閟tudent模型除了要擬合teacher模型傳遞的信息,也要去擬合樣本真實(shí)的分布。
針對(duì)上述流程里涉及到了幾個(gè)概念,有如下的進(jìn)一步解釋:
-
關(guān)于logits:它是teacher模型層層映射后的一個(gè)抽象度很高且信息濃度很大的結(jié)果,是整個(gè)知識(shí)傳遞的媒介。在logits后,通常會(huì)接一個(gè)softmax,但是softmax會(huì)放大logits的兩極差異,造成細(xì)節(jié)損失,而這些細(xì)節(jié)恰恰是幫助student模型更好學(xué)習(xí)的關(guān)鍵。為了克服以上問題,我們選用了改進(jìn)的softmax,即softmax with temperature
這里,引入一個(gè)超參數(shù)T控制整個(gè)softmax分布的陡峭或平滑程度,間接控制蒸餾的強(qiáng)度。通常,T要設(shè)置成多少?zèng)]有一個(gè)定論,與實(shí)際場(chǎng)景相關(guān),依賴相應(yīng)場(chǎng)景下的一些實(shí)驗(yàn)設(shè)計(jì)。
-
關(guān)于loss:預(yù)訓(xùn)練好teacher模型后,轉(zhuǎn)而關(guān)注student模型,它的最小化loss由兩部分構(gòu)成,一部分是盡可能擬合teacher模型的輸出結(jié)果,另一部分是盡可能擬合真實(shí)樣本。由于student模型的表達(dá)能力有限,直接用student模型擬合真實(shí)樣本可能學(xué)不好或者學(xué)偏;teacher模型傳遞過來的信息對(duì)student模型做了約束和糾正,指導(dǎo)student模型的優(yōu)化方向,進(jìn)而加強(qiáng)了student模型的學(xué)習(xí)能力。
整個(gè)模型蒸餾的收益表現(xiàn)如下:
引入soft labels的概念,不再是原本的非零即一狀況,需要考慮正樣本有多正和負(fù)樣本有多負(fù)。這看起來類似把分類問題轉(zhuǎn)換成回歸問題,但實(shí)質(zhì)并不是。如果構(gòu)建樣本時(shí),用回歸的方式構(gòu)建,通常會(huì)基于作品的完播率或規(guī)則組合等,人工敲定樣本的回歸值,這種方式過于主觀,沒有一個(gè)非常合理或可矯正的指標(biāo)進(jìn)行后續(xù)比對(duì);而模型蒸餾的soft labels是基于teacher 模型,即由teacher 模型對(duì)真實(shí)樣本進(jìn)行充分訓(xùn)練后給出,包含更多的隱含信息且不受人為主觀因素影響。
具體的,來看看我們?nèi)绾巫龃峙拍K的蒸餾,主要是分為兩個(gè)大的方向:
-
模型蒸餾,主要適用于模型不同但特征相同的情況,比如,包含多個(gè)場(chǎng)景的框架里,某些場(chǎng)景對(duì)性能有要求;由于有一些額外的外部限制,使某場(chǎng)景無法用很復(fù)雜參數(shù)量非常大的模型,可以用一個(gè)子模型使用全部特征。此時(shí),模型蒸餾主要是彌補(bǔ)子模型缺少復(fù)雜結(jié)構(gòu)或交互結(jié)構(gòu)導(dǎo)致的部分收益損失,本質(zhì)上是一種模型壓縮方案。
-
特征蒸餾,主要適用于模型相同但特征不同的情況,比如,在某些場(chǎng)景,無法使用全量特征 ( 如交叉特征 ) 或部分特征必須是剪裁過的,即特征沒被完全利用,存在一部分損失。這時(shí),通過一個(gè)更大的teacher模型學(xué)習(xí)全量特征,再把學(xué)到的知識(shí)遷移到子模型,即彌補(bǔ)了上述的部分特征損失。
基于以上描述可知,粗排模塊可以通過蒸餾的方式,補(bǔ)足雙塔模型在結(jié)構(gòu)和特征上的缺陷。接下來的問題就是如何找到一個(gè)合適的teacher模型?精排模型通常是一個(gè)被充分訓(xùn)練的、參數(shù)量很大、表達(dá)能力很強(qiáng)的模型,如果通過蒸餾精排模型獲取粗排模型,那么目標(biāo)的一致性和學(xué)習(xí)能力的上限都符合我們預(yù)期的。具體操作方式如上圖右側(cè)所示:
-
左側(cè)的teacher模型是精排模型,該模型使用全量的特征,包括三大類,即user側(cè)特征、item側(cè)特征及它們的交叉特征;曲線框里是一些復(fù)雜的拓?fù)浣Y(jié)構(gòu);最后的softmax with temperature就是整個(gè)精排模型的輸出內(nèi)容,后續(xù)會(huì)給到粗排模型進(jìn)行蒸餾。
-
中間的粗排模型,user tower只用user features,item tower只用item features,即整體上看,模型未使用交叉特征。在user tower和item tower交互后,加上精排模型傳遞過來的logits信息,共同的構(gòu)成了粗排模型的優(yōu)化目標(biāo)。整個(gè)粗排模型的優(yōu)化目標(biāo),同時(shí)對(duì)真實(shí)樣本和teacher信息進(jìn)行了擬合。
-
右側(cè)展示的是訓(xùn)練完粗排模型后,在線上產(chǎn)出user serving,通過user serving產(chǎn)出user embedding,再與item embedding做內(nèi)積運(yùn)算,完成整個(gè)排序的過程。上述流程即實(shí)現(xiàn)了粗排和精排的聯(lián)動(dòng)過程,并且訓(xùn)練完粗排模型就可以進(jìn)行一個(gè)非常高效的serving,進(jìn)行粗排排序。業(yè)界也有相關(guān)的一些工作,上圖最下方給出了一篇阿里在這方面的論述。
3. 線上的粗排雙塔模型
實(shí)踐中,粗排模型訓(xùn)練時(shí),依賴的精排輸出結(jié)果來自上報(bào)精排日志。如果在離線重新對(duì)樣本進(jìn)行預(yù)估再輸出,其實(shí)是對(duì)線下資源的浪費(fèi),所以通常在線上精排預(yù)估時(shí),就把一些結(jié)果作為日志進(jìn)行上報(bào)。粗排模型異步訓(xùn)練,產(chǎn)出模型提供給Serving。
Serving環(huán)節(jié)主要包括異步Serving和User Serving兩部分,具體功能如下:
-
異步Serving,主要通過刷庫Item Serving捕獲所有的item embedding,以異步的方式反復(fù)刷庫。大家經(jīng)常會(huì)問的一個(gè)問題:如果模型更新了,item embedding有的是新的,有的是舊的,版本不一致怎么辦?如果更新周期比較短,item embedding的分布不會(huì)發(fā)生較明顯的偏移,即相鄰版本比較接近,這間接保障了一致性,不需要版本是強(qiáng)一致性的,只要更新周期比較短就可以。
-
User Serving,當(dāng)用戶請(qǐng)求推薦引擎后,獲取該用戶的user features,然后請(qǐng)求User Serving產(chǎn)出user embedding;同時(shí),會(huì)拿到該用戶的所有召回item集合,基于刷庫結(jié)果產(chǎn)出的索引服務(wù),取到所有的item embedding。由此可見,User Serving的最大優(yōu)勢(shì)是可以做實(shí)時(shí)計(jì)算且只需計(jì)算一次,效率非常高。并且,雙塔粗排Serving階段是做內(nèi)積運(yùn)算,這種高效的計(jì)算方式也使它更適合大規(guī)模的預(yù)排序場(chǎng)景。
4. 粗排的線上收益
整個(gè)粗排模塊上線后,我們關(guān)注的兩類指標(biāo):互動(dòng)類指標(biāo)和播放類指標(biāo),都有非常明顯的正向提升,具體的指標(biāo)提升幅度可以參考上圖的在線實(shí)驗(yàn)結(jié)果。
一般,粗排模塊的表現(xiàn)和實(shí)際場(chǎng)景有較大的相關(guān)性:在候選集非常大的推薦場(chǎng)景下,粗排到精排間的漏斗有好幾個(gè)量級(jí),這時(shí)粗排模塊會(huì)帶來非常顯著的收益;在候選集比較小的推薦場(chǎng)景下,從召回到精排間的漏斗不是很大,這時(shí)粗排的收益可能就比較有限。
進(jìn)而,考慮做進(jìn)一步優(yōu)化。
5. 還有哪些需要考慮?
首先,上述粗排蒸餾過程本質(zhì)上是pointwise,但通過上報(bào)精排日志可以拿到精排模型給出的完整再推薦列表,用pairwise學(xué)習(xí)精排排出來的序,可以進(jìn)一步逼近精排結(jié)果,能更多的提取精排傳遞出的信息。
其次,前面雖然不斷地用teacher模型和student模型描述整個(gè)過程,但實(shí)際效果上student模型不一定低于teacher模型。換一個(gè)角度,student模型其實(shí)是基于teacher模型做進(jìn)一步訓(xùn)練,所以student模型的表征能力有可能超過teacher模型。事實(shí)上,如何讓student模型通過反復(fù)的蒸餾,效果超過teacher模型,在模型蒸餾領(lǐng)域也有許多相關(guān)方法。
最后,粗排到底是召回的延伸,還是精排的壓縮跟前置?雖然召回和精排都是一個(gè)檢索的過程,但二者實(shí)際側(cè)重點(diǎn)還有一些不同,比如,召回在多樣性上有更多的考量,精排更強(qiáng)調(diào)排序次序的精準(zhǔn)性,而粗排處于這兩個(gè)環(huán)節(jié)之間,如何利用粗排模塊更好地平衡召回和精排?通常而言,會(huì)考慮設(shè)計(jì)多樣性調(diào)節(jié)算法解決這一問題。
1. 推薦多樣性的意義
多樣性的概念在推薦系統(tǒng)里常被提到,在不同視角下,推薦多樣性對(duì)應(yīng)著不同的問題。
-
在系統(tǒng)角度下,多樣性是一種popularity bias,即流行度的偏置。流量在UGC作品上的分布,體現(xiàn)了系統(tǒng)層面的多樣性:一個(gè)多樣性弱的系統(tǒng),更像是中心化分發(fā)的,只分發(fā)非常頭部、非常類似的一部分作品;而一個(gè)多樣性強(qiáng)的系統(tǒng),則是一個(gè)去中心化分發(fā)的,會(huì)更多地兼顧中長尾內(nèi)容流量的供給。實(shí)際上,在推薦系統(tǒng)中普遍會(huì)遇到如下問題:如果沒有對(duì)推薦系統(tǒng)做額外的干預(yù)和糾偏,不可避免地會(huì)使推薦系統(tǒng)往多樣性弱的方向發(fā)展。從數(shù)據(jù)層面解釋,有豐富數(shù)據(jù)的那部分內(nèi)容會(huì)在推薦過程被反復(fù)加強(qiáng),使整個(gè)推薦循環(huán)鏈路越縮越小,馬太效應(yīng)越來越嚴(yán)重。對(duì)于一個(gè)ugc平臺(tái),需要考量生產(chǎn)者或創(chuàng)作者的利益,而這種聚集在部分創(chuàng)作者身上的馬太效應(yīng)是我們不愿意看到的。
-
在用戶角度下,多樣性就是Explore&Exploit問題,對(duì)用戶做興趣的探索與聚焦。如果多樣性弱,推薦的item同質(zhì)化嚴(yán)重,都很像,那么推薦系統(tǒng)可能沒辦法發(fā)現(xiàn)用戶的真實(shí)興趣,因?yàn)橄到y(tǒng)可能都沒給用戶推薦過這類item;如果多樣性強(qiáng),那么用戶的推薦流里的內(nèi)容會(huì)很不一樣,壞處可能是用戶在持續(xù)消費(fèi)過程的興趣聚焦程度不同,比如用戶看了五個(gè)item,明明對(duì)其中某一兩個(gè)item更感興趣,但和這一兩個(gè)item相似的item的后續(xù)推送密度卻跟不上,這對(duì)用戶體驗(yàn)是有損的。如果不做額外的優(yōu)化,用戶角度的多樣性會(huì)越來越小,因?yàn)橥ǔ_x用的pointwise模型會(huì)導(dǎo)致同質(zhì)化的現(xiàn)象,比如說用戶喜歡的item是樂器類的,則pointwise在每一個(gè)單點(diǎn)上的預(yù)估都覺得樂器是最好的,最后可能連續(xù)給用戶推了5個(gè)樂器,在單點(diǎn)上收益最高不代表用戶對(duì)整個(gè)推薦結(jié)果 ( 5~10個(gè)item ) 的滿意度是最高的,所以這里也需要做多樣性控制,提升用戶的滿意度。
2. 多樣性控制的方案路線
在具體實(shí)現(xiàn)上,多樣性有三個(gè)主流的技術(shù)方案:規(guī)則打散、embedding打散和DPP,下面會(huì)詳細(xì)介紹:
-
基于規(guī)則打散,比如從item里抽象出發(fā)布作者、標(biāo)簽、伴奏等特征,基于這些特征去做一個(gè)session內(nèi)的頻控。這種方法的好處是易實(shí)現(xiàn),缺點(diǎn)也非常明顯,該方案本質(zhì)上是進(jìn)行枚舉加排列組合,擴(kuò)展性非常差,永遠(yuǎn)沒辦法枚舉所有可能的情況,枚舉出來的情況不一定能真實(shí)表征兩個(gè)item間的相似或差異程度有多大。
-
基于embedding打散,一個(gè)連續(xù)值的方案。好處是它可以基于embedding對(duì)候選集做離散性的評(píng)估,相當(dāng)于此時(shí)可以用向量化的方式表達(dá)item。缺點(diǎn)在于它雖然可以衡量離散性或多樣性,但難以衡量相關(guān)性,從而無法實(shí)現(xiàn)聯(lián)合的收益評(píng)估。事實(shí)上,多樣性只是我們的一個(gè)目標(biāo),相關(guān)性也很重要,如果推了很多不同的東西,但和用戶不怎么相關(guān),可能會(huì)適得其反。
-
DPP概率模型,本質(zhì)上是一種集合選擇技術(shù),選擇出一個(gè)子集使得多樣性和相關(guān)性聯(lián)合建模的收益最大。直觀理解,先基于多樣性和相關(guān)性構(gòu)建一個(gè)矩陣,該矩陣行列式的物理含義是矩陣中各向量張成的平行多面體體積的平方,這樣就把問題轉(zhuǎn)換成了一種可度量的方式:要想同時(shí)最大化多樣性和相關(guān)性,只需要最大化平行多面體的體積。
通常,從平臺(tái)生態(tài)控制的角度,類似DPP的控制算法需要貫穿整個(gè)推薦鏈路。在粗排和精排之后,都需要DPP環(huán)節(jié),后續(xù)會(huì)介紹DPP算法的具體實(shí)現(xiàn)。
3. DPP 技術(shù)細(xì)節(jié)
DPP算法的具體實(shí)現(xiàn)比較復(fù)雜,這里主要介紹兩個(gè)關(guān)鍵點(diǎn):
①基于多樣性和相關(guān)性構(gòu)建矩陣L,該矩陣的行列式等價(jià)于最終要度量的目標(biāo)。如何去定義相關(guān)性和多樣性?
-
多樣性(diversity)是指兩個(gè)item相似不相似,如果很相似就不多樣。利用兩個(gè)item各自的item embedding計(jì)算內(nèi)積,即表示兩個(gè)item的相似度。
-
相關(guān)性(relativity)是一個(gè)候選item與當(dāng)前用戶的匹配程度。在不同環(huán)節(jié)的實(shí)現(xiàn)有差異:在粗排層的DPP,一般是基于user embedding和item embedding計(jì)算內(nèi)積。在精排層的DPP,需要精排的CTR或CVR預(yù)估結(jié)果,因?yàn)檫@些預(yù)估結(jié)果反映了當(dāng)前用戶對(duì)候選item的喜愛程度。
基于上述定義的相關(guān)性和多樣性就可以構(gòu)建矩陣L:用戶與itemi的相關(guān)性 ( 偏好程度 )、用戶與itemj的相關(guān)性 ( 偏好程度 )、itemi與itemj的多樣性三者乘積。通過最大化矩陣L,就可以實(shí)現(xiàn)相關(guān)性和多樣性的聯(lián)合度量。
②如何優(yōu)化求矩陣L行列式的復(fù)雜度,該行列式的原始計(jì)算復(fù)雜度是三階,線上難以支撐這樣的運(yùn)算性能消耗,可以通過貪婪算法把計(jì)算復(fù)雜度進(jìn)一步降低至一階。
-
先進(jìn)行矩陣分解,基于分解的結(jié)果將計(jì)算復(fù)雜度降低到二階。
-
用增量的方式更新參數(shù),繞過求解線性方程組的部分,將復(fù)雜度進(jìn)一步降低到一階。
由此,行列式的求解過程由三階降低到一階,滿足了線上的性能,上圖最下方給出的paper就是相關(guān)方向的論述。
4. 線上收益
在線上做多樣性的相關(guān)實(shí)驗(yàn),我們較關(guān)注的系統(tǒng)和數(shù)據(jù)兩部分,都有明顯收益:
-
系統(tǒng)收益,作為一個(gè)ugc平臺(tái),會(huì)考量推薦系統(tǒng)分發(fā)覆蓋了多少創(chuàng)作者、覆蓋了多少作品以及內(nèi)容的時(shí)效性,從上圖右側(cè)三條曲線可見,在加入多樣性的控制后,三個(gè)指標(biāo)都有穩(wěn)步的提升。
-
數(shù)據(jù)收益,有關(guān)播放時(shí)長、關(guān)注滲透、點(diǎn)贊滲透相關(guān)的指標(biāo)都有1~2個(gè)點(diǎn)的提升,這也體現(xiàn)了多樣性是有必要的,因?yàn)樗喈?dāng)于對(duì)pointwise進(jìn)行了簡單的listwise化,形象化闡述就是,用戶瀏覽多個(gè)session時(shí),多樣性調(diào)節(jié)避免了同質(zhì)化內(nèi)容扎堆。
5. 關(guān)于DPP還能做更多的是什么?
針對(duì)上述基于多樣性和相關(guān)性構(gòu)建矩陣L的過程,有兩方面可以做進(jìn)一步優(yōu)化:
-
多樣性本質(zhì)上是定義什么樣的item是相似的,用相似矩陣刻畫這種相似關(guān)系。在我們K歌平臺(tái),會(huì)做一些內(nèi)容的混排,比如音頻跟視頻的混排,如果在原始的item embedding構(gòu)建出來的item similarity matrix基礎(chǔ)上,加入一些預(yù)設(shè)的先驗(yàn)信息,判斷什么樣的item是更相似的,比如音頻跟音頻間更相似,視頻跟視頻間更相似,那么它最后的度量目標(biāo)就加入了對(duì)作品類型的考量,這就間接實(shí)現(xiàn)了內(nèi)容的混排。
-
相關(guān)性本質(zhì)上是定義什么樣的item更匹配當(dāng)前用戶,之前都是從消費(fèi)者的角度去考量用戶更喜歡什么樣的item,而我們作為一個(gè)ugc平臺(tái),很多時(shí)候也要考量什么樣的item更適合被分發(fā),比如某item是不是更有平臺(tái)的畫風(fēng),更符合我們對(duì)內(nèi)容分發(fā)的理解,這時(shí),就是從平臺(tái)系統(tǒng)或者生產(chǎn)者的角度去理解什么樣的item更應(yīng)該被優(yōu)先推薦。如果已知一部分item更需要被優(yōu)先推薦,在構(gòu)建用戶跟item間的相關(guān)性分時(shí),可以對(duì)relativity score加調(diào)節(jié)權(quán)重進(jìn)行干預(yù),實(shí)現(xiàn)流量分配。比如,如果要使樂器類item比其他item有更高的權(quán)重,這時(shí),可以調(diào)高樂器類item和用戶的匹配權(quán)重。
綜上可知,DPP不只是一個(gè)多樣性或相關(guān)性的度量,它本身是一種調(diào)控方式,具體調(diào)控的量和業(yè)務(wù)場(chǎng)景相關(guān),具有非常大的挖掘空間。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!