我們都知道一般單值類別特征加入到CTR預(yù)估模型的方法是先對(duì)單值類別特征進(jìn)行one-hot,然后和embedding 矩陣相乘轉(zhuǎn)換成多維稠密特征,如下圖 1 所示:

上一篇文章稠密特征加入CTR預(yù)估模型的方法中又總結(jié)了稠密特征加入到CTR預(yù)估模型中的方法。而在現(xiàn)實(shí)實(shí)際問題中,往往還會(huì)出現(xiàn)多值類別特征,比如我接觸到的2019騰訊廣告算法大賽中用戶的行為興趣特征就是多值類別特征,也就是一個(gè)用戶可以有多個(gè)類別的興趣,比如打籃球,乒乓球和跳舞等,并且不同用戶的興趣個(gè)數(shù)不一樣。還有2019知乎看山杯比賽中的用戶感興趣的話題特征,也就是一個(gè)用戶感興趣的話題可以有多個(gè),并且不同的用戶感興趣的話題個(gè)數(shù)不一,這些特征的形式都一般是如下結(jié)構(gòu)(拿用戶感興趣的話題特征來說):

在CTR預(yù)估模型中,對(duì)這種多值類別特征的常用處理方法總結(jié)歸納如下:
▌非加權(quán)法
最常規(guī)的也最簡(jiǎn)單的是先對(duì)所有‘話題’集合進(jìn)行one hot編碼,然后按照?qǐng)D 1 方式對(duì)多值類別特征中的每一項(xiàng)進(jìn)行稠密特征的轉(zhuǎn)換,最后對(duì)轉(zhuǎn)換后的稠密特征向量進(jìn)行拼接,然后按項(xiàng)求均值或最大值或最小值等,整個(gè)過程可以用如圖 2 表示:

可以看出,這樣對(duì)多值類別特征進(jìn)行處理之后,可以把每個(gè)多值類別特征轉(zhuǎn)換在同一維度空間中,這樣輸入到神經(jīng)網(wǎng)絡(luò)中不用為了保持輸入維度一致而進(jìn)行padding,使輸入變稀疏,也方便和其他特征做交叉特征。
▌加權(quán)法
仔細(xì)一想,如果對(duì)多值類型特征直接求均值似乎不是很符合常理,畢竟用戶對(duì)每個(gè)感興趣話題的喜愛程度不一樣,這就有了權(quán)重的引入,而不是簡(jiǎn)單粗暴的求均值了,具體引入權(quán)重的做法如圖 3 示意圖:

那么權(quán)重是怎樣得來的,總結(jié)以下:
??通過數(shù)據(jù)挖掘得到多值特征中每個(gè)值的權(quán)重
例如用戶感興趣話題這個(gè)多值類型特征的權(quán)重可以這樣獲得:用戶在相關(guān)話題問題下回答問題的個(gè)數(shù)或相關(guān)話題回答點(diǎn)贊的次數(shù),也就是回答相關(guān)話題問題的個(gè)數(shù)越多,表明越對(duì)該話題越感興趣,權(quán)重越大;點(diǎn)贊相關(guān)話題回答的次數(shù)越多,表明越對(duì)該話題越感興趣,權(quán)重越大。
??通過神經(jīng)網(wǎng)絡(luò)自動(dòng)學(xué)習(xí)多值特征中每個(gè)值的權(quán)重
1.借鑒論文FiBiNET[1]中把SE模塊用在學(xué)習(xí)不同embedding vector權(quán)重的思想。主要過程如圖 4 :

先對(duì)得到的多維稠密特征橫向求均值,這部分在SE[2]模塊中稱作squeeze,也就是壓縮的意思,然后再用兩個(gè)全連接層進(jìn)行全連接操作,這部分在SE模塊中稱作excitation,也就是激勵(lì)提取的意思,最終的輸出也就是學(xué)習(xí)得到的多值類別特征中每個(gè)值對(duì)應(yīng)的權(quán)重。由于是針對(duì)多值類別特征的處理,因此這里在編程實(shí)現(xiàn)的時(shí)候需要按照max length 進(jìn)行padding之后,再進(jìn)行one hot編碼等后續(xù)操作。
2.借鑒論文AutoInt[3]中學(xué)習(xí)transformer[4]注意力機(jī)制的思想來學(xué)習(xí)得到embedding vector 在Value空間上的權(quán)重信息。具體操作如圖 5 所示,M是多值類別特征值的個(gè)數(shù):

先通過矩陣乘法線性變換將每個(gè)投射到多個(gè)子空間中,分別是Query,Key和Value三個(gè)空間,計(jì)算公式分別如下:
,
,?
然后計(jì)算當(dāng)前與多值類別特征中其他embedding vector
的相似度,即通過如下向量?jī)?nèi)積公式得到:
然后利用softmax對(duì)計(jì)算得到的相似度進(jìn)行歸一化,公式為:
該歸一化后的值即為學(xué)習(xí)得到的每個(gè)在Value空間的權(quán)重,因此加權(quán)求和不是對(duì)
加權(quán),而是對(duì)映射到Value空間的特征進(jìn)行加權(quán)求和,用公式表示如下:
總的來說,通過神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)得到權(quán)重相比較通過數(shù)據(jù)挖掘得到權(quán)重來說計(jì)算復(fù)雜,計(jì)算量大,因此在選擇時(shí)需要權(quán)衡一下。
除了多值類別特征,還有行為序列特征,他們的處理方法也有相似之處,可以互相借鑒學(xué)習(xí),后面有時(shí)間介紹一些簡(jiǎn)單的行為序列特征的處理方法,感興趣的可以關(guān)注一下公眾號(hào),精彩下期見~
▌參考文獻(xiàn)
[1][FiBiNET] Combining Feature Importance and Bilinear feature Interaction for Click-Through Rate Prediction (RecSys 2019)
[2][SENet] Squeeze-and-Excitation Networks (CVPR 2018)
[3][AutoInt] AutoInt: Automatic Feature Interaction Learning via Self-Attentive Neural Networks (2018 arxiv)
[4][Transformer] Attention is all you need

