吃透論文——推薦演算法不可不看的DeepFM模型
大家好,我們今天繼續來剖析一些推薦廣告領域的論文。
今天選擇的這篇叫做DeepFM: A Factorization-Machine based Neural Network for CTR Prediction,翻譯過來就是DeepFM:一個基於深度神經網路的FM模型。這篇paper的作者來自哈工大和華為,不得不說在人工智慧領域的很多論文都是國產的,作為從業者還是非常欣喜能看到這點的。
通過名字我們也能看得出來,今天的這篇paper本質上其實是FM模型的一個進階或者說是優化版本。如果對FM模型不太瞭解的同學可以通過下方傳送門回顧一下:
想做推薦演算法?先把FM模型搞懂再說
本文同樣很長,建議先馬後看。
摘要
對於CTR預估的模型來說,一個很重要的點就是學習使用者行為對應的特徵背後的潛在聯絡。雖然目前在這個領域已經取得了一些進展(截止2017年),但是目前的做法要麼在低維或者高維的特徵上存在很大的偏差,要麼需要大量的專家級的特徵工程。
在本篇paper當中,我們設計了一種新的模型DeepFM,從而找到了一種可能性,可以同時提升低維和高維的特徵。它結合了FM和神經網路模型的長處,和Google最新的Wide & Deep模型的做法相比,取得了更大的進步,並且還免去了特徵工程的部分。
摘要裡面內容不多,主要是拉踩了一下同行。
簡介
對推薦場景來說,CTR是最關鍵的指標,除了廣告系統會按照CTR x bid來進行排序之外,推薦系統一般都會嚴格地按照預估的CTR進行排序。所以這其中的關鍵問題就是準確地預估CTR。
為了方便大家地理解,簡單介紹一下目前常規的做法。一般來說常規的推薦系統當中的特徵分為四個部分,第一個部分是使用者特徵,是關於使用者的一些資訊。比如是男是女,是否是高收入群體,是否是高消費群體,成為平臺的使用者多久了,偏好平臺當中什麼類目的商品等等。第二個部分是商品特徵,就是關於item的一些資訊,比如價格、類目、折扣、評價等等。第三個部分是上下文特徵,比如當前的時間,是早上還是晚上,比如item展示的位置等等。最後一個部分是使用者實時的行為,比如使用者在瀏覽這個商品之前還看過哪些其他的商品,他登陸平臺多久了,等等。
顯然使用者是否會點選某一個item是由以上這四個部分的資訊共同作用的,比如給一個高富帥推蘭博基尼或者是百達翡麗就是有吸引力的,給一個連聽都沒聽說過的屌絲推同樣的內容顯然就屁用沒有。也就是說商品的特徵和使用者的特徵之間是存在邏輯上的關聯的,我們一般稱為特徵的交叉。
這些交叉資訊往往是隱式的,也就是我們不能直接描述和形容出來的。舉個簡單的例子,可能並不是所有富人都喜歡奢侈品,有些可能就喜歡電子消費品,還有些可能喜歡服裝或者是旅行。人的喜好是很複雜的,我們很難用固定的規則去描述。所以這就需要模型能有這樣的能力去學習這些特徵之間的潛在聯絡,對這些潛在交叉資訊把握越好的模型,一般也都擁有越好的效果。
比如我們分析了主流的app store市場之後發現,在飯點的時候,使用者經常會下載外賣類的app,這說明了app的類別和時間之間存在交叉關係。再比如我們發現年輕的男生往往喜歡設計類遊戲,這說明了app的類別與使用者的性別之間也存在交叉關係。像是這樣的交叉資訊還有很多,從Wide & Deep模型的經驗當中我們可以學到考慮低維和高維交叉特徵之後,模型的效果會更好。
這裡面的一個關鍵挑戰是如何高效地對特徵之間的交叉資訊進行建模,其中的一些比較容易理解,也比較容易做出特徵來,然而大部分的交叉資訊是隱式的,難以直觀理解的,比如啤酒和尿布的例子就是一個,只有大資料探勘才能發現。即使是直觀上容易理解的部分,由於涉及的數量太大,也不可能通過手工來全部處理。
之後paper當中拉踩了一下同行,首先說明了單純的CNN以及RNN效果不好,這個比較容易想明白,RNN主要應用場景是序列場景,比如文字、音訊等,用在CTR預估上並不合適。CNN也是一樣,主要應用在圖片等高維度的資料當中,也不太適合推薦場景。
然後還比較了一下同年發表的其他三篇論文,FNN、PNN以及Wide & Deep。也是一些常規套話,沒有太多的分析,比如在低維高維特徵的交叉上表現不足啦,比如需要過多的特徵工程啦等等。其中Wide & Deep我們之前寫文章剖析過了,FNN和PNN大家感興趣可以去讀一下paper,在業內用的不多,應該是效果不太理想。經過了一番比較之後提出了本文的觀點,我們可以設計出一種效果更好並且會自動學習特徵之間交叉資訊的模型。
方案
我們假設訓練集當中一共有n條樣本,每一條樣本可以寫成。其中的是一個m個field組成的向量,包含了使用者和item組成的特徵。,y=0表示使用者沒有點選,相反,y=1表示使用者點選。
我們再來看樣本的特徵,這m維特徵可以看成兩部分組成,第一部分是類別特徵,比如性別、地理位置、收入情況等等。第二種是連續性特徵,比如平均花費、平均停留時間等等。類別特徵(categorical feature)一般被表示成一個one-hot之後的向量,而一個連續特徵,一般就是表示它自己,當然也可以離散化成one-hot向量。
我們把這些特徵全部處理完之後,整個向量會轉化成,這裡的每一個field和向量一一對應。由於這當中做了一些離散化的處理,會使得x向量變得非常稀疏。所以我們要做的就是在這樣特徵比較稀疏的樣本上簡歷一個CTR預測模型。
DeepFM
我們希望能夠設計模型能夠更好地學習低維和高維特徵之間的互動,基於這點,我們在深度模型的基礎上結合了FM,推出了DeepFM模型。它的整體結構如下圖:
這張圖看起來可能會有點亂,我們可以先忽略一些區域性的細節,先從整體上把握。這個模型可以分成兩個部分,分別是FM部分以及Deep部分。這兩個部分的輸入是一樣的,並沒有像Wide & Deep模型那樣做區分。
其實這個模型還是比較好理解的,神經網路也就是Deep的部分用來訓練這些特徵的一維的關聯以及聯絡,而FM模型會通過隱藏向量V的形式來計算特徵之間的二維交叉的資訊。最後一維和二維的資訊彙總到一起,進入sigmoid層,獲得最終的結果。
用公式來表達的話,大概是這樣:
FM部分
FM部分其實就是因子分解機,我們在之前的文章當中曾經專門剖析過。FM會考慮所有特徵之間兩兩交叉的情況,相當於人為對左右特徵做了交叉。但是由於n個特徵交叉的組合是這個量級,所以FM設計了一種新的方案,對於每一個特徵i訓練一個向量,當i和j兩個特徵交叉的時候,通過來計算兩個特徵交叉之後的權重。這樣大大降低了計算的複雜度。
這當中涉及一些公式的推導和計算,我們在之前的文章當中已經詳細推導過了,這裡就不多贅述了。
最終我們可以得到這部分的公式:
Deep部分
Deep部分就是經典的前饋網路,用來學習特徵之間的高維交叉。
圖3展示的就是模型當中Deep這個部分,從圖中我們可以看到,所有的特徵都會被轉化成embedding向量作為Deep部分的輸入。CTR預估的模型和圖片以及音訊處理的模型有一個很大的不同,就是它的維度會更大,並且特徵會非常稀疏,還伴有類別連續、混合、聚合的特點。在這種情況下,使用embedding向量來把原始特徵當中的資訊壓縮到低維的向量就是一種比較好的做法了,這樣模型的泛化能力會更強,要比全是01組成的multi-hot輸入好得多。
這張圖展示了這個部分區域性的結構,我們可以看到所有特徵轉成的embedding向量擁有相同的維度k。並且和FM模型當中的維度也是一樣的,並且這個embedding的初始化也是借用FM當中的二維矩陣V來實現的。我們都知道V是一個d x k的二維矩陣,而模型原始輸入是一個d維的01向量,那麼和V相乘了之後,自然就轉化成了d x k的embedding了。
這裡要注意的一點是,在一些其他DNN做CTR預估的論文當中,會使用預訓練的FM模型來進行Deep部分的向量初始化。但這裡的做法略有不同,它不是使用訓練好的FM來進行初始化,而是和FM模型的部分共享同樣的V。這樣做會有兩個非常重要的好處:
它可以同時學習到低維以及高維的特徵交叉資訊,預訓練的FM來進行向量初始化得到的embedding當中可能只包含了二維交叉的資訊。 這樣可以避免像是Wide & Deep那樣多餘的特徵工程。
實驗結果
資料選擇
我們選擇了兩份資料用來評估DeepFM與其他模型的效能,一份是Criteo資料集,其中包含了4500w使用者的點選資料,由13個連續型特徵以及26個類別特徵組成。我們把90%做成訓練資料,10%做成測試資料。第二份資料是公司內部(華為)的資料,由連續7天使用者在華為app store遊戲中心的點選資料組成訓練資料(約10億條),1天的資料作為測試資料。
評估指標
我們主要評估模型的指標有兩個,一個是AUC另一個是Logloss(交叉熵)。從這個評估指標上來看是比較中肯的,沒有像有一些paper當中自己定義一種新的評估指標。
模型選擇
一共選擇了LR、FM、FNN、PNN、Wide & Deep以及DeepFM這7個模型來一起進行比較。對於Wide & Deep模型來說,為了消除特徵預處理的影響,我們把Wide & Deep模型當中的LR部分換成了FM部分,為了避免歧義,我們把替換之後的模型稱為FM & DNN,替換之前的稱為LR & DNN。
表現評估
效能比較
深度學習模型的效能非常重要,因為深度學習模型的複雜度很大,非常吃計算資源。我們採用如下的公式比較了各個模型的計算效率:。也就是以LR模型的訓練時間為基準來進行比較。
最終的結果如下圖所示,其中左側的部分是在CPU上的表現,右側部分是GPU上的表現。
基本上DeepFM模型在CPU和GPU上都是效能最佳。
預測結果
我們常規使用AUC來評估CTR預估場景下模型的準確性,我們也整理出了一個結果,如下圖所示:
從上圖我們一樣可以看得出來,無論是在AUC上還是LogLoss上,DeepFM模型都是這幾個模型當中最好的。從我瞭解到的實際情況來看,雖然DeepFM已經是4年前的提出的模型了,但是至今仍然還有非常多的公司還在使用它。所以如果有興趣從事推薦領域的研究和工作的話,對這個模型的瞭解也是必不可少的。
今天的文章就到這裡,衷心祝願大家每天都有所收穫。如果還喜歡今天的內容的話,請來一個三連支援吧~(點贊、關注、轉發)