[深度学习]CTR模型如何加入稠密连续型|多值类别特征
一 稠密連續類型特征的處理
在點擊率預估問題中,可以嘗試的幾種方法
1.歸一化后直接拼接到embedding向量側dnn部分,不參與fm部分交叉
- 歸一化的方式可以包括:直接對原始特征做歸一化;通過bn層來做歸一化。
- 因為FM里要求不同field之間有相同的embedding dimension, 所以數值型特征這么加的話是不參與FM的
- 歸一化總是有好處的。未歸一化的數據會導致nn反向傳播過程中grads的均值和方差過大,不利于網絡的學習和收斂。
2.離散化后作為id feature 類別特征, embedding后與其他sparse feature的embedding 一起參與fm的交叉
離散化有兩個好處:一是引入非線性。當label與該dense feature不是線性關系時,一個w * dense feature是不能很好刻劃模型的,所有的dense feature共用一個w表達能力是比較差的。但是離散化之后就變成了對不同的離散化值學習不同的系數,這樣就能很好的提升非線性能力;二是可以過濾一些異常值。異常值會跟其它值分到一個桶里,對模型的影響就會很少。
3.對每個原始稠密特征X維護一個詞嵌入向量embedding vector V,然后把原始稠密特征和權重向量相乘 X*V 得到最終的特征向量.
相當于一個稠密特征映射成一個特征向量,之后和類別映射的詞嵌入矩陣進行拼接參與fm的交叉。此時仍然可以發現,這樣相當于原始稠密特征也可以和類別特征進行交叉特征提取
2和3的區別在于2中根據dense value的取值會分配到不同的embedding vector,而3中的不同的dense value只有一個embedding vector.
一般來說,2應該是最好的。3的自由度有點低,所有的dense feature共用一個embedding, 只是通過feature本身的數值去區分生效。
從上面幾種方法可以發現,稠密特征要和詞嵌入后的類別特征做交叉需要在同一個維度空間,也就是要把一維的稠密特征轉化成和詞嵌入維度相同的特征空間中,同時上面方法中的詞嵌入矩陣相當于權重矩陣都可以進行優化學習。
二 多值類別特征
一般單值類別特征加入到CTR預估模型的方法是先對單值類別特征進行one-hot,然后和embedding 矩陣相乘轉換成多維稠密特征,如下圖所示:
在現實實際問題中,往往還會出現多值類別特征,話題特征,也就是一個用戶感興趣的話題可以有多個,并且不同的用戶感興趣的話題個數不一,這些特征的形式都一般是如下結構(拿用戶感興趣的話題特征來說):
在CTR預估模型中,對這種多值類別特征的常用處理方法總結歸納如下:
非加權法
最常規的也最簡單的是先對所有‘話題’集合進行one hot編碼,然后按照圖 1 方式對多值類別特征中的每一項進行稠密特征的轉換,最后對轉換后的稠密特征向量進行拼接,然后按項求均值或最大值或最小值等,整個過程可以用如圖表示:
可以看出,這樣對多值類別特征進行處理之后,可以把每個多值類別特征轉換在同一維度空間中,這樣輸入到神經網絡中不用為了保持輸入維度一致而進行padding,使輸入變稀疏,也方便和其他特征做交叉特征。
加權法
如果對多值類型特征直接求均值似乎不是很符合常理,畢竟用戶對每個感興趣話題的喜愛程度不一樣,這就有了權重的引入,而不是簡單粗暴的求均值了,具體引入權重的做法如圖:
參考:
總結
以上是生活随笔為你收集整理的[深度学习]CTR模型如何加入稠密连续型|多值类别特征的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mrtg的配置以及具体安装方法
- 下一篇: 个人如何注册cn域名备案