稠密特徵加入CTR預估模型的方法

NO IMAGE

稠密特徵一般是相對稀疏特徵來說的,我們知道類別特徵經過獨熱編碼之後比較稀疏,比如類別 [‘小貓’,‘小狗’,‘小熊’,‘小猴’] 被獨熱編碼後的數據結構為[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],可以看到這種數據很稀疏,但是像桌子的長度這種稠密特徵數據一般就是 [3.4,2.6,8.9,6.7] 這種。一般針對類別特徵都是通過詞嵌入的方法把稀疏特徵轉化為稠密特徵然後再輸入到神經網絡中,不然直接輸入會導致維度爆炸等問題,那麼怎樣把稠密數據加入到CTR預估網絡模型中呢?

常規方法

1. 如圖 1 所示,把原始的稠密特徵直接和全連接層進行連接不和通過詞嵌入轉化的類別稠密特徵進行交叉:

稠密特徵加入CTR預估模型的方法

▲ 圖1. 直接送入全連接

右邊的類別特徵經過詞嵌入後每個類別特徵都被映射成了一個向量,不同的類別向量之間經過交叉運算得到交叉特徵。而左邊的原始稠密特徵不和類別特徵進行交叉,直接和高階的交叉特徵進行拼接作為全連接層的輸入。

2. 如圖 2 所示,把原始稠密特徵離散化,轉換為離散特徵,然後和原始類別特徵都進行詞嵌入,之後再進行特徵交叉。此時可以發現,這樣相當於原始稠密特徵參加了特徵交叉:

稠密特徵加入CTR預估模型的方法

▲ 圖2. 離散處理

3. 如圖 3 所示,對每個原始稠密特徵x維護一個詞嵌入向量e,然後把原始稠密特徵和權重向量相乘得到最終的特徵向量,相當於一個稠密特徵映射成一個特徵向量,之後和類別映射的詞嵌入矩陣進行拼接。此時仍然可以發現,這樣相當於原始稠密特徵也可以和類別特徵進行交叉特徵提取:

稠密特徵加入CTR預估模型的方法

▲ 圖3. 稠密特徵與embedding vector相乘

鮮為人知的Key-Value Memory方法

在ICMEW的一篇論文中提出了一種把Key-Value Memory [1] 應用到稠密特徵處理上的方法,如圖4所示,可以看到這個模型的輸入是一個稠密特徵q,輸出是一個特徵向量v,也就是實現了1維到多維的特徵空間轉換,那麼具體看一下是怎樣實現的。

稠密特徵加入CTR預估模型的方法

圖4. Key-Value Memory模型結構 [1]

向量v的計算是通過對每個embedding vector vi 進行加權求和得到的,公式表示為

稠密特徵加入CTR預估模型的方法

其中wi的計算為

稠密特徵加入CTR預估模型的方法

Ki的計算等於

稠密特徵加入CTR預估模型的方法

其中要對q進行歸一化。我的理解就是把一個稠密特徵的值q映射成一個權重分佈,再用這個權重分佈去和維護的N個embedding vector加權求和,最後得到一個和詞嵌入維度相同的向量v。得到向量v之後就和前面的方法一樣,可以和類別特徵進行特徵交叉了。

總結

從上面幾種方法可以發現,稠密特徵要和詞嵌入後的類別特徵做交叉需要在同一個維度空間,也就是要把一維的稠密特徵轉化成和詞嵌入維度相同的特徵空間中,同時上面方法中的詞嵌入矩陣相當於權重矩陣都可以進行優化學習。後續文章會有稠密特徵加入CTR模型各個方法的具體實現代碼,喜歡就關注一下吧

參考文獻

[1] Multi-modal Representation Learning for Short Video Understanding and Recommendation. ICME Workshops 2019: 687-690

稠密特徵加入CTR預估模型的方法

相關文章

Flutter升級1.12適配教程

數據庫中間件分片算法之enum

一文入門mybatis

SpringBoot2.X異步編程@Async之請求上下文信息的傳遞