
之前咱們介紹過阿里的SIM,通過一種兩階段的方式來使用用戶所有行為序列來提升點(diǎn)擊率預(yù)估的精度。而最近阿里的最新的進(jìn)展中,嘗試將兩階段的處理方式升級為端到端的處理方式,相關(guān)的論文會在后續(xù)進(jìn)行介紹。而今天,我們主要介紹另一篇通過兩階段的方式對用戶行為序列進(jìn)行使用的論文UBR4CTR,一起來看一下。
1、背景
在CTR預(yù)估場景下,用戶歷史行為序列對于用戶未來興趣的預(yù)測起到至關(guān)重要的作用。如何對用戶歷史行為序列進(jìn)行有效的建模,也引起了越來越多的關(guān)注。首先簡單回憶一下之前介紹過的對于歷史行為序列處理的方式。最早的Youtube DNN對用戶最近觀看的N個(gè)視頻的embedding進(jìn)行avg-pooling,這種方式最主要的缺點(diǎn)是針對不同的target item,用戶行為序列處理后得到的embedding都是相同的,對序列中的每個(gè)行為賦予相同的重要度。但用戶對于target item是否喜歡,往往只與歷史行為中部分行為緊密相關(guān),因此阿里的DIN、DIEN等通過注意力機(jī)制,計(jì)算行為序列中每個(gè)item和target item的相關(guān)性作為權(quán)重,對行為序列中的Embedding進(jìn)行加權(quán)。
但在實(shí)際工業(yè)界落地的過程中,由于耗時(shí)的限制,DIN等方法通常僅使用用戶最近的N個(gè)行為,在一些用戶行為頻次較低的場景下,這種做法是OK的,但像淘寶這樣的場景下,有超過20%以上的用戶有1000+的歷史行為,這種截?cái)嗟姆椒ㄍy以有效建模用戶行為中的序列模式。舉個(gè)簡單的例子,當(dāng)前時(shí)間為夏天,用戶想買一件T恤,而截?cái)嗟腘個(gè)行為中,都是去年冬天的購買記錄,那么就容易出現(xiàn)夏天推薦羽絨服的bad case。
因此,如何突破耗時(shí)的限制,來利用用戶更長的行為序列甚至是所有的歷史行為呢?主要有兩類方法,一種是基于memory的方法,如MIMN,另一種是基于檢索的方法,如之前介紹的SIM。這里不再對這兩篇論文進(jìn)行回憶,感興趣的同學(xué)可以翻閱相關(guān)論文或本系列之前的文章。而今天我們介紹的UBR4CTR(User Behavior Retrieval for CTR prediction) ,同樣從檢索的角度出發(fā),設(shè)計(jì)了用戶行為檢索模塊,基于每一次不同的請求和target item,從用戶歷史行為中抽取最有用的部分行為用于后續(xù)的點(diǎn)擊率預(yù)估,一起來看一下。
2、UBR4CTR介紹
2.1 整體介紹
首先來看一下UBR4CTR的整體架構(gòu),如下圖所示:

可以看到,UBR4CTR主要分為用戶行為檢索模塊(user behavior retrieval module)和預(yù)測模塊(prediction module)。用戶行為檢索模塊又包括特征選擇模塊(feature selection model)、檢索引擎(search engine client)和用戶行為檔案(user history archive)。
本文用到的符號定義如下:

接下來,對具體的細(xì)節(jié)進(jìn)行介紹。
2.2 用戶行為檢索模塊
用戶行為檢索模塊是論文的主要?jiǎng)?chuàng)新所在。剛才也提到,用戶行為檢索模塊又包括特征選擇模塊(feature selection model)、檢索引擎(search engine client)和用戶行為檔案(user history archive)。
首先來看一下特征選擇部分,特征選擇的目的主要是從用戶特征、target item特征以及上下文特征中,選擇合適的特征來形成行為檢索的query。為了更好的建模特征之間的交互關(guān)系,特征選擇部分使用self-attention進(jìn)行建模,其結(jié)構(gòu)如下:

如上圖所示,輸入為用戶特征、target item特征以及上下文特征對應(yīng)的embedding表示,而用戶特征中的用戶id需要在后續(xù)檢索引擎中使用,因此被保留,不作為self-attention的輸入。self-attentiond的輸出經(jīng)過MLP以及sigmoid激活函數(shù),得到Kq長度的輸出(Kq表示除用戶id之外剩余特征的數(shù)量),并基于sigmoid激活后的值的大小,選擇最大的n個(gè)特征組成檢索query??梢钥吹?,由于特征選擇是基于用戶信息、上下文信息和候選物品計(jì)算的,那么在線上預(yù)測時(shí)也會動(dòng)態(tài)且靈活的選擇不同的特征。
選擇出n個(gè)特征構(gòu)成query之后,如何檢索得到S個(gè)用戶行為呢?這里,首先介紹一下用戶行為檔案,也就是一張倒排索引表,主要包含兩方面的內(nèi)容,一是用戶id到用戶行為的映射,二是特征到用戶行為的映射,如下圖所示:

