搜索推荐系统实战:终极奥秘
搜索推薦系統(tǒng)實(shí)戰(zhàn)篇-下篇
一切源于煉丹筆記,我只是敲了敲代碼。搜索推薦系統(tǒng)實(shí)戰(zhàn):起始篇
搜索推薦系統(tǒng)實(shí)戰(zhàn):進(jìn)化篇
搜索推薦系統(tǒng)實(shí)戰(zhàn):終極奧秘
Bias問(wèn)題是推薦系統(tǒng)長(zhǎng)期需要考慮的一個(gè)問(wèn)題,舉些簡(jiǎn)單的例子:
- 如果我們使用傳統(tǒng)的推薦系統(tǒng)對(duì)我們數(shù)據(jù)進(jìn)行建模優(yōu)化,就會(huì)形成流行度bias的問(wèn)題,導(dǎo)致越流行的商品越流行,銷量越高的商品的銷量越多,這很不利于小商家的發(fā)展,尤其是新入駐的賣家等,由于得不到曝光而慢慢流失。
- 在建模的過(guò)程中,商品的曝光位置我們只有在商品已經(jīng)被曝光之后才可以拿到,而很多用戶對(duì)于曝光位置是非常敏感的,如果這些曝光之后的信息沒(méi)法在建模的過(guò)程中被使用,那么也會(huì)帶來(lái)性能損失的問(wèn)題。
- ...
關(guān)于推薦系統(tǒng)中Bias的造成,大家可以參考下面的框架。
1. 推薦系統(tǒng)中的反饋循環(huán)
我們可以將推薦系統(tǒng)的循環(huán)表述為下面的幾個(gè)階段。
1.1 User -> Data
1.2 Data -> Model
基于收集到的數(shù)據(jù)進(jìn)行推薦模型的學(xué)習(xí),從歷史的交互中學(xué)習(xí)用戶的喜好,并且預(yù)測(cè)用戶可能購(gòu)買某個(gè)商品的概率等;
1.3 Model -> User
將推薦的結(jié)果返回給用戶,以滿足用戶的信息需求。這一階段將影響用戶未來(lái)的行為和決策。
通過(guò)上面的循環(huán),用戶和推薦系統(tǒng)在交互的過(guò)程中,用戶的行為通過(guò)推薦進(jìn)行更新,這樣土建系統(tǒng)可以通過(guò)利用更新的數(shù)據(jù)進(jìn)行自我強(qiáng)化。
關(guān)于Bias和Debias的問(wèn)題,也一直是工業(yè)界和學(xué)術(shù)圈的一大研究課題。至于詳細(xì)的研究細(xì)節(jié),推薦大家閱讀下面的論文:
- Bias and Debias in Recommender System: A Survey and Future Directions
此處不再進(jìn)行過(guò)多的闡述,僅介紹我們?cè)趐osition bias的一些思考。
2. PositionBias的處理方式
2.1 當(dāng)特征加入
消除推薦系統(tǒng)中的位置偏置,一種常見的做法就是將position信息當(dāng)作是特征加入到模型當(dāng)中,具體的做法如下:
- 在訓(xùn)練階段將位置作為一個(gè)特征加入到模型中;
- 而在預(yù)測(cè)階段置為0或者一個(gè)統(tǒng)一的常數(shù),如下圖所示;
因?yàn)閜osition在線下是可以直接拿到的,但是在上線的過(guò)程中是拿不到的,所以在預(yù)測(cè)階段經(jīng)常會(huì)帶來(lái)一些不確定的效果。
2.2 另起一個(gè)shallow tower預(yù)測(cè)位置信息
通過(guò)一個(gè)shallow tower(可理解為比較輕量的模型)來(lái)預(yù)測(cè)位置偏置信息,輸入的特征主要是一些和位置偏置相關(guān)的特征。
在多任務(wù)模型的子任務(wù)最后的sigmoid前,將shallow tower的輸出結(jié)果加入進(jìn)去。而在預(yù)測(cè)階段,則不考慮shallow tower的結(jié)果。值得注意的是,位置偏置信息主要體現(xiàn)在CTR預(yù)估中,而用戶觀看視頻是否會(huì)點(diǎn)擊喜歡或者用戶對(duì)視頻的評(píng)分,這些是不需要加入位置偏置信息的。
2.3 概率拆分:用戶看到物品的概率*物品點(diǎn)擊的概率
該方法基于這樣一個(gè)假設(shè),即一個(gè)商品只有在被用戶看到時(shí)才被用戶點(diǎn)擊。更具體地說(shuō),我們認(rèn)為商品被用戶點(diǎn)擊的概率取決于兩個(gè)因素:
假設(shè)商品被用戶看到,那么我們有:
我們做進(jìn)一步的假設(shè):
- 一個(gè)商品被看到的概率只與相關(guān)位置被觀察到的概率有關(guān);
- 一個(gè)商品被點(diǎn)擊的概率是和位置無(wú)關(guān)的;
2.4 一些實(shí)驗(yàn)
我們分別對(duì)三種策略進(jìn)行建模,發(fā)現(xiàn):
- 把position進(jìn)行embedding然后直接當(dāng)作特征加入到模型中進(jìn)行訓(xùn)練,然后在inference階段全部設(shè)置為某個(gè)固定的值,例如0,基本沒(méi)什么提升;
- 另起一個(gè)分支,把position的位置信息emebdding之后接MLP并將最后的輸入進(jìn)行sigmoid與預(yù)測(cè)的pCTR的預(yù)估值相乘,作為最終的預(yù)測(cè);在預(yù)測(cè)的階段,我們分別將position全部設(shè)置為0,以及不生效該分支的預(yù)測(cè)結(jié)果;
- 在position側(cè)加入用戶/商品的簡(jiǎn)單信息之后接MLP并將最后的輸入進(jìn)行sigmoid與預(yù)測(cè)的pCTR的概率相乘,作為最終的預(yù)測(cè);預(yù)測(cè)的時(shí)候我們不生效該P(yáng)osition側(cè)網(wǎng)絡(luò);
后面兩種策略在實(shí)驗(yàn)的過(guò)程中,可以帶來(lái)微弱的提升,但是沒(méi)有論文中那么明顯,可能和數(shù)據(jù)集以及應(yīng)用的場(chǎng)景相關(guān)。
注意:如果是Cotrain的框架,Position在建模的時(shí)候只需要加入到CTR分支即可。
特征工程目前依然是建模過(guò)程中最為核心的一塊,也是提升最快最簡(jiǎn)單的部分;有些公司的搜索推薦團(tuán)隊(duì)只使用了embedding相關(guān)的信息,并希望通過(guò)embedding的交叉或者序列等信息建模得到最終的推薦結(jié)果,并沒(méi)有加入非常多人為構(gòu)建的特征。
但在很多的場(chǎng)景下,特征工程還是非常重要的。尤其是在有好幾年數(shù)據(jù)積累的場(chǎng)景中,數(shù)據(jù)量是非常大的,甚至可以上PB級(jí)別,在建模的過(guò)程中基本上是不大可能把所有的數(shù)據(jù)全部使用上,我們一般會(huì)選擇使用最新的數(shù)據(jù),但為了盡可能不浪費(fèi)老的數(shù)據(jù)信息,會(huì)選擇通過(guò)特征工程的方式從老的數(shù)據(jù)集中提取盡可能多的信息。為模型帶來(lái)提升,而在我們的實(shí)踐中,也發(fā)現(xiàn),特征工程帶來(lái)的提升還是非常大的。
1. 特征工程技巧(From RecSys2020 Tutorial)
在最近的RecSys大會(huì)上,也出現(xiàn)了關(guān)于推薦系統(tǒng)特征工程的Tutorial,但里面更多的是關(guān)于各類特征如何處理的問(wèn)題,更像是AutoML的東西。
1.1 類別特征(Categorical)
常見的策略有三種:
1.2 非結(jié)構(gòu)化的列表
常采用的特征工程策略為:
1.3 數(shù)值特征
1.4 時(shí)間戳特征
1.5 時(shí)間序列
1.6 文本
1.7 圖像
1.8 社交圖
1.9 地理位置
2. 海量特征工程
上面內(nèi)容更多的是一些基礎(chǔ)的特征處理技巧。很多較為傳統(tǒng),如果轉(zhuǎn)化業(yè)務(wù)中該如何構(gòu)建特征工程呢?此處我們描述一套特征框架,過(guò)多的細(xì)節(jié)不闡述,畢竟是很多大佬打磨了很多從非常多的實(shí)踐中實(shí)踐得到的,而且也不一定各種業(yè)務(wù)都會(huì)100%有效。
首先我們建模的目的是為了預(yù)估:
找到所有商品中最有可能被購(gòu)買的那一件,然后曝光給用戶。從上面的定義中,我們可以發(fā)現(xiàn),特征至少可以劃分為下面的幾塊。
2.1 用戶相關(guān)的特征
這塊特征實(shí)在是有些多,還有一些專門做用戶畫像的組。包含的特征有很多:
- 用戶的固定屬性特征,比如:用戶的性別、年齡、身高其它信息;
- 用戶的歷史統(tǒng)計(jì)特征,比如:過(guò)去某段時(shí)間的購(gòu)買率、點(diǎn)擊率、消費(fèi)次數(shù)、平均每次消費(fèi)額、平均消費(fèi)間隔、最近一次消費(fèi)的時(shí)間等等。
- 用戶的其它特征,比如:喜好特征, 實(shí)時(shí)行為建模,更細(xì)粒度的對(duì)當(dāng)前請(qǐng)求下的興趣刻畫與描述等等;
這塊特征非常多,很多組都有一套自己的特征組。
2.2 商品相關(guān)的特征
和用戶的特征類似,商品的特征也是海量的:
- 商品的固定屬性特征,比如:商品的上架時(shí)間、商品的體積、商品的價(jià)格、是否是當(dāng)季商品、是否促銷、是否有優(yōu)惠活動(dòng)等等;
- 商品的歷史統(tǒng)計(jì)特征,比如:商品的歷史點(diǎn)擊率、商品的曝光次數(shù)、商品的加購(gòu)率、商品的購(gòu)買率、商品上次被購(gòu)買的時(shí)間等等;
- 商品的其它特征,比如:商品是否有代言,代言人,代言人的粉絲情況等等;
這塊特征非常多,很多組都有一套自己的特征組。
2.3 Query相關(guān)的特征
這塊在搜索相關(guān)的競(jìng)賽中,也是非常多的,參見阿里媽媽IJCAI2018年的競(jìng)賽:
- Query的固定屬性特征,比如:Query的embedding,Query中關(guān)鍵詞的統(tǒng)計(jì)信息;
- Query的歷史統(tǒng)計(jì)特征,比如:Query的歷史出現(xiàn)次數(shù),Query的歷史點(diǎn)擊率,購(gòu)買率等等;
- Query的其它特征:近義詞的次數(shù)等;
這塊的特征和用戶以及商品是類似的,也是自成一套。
2.4 上下文特征
- 地點(diǎn)、時(shí)間、網(wǎng)絡(luò)信號(hào)形式、使用的app等信息;
2.5 交叉特征
特征交叉這塊是探討最多的,因?yàn)榻徊嫘畔?shí)在是太多了,從很多大佬的分享以及相關(guān)的數(shù)據(jù)競(jìng)賽最后的分享方案中,我們也發(fā)現(xiàn):短短的幾個(gè)原始字段在進(jìn)行交叉之后都可以得到成百上千的特征,更別說(shuō)是在工業(yè)界了,工業(yè)界的字段都有幾百個(gè),甚至?xí)猩锨€(gè),所以這塊要是單純的做特征交叉,可以枚舉幾個(gè)月甚至幾年。
從kaggle的諸多特征專家寫的write-ups來(lái)看,特征又可以分為:二階的交叉,三階的交叉,四階的交叉......
這么做下去,幾乎是一個(gè)天文數(shù)字,再加上這么大的數(shù)據(jù)量,我們對(duì)每個(gè)新構(gòu)建的特征進(jìn)行驗(yàn)證,耗費(fèi)的資源也將會(huì)是一個(gè)天文數(shù)字,而且存儲(chǔ)資源也是無(wú)法接受的,舉個(gè)最簡(jiǎn)單的例子,我們做用戶和商品的二階交叉特征,
- 在很多朋友,用戶都是上千萬(wàn)甚至是上億的,商品的個(gè)數(shù)更不用說(shuō)了,最少也是上百萬(wàn)的,所以簡(jiǎn)單的交叉可能會(huì)帶來(lái)上億*上百萬(wàn)的個(gè)數(shù),當(dāng)然實(shí)踐中肯定沒(méi)這么多,如果從存儲(chǔ)的代價(jià)角度看,這將會(huì)是一個(gè)非常巨大的負(fù)擔(dān)。
- 從上面的角度來(lái)看,做用戶和Query和商品的三階交叉將會(huì)是一種巨大的負(fù)擔(dān)。
大家都知道這些特征是非常有用的,但是直接做交叉的代價(jià)又是巨大的,怎么辦呢?我們可以使用下面的兩個(gè)技巧來(lái)進(jìn)行處理。
1.Top截?cái)?#xff1a;
這幾乎在所有的大數(shù)據(jù)競(jìng)賽中都有提到,例如IJCAI18年的競(jìng)賽就是,在我們的數(shù)據(jù)量非常大的時(shí)候,我們會(huì)選擇保留排序之后TopN的信息,例如:
- 保留用戶最常購(gòu)買的TopN個(gè)Item的點(diǎn)擊率,購(gòu)買率等等;
- 保留用戶最常訪問(wèn)的TopN個(gè)Query的點(diǎn)擊率,購(gòu)買率等等;
- 保留Query下最常購(gòu)買的TopN個(gè)Item的點(diǎn)擊率,購(gòu)買率等等;
- ...
2.轉(zhuǎn)變?yōu)榉植急硎?#xff1a;
該技巧也主要來(lái)源于推薦相關(guān)的競(jìng)賽,以及AAA21年最新的競(jìng)賽分享中,大致的思路是將原先的直接統(tǒng)計(jì)user+item的信息轉(zhuǎn)而去統(tǒng)計(jì)其它的特征:
- 先統(tǒng)計(jì)商品的歷史點(diǎn)擊率,然后拼接到商品信息中,當(dāng)做商品的統(tǒng)計(jì)信息,然后再統(tǒng)計(jì)用戶關(guān)于商品的這些統(tǒng)計(jì)信息的統(tǒng)計(jì)特征。
該方法被稱之為用商品的點(diǎn)擊/購(gòu)買分布來(lái)表示用戶。類似的,商品也可以用用戶來(lái)表示,即。
- 先統(tǒng)計(jì)用戶的歷史點(diǎn)擊率,然后拼接到用戶信息中,當(dāng)做用戶的統(tǒng)計(jì)信息,然后再統(tǒng)計(jì)商品關(guān)于用戶的這些統(tǒng)計(jì)信息的統(tǒng)計(jì)特征。
這種用交叉信息的一側(cè)主體的統(tǒng)計(jì)信息來(lái)表示另外一側(cè)主體的策略也是極其方便的一種策略。
2.6 其它新技術(shù)帶來(lái)的特征
這塊的特征如果從技術(shù)的角度來(lái)看都是可以被包含到上面的幾大類中的,但是因?yàn)檫@些特征是通過(guò)最新的一些硬件或者其它的技術(shù)發(fā)展帶來(lái)的,例如邊緣計(jì)算等,此處我們將其單獨(dú)列舉出來(lái)作為一節(jié)。
最典型的一些特征就是阿里巴巴EdgeRec文章中所列舉的:
2.7 上游特征
這個(gè)在KDD20的競(jìng)賽中有看到,大致就是利用模型上游的很多統(tǒng)計(jì)或者其它模型輸出的一些特征,每個(gè)公司產(chǎn)出的可能不一樣,此處不做過(guò)多描述。
2.8 實(shí)驗(yàn)小結(jié)
上面的特征工程只是冰山一角,因?yàn)殡S著業(yè)務(wù)相關(guān)的數(shù)據(jù)集的擴(kuò)充,肯定也會(huì)涉及到非常多其它相關(guān)的特征。比如與圖片相關(guān)的特征,用戶購(gòu)買商品之后對(duì)于商品的文字評(píng)價(jià)等等諸多的信息,這些都可以作為商品或者用戶商品相關(guān)的信息加入模型。
整體來(lái)說(shuō),特征作為模型的輸入能帶來(lái)非常大的幫助,所以還是非常重要的,我們通過(guò)特征工程的方式能在原先的基礎(chǔ)上帶來(lái)非常大的提升。
在第一篇文章我們就說(shuō)了,搜索推薦的問(wèn)題依據(jù)平臺(tái)的發(fā)展有無(wú)窮無(wú)盡的問(wèn)題需要思考,感覺(jué)是做不完的。單單就提升轉(zhuǎn)化率這個(gè)任務(wù)來(lái)看,就可以分為下面幾個(gè)階段:
- 模型提效/壓縮等:從數(shù)據(jù)收集的層面、特征數(shù)據(jù)集質(zhì)量、標(biāo)簽質(zhì)量、數(shù)據(jù)的使用、模型的Loss、整體框架設(shè)計(jì)(此框架下的優(yōu)化)、局部各個(gè)子模塊設(shè)計(jì)(交叉,序列,Dense側(cè)等等)、數(shù)據(jù)特征工程等等角度對(duì)模型進(jìn)行優(yōu)化。但其實(shí)這只是非常小的一部分,還有非常多待解決的問(wèn)題,包括:
- 交叉特征帶來(lái)的冗余問(wèn)題;Dense特征的篩選;
- 各種Bias問(wèn)題的Debias策略研究;
- 模型的上下游聯(lián)動(dòng);
- 各種特殊時(shí)間的處理,比如促銷的數(shù)據(jù)怎么使用?在雙十一這種特殊場(chǎng)景如何建模等等?
- 端上信息的建模(雖然建模方式類似),但是對(duì)于邊緣技術(shù)等要求在不斷提高;
- 模型的壓縮,降本等;
- 模型資源配置:
- 隨著算法紅利越來(lái)越少,模型怎么也不可能達(dá)到100%的效果,越往后往上的紅利將會(huì)越少,后面整個(gè)算法組一年也很難提升1%,這個(gè)時(shí)候可能就會(huì)考慮計(jì)算資源縮減的問(wèn)題,即降本的問(wèn)題,所以此時(shí)會(huì)考慮模型機(jī)器內(nèi)存等的工程問(wèn)題,進(jìn)行降本;
- 模型管理,文檔/Code沉淀管理/指標(biāo)監(jiān)控管理:
- 很多團(tuán)隊(duì)初期瘋狂輸出,提升模型的效果,但并不是所有人都有做文檔的習(xí)慣,做Code的沉淀,后期可能更多的會(huì)關(guān)注在這塊;
- 很多東西初期、中期、甚至后期都很亂,包括線下/線上嘗試評(píng)估之類的,代碼管理,指標(biāo)監(jiān)控等等;
上面的內(nèi)容側(cè)重在提升轉(zhuǎn)化率的問(wèn)題方面,當(dāng)然能做的肯定不止上面所列舉的。隨著平臺(tái)的發(fā)展,平臺(tái)老大對(duì)于平臺(tái)的定位不同,比如考慮平臺(tái)的健康發(fā)展,就會(huì)考慮曝光的商品數(shù),用戶的復(fù)購(gòu)率等等,換了指標(biāo)之后可能要做的東西又可以再來(lái)一套。隨著時(shí)代的發(fā)展,很多新的元素的融入,比如現(xiàn)在的視頻直播帶貨等等,這些元素又可以做好幾年,整了半年的模型,只能感慨:活到老,學(xué)到老,碼到老啊!
總結(jié)
以上是生活随笔為你收集整理的搜索推荐系统实战:终极奥秘的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 负样本修正:既然数据是模型的上限,就不要
- 下一篇: 搜索推荐系统实战:进化篇