高 巍, 張奧南, 李大舟, 王淮中
(沈陽化工大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院, 遼寧 沈陽 110142)
隨著互聯(lián)網(wǎng)技術(shù)與應(yīng)用的飛速發(fā)展,人類開始步入大數(shù)據(jù)時代,面對越來越繁雜的數(shù)據(jù)量,如何搭建準(zhǔn)確率高的點(diǎn)擊概率預(yù)估模型從而篩選數(shù)據(jù)成為網(wǎng)絡(luò)服務(wù)提供商以及互聯(lián)網(wǎng)用戶的共同難題.點(diǎn)擊概率主要從用戶的行為分析包括點(diǎn)擊、瀏覽、收藏等操作來反映用戶的興趣與需求,搭建一個準(zhǔn)確率高的點(diǎn)擊概率預(yù)估模型,極大地提升在線廣告、營銷、商品推薦等效果.當(dāng)前工業(yè)上使用的基于點(diǎn)擊概率預(yù)估模型需要對用戶-商品的行為數(shù)據(jù)進(jìn)行處理,在用戶-商品的行為數(shù)據(jù)中提取出大量的特征,這些特征就能夠反映出用戶是否會喜歡某一件商品.目前的點(diǎn)擊概率預(yù)估模型不僅要考慮用戶-商品數(shù)據(jù)中的特征對推薦結(jié)果的影響,還要考慮到兩個特征之間的組合,或者多個特征之間的組合對最終結(jié)果產(chǎn)生的影響,因此大量基于特征工程的點(diǎn)擊概率模型相繼誕生.
2010年之前在推薦系統(tǒng)中應(yīng)用點(diǎn)擊概率預(yù)估模型都是線性模型,例如LR模型、FTRL[1]模型,這類線性模型采用梯度下降[2]的方法提取數(shù)據(jù)中的線性關(guān)系,由于其簡單、易于并行化實(shí)現(xiàn)、可解釋性強(qiáng)等優(yōu)點(diǎn)而被廣泛使用.然而,由于線性模型本身的局限不能處理特征和目標(biāo)之間的非線性關(guān)系,因此模型效果嚴(yán)重依賴于算法工程師的特征工程經(jīng)驗(yàn).為使模型能夠自動學(xué)習(xí)到原始特征之間的關(guān)系,于2010年因子分解機(jī)(FM)系列算法相繼誕生,從剛開始的FM算法[3]提出了將特征進(jìn)行兩兩組合以達(dá)到自動學(xué)習(xí)特征之間關(guān)系的目的,到之后延進(jìn)化的FFM算法[4]將相同性質(zhì)的特征歸結(jié)于同一個類別,提出隱向量概念,進(jìn)一步提高了模型對數(shù)據(jù)中特征之間組合的效率.2015年,為了能夠同時學(xué)習(xí)出高階特征與低階特征之間的組合,點(diǎn)擊概率預(yù)估模型進(jìn)入了深度學(xué)習(xí)的時代,一大批將線性模型與深度神經(jīng)網(wǎng)絡(luò)相結(jié)合的模型誕生.比較著名的有Wide and Deep[5]、DeepFM算法[6],這類模型是將線性模型與DNN模型進(jìn)行組合的模型.Google發(fā)表的論文Deep Neural Networks for YouTube Recommendations[7]介紹了推薦系統(tǒng)中比較經(jīng)典的兩層結(jié)構(gòu):召回和排序.同樣是利用DNN對數(shù)據(jù)進(jìn)行訓(xùn)練達(dá)到產(chǎn)生候選集和排序的效果.FNN[8]、PNN[9]、GBDT[10-11]利用神經(jīng)網(wǎng)絡(luò)對非線性特征擬合能力較強(qiáng)的優(yōu)點(diǎn)將神經(jīng)網(wǎng)絡(luò)應(yīng)用在點(diǎn)擊概率預(yù)估模型中.筆者對當(dāng)前比較流行的點(diǎn)擊概率預(yù)估模型進(jìn)行研究總結(jié),并提出了因子交互全連接網(wǎng)絡(luò)模型,以達(dá)到增加推薦結(jié)果準(zhǔn)確率的效果.
對當(dāng)前比較主流的點(diǎn)擊概率預(yù)估模型進(jìn)行分析,提出并搭建一種因子交互全連接網(wǎng)絡(luò)模型,整體構(gòu)架如圖1所示.首先加入壓縮交互網(wǎng)絡(luò)(CIN)模型[12],并將其與因子分解機(jī)(FM)模型和深度神經(jīng)網(wǎng)絡(luò)(DNN)模型進(jìn)行組合.3個部分共享相同的輸入.因子分解機(jī)部分負(fù)責(zé)解決數(shù)據(jù)經(jīng)過獨(dú)熱編碼后稀疏的問題并提取數(shù)據(jù)中的低階數(shù)據(jù)進(jìn)行組合;深度神經(jīng)網(wǎng)絡(luò)部分負(fù)責(zé)提取和組合數(shù)據(jù)中的高階特征;壓縮交互網(wǎng)絡(luò)負(fù)責(zé)顯性地對數(shù)據(jù)中的特征進(jìn)行組合,在向量級上進(jìn)行計算,使過程變得可見和可控.
模型中提到的高階特征、低階特征即為數(shù)據(jù)中原始特征的組合.將數(shù)據(jù)中的特征分別組成維度為1×10的特征矩陣,然后將特征矩陣進(jìn)行兩兩組合計算兩個特征之間的相關(guān)性即為低階特征;將多個特征矩陣進(jìn)行組合計算得到的即為高階特征.
筆者將嵌入層處理后的維度為1×10的特征矩陣記為X矩陣,數(shù)據(jù)集中包含多個特征向量(例如每個用戶對應(yīng)的ID、每個物品對應(yīng)的ID等),每個特征向量對應(yīng)一個索引值.進(jìn)行特征向量處理分類后會有39個類別的特征矩陣X,分別記為X0,X1,X2,…,XK,將這些特征矩陣分別帶入模型的每個模塊中.
模型首先將數(shù)據(jù)進(jìn)行獨(dú)熱編碼然后分別輸入到FM、CIN、DNN模塊中,其中FM算法可以利用矩陣分解的原理將稀疏的數(shù)據(jù)轉(zhuǎn)化為稠密數(shù)據(jù)進(jìn)行訓(xùn)練,訓(xùn)練后得到FM算法的輸出為一個變量.CIN、DNN模塊則需要將經(jīng)過獨(dú)熱編碼后的稀疏數(shù)據(jù)先輸入到嵌入層進(jìn)行降維變成稠密數(shù)據(jù),然后再將得到的特征向量輸入到模塊中進(jìn)行訓(xùn)練.最終將3個模塊得到的結(jié)果進(jìn)行累加,然后通過Sigmoid函數(shù)得到模型的最終結(jié)果.
圖1 因子交互全連接網(wǎng)絡(luò)結(jié)構(gòu)
在點(diǎn)擊概率預(yù)估模型領(lǐng)域中要提取的數(shù)據(jù)的特征一般都?xì)w屬于多個類別的離散數(shù)據(jù).對這些離散數(shù)據(jù)進(jìn)行獨(dú)熱編碼,將他們變成特征矩陣.然而用于點(diǎn)擊率預(yù)估的每個類別中都會有空缺部分,如某個用戶對體育類的商品不感興趣并且從未點(diǎn)擊過這類廣告,那么在數(shù)據(jù)中關(guān)于他的體育類別的數(shù)據(jù)就會是缺失的,這類數(shù)據(jù)經(jīng)過獨(dú)熱編碼后就會造成數(shù)據(jù)稀疏問題,如果將稀疏的特征矩陣進(jìn)行組合就會造成維度爆炸.為了解決這類問題,筆者在模型中加入嵌入層(embedding)使數(shù)據(jù)變得低維且稠密.
嵌入層的主要功能是將輸入的稀疏向量壓縮為低維稠密向量.在點(diǎn)擊率預(yù)估模型領(lǐng)域,輸入一般都是基于用戶的行為數(shù)據(jù)集,與圖像或者語音類輸入不同,圖像、語音的輸入一般是連續(xù)而且密集的,而用于點(diǎn)擊概率預(yù)估的輸入一般無法達(dá)到每個用戶對每一個類別都有過點(diǎn)擊行為,所以數(shù)據(jù)一般都是稀疏的,因此要加入嵌入層.其原理類似于兩個矩陣相乘,類別矩陣的維度為1×n(n為數(shù)據(jù)中的特征數(shù)量),嵌入層中的權(quán)重矩陣為n×k(k為設(shè)定的嵌入層尺寸),相乘得到嵌入層輸出的特征矩陣為1×k.盡管不同類別(field)的輸入長度不同,但是經(jīng)過嵌入層之后向量的長度均為k.
筆者采用的神經(jīng)網(wǎng)絡(luò)為多層前饋神經(jīng)網(wǎng)絡(luò),是一種最簡單的神經(jīng)網(wǎng)絡(luò),如圖2所示,各神經(jīng)元分層排列.每個神經(jīng)元只與前一層的神經(jīng)元相連,接收前一層的輸出,并輸出給下一層.
圖2 多層前饋神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
將嵌入層處理后的特征向量X0,X1,X2,…,XK輸入到神經(jīng)網(wǎng)絡(luò)中, 由于經(jīng)過網(wǎng)絡(luò)多層的組合,最終可以實(shí)現(xiàn)對多個特征進(jìn)行組合的效果,即提取數(shù)據(jù)中的高階特征.但是,特征交互是發(fā)生在特征向量中每個元素上的,而不是對整個特征向量進(jìn)行計算,這一點(diǎn)違背了因子分解機(jī)的初衷.因此,筆者在模型中加入了CIN模塊以解決這個問題.
為了實(shí)現(xiàn)自動學(xué)習(xí)顯式的高階特征交互,并使交互發(fā)生在向量級上,在模型中加入壓縮交互網(wǎng)絡(luò)模型.在該模型中,隱向量是一個單元對象,因此將輸入的原始特征和神經(jīng)網(wǎng)絡(luò)中的隱層都分別組成一個矩陣,記為X0和XK.壓縮交互網(wǎng)絡(luò)中每一層的神經(jīng)元都是根據(jù)前一層的隱層以及原特征向量計算而來,其計算公式為
(1)
在CIN中,第k層隱層含有Hk條神經(jīng)元向量.隱層的計算可以分成兩個步驟:根據(jù)前一層隱層的狀態(tài)XK和原特征矩陣X0,計算出一個中間結(jié)果Zk+1,它是一個三維的張量,如圖3所示.
圖3 壓縮交互網(wǎng)絡(luò)結(jié)構(gòu)
在中間結(jié)果Zk+1上,用Hk+1個尺寸為m×Hk的卷積核生成下一層隱層的狀態(tài).這一操作與計算機(jī)視覺中最流行的卷積神經(jīng)網(wǎng)絡(luò)大體一致,唯一的區(qū)別在于卷積核的設(shè)計.壓縮交互網(wǎng)絡(luò)中一個神經(jīng)元相關(guān)的接受域是兩個矩陣組合之后形成的若干個平面,而CNN中的接受域是當(dāng)前神經(jīng)元周圍的局部小范圍區(qū)域,因此壓縮交互網(wǎng)絡(luò)中經(jīng)過卷積操作得到的特征圖是一個向量,即特征交互之后的特征向量,而不是一個矩陣,達(dá)到了顯式學(xué)習(xí)特征交互的目的.
CIN的特點(diǎn)是最終學(xué)習(xí)出的特征交互階數(shù)由網(wǎng)絡(luò)層數(shù)決定,每一層隱層都通過一個池化操作連接到輸出層,從而保證輸出單元可以見到不同階數(shù)的特征交互模式.最終原數(shù)據(jù)集中的特征輸入到CIN模塊中進(jìn)行顯性的特征交互,使計算發(fā)生在向量級上,即最終得到的結(jié)果是向量形式,從而解決了點(diǎn)擊概率預(yù)估模型中無法顯性組合特征的難題.
FM算法首先將數(shù)據(jù)分為若干個類別(field),每個類別中包含若干個特征,FM算法負(fù)責(zé)對這些特征進(jìn)行兩兩組合,最終計算出特征之間的相關(guān)性.為了解決輸入的數(shù)據(jù)經(jīng)過獨(dú)熱編碼后會變得高維且稀疏的問題,FM算法提出了隱向量的概念,即對模型的參數(shù)矩陣進(jìn)行矩陣分解,得到低維稠密特征向量.
(2)
式中:xi、xj分別代表第i和第j個特征(本實(shí)驗(yàn)中為1×10的特征矩陣),Vi、Vj即為特征i、j的隱向量.具體計算方式采用矩陣分解的原理進(jìn)行計算,將經(jīng)過獨(dú)熱編碼后稀疏的特征向量進(jìn)行交互得到一個特征矩陣,再將得到的特征矩陣進(jìn)行分解,得到稠密的特征向量,其原理與算法中的嵌入層功能一致,在最終的算法中加入FM算法是為了自動、顯式地提取組合數(shù)據(jù)中的低階特征.由公式(2)可以看出:FM算法能夠進(jìn)行特征之間的兩兩交互,也就是只能提取數(shù)據(jù)中的低階特征,但事實(shí)證明數(shù)據(jù)中的高階和低階特征對最終的結(jié)果都會有影響,比如一個用戶可能會點(diǎn)擊的廣告包含多個類別,所以筆者在模型中加入了神經(jīng)網(wǎng)絡(luò)模塊用來組合數(shù)據(jù)中的高階特征.
筆者采用淘寶廣告展示數(shù)據(jù)集進(jìn)行訓(xùn)練,該數(shù)據(jù)集是在淘寶網(wǎng)站中隨機(jī)抽樣114萬用戶8 d內(nèi)的廣告展示/點(diǎn)擊日志(2600萬條記錄)構(gòu)成原始的樣本數(shù)據(jù).數(shù)據(jù)中包含用戶ID、廣告ID、時間、廣告展示的位置、行為類型和品牌ID等特征類別.
樣本數(shù)據(jù)經(jīng)過處理后得到4個文件:廣告點(diǎn)擊的樣本數(shù)據(jù) raw_sample.csv(用戶對不同位置廣告點(diǎn)擊、沒點(diǎn)擊的情況);廣告基本信息數(shù)據(jù)ad_feature.csv[每個廣告的類目(ID)、品牌(ID)、價格特征];用戶基本信息數(shù)據(jù) user_profile.csv(用戶群組、性別、年齡、消費(fèi)購物檔次、所在城市級別等特征);用戶行為日志數(shù)據(jù) behavior_log.csv[用戶對商品類目(ID)、品牌(ID)的瀏覽、加購物車、收藏、購買等信息].將這些數(shù)據(jù)分別組成訓(xùn)練集和測試集,分別帶入到模型中進(jìn)行訓(xùn)練并分析實(shí)驗(yàn)結(jié)果.
實(shí)驗(yàn)使用Window系統(tǒng),采用NVIDIA GTX 1060 顯卡.筆者提出的模型使用TensorFlow框架搭建,如圖4、圖5所示.
圖4 AUC、Logloss與網(wǎng)絡(luò)深度關(guān)系
圖5 AUC、Logloss與隱含層節(jié)點(diǎn)數(shù)關(guān)系
由圖4、圖5可以看出:當(dāng)筆者所提模型的網(wǎng)絡(luò)深度為3時,得到的AUC值最高、Logloss值最低;當(dāng)選擇的隱含層節(jié)點(diǎn)數(shù)量為200時,模型得到的AUC值最高、Logloss值最小.因此,模型選擇3層結(jié)構(gòu),分別為輸入層、隱含層和輸出層;隱含層的節(jié)點(diǎn)設(shè)置為200個.為了簡化實(shí)驗(yàn)配置,定義所有模型的特征嵌入維度統(tǒng)一固定為10.
實(shí)驗(yàn)采用曲線下面積(AUC)和對數(shù)損失函數(shù)(Logloss)指標(biāo)作為模型的評估指標(biāo).
點(diǎn)擊概率預(yù)估模型的本質(zhì)就是二分類問題,即預(yù)測某一用戶對某一物品的點(diǎn)擊概率.當(dāng)預(yù)測的結(jié)果表明用戶接下來的行為后,利用AUC來對比預(yù)測的行為與測試集中原始特征是否一致.最終得到原始特征之間的相關(guān)性即是用戶對物品的點(diǎn)擊概率.
(2) Logloss的公式為
(3)
式中:n是測試樣本個數(shù);yi為輸入實(shí)例xi的真實(shí)類別;pi為預(yù)測輸入實(shí)例xi屬于類別1的概率.對所有樣本的對數(shù)損失表示對每個樣本的對數(shù)損失的平均值.Logloss的結(jié)果越低越好.
對提出的因子交互全連接網(wǎng)絡(luò)模型(FDC)進(jìn)行訓(xùn)練并將其與LR、DNN、PNN等模型進(jìn)行對比,實(shí)驗(yàn)結(jié)果見表1.
表1 實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)選取了當(dāng)前工業(yè)上比較常用的6種模型分別進(jìn)行訓(xùn)練,將得到的結(jié)果與筆者提出的因子交互全連接網(wǎng)絡(luò)點(diǎn)擊概率預(yù)估模型訓(xùn)練結(jié)果進(jìn)行對比,結(jié)果如圖6所示.由圖6可以看出:因子交互全連接網(wǎng)絡(luò)與其他點(diǎn)擊概率預(yù)估模型對比AUC值均有提升,Logloss均有降低;因子交互全連接網(wǎng)絡(luò)(FDC)模型的AUC值比原始的線性(LR)模型AUC值提高了近0.05,與采用線性模型與神經(jīng)網(wǎng)絡(luò)模型結(jié)合的模型(FM)對比AUC值提高了0.01左右,Logloss值與其對比分別降低了0.04以及0.01左右.由此可以說明筆者設(shè)計并實(shí)現(xiàn)的點(diǎn)擊概率預(yù)估模型(FDC)在工業(yè)與學(xué)術(shù)中均有較好的實(shí)際意義.
圖6 不同點(diǎn)擊概率預(yù)估模型的實(shí)驗(yàn)結(jié)果
筆者提出了一種基于因子分解機(jī)(FM)、深度神經(jīng)網(wǎng)絡(luò)(DNN)與壓縮交互網(wǎng)絡(luò)(CIN)結(jié)合的因子交互全連接網(wǎng)絡(luò)(FDC),并將因子交互全連接網(wǎng)絡(luò)與工業(yè)上應(yīng)用較廣的6種模型進(jìn)行對比.通過對比發(fā)現(xiàn)因子交互全連接網(wǎng)絡(luò)的準(zhǔn)確率最高、效果最好.因子交互全連接網(wǎng)絡(luò)既能同時自動地對數(shù)據(jù)中高階和低階的特征進(jìn)行提取和組合,又能同時以顯性和隱性兩種方式進(jìn)行高階特征交互的功能,使交互發(fā)生在向量級上.解決了推薦系統(tǒng)中的多種難題,如人工提取特征費(fèi)時費(fèi)力、獨(dú)熱編碼后數(shù)據(jù)稀疏、不能同時提取數(shù)據(jù)中的高低階特征、無法顯示的組合特征,等等.該算法的提出可以提高推薦系統(tǒng)對用戶推薦信息的準(zhǔn)確率,提升用戶體驗(yàn),對從業(yè)人員的工作效率也有一定的提升.