估模型演進(jìn)史:從邏輯回歸到深度學(xué)習(xí)的關(guān)鍵路徑)
做推薦系統(tǒng)這些年我最喜歡跟新人聊的一條演進(jìn)線就是CTR預(yù)估模型是怎么一步一步走到今天的。CTR點(diǎn)擊率預(yù)估這個(gè)指標(biāo)聽起來(lái)很樸素?zé)o非是“展示之后用戶點(diǎn)沒點(diǎn)”但它是推薦系統(tǒng)里最核心的預(yù)測(cè)目標(biāo)之一直接決定一個(gè)物品排在哪個(gè)位置、一條廣告值多少錢、一個(gè)視頻能獲得多少流量。我一直覺得把CTR技術(shù)的歷史脈絡(luò)讀透比單純背模型公式有價(jià)值得多因?yàn)槟憧吹降牟皇且欢压铝⒛P投且惶淄暾摹@“如何理解用戶興趣”展開的問(wèn)題求解思路。這篇內(nèi)容適合三類人看一是剛?cè)胄胁痪玫耐扑]算法工程師需要一個(gè)清晰的技術(shù)坐標(biāo)知道當(dāng)前各種花哨模型從哪里來(lái)、到哪里去二是做數(shù)據(jù)產(chǎn)品和增長(zhǎng)運(yùn)營(yíng)的同學(xué)明白點(diǎn)擊率背后連著什么樣的商業(yè)價(jià)值三是已經(jīng)在工業(yè)界做特征、做訓(xùn)練的資深研發(fā)哪怕你每天在調(diào)某個(gè)模型回頭看一遍演變史也會(huì)發(fā)現(xiàn)很多當(dāng)年沒想通的細(xì)節(jié)其實(shí)早在若干年前就被前人踩過(guò)了。1. 為什么CTR預(yù)估是推薦系統(tǒng)里最值得深挖的一條線1.1 從點(diǎn)擊率到商業(yè)價(jià)值的鏈路推薦系統(tǒng)的完整鏈路通常是召回 → 粗排 → 精排 → 重排 → 展示。召回負(fù)責(zé)從百萬(wàn)甚至億級(jí)候選里選出幾百個(gè)可能感興趣的物品粗排用輕量模型快速過(guò)濾精排則是對(duì)剩下的幾十個(gè)物品做精細(xì)打分這個(gè)打分結(jié)果基本決定了用戶最終看到什么。CTR預(yù)估主要發(fā)生在粗排和精排這兩層。精排模型估計(jì)用戶點(diǎn)擊某個(gè)物品的概率重排階段再結(jié)合多樣性、業(yè)務(wù)規(guī)則、商業(yè)約束做最終調(diào)整。這里出現(xiàn)一個(gè)很關(guān)鍵的道理點(diǎn)擊率雖然是“點(diǎn)沒點(diǎn)”的二分類問(wèn)題但它背后代表的是用戶在當(dāng)前場(chǎng)景下對(duì)內(nèi)容的迫切程度。一個(gè)CTR高的物品不一定用戶真的喜歡但它至少說(shuō)明推薦系統(tǒng)給出的排序符合用戶當(dāng)下的注意力分布。從商業(yè)角度看點(diǎn)擊率往往直接連到廣告計(jì)費(fèi)、內(nèi)容消耗和商品成交。很多廣告系統(tǒng)采用點(diǎn)擊計(jì)費(fèi)模式預(yù)估CTR稍微偏差一點(diǎn)平臺(tái)和廣告主兩側(cè)的收益波動(dòng)都會(huì)被放大。正因如此CTR模型的每一次提升哪怕是零點(diǎn)幾個(gè)點(diǎn)的AUC漲幅放到幾億用戶的規(guī)模上都可能轉(zhuǎn)化成巨大的商業(yè)價(jià)值。這也是為什么這么多團(tuán)隊(duì)愿意投入大量人力去研究CTR模型結(jié)構(gòu)。1.2 看懂演變的兩個(gè)視角特征組合與表達(dá)能力的延伸如果只記模型名字看歷史很容易變成“一頭霧水”。我通常建議大家用兩個(gè)視角串起整條線第一個(gè)視角是特征組合能力。早期邏輯回歸完全依賴人工做特征交叉后來(lái)FM用隱向量自動(dòng)建模二階交叉GBDT用樹結(jié)構(gòu)自動(dòng)生成高階交叉深度學(xué)習(xí)則直接把特征扔進(jìn)Embedding和神經(jīng)網(wǎng)絡(luò)讓高維非線性的特征交互自動(dòng)涌現(xiàn)。你會(huì)發(fā)現(xiàn)整個(gè)演變過(guò)程就是“人工特征工程”不斷被替代、被自動(dòng)化的過(guò)程。第二個(gè)視角是模型的表達(dá)能力。從線性模型到淺層非線性模型再到深層神經(jīng)網(wǎng)絡(luò)、注意力機(jī)制、序列模型、多任務(wù)學(xué)習(xí)、生成式模型模型能感知的信息范圍越來(lái)越廣從單個(gè)樣本的靜態(tài)特征到用戶歷史行為序列再到跨任務(wù)、跨場(chǎng)景的全局信息。這兩個(gè)視角一旦建立后面所有的技術(shù)節(jié)點(diǎn)都能掛上去不會(huì)迷路。2. 傳統(tǒng)CTR模型時(shí)代特征工程就是模型的全部2.1 邏輯回歸為什么能統(tǒng)治那么多年在深度學(xué)習(xí)普及之前邏輯回歸Logistic RegressionLR是CTR預(yù)估的絕對(duì)主力后來(lái)很長(zhǎng)一段時(shí)間里也依然是工業(yè)界的基線模型。它的形式非常簡(jiǎn)潔對(duì)特征加權(quán)求和再套一個(gè)Sigmoid函數(shù)輸出0到1之間的點(diǎn)擊概率。邏輯回歸能統(tǒng)治多年靠的不是表達(dá)能力而是工程友好性。線上打分只需要做一次大規(guī)模稀疏向量點(diǎn)積延遲極低模型參數(shù)可以隨著新樣本增量更新非常適合廣告和推薦這種數(shù)據(jù)源源不斷產(chǎn)生的場(chǎng)景而且每個(gè)特征的權(quán)重都有明確含義運(yùn)營(yíng)和算法同學(xué)能直接解釋“這個(gè)特征讓點(diǎn)擊率漲了還是降了”這在業(yè)務(wù)協(xié)作中非常寶貴。當(dāng)時(shí)的核心工作幾乎全在特征工程上。工程師們要做特征離散化把連續(xù)值切分成多個(gè)區(qū)間再把類別特征做one-hot編碼變成高維稀疏向量。常見的特征包括用戶ID、物品ID、用戶年齡段、商品類目、當(dāng)前時(shí)間、歷史點(diǎn)擊次數(shù)等。為了讓模型記住組合信息大家還會(huì)手動(dòng)構(gòu)造大量交叉特征比如“用戶品類偏好 × 當(dāng)前場(chǎng)景”這類看起來(lái)很有腦洞的組合。訓(xùn)練方面早期常用SGD隨機(jī)梯度下降做大規(guī)模稀疏模型的訓(xùn)練后來(lái)FTRL這類在線優(yōu)化算法因?yàn)槟芗骖櫹∈栊院褪諗克俣瘸蔀楦鞔笃脚_(tái)處理海量點(diǎn)擊日志的標(biāo)配。損失函數(shù)就是經(jīng)典的交叉熵模型對(duì)正樣本預(yù)測(cè)概率越接近1、對(duì)負(fù)樣本預(yù)測(cè)概率越接近0損失越小。整個(gè)流程很成熟但問(wèn)題也很明顯人工特征組合的規(guī)模是有限的線上業(yè)務(wù)一多特征列表容易膨脹到失控而且很多隱性交叉關(guān)系是人工難以預(yù)設(shè)的。提示LR雖然簡(jiǎn)單但不要小看它。很多團(tuán)隊(duì)用深度學(xué)習(xí)替換LR后線上收益并不明顯原因往往不是模型不好而是特征工程做糙了。LR加好特征通常能打贏結(jié)構(gòu)花哨但特征稀疏的深度模型。2.2 FM與FFM給特征組合加上隱向量邏輯回歸最大的痛點(diǎn)是無(wú)法自動(dòng)學(xué)習(xí)特征之間的二階交叉關(guān)系。如果數(shù)據(jù)里“年輕用戶 游戲品類”這個(gè)組合很重要但樣本中這個(gè)組合出現(xiàn)次數(shù)很少人工構(gòu)造的交叉特征可能根本沒能覆蓋到或者參數(shù)估計(jì)很不穩(wěn)定。FM因子分解機(jī)的核心思路是不再為每個(gè)特征組合單獨(dú)學(xué)習(xí)一個(gè)參數(shù)而是為每個(gè)特征學(xué)習(xí)一個(gè)低維隱向量?jī)蓚€(gè)特征的交叉權(quán)重直接用它們隱向量的內(nèi)積來(lái)表示。舉個(gè)例子用戶年齡段取值為“20~25歲”物品品類取值為“游戲”只要分別學(xué)到這兩個(gè)特征的向量它們的交互就能被推斷出來(lái)。即使“20~25歲 游戲”這個(gè)組合在樣本里很稀疏也能從其他組合中借到信息這就大大緩解了稀疏特征場(chǎng)景下二階組合參數(shù)無(wú)法可靠估計(jì)的問(wèn)題。FM還有一個(gè)讓工程師很喜歡的特性二階交叉部分可以寫成平方項(xiàng)減去向量?jī)?nèi)積平方的形式計(jì)算復(fù)雜度能從O(n2)降到O(kn)其中k是隱向量維度。這意味著在特征數(shù)量很大的點(diǎn)擊日志上依然可以用相對(duì)低的成本完成訓(xùn)練和推理。FFMField-aware Factorization Machine是FM的一個(gè)重要升級(jí)它進(jìn)一步考慮了“場(chǎng)”Field的概念。在FFM中每個(gè)特征對(duì)不同場(chǎng)要有不同的隱向量比如“用戶ID”這個(gè)特征在和“物品ID”交叉、和“時(shí)間特征”交叉時(shí)應(yīng)該使用不同的向量表示。這種細(xì)化讓模型表達(dá)能力更強(qiáng)在不少CTR比賽和工業(yè)場(chǎng)景中效果優(yōu)于FM但參數(shù)量和計(jì)算復(fù)雜度也隨之漲了一截線上部署時(shí)要做更多工程優(yōu)化。2.3 GBDT自動(dòng)交叉那時(shí)候的“手動(dòng)大模型”在深度神經(jīng)網(wǎng)絡(luò)大規(guī)模應(yīng)用之前GBDT梯度提升決策樹是特征工程領(lǐng)域的一把利器尤其是“GBDT LR”的組合方案曾經(jīng)在一段時(shí)間里代表了傳統(tǒng)CTR模型的天花板被很多平臺(tái)拿去打榜并驗(yàn)證了線上效果。GBDT做的事情是通過(guò)多輪迭代訓(xùn)練一組決策樹每棵樹擬合前面所有樹預(yù)測(cè)結(jié)果的殘差。對(duì)CTR問(wèn)題來(lái)說(shuō)把所有樣本的連續(xù)特征比如用戶歷史點(diǎn)擊次數(shù)、活躍天數(shù)等和部分稀疏特征喂進(jìn)去經(jīng)過(guò)若干輪迭代每棵樹的葉子節(jié)點(diǎn)實(shí)際上代表了一條自動(dòng)學(xué)到的特征組合規(guī)則。為了把樹模型變成線性的可組合特征常見做法是對(duì)訓(xùn)練好的若干棵樹取每個(gè)樣本落在每棵樹的葉子節(jié)點(diǎn)編號(hào)然后做one-hot編碼生成一個(gè)高維稀疏特征向量。比如有10棵樹、每棵64個(gè)葉子那么每個(gè)樣本就會(huì)得到一個(gè)640維的稀疏特征其中只有10個(gè)位置是1。這些編碼后的特征再送給LR就構(gòu)成了GBDT LR的兩階段模型。實(shí)際操作中這個(gè)方案有兩個(gè)非常關(guān)鍵的經(jīng)驗(yàn)點(diǎn)一是樹的數(shù)量和葉子數(shù)不能盲目加大否則編碼后的特征會(huì)極度稀疏LR訓(xùn)練時(shí)容易過(guò)擬合二是GBDT這種樹模型不能頻繁在線更新通常是每天或每小時(shí)離線訓(xùn)練一次再同步給線上LR使用。# 偽代碼用GBDT產(chǎn)出交叉特征并交給線性模型 import numpy as np # gbdt是訓(xùn)練好的多棵樹x_raw是單條樣本的原始連續(xù)特征 def gbdt_feature_transform(gbdt, x_raw): leafs [] for tree in gbdt.trees: leaf_idx tree.apply(x_raw) # 得到該樣本在當(dāng)前樹的葉子編號(hào) leafs.append(leaf_idx) # 把所有葉子編號(hào)拼接成一個(gè)稠密整數(shù)序列再用one-hot編碼 return to_onehot(leafs) # 將轉(zhuǎn)換后的特征拼接上原始特征一起送給LR訓(xùn)練 train_feature np.hstack([raw_feature, gbdt_feature_transform(gbdt, X_train)])回到當(dāng)時(shí)的視角GBDTLR已經(jīng)讓模型具備了“自動(dòng)做高階交叉特征”的能力但距離真正的端到端還有距離因?yàn)闃淠P捅旧硪廊皇请x線訓(xùn)練、離線產(chǎn)出的結(jié)構(gòu)無(wú)法像神經(jīng)網(wǎng)絡(luò)那樣直接在點(diǎn)擊日志上反復(fù)打磨每個(gè)參數(shù)。這個(gè)時(shí)代很像“手動(dòng)大模型”人要負(fù)責(zé)設(shè)計(jì)樹的數(shù)量、深度、學(xué)習(xí)率還要不斷調(diào)整LR側(cè)的稀疏特征處理邏輯。3. 深度學(xué)習(xí)CTR模型從Embedding開始的表達(dá)革命3.1 Embedding層把所有特征拉進(jìn)同一個(gè)語(yǔ)義空間深度學(xué)習(xí)給CTR模型帶來(lái)的第一個(gè)根本性變化不是神經(jīng)網(wǎng)絡(luò)本身而是Embedding嵌入機(jī)制。傳統(tǒng)one-hot編碼會(huì)把每個(gè)ID變成一個(gè)幾萬(wàn)維的稀疏向量特征之間彼此孤立模型根本看不出兩個(gè)不同ID有什么相似性。Embedding則是把每個(gè)ID映射成一個(gè)幾百維的稠密向量維度遠(yuǎn)小于原始特征空間但能表達(dá)更豐富的語(yǔ)義關(guān)系。打個(gè)比方one-hot像是每個(gè)人都有一個(gè)完全不同的ID編號(hào)模型無(wú)法根據(jù)編號(hào)判斷兩個(gè)人的相似程度Embedding則像給人發(fā)了一張性格評(píng)分表評(píng)分接近的人就被認(rèn)為是相似的用戶。推薦系統(tǒng)里用戶ID和物品ID的Embedding會(huì)在訓(xùn)練中不斷調(diào)整逐漸讓“點(diǎn)擊過(guò)同一類物品的用戶”共享相似向量空間。這一機(jī)制的工程意義極其重要。它讓模型可以在超高維稀疏特征上訓(xùn)練同時(shí)把參數(shù)量控制在可接受范圍內(nèi)。一個(gè)大型電商平臺(tái)可能有上億用戶、幾千萬(wàn)商品如果都用稠密的Embedding表示模型整體參數(shù)量可能達(dá)到幾十億甚至上百億這直接推動(dòng)了大規(guī)模分布式訓(xùn)練框架和Embedding參數(shù)服務(wù)器的發(fā)展。Embedding落地時(shí)有個(gè)常見問(wèn)題頻率極低的ID無(wú)法學(xué)習(xí)到有意義的向量。業(yè)界通用做法是設(shè)置最小出現(xiàn)次數(shù)閾值過(guò)濾掉出現(xiàn)次數(shù)過(guò)少的ID或者讓它們共享一個(gè)“默認(rèn)Embedding向量”。這個(gè)細(xì)節(jié)看起來(lái)小處理不好會(huì)讓模型在冷門物品上做出很離譜的預(yù)測(cè)。3.2 WideDeep、DeepFM、DCN、xDeepFM各自解決什么問(wèn)題深度學(xué)習(xí)CTR模型百花齊放的第一波主要是圍繞“如何把線性記憶能力和神經(jīng)網(wǎng)絡(luò)泛化能力結(jié)合”展開的。這里最值得記住的幾款模型放在一起看其實(shí)非常清晰我用一張表來(lái)梳理對(duì)比。模型核心思想特征交互方式典型適合場(chǎng)景Wide Deep線性Wide負(fù)責(zé)記憶深度DNN負(fù)責(zé)泛化淺層線性 深層非線性既需要強(qiáng)記憶用戶歷史偏好又需要自動(dòng)泛化新組合的場(chǎng)景比如推薦中的個(gè)性化召回與排序DeepFM用FM替換Wide側(cè)實(shí)現(xiàn)端到端自動(dòng)交叉FM做低階交互DNN做高階交互大規(guī)模稀疏CTR場(chǎng)景希望減少人工交叉特征DCN提出Cross網(wǎng)絡(luò)顯式做高階特征交叉多層Cross層做bit-level交叉特征維度高、交叉關(guān)系強(qiáng)的搜索和廣告排序xDeepFM在向量級(jí)別做顯式高階交叉壓縮交互網(wǎng)絡(luò)做vector-level交叉需要精細(xì)建模多特征向量交互的復(fù)雜場(chǎng)景WideDeep的思路非常工程化Wide側(cè)就是一個(gè)小型LR能精準(zhǔn)記住用戶過(guò)去點(diǎn)擊過(guò)的組合比如“晚上 長(zhǎng)視頻”Deep側(cè)是一個(gè)全連接神經(jīng)網(wǎng)絡(luò)能把沒見過(guò)的組合泛化出來(lái)比如“用戶喜歡A類視頻可能也喜歡類似的B類視頻”。兩者共享輸入特征和Embedding一起訓(xùn)練。這套結(jié)構(gòu)后來(lái)成為許多深度推薦系統(tǒng)的地基。DeepFM則干脆把Wide側(cè)換成FM這樣不僅保留了低階特征交叉能力還能和DNN一起端到端訓(xùn)練不需要像WideDeep那樣手動(dòng)設(shè)計(jì)Wide側(cè)的特征組合。DCN和xDeepFM則在“高階交叉”上做文章DCN的Cross網(wǎng)絡(luò)通過(guò)多層運(yùn)算讓特征維度之間直接交互xDeepFM進(jìn)一步把交叉提升到向量級(jí)別。這幾款模型并沒有絕對(duì)優(yōu)劣更多是看特征形態(tài)和業(yè)務(wù)目標(biāo)。3.3 深度模型上線后工程鏈路發(fā)生了什么變化用上深度學(xué)習(xí)CTR之后整個(gè)工程鏈路和傳統(tǒng)時(shí)代幾乎是兩個(gè)物種。特征處理從人人可手寫的腳本變成了需要統(tǒng)一管理和版本控制的特征平臺(tái)模型訓(xùn)練從單機(jī)或者簡(jiǎn)單參數(shù)服務(wù)器變成了支持?jǐn)?shù)百億Embedding參數(shù)的分布式訓(xùn)練集群線上打分從每次幾十微秒的稀疏向量點(diǎn)積變成了包含多層神經(jīng)網(wǎng)絡(luò)前向推理的計(jì)算過(guò)程。我記得做第一個(gè)深度CTR項(xiàng)目的時(shí)候最難受的其實(shí)不是模型結(jié)構(gòu)而是Embedding字典同步。訓(xùn)練服務(wù)器上維護(hù)一份很大的Embedding表線上服務(wù)又需要實(shí)時(shí)讀取最新版本。如果同步機(jī)制做得不好線上拿到的Embedding還是舊版本模型預(yù)測(cè)就會(huì)和離線評(píng)測(cè)差一大截。后來(lái)很多團(tuán)隊(duì)都靠“雙緩沖”或“增量快照”機(jī)制解決這個(gè)問(wèn)題也就是同時(shí)維護(hù)當(dāng)前版本和影子版本切換時(shí)保證線上請(qǐng)求不受影響。另一個(gè)容易被忽視的點(diǎn)是特征覆蓋度。深度模型對(duì)每一維特征的質(zhì)量都更敏感如果一個(gè)特征在離線訓(xùn)練數(shù)據(jù)里覆蓋率為90%在生產(chǎn)環(huán)境只有60%那么模型訓(xùn)練出來(lái)的Embedding天然就會(huì)有偏。這個(gè)問(wèn)題的排查難度比想象中大得多經(jīng)常表現(xiàn)為“離線AUC很高上線A/B測(cè)試卻沒有效果”。4. 用戶興趣的動(dòng)態(tài)建模注意力機(jī)制與序列模型4.1 DIN用戶的興趣不是靜態(tài)的到了這個(gè)階段CTR模型不再滿足于只看“用戶是誰(shuí)、物品是什么、今天幾點(diǎn)”而是開始認(rèn)真考慮一個(gè)本質(zhì)問(wèn)題用戶的興趣是動(dòng)態(tài)的并且會(huì)隨候選物品變化。DINDeep Interest Network提出了一個(gè)非常直覺的機(jī)制當(dāng)模型預(yù)測(cè)用戶對(duì)某個(gè)候選物品的點(diǎn)擊率時(shí)不應(yīng)該把用戶所有歷史行為一視同仁地做平均而是應(yīng)該讓與候選物品更相關(guān)的歷史行為起到更大作用。這個(gè)“更大作用”就是注意力權(quán)重。舉個(gè)電商場(chǎng)景例子用戶今天既看了手機(jī)殼又看了跑鞋?,F(xiàn)在來(lái)了一條新款手機(jī)的候選模型應(yīng)該更關(guān)注用戶最近看手機(jī)殼的行為而不是運(yùn)動(dòng)鞋的歷史換一條籃球鞋候選時(shí)注意力則應(yīng)該轉(zhuǎn)移到跑鞋那部分歷史。DIN的做法是對(duì)候選物品Embedding和用戶每條歷史行為Embedding做內(nèi)積得到相似度分?jǐn)?shù)再通過(guò)Softmax歸一化為注意力權(quán)重最后對(duì)歷史行為向量做加權(quán)求和作為用戶的“動(dòng)態(tài)興趣表示”。我個(gè)人的經(jīng)驗(yàn)是DIN類結(jié)構(gòu)在行為歷史比較豐富的用戶身上提升尤其明顯但遇到新用戶行為稀疏時(shí)注意力機(jī)制很容易退化基本退化成簡(jiǎn)單的平均Pooling。這時(shí)候需要靠ID類特征和物品內(nèi)容特征去兜底不要指望注意力能解決冷啟動(dòng)問(wèn)題。4.2 DIEN把點(diǎn)擊行為看作一個(gè)過(guò)程DIN雖然給歷史行為加了權(quán)重但本質(zhì)上還是把所有歷史行為當(dāng)成一組獨(dú)立的、無(wú)序的向量??烧鎸?shí)的用戶瀏覽行為是有先后順序的用戶先看了A再看了B然后點(diǎn)擊了C這個(gè)時(shí)間順序本身就是興趣變化的重要信號(hào)。DIENDeep Interest Evolution Network在這條路上走得非常徹底它用GRU門控循環(huán)單元之類的循環(huán)結(jié)構(gòu)來(lái)建模用戶歷史行為的序列演變過(guò)程讓模型能夠捕捉“用戶在當(dāng)前候選物品出現(xiàn)之前興趣是如何一步步演變過(guò)來(lái)的”。除了結(jié)構(gòu)上的序列建模DIEN還有一個(gè)很有意思的工程細(xì)節(jié)引入輔助損失。因?yàn)镃TR樣本只能告訴我們用戶是否點(diǎn)擊這個(gè)候選并沒有直接告訴模型“用戶的興趣向量應(yīng)該是怎樣的”梯度信號(hào)其實(shí)很弱。輔助損失的做法是拿每一時(shí)刻的隱藏狀態(tài)去預(yù)測(cè)用戶下一個(gè)行為相當(dāng)于用行為預(yù)測(cè)來(lái)額外監(jiān)督興趣向量的學(xué)習(xí)。這樣訓(xùn)練出來(lái)的興趣表示會(huì)更貼合真實(shí)行為演化。這里要提醒一句序列模型比靜態(tài)DIN結(jié)構(gòu)訓(xùn)練慢不少而且線上推理時(shí)需要對(duì)用戶歷史行為做一個(gè)截?cái)嘁话闳∽罱鼛资綆装贄l行為即可。序列長(zhǎng)度一經(jīng)設(shè)定就相當(dāng)于做了一個(gè)強(qiáng)假設(shè)太短可能丟失早期興趣太長(zhǎng)又會(huì)帶來(lái)噪音和計(jì)算壓力。真實(shí)項(xiàng)目里可以根據(jù)行為均值數(shù)和延遲預(yù)算來(lái)調(diào)。4.3 Transformer結(jié)構(gòu)如何接管行為序列建模循環(huán)神經(jīng)網(wǎng)絡(luò)GRU雖然能建模順序但只能從左到右逐步傳遞信息越靠前的影響越容易衰減。后來(lái)者把自然語(yǔ)言處理領(lǐng)域大放異彩的Transformer結(jié)構(gòu)引入了行為序列建模用多頭自注意力機(jī)制讓序列里任意兩個(gè)行為之間都能直接交互一步到位捕捉長(zhǎng)距離依賴。用Transformer做用戶行為序列建模大致流程是把用戶歷史行為對(duì)應(yīng)的物品Embedding加上位置編碼然后經(jīng)過(guò)若干層自注意力編碼器得到每個(gè)位置的新表示再把這些表示匯總成用戶的序列興趣向量和候選物品特征一起進(jìn)入最終CTR預(yù)測(cè)層。這種結(jié)構(gòu)對(duì)“行為之間互相影響”的建模能力非常強(qiáng)比如用戶看完手機(jī)后又看了耳機(jī)歷史序列里這兩個(gè)行為會(huì)相互增強(qiáng)上下文信息。但在工業(yè)落地時(shí)傳統(tǒng)Transformer的計(jì)算復(fù)雜度是序列長(zhǎng)度的平方行為序列拉長(zhǎng)后開銷會(huì)快速上升。很多平臺(tái)在實(shí)踐中的做法是限制最長(zhǎng)序列長(zhǎng)度、只取最近一段行為同時(shí)用多層蒸餾把大模型壓縮成線上可以承受的小模型。注意當(dāng)用戶行為序列越變?cè)介L(zhǎng)與其盲目加長(zhǎng)輸入不如認(rèn)真做行為篩選。比如優(yōu)先保留與候選品類相關(guān)的歷史行為再做注意力建模效果往往比堆長(zhǎng)度更好。5. 轉(zhuǎn)化鏈路與多任務(wù)建模CTR不再是孤立指標(biāo)5.1 CVR預(yù)估為什么更難CTR預(yù)估預(yù)測(cè)的是點(diǎn)擊但很多業(yè)務(wù)真正關(guān)心的是更深一層的轉(zhuǎn)化比如電商里的購(gòu)買、內(nèi)容平臺(tái)里的完播、廣告里的下單。CVR轉(zhuǎn)化率預(yù)估算起來(lái)比CTR難得多主要有三個(gè)原因。第一是樣本稀疏。點(diǎn)擊已經(jīng)是一個(gè)低頻事件轉(zhuǎn)化比點(diǎn)擊還要稀疏得多尤其在短視頻或信息流廣告場(chǎng)景可能幾百上千次曝光才產(chǎn)生一次轉(zhuǎn)化。模型能在稀疏樣本上學(xué)到的有效信號(hào)非常有限。第二是樣本選擇偏差。傳統(tǒng)CVR模型如果只用點(diǎn)擊后的樣本訓(xùn)練訓(xùn)練數(shù)據(jù)本身就是被“點(diǎn)擊”篩選過(guò)的這會(huì)讓模型低估那些“小概率被點(diǎn)擊但一旦點(diǎn)擊就很容易轉(zhuǎn)化”的優(yōu)質(zhì)物品。第三是延遲反饋。用戶點(diǎn)擊之后可能過(guò)很久才發(fā)生轉(zhuǎn)化今天是點(diǎn)擊樣本明天可能就變成轉(zhuǎn)化樣本了。這在實(shí)時(shí)訓(xùn)練系統(tǒng)中會(huì)造成標(biāo)簽偏差如果處理不好模型會(huì)誤判很多待轉(zhuǎn)化的點(diǎn)擊為負(fù)樣本。5.2 ESMM與MMoE兩種典型的多任務(wù)解法解決CVR預(yù)測(cè)困難的一個(gè)重要思路是把相關(guān)知識(shí)從數(shù)據(jù)更豐富的任務(wù)中遷移過(guò)來(lái)也就是多任務(wù)學(xué)習(xí)。ESMMEntire Space Multi-Task Model是一個(gè)非常經(jīng)典的解法。它將“曝光 → 點(diǎn)擊 → 轉(zhuǎn)化”這一整條鏈路拆成兩個(gè)同時(shí)訓(xùn)練的任務(wù)CTR任務(wù)和CTCVR點(diǎn)擊且轉(zhuǎn)化任務(wù)。模型同時(shí)接收全量曝光樣本而不是只從點(diǎn)擊樣本中訓(xùn)練CVR這就在很大程度上解決了樣本選擇偏差問(wèn)題。兩個(gè)任務(wù)共享底層Embedding轉(zhuǎn)化率可以間接表示為CTCVR除以CTR從數(shù)學(xué)上形成了一個(gè)完整一致的目標(biāo)體系。MMoEMulti-gate Mixture-of-Experts則是另一類常見做法。它設(shè)計(jì)了多個(gè)專家網(wǎng)絡(luò)每個(gè)專家都能從不同角度處理輸入特征再用一個(gè)門控網(wǎng)絡(luò)根據(jù)當(dāng)前樣本的特點(diǎn)動(dòng)態(tài)決定各專家的權(quán)重組合。這個(gè)結(jié)構(gòu)很適合任務(wù)差異比較大的場(chǎng)景比如既要預(yù)測(cè)點(diǎn)擊率又要預(yù)測(cè)視頻完播時(shí)長(zhǎng)兩者背后的用戶動(dòng)機(jī)差異很大時(shí)完全共享底層就可能互相拖累。MMoE讓模型在共享與獨(dú)立之間找到一個(gè)平衡點(diǎn)。從我實(shí)踐的角度看多任務(wù)模型上線前一定要厘清各任務(wù)之間的尺度關(guān)系。點(diǎn)擊率是0到1的概率完播時(shí)長(zhǎng)是一個(gè)秒數(shù)GMV是一個(gè)金額它們要經(jīng)過(guò)適當(dāng)?shù)淖儞Q或獨(dú)立塔處理才能在統(tǒng)一Loss里被公平優(yōu)化否則容易陷入“大數(shù)值任務(wù)壓過(guò)小數(shù)值任務(wù)”的問(wèn)題。5.3 全域建模與冷啟動(dòng)的現(xiàn)實(shí)意義多任務(wù)建模的升級(jí)版思路是全域建模不再針對(duì)單個(gè)CTR或者單個(gè)CVR單獨(dú)打分而是直接建模一個(gè)統(tǒng)一目標(biāo)比如電商里的商品成交總額GMV或者短視頻里的綜合消費(fèi)時(shí)長(zhǎng)。這類模型會(huì)根據(jù)業(yè)務(wù)目標(biāo)給點(diǎn)擊率、轉(zhuǎn)化率、客單價(jià)分別估計(jì)再通過(guò)公式組合成一個(gè)最終分。這里的難點(diǎn)在于不同指標(biāo)之間存在復(fù)雜的相互影響轉(zhuǎn)化率可能很高但客單價(jià)很低點(diǎn)擊率高但退貨率也高。全域建模還帶來(lái)另一個(gè)好處冷啟動(dòng)。當(dāng)一個(gè)新物品上線時(shí)它的點(diǎn)擊樣本很少但平臺(tái)可以從相似品類的轉(zhuǎn)化統(tǒng)計(jì)中獲得先驗(yàn)知識(shí)。于是很多系統(tǒng)開始引入“相似物品Embedding平均”策略新物品與若干歷史商品計(jì)算相似度用相似商品的Embedding均值作為初始表示再疊加少量?jī)?nèi)容側(cè)特征標(biāo)題、圖片、品牌、類目讓其在第一天就能獲得一個(gè)不算離譜的排序位置。這是工程上非常實(shí)用的一招。6. 生成式推薦與大規(guī)模預(yù)訓(xùn)練CTR的下一個(gè)形態(tài)6.1 大模型在推薦系統(tǒng)里能做什么這兩年大規(guī)模預(yù)訓(xùn)練模型開始滲透到推薦系統(tǒng)的各個(gè)角落。很多人問(wèn)大模型是不是要替代傳統(tǒng)CTR模型我的判斷是短期不會(huì)但它確實(shí)在改變CTR模型的“外圈”能力。大模型目前在推薦系統(tǒng)里能干的事情至少有三類。第一類是特征編碼和語(yǔ)義理解把物品的標(biāo)題、圖片描述、類目名稱等文本信息交給大模型生成富含語(yǔ)義的向量表示然后作為CTR模型里的額外特征輸入。第二類是行為序列的深層理解用預(yù)訓(xùn)練模型先對(duì)用戶歷史行為做無(wú)監(jiān)督重建訓(xùn)練再遷移到CTR精排任務(wù)上往往能學(xué)到更通用的興趣表示。第三類是輔助推薦流程比如用大模型生成推薦理由、自動(dòng)解釋推薦結(jié)果、輔助運(yùn)營(yíng)編輯撰寫活動(dòng)文案這些都能提升產(chǎn)品體驗(yàn)。但要注意一個(gè)現(xiàn)實(shí)約束大模型推理成本遠(yuǎn)高于傳統(tǒng)CTR模型線上幾萬(wàn)QPS的場(chǎng)景根本扛不住直接調(diào)用大模型。實(shí)踐中通常是離線用大模型做特征和候選增強(qiáng)線上繼續(xù)使用輕量模型做實(shí)時(shí)打分。這也是我強(qiáng)烈建議工程團(tuán)隊(duì)遵循的路徑。6.2 生成式推薦把“排序”變“生成”更進(jìn)一步的方向是生成式推薦。傳統(tǒng)推薦是把候選集里的每個(gè)物品分別打分再按分?jǐn)?shù)排序生成式推薦則把推薦問(wèn)題看作一個(gè)條件生成問(wèn)題直接根據(jù)用戶的歷史行為生成下一步最可能感興趣的若干物品或者直接生成一個(gè)有序推薦序列。這里可以借用自然語(yǔ)言生成的基本理解用戶行為序列里的每一個(gè)點(diǎn)擊、每一個(gè)交互行為可以看成一條由物品ID組成的“語(yǔ)句”中的Token生成式模型根據(jù)這條“語(yǔ)句”預(yù)測(cè)下一個(gè)Token也就是用戶最可能產(chǎn)生交互的下一個(gè)物品。系統(tǒng)輸出的是一串候選物品ID而不是一個(gè)排序分。生成式推薦的魅力在于它跳過(guò)了傳統(tǒng)“候選生成 打分排序”的割裂流程讓整個(gè)推薦過(guò)程在同一個(gè)模型里端到端完成。挑戰(zhàn)也很直接物品ID空間極大生成輸出很容易出現(xiàn)不在候選空間里的ID必須配合受限解碼和候選校驗(yàn)。目前這個(gè)方向還在快速演化中我更愿意把它看作CTR技術(shù)的一種自然延伸而不是完全推翻。6.3 趨勢(shì)判斷CTR會(huì)消失還是會(huì)轉(zhuǎn)型我個(gè)人的判斷是CTR這種預(yù)測(cè)形式不會(huì)消失但它會(huì)從“一個(gè)簡(jiǎn)單的概率數(shù)字”轉(zhuǎn)型為“一個(gè)完整決策體系里的基礎(chǔ)組件”。因?yàn)闊o(wú)論推薦系統(tǒng)最終用多復(fù)雜的生成模型商業(yè)決策最終還是要落到期望收益的計(jì)算上而期望收益本身就包含了對(duì)用戶行動(dòng)概率的估計(jì)。CTR模型演變了這么多年底層的問(wèn)題沒有變只是答案的形態(tài)在不斷變化。未來(lái)的CTR模型一定會(huì)越來(lái)越多地結(jié)合多模態(tài)信息、長(zhǎng)期行為記憶、跨場(chǎng)景共享和大模型推理能力。但越是這樣越需要從業(yè)者理解歷史為什么FM能解決稀疏交叉問(wèn)題為什么Attention能建模動(dòng)態(tài)興趣為什么多任務(wù)能緩解樣本偏差這些底層規(guī)律不會(huì)因?yàn)槟P徒Y(jié)構(gòu)改變而失效反而是你做技術(shù)判斷時(shí)真正能依賴的錨點(diǎn)。7. 從模型演變中總結(jié)出來(lái)的工程經(jīng)驗(yàn)7.1 評(píng)估指標(biāo)與離線在線的一致性陷阱CTR模型迭代中最容易出現(xiàn)的問(wèn)題就是離線指標(biāo)漲得很好上線一測(cè)卻沒效果甚至負(fù)向。這里最常見的原因有三個(gè)。第一個(gè)是評(píng)估方式太粗。全局AUC雖然便于對(duì)比但推薦場(chǎng)景用戶差異很大更有參考價(jià)值的常常是GAUC也就是按用戶分組計(jì)算的AUC加權(quán)平均。同一模型在不同用戶群體上表現(xiàn)差異巨大全局AUC很容易掩蓋這個(gè)問(wèn)題。第二個(gè)是離線樣本與線上分布不一致最典型的就是特征穿越。比如用了當(dāng)日的統(tǒng)計(jì)特征去預(yù)測(cè)當(dāng)日點(diǎn)擊離線表現(xiàn)必然虛高因?yàn)闃?biāo)簽信息被泄露進(jìn)特征了。做特征時(shí)必須嚴(yán)格保證訓(xùn)練時(shí)該特征只能使用標(biāo)簽時(shí)刻之前的信息。第三個(gè)是簡(jiǎn)單用LogLoss判斷模型。CTR數(shù)據(jù)里負(fù)樣本占比極高模型如果總是預(yù)測(cè)很小的概率LogLoss會(huì)比自己想的更敏感。建議同時(shí)看AUC、GAUC、校準(zhǔn)度、PCOC等多個(gè)指標(biāo)綜合判斷。7.2 線上延遲與模型復(fù)雜度的取舍模型效果和線上延遲之間永遠(yuǎn)存在矛盾。一次精排請(qǐng)求通常有幾十毫秒的預(yù)算其中特征獲取、模型推理、業(yè)務(wù)規(guī)則都要占時(shí)間。如果精排模型用的是類似Transformer的大結(jié)構(gòu)很可能光推理就要幾十毫秒用戶感受到的就是卡頓。我踩過(guò)幾次坑之后總結(jié)出幾條實(shí)用經(jīng)驗(yàn)一是線上工程量級(jí)估不準(zhǔn)時(shí)先用小模型跑通全鏈路再逐步替換復(fù)雜模塊二是能用特征篩選解決的盡量不要加模型復(fù)雜度三是如果模型真的很大考慮蒸餾方案用一個(gè)輕量學(xué)生模型模仿大模型的輸出兩個(gè)模型的效果差距通常能控制在可接受范圍內(nèi)。還有一個(gè)非常容易被忽略的點(diǎn)模型推理時(shí)KV Cache和Batch顯存占用也要提前壓測(cè)否則模型還沒上線GPU先被壓垮了。7.3 特征管理與數(shù)據(jù)治理特征工程永遠(yuǎn)不會(huì)消失只是從“手工設(shè)計(jì)”變成了“平臺(tái)化管理”。我見過(guò)太多深層模型因?yàn)橐粋€(gè)垃圾特征翻車。特征上線之前至少要查三樣?xùn)|西覆蓋率、穩(wěn)定度、與標(biāo)簽的時(shí)間先后關(guān)系。覆蓋率低于某閾值比如60%的特征對(duì)模型貢獻(xiàn)很小卻會(huì)拖慢訓(xùn)練穩(wěn)定度差的特征比如一周內(nèi)分布劇烈變化線上使用起來(lái)風(fēng)險(xiǎn)極高時(shí)間先后關(guān)系錯(cuò)位的特征就更不用說(shuō)了屬于數(shù)據(jù)事故。另外一個(gè)必須強(qiáng)調(diào)的點(diǎn)是在線離線特征一致性。訓(xùn)練時(shí)同一套特征邏輯和線上打分時(shí)用的必須是同一份代碼、同一個(gè)版本否則模型學(xué)到的分布和線上輸入分布根本對(duì)不上。最好建立特征校驗(yàn)流水線每天自動(dòng)對(duì)比離線特征統(tǒng)計(jì)和線上采樣特征統(tǒng)計(jì)差異超閾值時(shí)及時(shí)告警。這個(gè)工作很枯燥但對(duì)推薦系統(tǒng)的穩(wěn)定性來(lái)說(shuō)價(jià)值比無(wú)腦調(diào)模型結(jié)構(gòu)大得多。7.4 速查表一代模型一代路最后把這套演進(jìn)史總結(jié)成一張速查表方便大家按場(chǎng)景選型時(shí)快速定位。模型時(shí)代代表方法核心優(yōu)勢(shì)主要代價(jià)適合場(chǎng)景線性時(shí)代LR、FTRL簡(jiǎn)單、可解釋、快速更新需要大量人工特征和交叉新團(tuán)隊(duì)快速上線基線、預(yù)算有限的場(chǎng)景淺層組合FM、FFM、GBDTLR自動(dòng)二階交叉、部分高階交叉工程鏈路復(fù)雜、離線在線模式割裂特征稀疏、有強(qiáng)交叉關(guān)系的傳統(tǒng)推薦深度表示DeepFM、DCN、xDeepFM端到端、非線性表達(dá)、自動(dòng)高階特征訓(xùn)練成本大、Embedding同步復(fù)雜大規(guī)模ID特征、復(fù)雜業(yè)務(wù)的中大型系統(tǒng)興趣建模DIN、DIEN、Transformer序列動(dòng)態(tài)興趣、長(zhǎng)短期行為建模序列長(zhǎng)度敏感、推理成本高行為豐富、時(shí)效性強(qiáng)的電商和內(nèi)容平臺(tái)多任務(wù)與全域ESMM、MMoE解決稀疏與選擇偏差、統(tǒng)一商業(yè)目標(biāo)目標(biāo)之間容易互相干擾轉(zhuǎn)化鏈路長(zhǎng)、多業(yè)務(wù)指標(biāo)并存場(chǎng)景生成式與大模型生成式推薦、預(yù)訓(xùn)練增強(qiáng)語(yǔ)義強(qiáng)、序列建模強(qiáng)、端到端生成成本高、穩(wěn)定性有待驗(yàn)證內(nèi)容理解要求高、長(zhǎng)期探索型業(yè)務(wù)這個(gè)表不是標(biāo)準(zhǔn)答案只是給了一個(gè)選型坐標(biāo)系。真實(shí)業(yè)務(wù)中很多團(tuán)隊(duì)是同時(shí)使用多個(gè)時(shí)代模型形成級(jí)聯(lián)結(jié)構(gòu)粗排用LR或FM快速過(guò)濾精排用深度興趣模型重排再套多目標(biāo)模型和大模型增強(qiáng)的規(guī)則。演變史從來(lái)不是一條單行道更像是層層疊加的地層。8. 我的個(gè)人體會(huì)與給新人的建議如果讓我壓縮所有經(jīng)驗(yàn)給正在學(xué)習(xí)CTR的新人三條建議我會(huì)說(shuō)先吃透業(yè)務(wù)鏈路再談模型結(jié)構(gòu)。我在實(shí)際項(xiàng)目里見過(guò)太多同學(xué)一上來(lái)就追最新的模型結(jié)果連“這個(gè)候選是怎么進(jìn)來(lái)的”“這個(gè)轉(zhuǎn)化指標(biāo)怎么歸因”都沒搞清最后做出的模型效果自然一般。第二條是不要迷信復(fù)雜度。模型結(jié)構(gòu)不是越復(fù)雜越好一個(gè)DeepFM加一套扎實(shí)的特征管理往往比一個(gè)復(fù)雜的多任務(wù)大模型更容易見到收益。優(yōu)先把數(shù)據(jù)管好把離線在線一致性搞定把樣本質(zhì)量提上去這些基礎(chǔ)的收益天花板比模型層更高。第三條是重視從歷史里找答案。很多當(dāng)下看起來(lái)全新的問(wèn)題回到十幾年前甚至幾十年前的模型思想里都能找到影子。LR時(shí)代的特征離散化經(jīng)驗(yàn)放到深度學(xué)習(xí)CTR里一樣適用FM解決稀疏交互的思路至今仍是很多新模型的理論底色。理解了這些你才不會(huì)被一波又一波的概念反復(fù)收割。最后再分享一個(gè)實(shí)際操作的小技巧每次要換模型結(jié)構(gòu)時(shí)先給自己設(shè)定一個(gè)“增量下限”。比如要求新模型離線GAUC至少提升0.5個(gè)點(diǎn)否則不考慮上線。這個(gè)閾值看起來(lái)簡(jiǎn)單卻能逼著團(tuán)隊(duì)把精力放在真正有效的改進(jìn)上而不是為了換結(jié)構(gòu)而換結(jié)構(gòu)。CTR技術(shù)演變了這么多年最珍貴的東西從來(lái)不是某個(gè)模型的名字而是推動(dòng)每個(gè)模型出現(xiàn)的真實(shí)問(wèn)題和解決問(wèn)題的耐心。