天天看點

推薦系列論文九-Deep Image Ctr Model

[DICM]Image Matters: Visually modeling user behaviors using Advanced Model Server

論文位址

前言

最近工作都比較忙,一直沒更新,剛好最近在做圖像特征提取方面的工作,就剛好更新一下一篇阿裡發表的利用圖像對使用者進行視覺特征模組化的文章,感覺文中價值最多的内容主要是AMS塊的内容,不過本文主要說一下對圖像提取的部分内容,思路比較簡單,是以本文内容會比較簡短一些。

背景

背景内容比較簡單,也就是說目前圖檔資訊很少放到ctr預估模型中,這是因為圖檔非常大,引入到model中訓練會使得模型規模非常巨大訓練困難,這部分是AMS解決的問題,是以這裡避開不談,另外一方面使用者的視覺偏好對于ctr預估而言應該具有一定的價值,這也是DICM(Deep Image Ctr Model,這個名字還真是直白)的原因,下面直奔主題來看一下模型的結構。

DICM

推薦系列論文九-Deep Image Ctr Model

應該說整體的模型結構和目前主流的deep ctr結構類似,都是embedding+mlp的結構,不同的是模型中加入了使用者點選過的圖檔清單,是以其實核心内容是圖像這一塊的部分,文中稱之為embed model,是以我們來着重看一下embed model的結構。

Image embedding model

VGG16

為了說Image embedding model,先來說一下VGG16這個模型,很多人可能對VGG16比較熟悉了,是以不展開細緻的介紹了,有不太了解的同學可以參考這篇文章,https://zhuanlan.zhihu.com/p/41423739。下面直接上一下模型的結構圖:

推薦系列論文九-Deep Image Ctr Model

VGG16是一個分類的模型,但是熟悉遷移學習的同學應該知道我們可以用這些預訓練的模型來提取圖像的一些通用特征,比如VGG16,通常而言可以拿第一個FC層的輸出作為embedding表達,當然其他層也可以嘗試,拿效果來做對比比較合适。

使用keras來提取VGG16的特征也非常友善,如下:

from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
import numpy as np

model = VGG16(weights='imagenet', include_top=False)

img_path = 'elephant.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

features = model.predict(x)
           

不過上面代碼提取的是最後一層pooling後的輸出

另外一些ImageNet比賽的模型
推薦系列論文九-Deep Image Ctr Model

我實際的對比中發現,還是VGG16提取的特征效果好一些,大家都可以做一下嘗試。

Embedding model

前面說完了可以使用VGG16來提取特征,那麼阿裡是怎麼做的呢?

  1. 使用VGG16将每個圖檔提取為4096維的vector
  2. 在圖檔的4096次元上增加若幹層全連接配接将4096維壓縮到12維,該參數與ctr model一起進行端到端訓練

那麼主要存在的問題是什麼呢?

  • 使用者點選過的圖檔是一個清單,表示為對應圖檔的embedding後是不定長的

針對上述問題,最常見的措施是什麼呢?

  1. 直接concat
  2. sum/avg pooling
  3. attentive pooling
  4. attentive pooling(add id feature)
推薦系列論文九-Deep Image Ctr Model

下面挨個來說一下吧

concat

直接有多少個圖檔就concat多少個,這種方式是不定長的,沒辦法放到模型裡(不用rnn、lstm這類結構的話)

sum\avg pooling

這種處理方案比較常見,直接對所有的embedding求和或者平均,缺點是将每個圖檔對于目前的預估權重相當于都設定為相同權重,在使用者的清單比較長時效果不佳

attentive pooling

做法參考阿裡17年的文章DIN,使用權重和來處理embedding融合的問題,适用于使用者行為清單比較長的場景。

attentive pooling(add id feature)

第三種方案的attention主要是基于目前預估的圖檔以及使用者的曆史圖檔清單,而特征交叉在ctr預估場景下通常也比較重要,是以,這裡加入了新的特征交叉,舉個簡單的例子:

目前的廣告是屬于大衣類,此時使用者表達時便可以通過給使用者曆史點選中的大衣圖檔更大的權重來進行權重求和,這也是這個方案的目的,具體實作如上圖(d),即使用了兩個attention結構,二者右側的輸入不同,一個是預估任務的image embedding,另一個是id類特征的embedding。

評估

上面基本就過完DICM的核心結構内容了,評估名額是使用GAUC,看實驗資料來說有些許的提升。

總結

DICM模型整體而言沒有讓人眼前一亮的感覺,使用遷移學習提取特征放到模型中訓練應該許多公司都做了,attentiive pooling也是借鑒了DIN的思路,文章中更重要的内容應該是AMS這樣一個平台,這應該才是這篇文章的核心内容,不過本人水準較差,對于平台這塊知之甚少,沒太了解這種大規模分布式的平台是怎樣的原理,以後還得好好學習。

本次的内容就到這了。

ps:最近在做圖檔feature提取時,用vgg16提取完embedding後再走了一個auto-encoder模型來做壓縮,總體來看似乎還可以,後續比較一下ctr效果咋樣再說。

繼續閱讀