那么最終選擇的行為序列的候選集,則是基于用戶id得到的行為序列以及基于不同特征得到的序列的交集:

接下來的問題是,如何從候選集中選擇S個(gè)最相關(guān)的行為,這里采用的是BM25算法,相似度計(jì)算公式如下:


BM25算法是一種TF-IDF的升級版,大家可以參考:https://my.oschina.net/stanleysun/blog/1617727,這里不再做詳細(xì)的介紹。
2.3 預(yù)測模塊
預(yù)測模塊則相對簡單,結(jié)構(gòu)與DIN類似,首先計(jì)算檢索得到的S個(gè)行為(每個(gè)行為包含用戶特征,item特征和上下文特征三部分)與target item的相似度,并基于此對embedding進(jìn)行加權(quán),隨后經(jīng)過MLP層得到點(diǎn)擊率預(yù)估值,其結(jié)構(gòu)如下:

2.4 模型訓(xùn)練
從網(wǎng)絡(luò)結(jié)構(gòu)可以看出,檢索模塊與預(yù)測模塊是無法做到端到端訓(xùn)練的,論文采用了一種交替訓(xùn)練的方式,其過程如下所示:

具體的,對于預(yù)測模塊,使用logloss和L2 loss作為損失函數(shù),進(jìn)行訓(xùn)練;而對于檢索模塊,只需要更新特征選擇部分的參數(shù),由于涉及到采樣的過程,很難通過梯度下降的方式對參數(shù)進(jìn)行更新,因此論文將檢索模塊視為一種策略,使用強(qiáng)化學(xué)習(xí)中策略梯度(policy gradient)的更新方式對參數(shù)進(jìn)行更新。
2.5 線上部署
對于線上部署部分,在原有的CTR預(yù)測部分的基礎(chǔ)上,增加了一個(gè)額外的檢索模塊。而時(shí)間復(fù)雜度也是可控的。接下來簡單分析下模型的時(shí)間復(fù)雜度:
首先是特征選擇(self-attention)模塊,特征數(shù)量為Kq個(gè),因此時(shí)間復(fù)雜度為O(Kq2);接下來是檢索模塊,N表示所有用戶記錄的行為的總數(shù),F(xiàn)表示倒排表中特征的數(shù)量(不包含用戶id),用戶行為的平均長度為T,那么檢索模塊的時(shí)間復(fù)雜度約為O(T+Kq * N / F),其中,N / F代表每個(gè)feature對應(yīng)的倒排表中的行為的平均長度,Kq代表選擇的特征上限;最后是預(yù)測模塊,預(yù)測模塊的時(shí)間復(fù)雜度是O(C),C是attention計(jì)算的耗時(shí),可以進(jìn)行并行化處理。
3、實(shí)驗(yàn)結(jié)果及分析
最后來看一下實(shí)驗(yàn)結(jié)果,論文中進(jìn)行了兩組實(shí)驗(yàn)來驗(yàn)證UBR4CTR相較于base模型的效果,第一組實(shí)驗(yàn)中,base模型只用用戶最近的20%的用戶行為,第二組實(shí)驗(yàn)中,base模型則可以使用用戶全部的歷史行為,而UBR4CTR則保持抽取20%的用戶行為不變,從結(jié)果可以看出,UBR4CTR相較base模型在AUC和logloss指標(biāo)上有較為明顯的提升:


好了,本文介紹就到這里了,與SIM類似,同樣采用基于檢索的兩階段方案對用戶所有的歷史行為進(jìn)行處理,不過個(gè)人感覺在行為檢索方面,UBR4CTR具有更高靈活性,但時(shí)間復(fù)雜度也相對更高。不過兩種方式都是兩階段的方式,這種方式最大的缺點(diǎn)在于兩個(gè)階段的目標(biāo)是存在一定差異的,檢索階段更多的是尋找與target item最相似的歷史行為,而非更準(zhǔn)確的點(diǎn)擊率預(yù)估。因此,在后續(xù)的文章中,咱們會介紹端到端的處理方法,保持關(guān)注喲~。