搜索推荐系统实战:起始篇
搜索推薦系統(tǒng)實(shí)戰(zhàn)篇-上半篇
一切源于煉丹筆記,我只是敲了敲代碼。搜索推薦系統(tǒng)實(shí)戰(zhàn):起始篇
搜索推薦系統(tǒng)實(shí)戰(zhàn):進(jìn)化篇
搜索推薦系統(tǒng)實(shí)戰(zhàn):終極奧秘
在電商搜索中,例如淘寶,拼多多,京東等的搜索的場景往往是:用戶A通過搜索框Query找到他/她想要購買的東西,然后搜索引擎通過某些算法策略返回一系列商品,用戶再?zèng)Q定是否進(jìn)行點(diǎn)擊購買。
要做好這樣一個(gè)問題,我們需要抓住問題的核心。那么搜索引擎的核心是什么呢?至少有兩點(diǎn)。
從上面看,我們的核心至少有兩個(gè),一個(gè)是構(gòu)建Query與Item的關(guān)系(保證Query下返回的商品至少是強(qiáng)相關(guān)的),第二個(gè)就是構(gòu)建User和Item的關(guān)系(在強(qiáng)相關(guān)的商品中,找到用戶大概率會(huì)點(diǎn)擊購買的商品)。
上面兩點(diǎn)是很多電商搜索引擎需要做到的,依據(jù)平臺(tái)的不同,可能還會(huì)有些許不一致。
在電商搜索背景下,我們的目標(biāo)依據(jù)大佬們對于平臺(tái)當(dāng)前的發(fā)展定位以及未來規(guī)劃達(dá)到的目標(biāo)往往會(huì)有些許不同,優(yōu)化的指標(biāo)也會(huì)有較大的不同,常見的一些熱門指標(biāo)如下:
- UV價(jià)值=銷售額/訪客數(shù)=轉(zhuǎn)化率*客單價(jià);
- 曝光到購買的轉(zhuǎn)化率:這個(gè)指標(biāo)較容易理解,就是商品從曝光到被購買的概率,如果平臺(tái)的轉(zhuǎn)化率很高,一般可以反映該平臺(tái)諸多產(chǎn)品都還是很受歡迎的;用在推薦搜索推薦的場景較多,可以從側(cè)面反映搜索引擎的好壞;
- 轉(zhuǎn)化率=購買量/曝光量;
- GMV(Gross Merchandise Volume):是成交總額(一定時(shí)間段內(nèi))的意思,一般包含拍下未支付訂單金額,所以一般會(huì)高于實(shí)際成交額。該指標(biāo)越大,往往能說明平臺(tái)的影響力也非常大,因而該指標(biāo)也常常被用于各大電商平臺(tái)的比較,該指標(biāo)一般也是長期需要被關(guān)注的指標(biāo)
- 復(fù)購率:重復(fù)購買率有兩種計(jì)算方法:一種是所有購買過產(chǎn)品的顧客,以每個(gè)人人為獨(dú)立單位重復(fù)購買產(chǎn)品的次數(shù),比如有10個(gè)客戶購買了產(chǎn)品,5個(gè)產(chǎn)生了重復(fù)購買,則重復(fù)購買率為50%;第二種,按交易計(jì)算,即重復(fù)購買交易次數(shù)與總交易次數(shù)的比值,如某月內(nèi),一共產(chǎn)生了100筆交易,其中有20個(gè)人有了二次購買,這20人中的10個(gè)人又有了三次購買,則重復(fù)購買次數(shù)為30次,重復(fù)購買率為30%。企業(yè)一般采用的是第一種。該指標(biāo)一般到了平臺(tái)到一定規(guī)模之后會(huì)關(guān)注的,考量用戶的對于平臺(tái)的忠誠度,用來衡量平臺(tái)的良性;
- 90天內(nèi)重復(fù)購買率達(dá)到1%~15%;說明你處于用戶獲取模式;把更多的精力和資源投入到新用戶獲取和轉(zhuǎn)化;90天內(nèi)重復(fù)購買率達(dá)到15~30%;說明你處于混合模式;平衡用在新用戶轉(zhuǎn)化和老用戶留存、復(fù)購上的精力和資源;90天內(nèi)重復(fù)購買率達(dá)到30%以上;說明你處于忠誠度模式;把更多的精力和資源投入到用戶復(fù)購上;(摘自:《精益數(shù)據(jù)分析》)
上面幾個(gè)指標(biāo)是電商平時(shí)較為關(guān)注的,當(dāng)然還有非常多其它重要的評估指標(biāo),例如:總體運(yùn)營指標(biāo),網(wǎng)站流量指標(biāo),銷售轉(zhuǎn)化指標(biāo),客戶價(jià)值指標(biāo),商品及供應(yīng)鏈指標(biāo),營銷活動(dòng)指標(biāo),風(fēng)險(xiǎn)控制指標(biāo),市場競爭指標(biāo)等等,想要深入理解的話可以閱讀參考文獻(xiàn)[7]。
本文我們重點(diǎn)關(guān)注精排側(cè)提升曝光到轉(zhuǎn)化的優(yōu)化問題,即從曝光到被購買的概率優(yōu)化問題。
和許多數(shù)據(jù)建模問題類似,在我們的問題初步確定之后,接下來需要考慮的問題就是設(shè)計(jì)評估指標(biāo)并針對問題進(jìn)行指標(biāo)的優(yōu)化。
- 線上指標(biāo):計(jì)算的就是從曝光到購買的轉(zhuǎn)化率,無需再進(jìn)一步設(shè)計(jì);
- 線下指標(biāo):線下指標(biāo)我們需要能盡可能的對應(yīng)到線上,即,線下漲的同時(shí)盡可能保證線上也能漲;
1. AUC(采樣/不采樣)
在很多情況下,我們一開始會(huì)選用AUC(Area Under Curve)指標(biāo)來對線下模型進(jìn)行評估。ROCAUC被定義為ROC曲線下與坐標(biāo)軸圍成的面積,一般我們以TPR為y軸,以FPR為x軸,就可以得到ROC曲線。
在數(shù)據(jù)量非常大的情況下計(jì)算AUC是比較耗時(shí)的,有時(shí)為了快速迭代,我們會(huì)對驗(yàn)證樣本進(jìn)行隨機(jī)采樣然后計(jì)算AUC的值進(jìn)行比較,這在KDD2020 Best Paper中也有討論,采樣之后的AUC一般是沒有問題的,所以還是相對穩(wěn)定的。
AUC指標(biāo)在諸多問題中是一個(gè)非常不錯(cuò)的指標(biāo),但是在電商搜索的問題上可能會(huì)有些許不一致。舉個(gè)簡單的例子,假設(shè)我們每次曝光3個(gè)商品,
這個(gè)時(shí)候,場景1得到的AUC是0.75,而場景2得到的AUC則是1;這么看這個(gè)指標(biāo)好像并不是非常合理,同樣的購買情況,但是得到的結(jié)果卻是不一樣的,因而AUC指標(biāo)把所有的預(yù)測結(jié)果都放在了一起考慮,所以對于電商搜索等場景該指標(biāo)有些粗獷了,我們需要一些更加精細(xì)的評估指標(biāo)。
## 場景2 pred_A = [0.8,0.7,0.6] pred_B = [0.8,0.7,0.6]label_A = [1,0,0] label_B = [1,0,0] roc_auc_score(y_score=pred_A + pred_B, y_true=label_A + label_B)1.02. GAUC
GAUC的數(shù)學(xué)形式如下:
但正如大家所看到的,GAUC也存在一些問題,
- 我們在計(jì)算GAUC的時(shí)候,把全部為0的情況刪去了,而如果這種情況占比較大,GAUC的不確定性就會(huì)增大。
- 用戶在當(dāng)前頁面購買了曝光位置為3個(gè)商品,而沒有購買曝光位置為1的商品和用戶在當(dāng)前頁面購買了曝光位置為1的商品,而沒有購買曝光位置為3的商品AUC不一致,這時(shí)我們計(jì)算得到的是不一樣的;這也較為合理,因?yàn)槲覀兿M胶玫纳唐吩娇壳?#xff1b;再比如用戶在當(dāng)前頁面購買了曝光位置為最后的商品,這個(gè)時(shí)候我們計(jì)算得到的為0,但在這兩種情況,我們線上的UV/PV轉(zhuǎn)化率是差不大的,所以有時(shí)會(huì)帶來線下線上不一致的情況;這從指標(biāo)的設(shè)計(jì)來看,也是可以理解的。
從眾多的文章博客和論文中的實(shí)驗(yàn)記錄,以及我們自己的評測指標(biāo)來看,目前大家都還是主要看GAUC指標(biāo),本文剩下的內(nèi)容也會(huì)以PV的GAUC為主要觀測指標(biāo)。
3. 關(guān)于AUC與GAUC
從我們平時(shí)的實(shí)踐情況來看,在90%的情況下AUC和GAUC是一致的,也就是說AUC上漲的話,那么GAUC基本都是漲的,但這并不是絕對的。但平時(shí)線下90%的情況下對比AUC的實(shí)驗(yàn)也是合理的。
- 把Loss的設(shè)計(jì)排在特征工程等操作之前,結(jié)合業(yè)務(wù)指標(biāo)并設(shè)計(jì)對應(yīng)的Loss一般都是模型優(yōu)化的第一步,如果Loss設(shè)計(jì)不佳,可能后續(xù)的諸多結(jié)論在新的情況下都會(huì)有問題, 所以在第一個(gè)模塊我們先重點(diǎn)Loss的設(shè)計(jì)與探索。
目前絕大部分傳統(tǒng)機(jī)器學(xué)習(xí)框架都是基于下面的形式進(jìn)行的,我們將訓(xùn)練數(shù)據(jù)輸入到某個(gè)深度的模型框架,最后通過設(shè)計(jì)的某種Loss進(jìn)行模型的訓(xùn)練,
因?yàn)槲覀兊哪繕?biāo)是提升模型從曝光到被購買的轉(zhuǎn)化率,這看起來和非常多的二分類問題類似,我們只需要將曝光且被用戶購買的記錄標(biāo)記為1,而將曝光但是用戶卻沒有購買的商品標(biāo)記為0,然后使用Logloss/Binary cross entropy作為損失函數(shù)進(jìn)行模型訓(xùn)練和設(shè)計(jì)即可。
初看,好像沒有太大的問題,在之前的IJCAI2018年的”阿里媽媽搜索廣告轉(zhuǎn)化預(yù)測“的諸多Top方案基本是類似的,只需要直接使用上面的Loss進(jìn)行優(yōu)化即可,但是實(shí)際情況和我們理想情況下還是相差較大的。
在幾乎現(xiàn)在90%的電商搜索領(lǐng)域,大家使用的模型都是基于多個(gè)模型的Cotrain,也就是大家經(jīng)常聽到的DeepMTL(DeepMTL:Deep Multi-Task Learning,深度多任務(wù)學(xué)習(xí))。如下圖就是一種常見CTR+CVR Cotrain的框架:
剛開始對于這類設(shè)定我們還是非常懷疑的,明明可以直接優(yōu)化的Loss,為什么還要加個(gè)CTR的Loss進(jìn)行輔助?于是我們做了個(gè)線下的對比實(shí)驗(yàn),直接訓(xùn)練曝光到轉(zhuǎn)化以及早期的CTR和CVR Cotrain的模型,結(jié)果發(fā)現(xiàn):
- 單獨(dú)訓(xùn)練曝光到購買的轉(zhuǎn)化模型相較于Cotrain的模型效果變差了很多,有將近1-2個(gè)絕對百分點(diǎn)的GAUC下降;
這和平時(shí)實(shí)踐中直接優(yōu)化Loss的直覺是相反的,甚至有些懷疑人生,但是我們實(shí)踐經(jīng)驗(yàn)卻時(shí)刻提醒我們要做好問題的優(yōu)化,一個(gè)好的Loss至關(guān)重要。所以我們便去調(diào)研如下問題:
- Why DeepMTL優(yōu)化單純的單模型優(yōu)化?
在和一些搞精排模型的朋友交流之后, 大家關(guān)于CTR和CVR進(jìn)行Cotrain方式的解釋大致可以歸納為:
為了更好地了解采用DeepMTL方案的原因,我們進(jìn)行了較為深入的調(diào)研。
從網(wǎng)上的諸多資料的調(diào)研之后,我們發(fā)現(xiàn)一般采用DeepMTL的場景有下面6個(gè)大類。
1. 隱式數(shù)據(jù)/特征擴(kuò)充(Implicit data augmentation)
進(jìn)行多任務(wù)建模,意味著我們需要有多個(gè)任務(wù),而多個(gè)任務(wù),這也意味著每個(gè)任務(wù)都可能擁有不同的數(shù)據(jù),所以每個(gè)任務(wù)都可以從其他任務(wù)的數(shù)據(jù)集里面吸收額外的有用的信息,獲得額外的增益。我們在模型訓(xùn)練的時(shí)候其實(shí)是加入了額外(其他任務(wù)的信息)的信息,這個(gè)時(shí)候原先的任務(wù)效果得到提升也是大概率的事情。其實(shí)如果從第二個(gè)任務(wù)中抽取特征等加入到主任務(wù)中,可能也會(huì)有提升。DeppMTL則是通過梯度回傳的方式將其它任務(wù)的信息加入了進(jìn)來。
經(jīng)典的工作有:
這些論文的工作都是通過尋找相關(guān)的任務(wù),例如第一篇論文的工作就是通過加入評論信息來輔助用戶商品的協(xié)同過濾效果, 第二個(gè)工作則通過使用context-aware ranking信息來輔助提升實(shí)體推薦的效果。
2. 正則,去噪,提升泛化性
多任務(wù)學(xué)習(xí), 任務(wù)之間共享的特征表示因?yàn)樾枰瑫r(shí)滿足多個(gè)任務(wù), 這就意味著這些特征表示需要擁有不錯(cuò)的泛化性,所以多任務(wù)學(xué)習(xí)可以降低因?yàn)閱蝹€(gè)任務(wù)數(shù)據(jù)臟而帶有較多噪音的問題。因?yàn)镈eepMTL最終優(yōu)化的Loss是由多個(gè)任務(wù)的Loss結(jié)合起來的, 對于每個(gè)單獨(dú)的任務(wù),其他的任務(wù)對應(yīng)的Loss可以當(dāng)做是正則項(xiàng)。
3. 作為Hints信息
有些信息較為難學(xué),但又是主任務(wù)(核心任務(wù))的重要特征,可以另外起一個(gè)任務(wù)對其進(jìn)行學(xué)習(xí),再將學(xué)習(xí)到的信息傳遞給主任務(wù)。
一些特征對于某些特定任務(wù)是非常易于學(xué)習(xí)的,但是對于另外一個(gè)任務(wù)A可能卻很難學(xué),而這種難學(xué)可能是由于特征和任務(wù)A的關(guān)系較為復(fù)雜等原因造成的,通過多任務(wù)學(xué)習(xí),我們可以令任務(wù)B去學(xué)習(xí),而最簡單的方式就是通過hints去做這件事。還常見于一些圖像問題中,單獨(dú)分出一個(gè)任務(wù)識(shí)別小的物體信息;經(jīng)典的工作有:
第一篇文章通過預(yù)測輸入句中是否含有積極或消極的情緒詞,作為情緒分析的輔助任務(wù); 第二篇?jiǎng)t通過模型輸出前面任務(wù)的預(yù)測結(jié)果作為Hints信息傳遞給后續(xù)的模型當(dāng)中。
4. 用于決策過程,緩解SSB/DS,調(diào)優(yōu)中間結(jié)果or利用前一決策信息
此處說的決策過程最典型的例子就是在電商的購物流程中, 消費(fèi)者購物需要經(jīng)歷:exposure -> click -> pay的過程。
1. 緩解SSB/DS,調(diào)優(yōu)中間結(jié)果
這在電商搜索和廣告問題里面最為經(jīng)典的就是CVR預(yù)估問題,CVR預(yù)估在整個(gè)決策的中間階段,直接使用中間階段的數(shù)據(jù)則會(huì)出現(xiàn)較多的問題,例如SSB(Sample Selection Bias),DS(Data Sparsity)等,那么怎么辦呢?用多任務(wù)學(xué)習(xí)將整個(gè)決策過程串聯(lián)起來。最為典型的工作就是:
這樣我們建模的時(shí)候就可以利用到豐富的點(diǎn)擊數(shù)據(jù),從而使得我們神經(jīng)網(wǎng)絡(luò)中的Embedding得到更為充分的訓(xùn)練,緩解Data Sparsity的問題,此外,我們的建模目前是直接基于曝光建模的,也可以緩解SSB問題。
那為什么我們說還可以修正中間結(jié)果呢?我們以第一篇ESMM為例,我們看用戶的購物過程是下面這樣一個(gè)過程:用戶先進(jìn)行了搜索,然后得到了搜索引擎的反饋X1, 用戶對自己相對感興趣的商品進(jìn)行點(diǎn)擊, 進(jìn)入了詳情頁X2, 然后通過在X1看到的信息并結(jié)合X2的信息以及自身的需求確定是不是購買。如下圖所示, 此處我們先不考慮加購收藏等情況,
2. 利用前一決策的信息
在用戶決策的過程中,存在先后順序,在后續(xù)的決策過程中,我們可以通過利用前一階段的信息來輔助后續(xù)的建模。典型的案例有:
這幾個(gè)工作都會(huì)將前一階段的信息作為特征輸入輸入到后續(xù)的模塊當(dāng)中,而且都取得了不錯(cuò)的效果。我們在實(shí)踐中也驗(yàn)證了這一點(diǎn)。
5. 模型集成
一個(gè)模型,中間多次相同任務(wù)的優(yōu)化,中間表示層拼接然后做CF,可以做到類似集成效果;典型的工作有:
6. 賦能添加其他功能,例如可解釋性等
多任務(wù)學(xué)習(xí)用于多個(gè)不同任務(wù)的建模也就意味著模型會(huì)擁有這些不同任務(wù)的功能。除了能輔助提升模型效果之外, 還可以擴(kuò)展模型的功能性。達(dá)到一個(gè)模型多個(gè)功能的效果。典型的作品有:
這兩個(gè)工作將原任務(wù)和知識(shí)圖譜等信息結(jié)合并利用知識(shí)圖譜部分的任務(wù)對原模型賦能,使得模型還具有了一定的可解釋性。
從我們關(guān)于DeepMTL有效性的調(diào)研情況來看,電商搜索中采用DeepMTL模型建模能帶來收益的原因主要有下面幾點(diǎn):
在明確了DeepMTL的建模有效性之后,下一步要做的就是去細(xì)化它。
雖然確立了DeepMTL的建??蚣?#xff0c;但其實(shí)還存在非常多需要細(xì)化的地方,和一些做該方向的朋友交流之后,我們發(fā)現(xiàn)目前大家采用的DeepMTL框架大致可以按照對于數(shù)據(jù)流的使用方式不同而劃分為兩類。當(dāng)然不管是哪種方式,都是有很多可以提升的地方的,下面我們將兩種建模策略的諸多問題以及可能潛在的提升策略進(jìn)行匯總。
1. CTR數(shù)據(jù)流+CVR數(shù)據(jù)流
CTR數(shù)據(jù)流+CVR數(shù)據(jù)流的大致流程如下圖所示:
- 在CTR網(wǎng)絡(luò)中,我們輸入CTR數(shù)據(jù)流;
- 在CVR網(wǎng)絡(luò)中,我們輸入CVR數(shù)據(jù)流(click=1的數(shù)據(jù));
- 這種情況下,我們一般會(huì)共享embedding層;
- 最終曝光到購買的概率就是Pctr * Pcvr;
下面我們介紹這種策略的幾個(gè)問題,以及對應(yīng)的處理策略;
1.CTR/CVR數(shù)據(jù)流浪費(fèi)問題:
- 問題:在使用兩套數(shù)據(jù)流的時(shí)候,我們一般需要對CTR和CVR數(shù)據(jù)流分別進(jìn)行batch采樣進(jìn)行模型的訓(xùn)練,例如CTR網(wǎng)絡(luò)的batch_size為4096,CVR網(wǎng)絡(luò)的batch_size為1024等,但這么做最大的問題就是可能CVR數(shù)據(jù)走完了,但是CTR數(shù)據(jù)卻還沒全部用完,造成CTR數(shù)據(jù)流的浪費(fèi);也有可能是CVR數(shù)據(jù)還沒走完,但是CTR數(shù)據(jù)已經(jīng)走完了,造成CTR數(shù)據(jù)的浪費(fèi);
- 解決策略:針對該問題,我們的解決策略自然就是基于樣本采樣層面的,
- 手工調(diào)整兩個(gè)網(wǎng)絡(luò)的batch_size比例,使得我們能盡可能少的浪費(fèi)數(shù)據(jù);例如固定CTR網(wǎng)絡(luò)側(cè)的batch_size,調(diào)整CVR網(wǎng)絡(luò)側(cè)的batch_size,選擇較適合自己業(yè)務(wù)的數(shù)據(jù)集的理想比例;
- 采用某些動(dòng)態(tài)采樣的策略,使得兩側(cè)的數(shù)據(jù)盡可能同時(shí)跑完,這個(gè)tensorflow應(yīng)該有對應(yīng)的策略;
- 實(shí)驗(yàn)小結(jié):對于網(wǎng)絡(luò)側(cè)的batch_size以及數(shù)據(jù)集的使用對于此類建模策略影響還是非常大的,是非常建議嘗試的,算是一種沒太多技術(shù)含量,但是實(shí)踐價(jià)值卻很大的操作,我們經(jīng)??梢栽谡{(diào)整之后得到穩(wěn)定的增長(多天驗(yàn)證);
2.CTR&CVR網(wǎng)絡(luò)數(shù)據(jù)層面的關(guān)聯(lián)性丟失:
- 問題:CTR數(shù)據(jù)和CVR數(shù)據(jù)是分開采樣訓(xùn)練的,每次都是分別隨機(jī)采樣的不同batch_size的數(shù)據(jù),丟失了CTR數(shù)據(jù)和CVR數(shù)據(jù)之間的關(guān)聯(lián)信息;經(jīng)常出現(xiàn)同一個(gè)用戶的連續(xù)行為被分割開,CTR數(shù)據(jù)是A用戶點(diǎn)擊了某個(gè)商品,但是CVR數(shù)據(jù)是B用戶購買了某個(gè)商品,都不包含A的信息;關(guān)系如上圖所示。
- 解決策略:嘗試對數(shù)據(jù)之間進(jìn)行某種方式的關(guān)聯(lián),盡可能去捕獲這種關(guān)系。
- 從數(shù)據(jù)層進(jìn)行關(guān)聯(lián):盡可能使得每次CVR的數(shù)據(jù)集和CTR數(shù)據(jù)集能進(jìn)行關(guān)聯(lián);
- 從Loss設(shè)計(jì)層進(jìn)行關(guān)聯(lián):加入輔助Loss,加強(qiáng)數(shù)據(jù)之間的關(guān)聯(lián),例如我們可以將CVR的數(shù)據(jù)再過一遍CTR網(wǎng)絡(luò),得到pctr的預(yù)估值,再和我們的CVR網(wǎng)絡(luò)的輸出進(jìn)行相乘得到曝光到購買的預(yù)估概率,然后再使用該購買的標(biāo)簽數(shù)據(jù)設(shè)計(jì)新的Loss等;同樣地,也可以將CTR的數(shù)據(jù)過一遍CVR網(wǎng)絡(luò),同樣的策略;
- 實(shí)驗(yàn)小結(jié):設(shè)計(jì)輔助Loss,在使用CTR數(shù)據(jù)流+CVR數(shù)據(jù)流建模的情況下,可以穩(wěn)定提升曝光到轉(zhuǎn)化的預(yù)估準(zhǔn)確率;
3.CTR&CVR網(wǎng)絡(luò)數(shù)據(jù)Cotrain的問題:
- 發(fā)現(xiàn):在模型的過程中,我們發(fā)現(xiàn)先對CTR網(wǎng)絡(luò)先進(jìn)行單獨(dú)訓(xùn)練,固定住CTR網(wǎng)絡(luò)再對CVR網(wǎng)絡(luò)進(jìn)行訓(xùn)練,相較于CTR網(wǎng)絡(luò)和CVR網(wǎng)絡(luò)共同訓(xùn)練帶來的效果要好很多,但是訓(xùn)練的成本也會(huì)大一些,這個(gè)發(fā)現(xiàn)應(yīng)該是通用的,也較容易理解,我們先對CTR網(wǎng)絡(luò)進(jìn)行訓(xùn)練完成之后,我們的embedding會(huì)獲得一個(gè)不錯(cuò)的中間結(jié)果,這個(gè)時(shí)候我們再在此基礎(chǔ)上訓(xùn)練CVR網(wǎng)絡(luò),肯定會(huì)比一起訓(xùn)練來的要好一些。
2. 純CTR數(shù)據(jù)流
基于對CTR數(shù)據(jù)流和CVR數(shù)據(jù)流Cotrain的討論,我們發(fā)現(xiàn)既然CVR的數(shù)據(jù)是全部被包含在CTR數(shù)據(jù)中的,分開訓(xùn)練又浪費(fèi)數(shù)據(jù)又沒法直接關(guān)聯(lián)關(guān)系,既然所有的CVR數(shù)據(jù)流都來源于CTR數(shù)據(jù)流,那為什么不只使用CTR數(shù)據(jù)流呢?于是便有了基于CTR數(shù)據(jù)流的建模。
- 我們將同一份數(shù)據(jù)輸入到整個(gè)網(wǎng)絡(luò)中即可,無需單獨(dú)產(chǎn)出兩份數(shù)據(jù);
- CTR和CVR網(wǎng)絡(luò)公用一份數(shù)據(jù),當(dāng)然此處是CVR網(wǎng)絡(luò)可以是其它網(wǎng)絡(luò),如果還是CVR網(wǎng)絡(luò)的話,注意對click=0的數(shù)據(jù)對應(yīng)的loss進(jìn)行mask即可;
- Embedding層也是多個(gè)網(wǎng)絡(luò)共享的。
1.CTR&CVR網(wǎng)絡(luò)數(shù)據(jù)層面的優(yōu)點(diǎn):
- 節(jié)省了內(nèi)存:因?yàn)樗械腃VR數(shù)據(jù)都是直接從CTR數(shù)據(jù)流中得到的,我們并不需要再單獨(dú)存儲(chǔ)CVR數(shù)據(jù),可以節(jié)省一定的存儲(chǔ)空間;
- 數(shù)據(jù)關(guān)聯(lián)加強(qiáng):我們的數(shù)據(jù)得到了充分的關(guān)聯(lián),每個(gè)batch的數(shù)據(jù)關(guān)聯(lián)性得到了加強(qiáng)。
2. 可待繼續(xù)改進(jìn)的地方:
- 問題:我們的數(shù)據(jù)的關(guān)聯(lián)雖然得到了加強(qiáng),但是我們的目標(biāo)是提升從曝光到購買的概率;能不能從模型的層面進(jìn)行改進(jìn)?
- 解決策略:這個(gè)在CTR和CVR數(shù)據(jù)流建模的流程中其實(shí)也有提到:
- 加入輔助Loss,這邊也較為簡單,直接使用曝光到購買的信息構(gòu)建Binary Cross Entropy Loss即可;
- 利用exposure -> click -> pay的序列關(guān)系進(jìn)行建模。
- 實(shí)驗(yàn)小結(jié):基于DeepBayesian MTL的框架在曝光到轉(zhuǎn)化率的預(yù)估過程中能帶來較大的收益,和論文中闡述的相差不大,這種對過程建模的方式可以從這套框架中獲得非常大的幫助。
在上面小節(jié)的討論中,我們確定了我們模型大致框架,即使用單CTR數(shù)據(jù)流的DBMTL形式的建模策略,其實(shí)本質(zhì)還是DeepMTL,所以關(guān)于DeepMTL中的挑戰(zhàn)的處理往往可以為我們的模型帶來不錯(cuò)的提升。
1. 相關(guān)任務(wù)的尋找&輔助Loss的設(shè)計(jì)
如何尋找能信息共用的問題, 即相關(guān)任務(wù), 然后再對相關(guān)任務(wù)的建模輔助提升主任務(wù)的效果;目前比較成功的一些案例就是使用知識(shí)圖譜提升協(xié)同過濾的效果;使用搜索log中context-aware ranking提升實(shí)體推薦的效果等。
- 使用推薦的廣告的數(shù)據(jù)作為輔助任務(wù)來提升搜索轉(zhuǎn)化的效果?
- 使用PC端的數(shù)據(jù)來提升mobile端的搜索轉(zhuǎn)化效果?
2. 不同任務(wù)之間特征層信息的共享問題(如何避免負(fù)遷移);
這塊最具代表性的工作就是MMOE,RecSys2020的Best Paper提出的PLE等算法了。不同任務(wù)的共享不可避免要討論的就是共享層特征的公用問題,目前看PLE算法已經(jīng)較好地解決了多任務(wù)特征層信息共享出現(xiàn)的蹺蹺板現(xiàn)象。但是有沒有其他更好的策略仍然值得研究。
- Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts,KDD2018
- Progressive Layered Extraction(PLE)_A Novel Multi-Task Learning (MTL) Model for Personalized Recommendations,RecSys2020
MMOE之前在CTR+CVR Cotrain的框架下得到了不錯(cuò)的提升,這塊是非常值得參考的。
3. 不同任務(wù)之間的loss權(quán)重設(shè)計(jì);
該挑戰(zhàn)最為常見的使用場景就是視頻推薦任務(wù), 在視頻推薦任務(wù)中,我們經(jīng)常會(huì)使用視頻觀看時(shí)長百分比,是否觀看完,是否點(diǎn)擊等信息來共同建模,而這個(gè)時(shí)候就不可避免的發(fā)現(xiàn)下面這樣的問題:視頻觀看的百分比是回歸問題;是否點(diǎn)擊是二分類問題;量綱不一致,直接loss相加調(diào)整權(quán)重的話,會(huì)出現(xiàn)比較多的問題,這一塊的經(jīng)典工作是:
- Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics
4. 模型優(yōu)化,不同任務(wù)共同優(yōu)化;
在實(shí)踐中,我們發(fā)現(xiàn),對于不同的任務(wù)使用不同的優(yōu)化方式進(jìn)行優(yōu)化可以給模型帶來一定的幫助。在Taboola工程師的實(shí)踐經(jīng)驗(yàn)分享中也發(fā)現(xiàn)了這樣的問題,如何對不同的任務(wù)進(jìn)行優(yōu)化也是一個(gè)值得探索的問題。
It’s a common convention that learning rate is one of the most important hyperparameters for tuning neural networks. So we tried tuning, and found a learning rate that looked really good for task A, and another one that was really good for task B. -- By Zohar Komarovsky5. 什么樣的任務(wù)使用MTL任務(wù)是最好的, 能帶來較大的幫助?
這個(gè)目前大家還是基于經(jīng)驗(yàn)來做的,暫時(shí)沒有完美的理論支撐。
通過這一章的調(diào)研與實(shí)驗(yàn),我們初步?jīng)Q定使用下面的框架:
該框架的諸多優(yōu)點(diǎn):
- 只使用CTR數(shù)據(jù)流,可以節(jié)省一定的存儲(chǔ)空間。
- 使用CTR數(shù)據(jù),方案是從曝光到最終pay的流程進(jìn)行建模,可以緩解SSB的問題;
- 使用了Click的數(shù)據(jù),所以相對數(shù)據(jù)量還是可以的,可以緩解因?yàn)檗D(zhuǎn)化的正樣本過少而引入的DS問題(方案使用了CTR數(shù)據(jù),大大緩解了embedding的訓(xùn)練問題);
- 采用了類似DBMTL的框架,對整個(gè)流程進(jìn)行建模,充分利用數(shù)據(jù)流之間的信息;
- 通過relation來構(gòu)建CTR與CVR之間的聯(lián)系,不再使用來建模購買關(guān)系,更為合理,符合直覺。
1. 數(shù)據(jù)收集&理解
1.1 數(shù)據(jù)收集機(jī)制理解
關(guān)于我們的數(shù)據(jù)收集形式對我們進(jìn)行后續(xù)數(shù)據(jù)的使用和預(yù)處理起到非常關(guān)鍵的作用,我承認(rèn)這塊我做得不是很好,導(dǎo)致在實(shí)驗(yàn)的過程中無腦的把數(shù)據(jù)直接丟入模型,看上去模型的效果變差了,帶來了非常多錯(cuò)誤的結(jié)論。從而使得后期又不得不重復(fù)進(jìn)行實(shí)驗(yàn)。
注:公司的數(shù)據(jù)一般非常大,做大模型的話,在機(jī)器資源不夠的情況下,跑一輪得到的結(jié)果是極其浪費(fèi)時(shí)間的,關(guān)于這塊,個(gè)人最大的建議就是在直接將數(shù)據(jù)丟到模型之前,至少檢查以下幾點(diǎn)東西。
- 重復(fù)數(shù)據(jù)觀測:查看相同的id是否存在較為嚴(yán)重的重復(fù),即出現(xiàn)了較多的重復(fù)數(shù)據(jù),這些重復(fù)的數(shù)據(jù)會(huì)使得模型訓(xùn)練變差,從而帶來幻覺,這些數(shù)據(jù)是沒有意義的,但其實(shí)把重復(fù)的數(shù)據(jù)刪去之后可能結(jié)論就完全相反了;
- 收集的數(shù)據(jù)丟失率檢測:好的meta數(shù)據(jù)是建模有效的前提之一,如果數(shù)據(jù)收集的策略有問題,最差的情況是數(shù)據(jù)收集出錯(cuò)了,那就沒必要建模了;不過最常見的討論的問題還是丟失率的問題,就是理想情況下可以收集到100條數(shù)據(jù),實(shí)際只能收集到60條,這種情況的話也沒什么好說的,最簡單的就是詢問工程端能否提升數(shù)據(jù)的收集率,這是最簡單的,數(shù)據(jù)多了準(zhǔn)了,模型自然也會(huì)有提升的;
- 標(biāo)簽是如何來的:在電商中,用戶點(diǎn)擊完商品并不會(huì)立即就購買,所以購買的信息要和前面用戶的用戶點(diǎn)擊記錄相關(guān)聯(lián),這種關(guān)聯(lián)機(jī)制也很重要,了解這些對數(shù)據(jù)預(yù)處理能帶來非常大的參考。
- 其它的很多很多坑。
1.2 數(shù)據(jù)字段理解
這邊不想吐槽太多,目測很多公司很多業(yè)務(wù)都是類似的,尤其是當(dāng)業(yè)務(wù)發(fā)展多年的情況下,會(huì)遺留下一大堆數(shù)據(jù)表,這些表有非常多的字段,但是表的負(fù)責(zé)人已經(jīng)離職了,很多數(shù)據(jù)字段也都沒有寫備注,但是這張表又和后面的很多關(guān)鍵表相關(guān)聯(lián),這是非常頭疼的事情。
為什么說字段的理解非常重要呢?舉個(gè)例子來說,商品ID(ItemID),比如iphone12的ID,
- 情況1:在不同的國家,iphone12都是使用同一個(gè)ItemID來表示的;
- 情況2:在不同的國家,iphone12都是使用不同的ItemID來表示的;
這樣兩種不同的數(shù)據(jù)字段攜帶的信息量是完全不一樣的,
- 對于情況1,iphone12是只能反映在全局情況下的情況;
- 但是對于情況2,iphone12卻反映的是在國家細(xì)粒度下的情況;
我們知道,不同國家的iphone12的銷量可能是完全不一樣的,在貧窮的國家可能銷量就低;在富有的國家則銷量很高,所以說數(shù)據(jù)字段的理解是至關(guān)重要的,相同的字段在不同設(shè)計(jì)情況下統(tǒng)計(jì)的特征可能完全是兩碼事。
2. 數(shù)據(jù)清洗
數(shù)據(jù)清洗:我們的數(shù)據(jù)中,存在非常多的臟數(shù)據(jù),這些數(shù)據(jù)的處理可以幫助我們更好地提效,使得模型訓(xùn)練得到的結(jié)果更為良性;這一塊沒有做太多的工作,可能反欺詐等團(tuán)隊(duì)做的工作會(huì)多一些,典型的就是:
- 刷單的數(shù)據(jù);
- 刷好評的數(shù)據(jù)等等;
- 爬蟲的信息過濾等;
- 其它;
對這些數(shù)據(jù)的清洗可以更為真實(shí)的反映用戶的習(xí)慣。
3. 訓(xùn)練數(shù)據(jù)采樣
數(shù)據(jù)采樣:因?yàn)榇竽P瓦@塊數(shù)據(jù)量非常大,很多時(shí)候數(shù)據(jù)經(jīng)過各種merge操作之后,都可以達(dá)到上PB級別,所以模型的訓(xùn)練經(jīng)常需要有合理的采樣策略;而目前最為常見的采樣策略是基于隨機(jī)的,基于啟發(fā)式的(也就是大家經(jīng)常會(huì)使用的基于規(guī)則的),也有一些基于最新的一些論文的方式:
3.1 負(fù)樣本隨機(jī)采樣
這個(gè)基本所有的公司和數(shù)據(jù)競賽中在樣本規(guī)模達(dá)到一定比例的時(shí)候都會(huì)有碰到,將全部的負(fù)樣本全部丟入到模型中進(jìn)行訓(xùn)練,會(huì)浪費(fèi)非常多的資源,而且常常因?yàn)轭悇e不平衡等原因經(jīng)常獲得的效果往往還不如經(jīng)過隨機(jī)采樣來的效果好。在我們的實(shí)驗(yàn)中,我們發(fā)現(xiàn):
- 負(fù)樣本的采樣比例影響還是較大的,隨機(jī)采樣10%的負(fù)樣本和隨機(jī)采樣20%的負(fù)樣本得到的效果可能會(huì)相差一個(gè)點(diǎn),而且較為穩(wěn)定;
- 如果有特征工程的融入,在做負(fù)樣本采樣的時(shí)候我們需要先做特征,然后再對負(fù)樣本進(jìn)行隨機(jī)采樣,否則效果會(huì)很差;
注意,這邊僅僅是對負(fù)樣本進(jìn)行隨機(jī)采樣,正樣本的量非常少,一般都是全部保留的。
3.2 基于某些規(guī)則的啟發(fā)式采樣
在電商等應(yīng)用中,很多用戶對于position位置可能比較敏感,而這些position也具有非常大的參考價(jià)值,很多用戶可能就只瀏覽了前面部分的商品,后面的曝光商品根本就沒有看,尤其是末尾的商品,但是這些信息我們又沒法捕捉,這塊很多時(shí)候需要和工程討論數(shù)據(jù)埋點(diǎn)的問題;而我們經(jīng)常會(huì)使用下面的策略去進(jìn)行嘗試,幾個(gè)典型的例子:
- 基于曝光位置的規(guī)則:在曝光頁面,用戶只點(diǎn)擊了搜索之后的第二個(gè)曝光商品,對于后面的商品基本都是沒有處理的;這些商品用戶有沒有細(xì)細(xì)瀏覽都得打個(gè)問號?所以在很多的博客中,有些公司會(huì)嘗試將曝光位置大于最后一個(gè)點(diǎn)擊商品的位置的商品去掉,在采樣的過程中不再使用這些商品,而我們在實(shí)驗(yàn)過程中發(fā)現(xiàn)模型效果略有損失;后來我們將曝光位置大于最后一個(gè)點(diǎn)擊商品的位置+某個(gè)閾值的商品去掉,在實(shí)驗(yàn)中可以看到細(xì)微的效果提升;
- 基于瀏覽/滑動(dòng)時(shí)長的規(guī)則:用戶在瀏覽的過程中,由于疲勞或者不感興趣或者其它原因在某些頁面會(huì)快速滑動(dòng)瀏覽頁,我們就可以基于端上收集的用戶的滑動(dòng)停留時(shí)長等信息對負(fù)樣本進(jìn)行過濾,認(rèn)為這些樣本用戶是沒有仔細(xì)觀察的;
- 誤點(diǎn)擊樣本過濾:上面的兩種貪心式規(guī)則都是基于負(fù)樣本進(jìn)行采樣的,當(dāng)然在大家所熟知的問題中還存在一些噪音正樣本,例如誤點(diǎn)擊的樣本,這些樣本普遍是較難判斷的,而對于模型訓(xùn)練帶來的影響也較難判斷。一般我們可以通過刪除那些點(diǎn)擊進(jìn)入之后直接就跳出的用戶(即在詳情頁停留時(shí)間極短的樣本的數(shù)據(jù)),而實(shí)踐中,我們發(fā)現(xiàn)對這些樣本進(jìn)行過濾,效果并沒有太大的變化,可能不同的場景會(huì)有些許差別。
上面的這三種策略基本都是可以嘗試的,但是別指望可以帶來巨大的提升,不過微弱的提升還是可以期待一下的。除此之外,我看到還有非常多其它值得嘗試的,此處僅列舉在下方,并沒有什么具體的結(jié)論。(下面這兩個(gè)來源于引文[31])
- 基于用戶的活躍度分布采樣,用戶的活躍度一般都是一個(gè)長尾分布,越活躍的用戶對應(yīng)的人數(shù)越少,但是其所占的行為越多。這種情況下,如果不考慮用戶活躍度去篩選正負(fù)樣本,難免活躍用戶所占的權(quán)重就會(huì)增大,此時(shí)有效的解決辦法是針對每個(gè)用戶提取相同的正負(fù)樣本。
- 針對同一個(gè)內(nèi)容在不同時(shí)間對同一個(gè)用戶曝光多次的情況,這時(shí)候訓(xùn)練集中可能會(huì)出現(xiàn)同一用戶對同一內(nèi)容點(diǎn)擊與不點(diǎn)擊并存的情況,如果多次曝光的間隔非常短,考慮只使用其中的一次曝光數(shù)據(jù)。
- 其它....
3.3 基于最新技術(shù)的方案
好像也有聽說最新的論文有使用一些最新的技術(shù),來自動(dòng)選擇好的負(fù)樣本,這塊沒有繼續(xù)研究下去了。
更多干貨,請關(guān)注微信公眾號:煉丹筆記總結(jié)
以上是生活随笔為你收集整理的搜索推荐系统实战:起始篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搜索推荐系统实战:进化篇
- 下一篇: 最强的Attention函数诞生啦,带给