輕讀論文(二):DeepFM: A Factorization-Machine based Neural Network for CTR Prediction

LUFOR129
9 min readSep 6, 2020

DeepFM 是由Wide & Deep這篇論文延伸出來的,因此這次會先介紹Wide & Deep。這篇主要目的是利用深度學習優化推薦系統。

我只是菜雞,不能保證寫下的東西完全正確,最好還是親自閱讀最為準確

論文連結:

  1. Wide & Deep : https://arxiv.org/pdf/1606.07792.pdf
  2. DeepFM : https://arxiv.org/pdf/1703.04247.pdf

一、推薦系統模型挑戰

先說說推薦系統,作者的觀點是: 推薦系統可以看做是一個搜尋排名系統(search ranking system)。怎麼說呢? 今天我 Input一個使用者資訊、query pair (query-item pair): <user,query(contextual information)>; Output 要得到依照使用者的特徵來排名的item (ranked list of item)。使用者特徵又從何而來? 是由使用者點擊、購買過的商品紀錄而來(歷史資料)。

推薦系統模型的挑戰可以分成兩個:

  1. Memorization: 模型是否可以學好歷史資料達到精準預測?
  2. Generalization: 模型可否找到新的特徵組合增加預測結果的多樣性? (泛化)

先說到簡單的推薦系統,那麼自然會聯想到最簡單的logistic regression model。只要我w夠多,沒有什麼歷史資料是學不起來的!

  • Memorization可以透過cross-product transformation來達成例如:AND(install_app=Netflix,impression_app=reddit) value is 1 otherwise 0
  • Generalization可以透過將歷史資料映射到更泛化來達到例如: AND(install_category=video,impression_category=music)

但是如此一來缺點有兩個:

  1. 在輸入model前必須人工先做feature engineering決定出pair
  2. 無法找出從未出現過的配對,要是從來都沒有人同時裝Netflix、Reddit,你就無法找到配對

解決第二個問題我們可以採用Embedding base model。例如: factorization machines (FM)或是DNN來找到那些從未見過的query-item pair,將歷史資料那稀疏(sparse)高維的向量embed到低維密集(dense)的embedding vector。

但這還有另一個問題就是歷史資料(query-item pair)通常是高維稀疏的當映射到低維後,一些原有的特殊癖好、利基(niche)是很難被學習到的,在這情況下原本不應該被推薦出東西的(query-item pair)還是會被硬推薦初一些不相關的東西(Over-generalize)。然而此時,如果我們是用logistic model而非embedding model時,logistic model就能硬記住這些特殊的特徵組合。

二、Wide & Deep Model

那麼為了結合這兩者的優點,Google 提出了Wide & Deep Learning,並且在自己家的Google play商店測試了一小段時間。Wide & Deep結構也很簡單,就是把上面那兩個做結合。

先看左半邊,也就是一個很簡單的linear model,我們稱作Wide

input x 包含了sparse的raw feature與transformation feature,transformation feature就是上面講的Memorization方法手動選定兩兩feature做cross-product,我們可以稱做Φ(x)。input 如下:

而右半邊Embedding model我們稱作Deep,中間hidden layers計算如下:

兩者結果相加後經過activate function就如中間的Wide&Deep model了,整個Wide & Deep model公式與圖如下,每個app預測出來的分數用P(y|x)來表示:

那Google實際在Google play商店測試了一小段時間,系統架構如下:

Google play有幾百萬個apps,當然不是rank所有的app,會先根據query自database取出約100筆item,再透過model將這些item與user-query-item pair做ranking動作獲得ranked list of item。在真實世界中,如果每周更新W&D參數可以使營收上升約4個百分點。

三、DeepFM

那麼該來講到這篇主題DeepFM了,不過我們先來說說FM (Factorization Machines)。FM相關說明可以參考這一篇

與這篇: https://zhuanlan.zhihu.com/p/50426292,我也是看這兩篇學的。

從頭開始講的話就是,從做原始的推薦系統logistic linear regression如下:

但是如同上面所說,我們還想要考慮單個向量分量之間的交互 (是否有同時購買? 喜歡周杰倫的也喜歡蔡依林? ….),所以可以改寫成如下,每個向量分量互相交錯並放在後面:

如果仔細看一下x,你會發現高維且非常稀疏,大部分是0 (假如有200商品,你大多都是未購買狀態吧)。你會發現所有用戶資料x中,滿足xixj交錯不是0的很稀少,大部分資料都不滿足xi xj 同時不為0。最終會使得wij訓練不準確。

那麼由於xixj過高維使得要相乘的wij(n,n)也會形成同樣高維且稀疏,那麼我們把wij表示成兩個k維向量(V)互相內積,當k維夠大就會無限近似於原來的wij,當然實際上k不會太大,來達到一個泛化的效果(generalization)

舉個自己的例子就是:

那就可以把原始wij,用v做替換。這就是FM,因為把w拆解成v所以叫做Factorization Machines:

那麼回到DeepFM,DeepFM有什麼特色呢?

  1. DeepFM不需要再做Feature Engineer了,可以直接將raw data輸入進去model內 (W&D 痛點)
  2. DeepFM整合low order feature (有無購買商品)與high order (feature pair),在文章中分別用order-1、order-2表示
  3. DeepFM share same input and also embedding vector。

先看input X,與output y (商品有無點擊)。input X包含離散field (gender,location、…)與continuous field (age、…),categorical field用one-hot,continuous field 就用自己的field。最終我們要生成一個CTR(點擊率模型)預測。

那麼先看左半部分FM component。

就是將稀疏矩陣每一個field映射到k維embedding,然後假如input x共有d個field,再把這d個field embedding互相相乘。因為你可以把embedding看成如下圖:

然後右半部分跟W&D的D部分一模一樣。

H is number of layer

最後DeepFM在各方面都贏過對手,恩,就這樣:

--

--