由于在廣告,推薦,營銷,甚至很多更特定的業(yè)務(wù)場景中,整個鏈路囿于資源局限性,通常在一定工程與算法的限制下,被拆分成了多個模塊。
一個typical的鏈路:召回粗排
精排
OR層[出價,list優(yōu)化等]
曝光
點擊
轉(zhuǎn)化
雖然整體的pattern比較固定,但是具體的指標(biāo),建模目標(biāo),如何貫穿在整個鏈路的前端,中端,后端,其實都需要細(xì)心的engineering:
準(zhǔn)則:
1、鏈路前后端的評估指標(biāo)都要跟最終目標(biāo)對齊:
粗排優(yōu)化目標(biāo)對齊精排打分還是后驗反饋?粗排需要進(jìn)一步對齊ecpm嗎?如果直接業(yè)務(wù)目標(biāo)難以評估,我們能否用一個或者多個中間指標(biāo)替代?
如果和最終結(jié)果沒有對齊,那么在做模型選擇,超參優(yōu)化等過程中,對該“指標(biāo)/目標(biāo)”的優(yōu)化,便不能優(yōu)化最終業(yè)務(wù)結(jié)果。
通常,這個問題的一些實際表現(xiàn)為:“指標(biāo)解釋力不夠”,譬如:
1、精排離線auc提升了,為什么最終收入沒提升?【A:ecpm的排序能力提升了嗎?(gini,spearman rank correlation)[4]】
2、ctr的auc提升了,為什么最終點擊沒有漲?【A:auc提升一定會讓曝光的pctr提升嗎?前后pctr如何對比?是ctr模型的問題還是別的問題,如何解決,當(dāng)前條件下實驗結(jié)果可看嗎?】
3、 粗排ctr的auc提升了,為什么效果沒有提升,甚至曝光的pCtr也沒有提升?【A:粗排真正目標(biāo)是什么?粗排auc提升,進(jìn)入精排候選集的topk 精排pctr一定會提升嗎?】
其實在不同“模塊”自己的語境下(這個語境其實在設(shè)計之初就被固定了),所需的指標(biāo)是不同的。
2、優(yōu)化過程中,模型優(yōu)化的目標(biāo)本身要跟指標(biāo)對齊:
有時候鏈路上的雖然指標(biāo)對齊了,但是模型本身的優(yōu)化沒有與對齊后的指標(biāo)對齊,則也難以提升效果。
譬如,logloss的最優(yōu)與auc最優(yōu)等價嗎[8]?粗排的真正優(yōu)化目標(biāo)是auc還是lambda loss還是某種list最優(yōu)[1][2][3]?分中間目標(biāo)建模訓(xùn)練的模型,如何在優(yōu)化過程中通過模型梯度的來保障最終指標(biāo)優(yōu)化?如何將模塊的指標(biāo)直接建模優(yōu)化,譬如召回率?;蛘咄ㄟ^輔助目標(biāo)優(yōu)化(僅保證優(yōu)化方向)?
后續(xù)會研究所謂metric driven loss design的設(shè)計。
3、關(guān)注長期目標(biāo)的優(yōu)化
由于系統(tǒng)設(shè)計上的妥協(xié)(例如粗排就是精排算力不足的妥協(xié)),有很多因素會導(dǎo)致系統(tǒng)陷入局部優(yōu)化的困境,使得長期的大盤的指標(biāo)難以得到優(yōu)化。
1、一個常見的陷阱就是bias向當(dāng)前數(shù)據(jù)反饋的空間,對于這個問題我們需要盡量保證指標(biāo)的“無偏性”,例如使用隨機(jī)樣本計算無偏auc。整個鏈路原生性Bias,其實在不同的context下是不同的(下面列舉SSB):
a、粗排到精排模型的bias(粗排在召回集上打分,精排在粗排后集合上打分,就算拿精排teach,原生樣本也存在SSB)
b、在精排ctr中,是打分集合和曝光集合的bias。(模型選擇)
c、在精排cvr中,打分集合和曝光并點擊集合的bias。(模型選擇+用戶選擇)
很多原生性的bias難以直接消除,可能更多要通過別的手段來優(yōu)化:策略上EE策略的介入,指標(biāo)上加入更多生態(tài)指標(biāo)(非最終直接業(yè)績指標(biāo)),來保障長期的效果。
綜上,關(guān)于整體設(shè)計思路
雖然在廣告,推薦領(lǐng)域,似乎整體架構(gòu)的設(shè)計都比較“固定”了,但是其實其細(xì)節(jié)指標(biāo),建模上的設(shè)計,仍有很多“變數(shù)”與設(shè)計空間。不同的目標(biāo)/建模設(shè)計對業(yè)務(wù)生態(tài)最終的走向有著極大的影響,這里指的目標(biāo)設(shè)計并不僅僅指各模塊職能與目標(biāo)的統(tǒng)一性設(shè)計,還有整體業(yè)務(wù)拆分出更細(xì)的目標(biāo)如何在各個模塊融入,譬如多樣性目標(biāo),經(jīng)常以不同的形式融入不同的模塊。要結(jié)合限制與瓶頸進(jìn)行設(shè)計。
同時,就我近些年來的經(jīng)驗來說,在大多數(shù)條件下,尋求最優(yōu)解是個很難的過程,且不論形式化的問題定義本身會不會有太多的近似,就算在理想問題假設(shè)下,最優(yōu)解可能都是難以達(dá)成的(譬如求解復(fù)雜度過高)。所以在設(shè)計過程中,基本上都是在做trade off,我們需要在trade off的過程中,抓住“核心問題”,可以在一些非核心的點上做出妥協(xié)的設(shè)計,保障“核心點”的優(yōu)化程度。(其實往往trade off應(yīng)該在更大的范圍上進(jìn)行考慮,因為無論人力,時間,各種成本,都是需要考慮進(jìn)去的。所以識別核心問題與優(yōu)化點是很重要的能力,這也是上層決策者更應(yīng)該去考慮和設(shè)計的,而非簡單地把只是把kpi拆一拆指派下負(fù)責(zé)人就完事兒。)
實例分析:
具體問題可能需要具體分析。譬如召回,粗排會面臨類似的問題,也會有各自模塊特性下獨有的問題。而且很多問題的融合不是簡單/單調(diào)的,而是與很多其他問題耦合在一起的。
從“指標(biāo)”到“建?!鄙?,我們都得更深入地執(zhí)行end2end的思想,在常規(guī)最簡潔的思路中,存在很多細(xì)節(jié)問題,需要我們?nèi)ソ鉀Q。
這里只進(jìn)行一些粗淺的舉例,包括提供一些簡單思路:
廣告,內(nèi)容推薦:
問題:預(yù)估值互相耦合干預(yù)時,獨立建模單獨訓(xùn)練模型的狀態(tài)下無法保障最終結(jié)果
比如連乘ctcvr = ctrcvr,單獨優(yōu)化ctr,cvr模型,無法保障其結(jié)果ctrcvr的排序能力。這時我們設(shè)計模型聯(lián)合訓(xùn)練能提供一定的優(yōu)化能力。
比如在廣告bid層面,一個很容易理解的例子,ctcvr的auc提升了,整體ecpm會提升嗎?轉(zhuǎn)化數(shù)量會提升嗎?實際上這轉(zhuǎn)化和ecpm可能都不會提升,因為排序受到了另一個因素bid的影響,如果想要與目標(biāo)一致性的指標(biāo),我們的指標(biāo)需要將bid考慮進(jìn)去,可以見csAUC,gcsAUC[1]。同時,僅僅將指標(biāo)進(jìn)行了轉(zhuǎn)化,而不修改模型,往往會導(dǎo)致模型的優(yōu)化方向跟指標(biāo)存在偏差,那么最終也不會得到預(yù)期的結(jié)果,所以相關(guān)的模型優(yōu)化可見[2]。
倉儲規(guī)劃:
比如業(yè)務(wù)問題:優(yōu)化目標(biāo)為單倉整體配送體積所影響的車輛數(shù)量與配置,而常規(guī)思路直接在sku級別數(shù)量(體積)的預(yù)估loss無法直接表征最終業(yè)務(wù)指標(biāo)(單倉累計誤差)
1、首先參數(shù)選擇,模型選擇優(yōu)化時,指標(biāo)必須加入倉級loss(業(yè)務(wù)指標(biāo)),同時這個loss最好能更精準(zhǔn)地反應(yīng)業(yè)務(wù)訴求,比如在有些區(qū)間內(nèi),預(yù)估不準(zhǔn)可以接受,比如真實數(shù)量很小時,無論如何都得配一個車,那誤差也許都是可以接受的。
2、在模型訓(xùn)練時,也需要考慮相應(yīng)的優(yōu)化,比如加入倉級別loss聯(lián)合訓(xùn)練,還有比如考慮實際業(yè)務(wù),設(shè)計在不同數(shù)量級上不同的loss,比如分類?或者在不同值域加上不同樣本weight?就算有些業(yè)務(wù)目標(biāo)不容易精確建模其loss(比如有些問題不好轉(zhuǎn)化為數(shù)值評估,或者loss不好優(yōu)化函數(shù)不可導(dǎo)),我們也得通過一些方法使其目標(biāo)向指標(biāo)的“方向”優(yōu)化,有時候這個方向需要通過一些數(shù)值或者梯度的分析來獲取。
視頻推薦:
比如我們業(yè)務(wù)訴求是視頻推薦,那么很自然的一個業(yè)務(wù)目標(biāo)就是按“視頻播放時長”排序。
其實這里常規(guī)的思路可以建模完播率,然后用完播率乘以視頻時長來擬合,但是一般建模完播率帶來的問題在于,這種方法不能直接保證我們對最終期望時長的“擬合”能力:
這里很好分析,比如我們業(yè)務(wù)優(yōu)化目標(biāo)是:系統(tǒng)在“期望播放時長”這個維度的排序能力。
1、那么直接優(yōu)化完播率的排序能力跟期望時長的排序能力能等價嗎?(此時模型評估歸一化的完播率auc)
顯然不能,舉個很簡單的例子,假設(shè)模型完播率的排序能力很高,但是數(shù)值diff非常小(變異系數(shù)),那么最終最終很容易就被
主導(dǎo)了。
2、優(yōu)化完播率的絕對值loss可以保證業(yè)務(wù)目標(biāo)的優(yōu)化?(此時模型評估完播率mse)
一定程度優(yōu)化,但是不完全等價。這里也很好分析,因為視頻的長度不同,完播率1%帶來的差異在不同時長的視頻上會造成不同的影響。在1分鐘和10分鐘的時長中,影響差了10倍。
3、直接優(yōu)化期望播放時長?(評估時長mse)
一定程度優(yōu)化,不完全等價。這個問題其實跟2中的情況類似,時長很長的視頻,預(yù)估錯1%就差了很長,會主導(dǎo)loss,可能導(dǎo)致模型在中短視頻上缺乏分辨能力。(因為較短的視頻就算很大錯誤低估算其播放時間也不會產(chǎn)生很大的loss)
4、帶權(quán)重loss直接優(yōu)化期望時長。(評估帶權(quán)mse,或者其rank correlation[7])
一定程度優(yōu)化
其實帶權(quán)重的loss來優(yōu)化時長或者完播率的mse,可以分別對完播率被短視頻dominate,時長mse被長視頻dominate的情況進(jìn)行優(yōu)化。
然后我們評估的時候,同樣不能直接采取mse來評估(因為這樣的評估值本身也會被部分樣本dominate),因此我們最好能跟其排序能力相關(guān)的指標(biāo)來評估。[7]
但是,同樣地,這個優(yōu)化方法本身,沒有直接優(yōu)化“期望播放時長”的排序能力,只是在“方向”上一致,其實后續(xù)理論上還是有優(yōu)化空間的。
5、帶權(quán)l(xiāng)oss間接優(yōu)化期望時長。
一定程度優(yōu)化
這種思路在y2b對播放時長的擬合,使用播放時長作為Loss的權(quán)重[6]
這種優(yōu)化方式,通過將播放時長作為正樣本權(quán)重,最終可以近似優(yōu)化期望播放時長。
同樣地,這種方式其實也存在上述類似的問題,比如長視頻也許dominate 正樣本。
同時也引入了其中“近似”推導(dǎo)帶來的誤差
好處是處理方式簡單,現(xiàn)成框架優(yōu)化logloss,調(diào)參等工具也許可以復(fù)用。
常規(guī)系統(tǒng)級,召回/粗排“召回率”目標(biāo)對齊:
問題:其實召回/粗排這樣的系統(tǒng),其真實目標(biāo)應(yīng)該是“召回率”,而非進(jìn)行“精排”級的準(zhǔn)確估計。如果按照精排建模的思路建模召回/粗排的目標(biāo),那么肯定是次優(yōu)的。
當(dāng)然
1、基于lambda rank。
Metric Driven Loss design:
The LambdaLoss Framework for Ranking Metric Optimization
https://zhuanlan.zhihu.com/p/134672431
2、關(guān)于lambda rank 與 單點point wise的差異:
lambda rank基于先驗,優(yōu)化整體進(jìn)入集合整體的loss,將更多的正樣本排在前面。
而單點point wise沒有考慮集合,而是將整體樣本空間當(dāng)作獨立的ins,優(yōu)化其排序。
3、關(guān)于基于lambda rank集合選擇和“l(fā)ist”建模的差異:
傳統(tǒng)的lambda rank更多是“先驗”的loss
而直接建模list(生成list,評估list)則是更native的一種方法,但是并非原生地適用于粗排召回等模型
系統(tǒng)局限性造成的不一致問題:
系統(tǒng)優(yōu)化目標(biāo)對齊召回向量訓(xùn)練目標(biāo)
這里其實有兩個問題:
1、第一問題針對召回系統(tǒng)設(shè)計特有。
召回跟粗排計算系統(tǒng)的差異在于,粗排可以one by one對每一條instance進(jìn)行預(yù)測,然后排序。而召回面向的是全量庫,每個用戶都要面向所有的商品作為候選集。因此常用的技術(shù)選型是雙塔模型+向量檢索。因此很自然地引出一個問題,我們?nèi)绾螌⒆罱K目標(biāo)在雙塔中建模,例如ctr,ctcvr這種是能直接建模的目標(biāo),而,
是不好直接建模的間接目標(biāo)。
2、第二個問題就是目標(biāo)不一致。
這個問題在上面討論過了。就是其實就算精排粗排能one by one地預(yù)估其ctr。但是我們最終需要的,是的排序能力,而非單純ctr的排序能力,所以單獨訓(xùn)練ctr模型并僅僅依賴ctr排序能力(auc)來選擇模型有很嚴(yán)重的潛在問題。上述已經(jīng)有思路解決[1]。
當(dāng)然,上述兩個不同視角下的問題,最終的解決方案都落在模型目標(biāo)一致性的設(shè)計上,最常見的思路包括:
1、bid/price aware gradient decent[2],但是缺點是如果bid變化,可能模型就要重新訓(xùn)練。同時這種方法,由于沒有顯式地將bid加入整體排序,所以直接做召回的話還需要做額外的設(shè)計,例如如下。
2、相對于1中的方法,針對bid隨時變化的特性,阿里也提出了PDM的思路,在廣告中解決召回的end2end建模[3]。這個思路其實和y2b里期望時長的思路類似。不過這個完全是post-training的,不直接建模在模型中犧牲了一定的性能,但是換來了更多的flexibility。這兩者很多時候也是需要trade off的。
原生系統(tǒng)SSB帶來的問題
譬如粗排到精排的ssb:粗排面向召回集,而精排只評估通過粗排的topK。
精排本身的ssb:反饋只有曝光樣本,而線上推理中其實大部分是未曝光樣本,這些未在訓(xùn)練數(shù)據(jù)中。
分析方法:
分析不同模型輸出值的具體分布,在相同的流量樣本維度(pdf分布圖:例如正/負(fù)例數(shù)值分布)。這個方法可以觀測粗排對unpv樣本的區(qū)分能力。proc指標(biāo),無偏樣本指標(biāo)。
思路:
1、常見的加入隨機(jī)負(fù)采樣:隨機(jī)負(fù)樣本可以用multi-task的方式以輔助目標(biāo)形式出現(xiàn),以免過度影響模型在原分布上的精度。但是直接引入這種“外部”樣本存在很多噪音,因此通常在召回中使用,在粗排精排中需要謹(jǐn)慎。
2、以分類模型建模,將未展現(xiàn)樣本作為第三類別進(jìn)行訓(xùn)練:讓模型能區(qū)分其是否展現(xiàn)(未展現(xiàn)的都是不在原生的反饋訓(xùn)練數(shù)據(jù)中)
3、以后續(xù)鏈路的模型指導(dǎo):將部分未達(dá)到粗排topK的樣本通過精排訓(xùn)練,輸入這些樣本,用distillation的方式對粗排進(jìn)行訓(xùn)練。(在[3]中這部分樣本只從unpv樣本中挑選)
4、和別的任務(wù)聯(lián)合訓(xùn)練:利用別的場景的樣本,相當(dāng)于是探索了更多空間,也能緩解原生ssb問題。
5、利用探索/隨機(jī)曝光機(jī)制,獲得無偏樣本。(針對精排自身ssb,同時這也是通常的評估手段:用無偏樣本評估模型)
Refer:
[1]廣告 cpm sensitive 的auc指標(biāo):
CPM-sensitive AUC for CTR prediction(能否offline unbiased evaluation)
AUC,是評估是否把正樣本排在負(fù)樣本前面。
csAUC,其實就是評估是否把高ecpm樣本都排在低ecpm樣本前面。(不過這種方法物理意義和auc本身差別比較大,同時一定程度上弱化了負(fù)樣本在評估結(jié)果里的權(quán)重,所以不同數(shù)據(jù)上評估數(shù)值更沒有可比性)
https://blog.csdn.net/abcdefg90876/article/details/103951915
[2]精排模型建模優(yōu)化中考慮bid因素:
bid-aware gradient decent,但是這會導(dǎo)致模型本身和bid耦合,如果用戶調(diào)整了bid,可能會影響模型。
[3]在召回向量檢索階段考慮bid的影響:
PDM(Point based Deep Match Model),對間接目標(biāo)優(yōu)化的向量召回
https://mp.weixin.qq.com/s/Eld9IIqexvL9LilW72-zKA
https://zhuanlan.zhihu.com/p/413240790
[4]針對任意連續(xù)數(shù)值的roc
Receiver operating characteristic (ROC) movies, universal ROC (UROC) curves, and coefficient of predictive ability
[5]ssb解決長尾部分的效果:
ESAM: Discriminative Domain Adaptation with Non-Displayed Items to Improve Long-Tail Performance
[6]y2b 優(yōu)化期望
使用播放時長作為權(quán)重,調(diào)整odds,得到期望播放時長:
https://www.cnblogs.com/hellojamest/p/11871108.html
近似約掉分母
https://blog.csdn.net/ggggiqnypgjg/article/details/108968483
[7]
Rank Correlation:
Kendalltau/Somers' D = 2AUC - 1 (scipy.stats.kendalltau)肯德爾相關(guān)等級系數(shù)
Spearman's rank correlation coefficient(等價于pearson of rankid)
[8]
其實logloss肯定和auc也是不等價的。
logloss是個calibrated statistics,而auc是