整理 | 兆雨
精準(zhǔn)的推薦系統(tǒng)模型是很多互聯(lián)網(wǎng)產(chǎn)品的核心競(jìng)爭(zhēng)力,個(gè)性化推薦系統(tǒng)旨在根據(jù)用戶的行為數(shù)據(jù)提供“定制化”的產(chǎn)品體驗(yàn)。國(guó)民級(jí)短視頻App快手,每天為數(shù)億用戶推薦百億的視頻,遇到的挑戰(zhàn)之一是推薦系統(tǒng)模型如何精準(zhǔn)地描述與捕捉用戶的興趣。
如今業(yè)內(nèi)采用的解決方案通常為結(jié)合大量數(shù)據(jù)集和擬合參數(shù)來訓(xùn)練深度學(xué)習(xí)模型,如此一來讓模型更加逼近現(xiàn)實(shí)情況。Google日前發(fā)布了首個(gè)萬億級(jí)模型 Switch Transformer,參數(shù)量達(dá)到1.6萬億,其速度是Google之前開發(fā)的最大語言模型(T5-XXL)的4倍。然而快手萬億參數(shù)精排模型總的參數(shù)量超過1.9萬億,規(guī)模更大,且已經(jīng)投入實(shí)踐。下面就讓我們通過快手精排模型的發(fā)展史,一起揭秘它內(nèi)部的的技術(shù)密碼吧!
圖示:
Google BERT-large NLP預(yù)訓(xùn)練模型: 3.4億參數(shù)量
Google Meena開域聊天機(jī)器人:26億參數(shù)量
Google T5預(yù)訓(xùn)練模型: 110億參數(shù)量
OpenAI GPT3語言模型:1750億參數(shù)量
Google Switch Transformer語言模型: 16000億參數(shù)量
快手精排排序模型:19000億參數(shù)量
參數(shù)個(gè)性化CTR模型-PPNet
2019年之前,快手App主要以雙列的瀑布流玩法為主,用戶同視頻的交互與點(diǎn)擊,觀看雙階段來區(qū)分。在這種形式下, CTR預(yù)估模型變得尤為關(guān)鍵,因?yàn)樗鼘⒅苯記Q定用戶是否愿意點(diǎn)擊展示給他們的視頻。彼時(shí)業(yè)界主流的推薦模型還是以DNN,DeepFM等簡(jiǎn)單的全連接深度學(xué)習(xí)模型為主。但考慮到某用戶個(gè)體和視頻的共建語義模式在全局用戶的共建語義模式基礎(chǔ)上會(huì)有個(gè)性化的偏差,如何在DNN網(wǎng)絡(luò)參數(shù)上為不同用戶學(xué)習(xí)一個(gè)獨(dú)有的個(gè)性化偏差成為了快手推薦團(tuán)隊(duì)優(yōu)化的方向。
在語音識(shí)別領(lǐng)域中,2014年和2016年提出的LHUC算法(learning hidden unit contributions)核心思想是做說話人自適應(yīng)(speaker adaptation),其中一個(gè)關(guān)鍵突破是在DNN網(wǎng)絡(luò)中,為每個(gè)說話人學(xué)習(xí)一個(gè)特定的隱式單位貢獻(xiàn)(hidden unit contributions),來提升不同說話人的語音識(shí)別效果。借鑒LHUC的思想,快手推薦團(tuán)隊(duì)在精排模型上展開了嘗試。經(jīng)過多次迭代優(yōu)化,推薦團(tuán)隊(duì)設(shè)計(jì)出一種gating機(jī)制,可以增加DNN網(wǎng)絡(luò)參數(shù)個(gè)性化并能夠讓模型快速收斂??焓职堰@種模型叫做PPNet(Parameter Personalized Net)。據(jù)快手介紹,PPNet于2019年全量上線后,顯著的提升了模型的CTR目標(biāo)預(yù)估能力。
PPNet結(jié)構(gòu)圖
如上圖所示,PPNet的左側(cè)是目前常見的DNN網(wǎng)絡(luò)結(jié)構(gòu),由稀疏特征(sparse features)、嵌入層(embedding layer)、多神經(jīng)網(wǎng)絡(luò)層(neural layer)組成。右側(cè)是PPNet特有的模塊,包括Gate NN和只給Gate NN作為輸入的id特征。其中uid,pid,aid分別表示user id,photo id,author id。左側(cè)的所有特征的embedding會(huì)同這3個(gè)id特征的embedding拼接到一起作為所有Gate NN的輸入。需要注意的是,左側(cè)所有特征的embedding并不接受Gate NN的反傳梯度,這樣操作的目的是減少Gate NN對(duì)現(xiàn)有特征embedding收斂產(chǎn)生的影響。Gate NN的數(shù)量同左側(cè)神經(jīng)網(wǎng)絡(luò)的層數(shù)一致,其輸出同每一層神經(jīng)網(wǎng)絡(luò)的輸入做element-wise product來做用戶的個(gè)性化偏置。Gate NN是一個(gè)2層神經(jīng)網(wǎng)絡(luò),其中第二層網(wǎng)絡(luò)的激活函數(shù)是2 * sigmoid,目的是約束其輸出的每一項(xiàng)在[0, 2]范圍內(nèi),并且默認(rèn)值為1。當(dāng)Gate NN輸出是默認(rèn)值時(shí),PPNet同左側(cè)部分網(wǎng)絡(luò)是等價(jià)的。經(jīng)實(shí)驗(yàn)對(duì)比,通過Gate NN為神經(jīng)網(wǎng)絡(luò)層輸入增加個(gè)性化偏置項(xiàng),可以顯著提升模型的目標(biāo)預(yù)估能力。PPNet通過Gate NN來支持DNN網(wǎng)絡(luò)參數(shù)的個(gè)性化能力,來提升目標(biāo)的預(yù)估能力,理論上來講,可以用到所有基于DNN模型的預(yù)估場(chǎng)景,如個(gè)性化推薦,廣告,基于DNN的強(qiáng)化學(xué)習(xí)場(chǎng)景等。
多目標(biāo)預(yù)估優(yōu)化-基于MMoE的多任務(wù)學(xué)習(xí)框架
隨著短視頻用戶的需求不斷升級(jí),2020年9月,快手推出了8.0版本。這個(gè)版本里增加了底部導(dǎo)航欄,在此基礎(chǔ)上增加了一個(gè)“精選”tab,支持單列上下滑的形式。這個(gè)兼容雙列點(diǎn)選和單列上下滑的版本,旨在為用戶提供更好的消費(fèi)體驗(yàn),加入更多元的消費(fèi)方式。在新的界面下,有相當(dāng)一部分用戶會(huì)既使用雙列也使用單列。用戶在這兩種頁面上的消費(fèi)方式和交互形式都有很大的不同,因此在數(shù)據(jù)層面表示出來的分布也非常不同。如何將兩部分?jǐn)?shù)據(jù)都用在模型建模里,而且用好,成為了快手推薦團(tuán)隊(duì)一個(gè)亟待解決的問題。
快手團(tuán)隊(duì)發(fā)現(xiàn),當(dāng)單列業(yè)務(wù)的場(chǎng)景增多后,多任務(wù)學(xué)習(xí)更加重要。因?yàn)樵趩瘟袌?chǎng)景下,用戶的交互行為都是基于show給用戶的視頻發(fā)生,并沒有像雙列交互那樣有非常重要的點(diǎn)擊行為。這些交互行為相對(duì)平等,而且這些行為數(shù)量多達(dá)幾十個(gè)(時(shí)長(zhǎng)相關(guān)預(yù)估目標(biāo)、喜歡、關(guān)注、轉(zhuǎn)發(fā)等)。
精排模型預(yù)估目標(biāo)(部分)
隨著單列業(yè)務(wù)數(shù)據(jù)量越來越大,從模型層面,推薦團(tuán)隊(duì)嘗試拆離出針對(duì)單列業(yè)務(wù)單獨(dú)優(yōu)化的模型。具體表現(xiàn)在特征層面,可以完全復(fù)用雙列模型特征,只是針對(duì)單列的目標(biāo),額外添加個(gè)性化偏置特征和部分統(tǒng)計(jì)值特征。在Embedding層面,因?yàn)榍捌趩瘟袛?shù)據(jù)量少,不能保證embedding收斂,最初使用雙列數(shù)據(jù)click行為主導(dǎo)訓(xùn)練,后面改用單雙列用戶視頻觀看行為(有效播放、長(zhǎng)播放、短播放)主導(dǎo)訓(xùn)練embedding。在網(wǎng)絡(luò)結(jié)構(gòu)層面,主要基于shared-bottom網(wǎng)絡(luò)結(jié)構(gòu)訓(xùn)練,不相關(guān)目標(biāo)獨(dú)占一個(gè)tower,相關(guān)目標(biāo)共享同一tower頂層輸出,這能在一定程度上提升目標(biāo)預(yù)估效果。這個(gè)模型上線后,起初有一定的效果,但很快暴露出了一些問題。首先,它沒有考慮到單雙列業(yè)務(wù)中embedding分布差異,造成了embedding學(xué)習(xí)不充分。其次,在多任務(wù)學(xué)習(xí)層面,單列場(chǎng)景下,用戶的交互都是基于當(dāng)前視頻show的單階段行為,各個(gè)目標(biāo)之間互相影響,模型單個(gè)目標(biāo)的提升,不一定能帶來線上的整體收益。
因此,如何設(shè)計(jì)一個(gè)好的多任務(wù)學(xué)習(xí)算法框架,讓所有預(yù)估目標(biāo)都能提升變得非常關(guān)鍵。這個(gè)算法框架必須考慮數(shù)據(jù)、特征、embedding、網(wǎng)絡(luò)結(jié)構(gòu)以及單列用戶交互特點(diǎn)。經(jīng)過充分的調(diào)研和實(shí)踐,推薦團(tuán)隊(duì)決定采用MMoE模型(Multi-gate Mixture-of-Experts)來改進(jìn)當(dāng)前模型。
MMoE是Google提出的一種經(jīng)典多任務(wù)學(xué)習(xí)算法,其核心思想是把shared-bottom網(wǎng)絡(luò)替換為Expert層,通過多個(gè)門控網(wǎng)絡(luò)在多個(gè)專家網(wǎng)絡(luò)上上分別針對(duì)每個(gè)目標(biāo)學(xué)習(xí)不同專家網(wǎng)絡(luò)權(quán)重進(jìn)行融合表征,在此融合表征的基礎(chǔ)上通過task網(wǎng)絡(luò)學(xué)習(xí)每個(gè)任務(wù)。
通過參考MMoE算法和上面提到的快手推薦場(chǎng)景難點(diǎn),推薦團(tuán)隊(duì)改造了MMoE算法并設(shè)計(jì)了一套新的多任務(wù)學(xué)習(xí)算法框架。具體體現(xiàn)在,在特征層面,進(jìn)行了語義統(tǒng)一,修正在單雙列業(yè)務(wù)中語義不一致特征,添加針對(duì)用戶在單列相關(guān)特征。在Embedding層面,進(jìn)行了空間重新映射,設(shè)計(jì)了embedding transform layer,直接學(xué)習(xí)單雙列embedding映射關(guān)系,幫助單雙列embedding映射到統(tǒng)一空間分布。在特征重要性層面,設(shè)計(jì)了slot-gating layer,為不同業(yè)務(wù)做特征重要性選擇。
通過以上3點(diǎn)的改動(dòng),模型將輸入層的embedding表示從特征語義,embedding在不同業(yè)務(wù)分布,特征在不同業(yè)務(wù)重要性三個(gè)層面做了歸一化和正則化,重新映射到統(tǒng)一的特征表征空間,使得MMoE網(wǎng)絡(luò)在此空間上更好的捕捉多個(gè)任務(wù)之間后驗(yàn)概率分布關(guān)系。通過此項(xiàng)對(duì)MMoE的改進(jìn),模型所有的目標(biāo)提升非常顯著。
短期行為序列建模-Transformer模型
在快手的精排模型中,用戶歷史行為特征非常重要,對(duì)刻畫用戶興趣的動(dòng)態(tài)變化有很好的表征。在快手的推薦場(chǎng)景下,用戶的行為特征非常豐富并且多變,其復(fù)雜度遠(yuǎn)遠(yuǎn)超過視頻類特征或者上下文的特征,因此設(shè)計(jì)一個(gè)能夠針對(duì)用戶行為序列有效建模的算法很有必要。
目前業(yè)界上對(duì)于用戶行為序列建模主要分為兩種模式,一是對(duì)于用戶的歷史行為進(jìn)行weighted sum,二是通過RNN之類的模型進(jìn)行時(shí)序建模。在快手前期的雙列精排模型里,用戶行為序列只是簡(jiǎn)單做sum pooling作為模型輸入。而在單列場(chǎng)景下,用戶被動(dòng)接收快手推薦視頻,而且丟失掉封面信息后,用戶需要觀看視頻一段時(shí)間再做反饋,因此主動(dòng)視頻選擇權(quán)降低,更加適合推薦系統(tǒng)對(duì)用戶的興趣做E&E(Exploit & Explore)。
快手的序列建模靈感來自于Transformer模型。Transformer模型是Google在2017年提出的經(jīng)典神經(jīng)網(wǎng)絡(luò)翻譯模型,后來火爆的BERT和GPT-3也是基于此模型部分結(jié)構(gòu)。Transformer主要包括Encoder跟Decoder兩部分,其中Encoder部分對(duì)輸入語言序列進(jìn)行建模,這部分跟用戶行為序列建模目標(biāo)是非常類似的,因此快手借鑒其中算法結(jié)構(gòu)并對(duì)計(jì)算量進(jìn)行了優(yōu)化。
MMoE結(jié)合Transformer建模用戶興趣序列
首先,快手推薦團(tuán)隊(duì)使用用戶的視頻播放歷史作為行為序列。候選的序列有用戶長(zhǎng)播歷史序列,短播歷史序列,用戶點(diǎn)擊歷史序列等,此類列表詳盡地記錄了用戶觀看視頻id,作者id,視頻時(shí)長(zhǎng),視頻tag,視頻觀看時(shí)長(zhǎng),視頻觀看時(shí)間等內(nèi)容,完整描述用戶的觀看歷史。其次,對(duì)視頻觀看距今時(shí)間做log變換代替position embedding。在快手的推薦場(chǎng)景下,用戶短期的觀看行為跟當(dāng)次預(yù)估更相關(guān),長(zhǎng)時(shí)間觀看行為更多體現(xiàn)用戶的多興趣分布,使用log變換更能體現(xiàn)這種相關(guān)性。最后,替換multi-head self-attention為multi-head target attention,并且使用當(dāng)前embedding層的輸入作為query。這樣設(shè)計(jì)的目的有兩點(diǎn),首先當(dāng)前用戶特征,預(yù)估視頻特征和context特征比單獨(dú)的用戶行為序列提供更多信息。其次可以簡(jiǎn)化計(jì)算量,從O(d*n*n*h)變換為O(d*n*h + e*d),其中d為attention的維度,n為list長(zhǎng)度,h為head個(gè)數(shù),e*d表征的是embedding層維度變換為attention維度所需的復(fù)雜度。
改造后的Transformer網(wǎng)絡(luò)能顯著提升模型的預(yù)估能力,在離線評(píng)估上,用戶觀看時(shí)長(zhǎng)類預(yù)估提升非常明顯,線上用戶觀看時(shí)長(zhǎng)也顯著提升。
長(zhǎng)期興趣建模
長(zhǎng)期以來,快手的精排模型都比較偏向于使用用戶最近的行為。上面已經(jīng)說到,通過采用transformer和MMoE模型,快手的精排模型對(duì)用戶的短期興趣進(jìn)行了精確的建模,取得了非常大的收益。之前的模型里,采用了用戶最近幾十個(gè)歷史行為進(jìn)行建模。由于短視頻行業(yè)的特點(diǎn),最近幾十個(gè)歷史行為通常只能表示用戶很短一段時(shí)間內(nèi)的興趣。這就造成了模型過度依賴用戶的短期行為,而導(dǎo)致了對(duì)用戶中長(zhǎng)期興趣建模的缺失。
針對(duì)快手的業(yè)務(wù)特點(diǎn),快手推薦團(tuán)隊(duì)對(duì)于用戶長(zhǎng)期興趣也進(jìn)行了建模,使得模型能對(duì)于用戶長(zhǎng)期的歷史記錄都有感知能力。快手推薦團(tuán)隊(duì)發(fā)現(xiàn),將用戶的交互歷史序列(播放、點(diǎn)贊、關(guān)注、轉(zhuǎn)發(fā)等)擴(kuò)長(zhǎng)之后,模型能夠更好的捕捉到一些潛在的用戶興趣,即使此類行為相對(duì)稀疏。針對(duì)該特點(diǎn),推薦團(tuán)隊(duì)在之前的模型基礎(chǔ)上設(shè)計(jì)并改進(jìn)了用戶超長(zhǎng)期興趣建模模塊,能夠?qū)τ脩魩讉€(gè)月到一年的行為進(jìn)行全面的建模,用戶行為序列長(zhǎng)度能達(dá)到萬級(jí)。此模型已經(jīng)在全量業(yè)務(wù)推全并且取得了巨大的線上收益。
快手用戶長(zhǎng)期興趣精排模型結(jié)構(gòu)示意圖
千億特征,萬億參數(shù)
隨著模型的迭代,深度學(xué)習(xí)網(wǎng)絡(luò)的復(fù)雜度越來越高,模型中添加的特征數(shù)量也越來越多,模型特征規(guī)模的大小也制約了精排模型的迭代。這不僅會(huì)限制模型特征的規(guī)模,使得一部分特征被逐出,帶來模型收斂的不穩(wěn)定性,同時(shí)還會(huì)導(dǎo)致模型更容易逐出低頻的特征,造成線上冷啟動(dòng)效果變差(新視頻、新用戶),對(duì)于長(zhǎng)尾的視頻或者新用戶不夠友好。
為了解決這個(gè)問題,快手推薦和架構(gòu)的同學(xué)針對(duì)訓(xùn)練引擎和線上serving進(jìn)行改進(jìn),做到離線訓(xùn)練和線上serving的服務(wù)根據(jù)配置的特征量靈活擴(kuò)展,可以支持精排模型離線跟線上有千億特征,萬億參數(shù)的規(guī)模。特別的,新模型對(duì)于新視頻跟新用戶的流量分發(fā)更加友好,在新用戶和新視頻的指標(biāo)上有顯著的提升,踐行了快手推薦”普惠“的理念。目前快手的精排模型,總特征量超過1000億,模型總的參數(shù)量超過19000億。
在線訓(xùn)練和預(yù)估服務(wù)
為了支撐推薦場(chǎng)景下千億特征模型的在線訓(xùn)練和實(shí)時(shí)預(yù)估,推薦團(tuán)隊(duì)針對(duì)訓(xùn)練框架和線上預(yù)估服務(wù)的參數(shù)服務(wù)器(Parameter Server)進(jìn)行了修改。在推薦模型的在線學(xué)習(xí)中,存儲(chǔ)Embedding的參數(shù)服務(wù)器需要能夠精準(zhǔn)的控制內(nèi)存的使用,提升訓(xùn)練和預(yù)估的效率。為了解決這一問題,推薦團(tuán)隊(duì)提出了無沖突且內(nèi)存高效的全局共享嵌入表(Global Shared Embedding Table, GSET)的參數(shù)服務(wù)器設(shè)計(jì)。
每個(gè) ID 單獨(dú)映射一個(gè)Embedding向量很快就會(huì)占滿機(jī)器的內(nèi)存資源,為了確保系統(tǒng)可以長(zhǎng)期執(zhí)行,GSET 使用定制的 feature score 淘汰策略以控制內(nèi)存占用量可以始終低于預(yù)設(shè)閾值。傳統(tǒng)的緩存淘汰策略如 LFU、LRU 只考慮了實(shí)體出現(xiàn)的頻率信息,主要用以最大化緩存的命中率。feature score 策略考慮了機(jī)器學(xué)習(xí)場(chǎng)景下額外的信息來輔助進(jìn)行特征淘汰。
在推薦系統(tǒng)的在線學(xué)習(xí)過程中,會(huì)有大量低頻 ID 進(jìn)入系統(tǒng),這些低頻 ID 通常在未來的預(yù)估中根本不會(huì)出現(xiàn),系統(tǒng)接收了這些特征后可能很快又會(huì)再次淘汰他們。為了防止低頻 ID 無意義的進(jìn)入和逐出對(duì)系統(tǒng)性能產(chǎn)生影響,GSET 中支持一些特征準(zhǔn)入策略來過濾低頻特征。同時(shí)為了提升GSET的效率和降低成本,快手還采用了新的存儲(chǔ)器件 -- 非易失內(nèi)存 (Intel AEP)。非易失內(nèi)存能提供單機(jī)達(dá)到若干TB的近似內(nèi)存級(jí)別訪問速度。為了適配這種硬件,推薦團(tuán)隊(duì)實(shí)現(xiàn)了底層KV引擎NVMKV來支撐GSET,從而很好的確保了萬億參數(shù)模型的線上穩(wěn)定性。
展望未來
據(jù)快手推薦算法負(fù)責(zé)人,曾在Google Research擔(dān)任Staff Research Manager的宋洋博士介紹,短視頻行業(yè)有其獨(dú)特的挑戰(zhàn),表現(xiàn)在用戶量多,視頻上傳量大,作品生命周期短,用戶興趣變化快等多個(gè)方面。因此短視頻推薦很難照搬傳統(tǒng)視頻行業(yè)精細(xì)化運(yùn)營(yíng)的做法,而需要依靠推薦算法對(duì)視頻進(jìn)行及時(shí)的,精確的分發(fā)??焓滞扑]算法團(tuán)隊(duì)一直針對(duì)短視頻業(yè)務(wù)進(jìn)行深度定制和積極創(chuàng)新,提出了很多業(yè)界首創(chuàng)的推薦模型和想法,同時(shí)也給推薦工程架構(gòu)團(tuán)隊(duì)帶來了很多系統(tǒng)和硬件層面的挑戰(zhàn)。
宋洋博士認(rèn)為,快手精排萬億參數(shù)模型是推薦系統(tǒng)一個(gè)里程碑式的突破,它結(jié)合了序列模型,長(zhǎng)短期興趣模型,門控模型,專家模型等各個(gè)方面的優(yōu)點(diǎn),是至今為止工業(yè)界最全面,最有效的推薦模型之一。該模型已在快手的主要業(yè)務(wù)上全量上線為用戶服務(wù)。在未來“算法-系統(tǒng)-硬件”三位一體的挑戰(zhàn)和機(jī)遇可能會(huì)有更多,希望這將更進(jìn)一步推動(dòng)快手推薦系統(tǒng)在技術(shù)上的創(chuàng)新和突破,為用戶增進(jìn)體驗(yàn)和創(chuàng)造價(jià)值。
- QQ:61149512