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