陳 彬,張榮梅,張 琦
河北經(jīng)貿大學 信息技術學院,石家莊050061
隨著大數(shù)據(jù)時代的來臨,數(shù)字資源呈爆炸式的增長,人們捕獲信息的深度、廣度和頻度也都獲得極大的提升,這在豐富人們生活的同時,也帶來了信息如何高效匹配和選擇困難等諸多問題。于是,推動了智能推薦技術的發(fā)展和熱潮。推薦系統(tǒng)旨在從海量、異構的數(shù)據(jù)資源中,快速聚焦和鎖定滿足用戶需求的信息,并推薦給用戶。
傳統(tǒng)的推薦模型主要是基于內容的推薦、基于協(xié)同過濾的推薦以及兩者混合的推薦[1]。但這些推薦算法模型大多都僅是對用戶-商品評級矩陣進行了分析計算,沒有參考用戶屬性和商品屬性,致使推薦精度和準確率不能進一步提升[2]。且傳統(tǒng)算法存在數(shù)據(jù)稀疏[3]的弊端,即指在龐大的用戶量和商品量下,實際存在的用戶-商品交易數(shù)據(jù)卻少之又少的情況,這也是制約傳統(tǒng)推薦算法效果的一大難題。此后學者們將用戶和商品屬性特征考慮在內,并引入深度學習[4],提出了一些推薦模型:饒健[5]提出了使用基于因子分解機的推薦模型,在MovieLens 數(shù)據(jù)集上將其與傳統(tǒng)推薦模型進行了實驗對比,得出加入隱因子特征可以有效提高模型精準度的結論;郁豹等人[6]提出使用DeepFM 模型來實現(xiàn)社交廣告的個性化推薦;吳磊等人[7]提出使用DCN模型來改進金融產品商城中商品的分類。這些模型在推薦領域都取得了不錯的效果。但基于深度學習的推薦模型研究還很有限,存在很大的研究空間。
為了進一步挖掘用戶與交易項目間的特征組合,本文提出了一種基于深度神經(jīng)網(wǎng)絡(Deep Neural Network,DNN)、深度交叉網(wǎng)絡(Deep Cross Network,DCN)以及因子分解機(Factorization Machine,F(xiàn)M)的混合推薦模型——DCFM。DCFM模型將用戶、商品屬性特征分別以低階特征、線性交叉特征和非線性高階特征三方面進行分析,充分挖掘屬性特征間的內在隱性關聯(lián)關系,以提高推薦的準確性。
推薦系統(tǒng)的一大問題就是數(shù)據(jù)稀疏性問題,這導致推薦算法的訓練數(shù)據(jù)有限,模型訓練效果不好,從而使得推薦結果不理想[8]。FM的作用就是解決數(shù)據(jù)稀疏的情況下,特征如何組合。
普通的線性模型[9]僅僅是將各個特征獨立加權求和,忽略了特征與特征之間潛在的深層關系,比如性別特征為“男”的用戶,更傾向于“啤酒”和“香煙”這類產品,這就說明用戶的某些屬性特征與商品的某些屬性特征之間存在關聯(lián)性。所以FM 模型在線性回歸模型的基礎上加入了特征分量間的關聯(lián)計算,以二階多項式為例,F(xiàn)M模型的表達式為:
其中,ω0表示常數(shù)偏置,n表示樣本的特征數(shù)量。
在數(shù)據(jù)稀疏的情況下,xi或xj為0的可能性很大,所以很難訓練得到ωij,于是引入輔助向量vi=(vi1,vi2,…,vik)來表示特征xi,如下所示:
所以FM模型的二次項的計算過程如下:
DeepFM 模型[10]是一種并行結構的融合網(wǎng)絡,由兩部分組成:因子分解機(FM)部分和深度神經(jīng)網(wǎng)絡(DNN)部分。它是對FM 模型的改進,在理論上,特征間的相互作用可包括無限高階的可能性,但由于計算復雜度隨組合特征階數(shù)的升高而加大,所以常常只將組合特征提取到二階就不再繼續(xù),而高階部分由深度神經(jīng)網(wǎng)絡DNN訓練提取。
在DeepFM模型中,兩個并行結構FM和DNN共享同樣的輸入,并將各部分的輸出結果線性拼接后,作為整個模型的輸出層。該模型的預測結果可以表示為:
DCN模型是由交叉網(wǎng)絡(Cross Network)和一個深度神經(jīng)網(wǎng)絡(DNN)并行組成。其結構和DeepFM 模型類似,都是從嵌入層處理開始,兩部分共享相同輸入,并將兩部分結果組合作為整體模型的輸出層:
與DeepFM不同的是,DCN模型將離散特征和連續(xù)特征分開考慮,將離散特征進行編碼和嵌入處理后再與連續(xù)特征拼接組合。DCN模型可以有效提取有限度的特征相互作用,學習高階非線性特征相互關聯(lián)。它彌補了FM淺層結構的限制問題,并將參數(shù)共享機制從一層擴展到多層。
本文提出了一種基于深度神經(jīng)網(wǎng)絡、深度交叉網(wǎng)絡以及因子分解機的多特征深度網(wǎng)絡推薦模型:DCFM。該模型主要由DNN、Cross Network 和FM 三部分并行組成。如圖1所示。
首先是輸入層,該模型以用戶屬性、項目屬性特征做為輸入,經(jīng)one-hot處理為稀疏特征向量,再由嵌入層做向量內積計算為稠密特征向量x0,然后主體部分由DNN、Cross Network和FM 三部分并行組成,從低階交互、組合交互和非線性高階交互三個角度分別處理輸入特征,最后等權重線性加權各部分特征結果作為輸出特征,輸出特征再進行一層全連接和激活函數(shù)作用后,作為模型整體的輸出層。
圖1 DCFM模型
DCFM模型借鑒了輸入共享原則,各部分對同一嵌入數(shù)據(jù)進行關系挖掘,使輸出具有關聯(lián)性和可連接性,這樣才能對結果進行線性組合。在輸入層,首先是將用戶屬性特征和商品屬性特征以用戶ID和商品ID為聯(lián)合主鍵拼接,作為輸入特征。然后通過全編碼嵌入處理作為輸入,即是對所有輸入特征數(shù)據(jù)進行編碼處理,后再嵌入為稠密特征向量:
輸入處理過程如圖2所示。
由于用戶和商品的屬性信息中包含大量離散數(shù)據(jù),所以要先對輸入數(shù)據(jù)進行one-hot 編碼處理[11]。one-hot編碼是將原某類型屬性按照其種類進行編碼,編碼結果是只有一位為有效值1,其余位都是0。當某一屬性包含多種類別,則按照類別總數(shù)S構建長度為S的編碼串,并由先后出現(xiàn)順序為其置“1”編碼。例如在MovieLens-100K 數(shù)據(jù)集中共出現(xiàn)有21 種職業(yè)類型,則數(shù)據(jù)集中最先出現(xiàn)的“technician”職業(yè)的one-hot 編碼為[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1],第二出現(xiàn)的“writer”職業(yè)的one-hot 編碼為[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0],以此類推。對于性別這類的二值屬性,直接用[0]表示“女”,用[1]表示“男”即可。而連續(xù)屬性特征,如用戶年齡,就直接取原值。圖2 中的每一組“field”就表示一項屬性信息,由于每種屬性的種類數(shù)不同,所以每組“field”的長度也不相同。
圖2 輸入處理
這些“field”是one-hot編碼得來的,有用數(shù)據(jù)非常稀疏,所以又要經(jīng)過一層嵌入層(embedding)作用。嵌入層可以看做是一個全連接層,其中K表示預設的嵌入向量長度。嵌入層的作用有兩點:(1)將稀疏數(shù)據(jù)轉換為稠密數(shù)據(jù);(2)重新確定了每一組“field”的長度,將其歸一到統(tǒng)一長度K[12]。由于每一組“field”中只有一個值為1,所以經(jīng)由嵌入層計算后,每組“field”對應的embedding向量值就是值為1的節(jié)點所對應的權重值。
FM 負責提取輸入數(shù)據(jù)的低階特征。其模型如1.1節(jié)介紹。
Cross Network負責提取線性交叉組合特征。交叉網(wǎng)絡充分考慮了各個特征間的交叉作用,原始輸入層數(shù)據(jù)在每一層都和當前層數(shù)據(jù)交叉作用,既保留了原始數(shù)據(jù)的低階特征,又交叉作用于深層的高階特征。交叉層計算結構如圖3所示。
圖3 交叉層結構
其每一層的計算公式如下:
交叉網(wǎng)絡的特殊結構使交叉特征的程度隨著層深度的增加而增大,用L表示交叉層數(shù),D表示輸入數(shù)據(jù)的維度,則整個交叉網(wǎng)絡的參數(shù)量為D×L×2(“2”是因為參數(shù)w和b)。由于交叉網(wǎng)絡層與層之間是線性計算模型,會限制模型的效果,所以在DCFM 模型中又引入與之并行的深度網(wǎng)絡。
DNN負責提取非線性高階特征。該部分是一個全連接的多層前饋神經(jīng)網(wǎng)絡,其結構是一種非線性映射,能夠通過簡單非線性處理單元的復合映射,獲得復雜的非線性處理能力。與Cross網(wǎng)絡不同的是,DNN每個隱層的節(jié)點數(shù)不一定相同,隱層的計算公式為:
DCFM 模型的輸出由各部分的輸出層線性加權組合而成,其公式可以表示為:
實驗所用模型是等權重加權。拼接結果再經(jīng)由一個全連接層計算,并在激活函數(shù)作用后,作為輸出結果。該模型從低階特征、交叉組合特征、高階非線性特征三個角度充分挖掘輸入屬性特征間的內在交互關系,實現(xiàn)了有限數(shù)據(jù)的增廣訓練,有效緩解了傳統(tǒng)推薦算法由于數(shù)據(jù)稀疏帶來的推薦效果不明顯的問題。
實驗選取了MovieLens電影公開數(shù)據(jù)集中的一組:MovieLens-100K。
MovieLens 數(shù)據(jù)集是由明尼蘇達大學的Grouplens研究項目收集整理。數(shù)據(jù)集獲取地址:http://files.grouplens.org/datasets/movielens/。MovieLens-100K 數(shù) 據(jù) 集包含943名用戶對1 682部電影的100 000條評分記錄,評分采用5分制(1、2、3、4、5)。該數(shù)據(jù)集主要包含三個文件:用戶數(shù)據(jù)文件(u.user)、項目數(shù)據(jù)文件(u.item)和評分文件(u.data),其中u.user包含用戶的人口統(tǒng)計信息,字段有:用戶標識(user id)、年齡(age)、性別(gender)、職業(yè)(occupation)和郵編(zip code);u.item 包含電影項目的信息,字段有:電影標識(movie id)、電影標題(movie title)、上映日期(release date)、視頻發(fā)布日期(video release date)、數(shù)據(jù)源鏈接(IMDb URL)和類別屬性(genres);u.data包含完整的評級數(shù)據(jù),字段有:用戶標識(user id)、項目標識(item id)、評分(rating)和時間戳(timestamp)。
實驗是Windows7 操作系統(tǒng)下,Intel Core i5-4590處理器,8 GB內存,軟件平臺是Pycharm2017.3.3專業(yè)版,Python3 編程語言,深度學習計算框架采用tensorflow 1.8.0(import tensorflow as tf)。
本文采用多種評估標準來檢驗模型效果。
(1)分別使用交叉熵和均方根誤差RMSE作為損失函數(shù),用于評估推薦模型在算法計算上的誤差值,交叉熵計算公式如下所示:
RMSE計算公式如下所示:
其中,y表示預測結果,表示真實值。
(2)通過混淆矩陣[13]計算精確度(Precision)和召回率(Recall),可用于評估推薦模型在推薦效果上的優(yōu)劣程度。涉及到的參數(shù)和計算方法如下。
TP(True Positive):將正類預測為正類;
TN(True Negative):將負類預測為負類;
FP(False Positive):將負類預測為正類,也稱為誤報;
FN(False Negative):將正類預測為負類,也稱為漏報。
其中,召回率(Recall)和精確度(Precision)的計算公式為:
但是召回率和精確度都有所側重,不能兼顧。所以采用準確率(Accuracy,Acc)和F1-Score 值[14]用于綜合度量模型的效果,計算公式如下:
(3)AUC[15]值,是從樣本概率的角度評估推薦結果的優(yōu)劣,簡單介紹,就是在隨機抽取的一對樣本中(一個正樣本,一個負樣本),用訓練得到的模型來對這兩個樣本進行預測,預測得到正樣本的概率大于負樣本概率的概率。計算如下:
其中,M表示正樣本數(shù),N表示負樣本數(shù),M×N代表總的樣本對數(shù)。
DCFM 的輸入使用到了MovieLens-100K 的全部三個數(shù)據(jù)文件,其預處理和輸入部分過程如下。
(1)首先將用戶屬性數(shù)據(jù)和商品屬性數(shù)據(jù)與評分記錄拼接處理。用戶屬性數(shù)據(jù)以user id字段為主鍵與評分記錄拼接,商品屬性數(shù)據(jù)以item id 字段為主鍵與評分記錄拼接。
(2)對數(shù)據(jù)文件中的屬性字段,處理分為三類:可忽略屬性、離散屬性、連續(xù)屬性。在MovieLens-100K數(shù)據(jù)集中,作者將“user_id”“movie_id”“rating”“unix_timestamp”“movie_title”“release_date”“video_release_date”“IMDb_URL”歸為了可忽略屬性,這些屬性忽略不送入推薦模型,將“age”屬性歸為連續(xù)屬性,剩下其他為離散屬性。(3)共享輸入部分,連續(xù)屬性和離散屬性一并經(jīng)one-hot編碼,再嵌入處理得到稠密特征向量,嵌入向量embedding_size長度設置為8。實驗中使用函數(shù)實現(xiàn)編碼和嵌入操作。
此外,根據(jù)“rating”字段,為記錄增設了一條“target”字段,如下:
目的是為了推薦模型的二分類,“rating”=1,表示用戶對該商品為正向偏好,“rating”=0,表示用戶對該商品為負向偏好。
將預處理好的嵌入向量作為FM、DNN 和Cross Network的輸入特征,在FM中,一次項直接以輸入特征數(shù)量n為準,構造滿足均值為0,標準差為0.01的n行1列正態(tài)分布隨機變量矩陣;二次項部分按照式(4)計算,此處輔助向量就是經(jīng)嵌入處理后的稠密特征向量。DNN中隱層數(shù)量為3,每層32個神經(jīng)元節(jié)點,層與層之間采用全連接形式計算,無激活函數(shù)作用。Cross Network 層數(shù)為3,每層節(jié)點數(shù)=field_size×embedding_size=23×8=184個,同樣是全連接形式。
各部分結果經(jīng)線性加權1∶1∶1形式組合成輸出特征向量,輸出層激活函數(shù)采用tf.nn.relu,輸出層損失函數(shù)采用tf.losses.log_loss。為防止實驗模型訓練過擬合,使用函數(shù)tf.contrib.layers.l2_regularizer。在損失函數(shù)中加入L2 正則化系數(shù),考慮到梯度爆炸導致的權重參數(shù)訓練為NaN 問題,將學習率參數(shù)選取了一個較小值:0.001。實驗每批訓練數(shù)據(jù)大小為1 024,訓練代數(shù)為10。
實驗采用十折交叉驗證,將數(shù)據(jù)集按用戶ID 平均分成10 份,保證每份中都含有所有用戶的數(shù)據(jù)記錄。依次選用其中的9 份作為訓練集,余下的1 份作為測試集,共實驗10輪,最終取結果的平均值作為實驗記錄。
并選取FM、DeepFM 和DCN 作為實驗模型對比。如圖4所示,是4種模型的交叉熵損失函數(shù)圖。
圖4 交叉熵損失函數(shù)對比圖
隨著訓練代數(shù)的增加,損失函數(shù)都呈下降趨勢,效果最好的是DCFM,其次是DeepFM和FM,DCN的效果較差。
如圖5 所示,是4 種模型的均方根誤差RMSE 損失函數(shù)結果對比圖。
圖5 RMSE損失函數(shù)對比圖
由實驗結果可知,隨著迭代數(shù)的增加,RMSE 逐漸下降收斂,DCFM和DCN的效果相近,其次是DeepFM,最差的是FM模型。
綜合評估指標:準確率、F1-Score 和AUC 值的實驗結果如表1所示。
表1 準確率、F1-Score和AUC值對比%
由實驗結果可知,DCFM 模型在準確率(Acc)、F1-Score和AUC值上都有所提高,相較于FM,DCFM的準確率提高了1.16個百分點,F(xiàn)1-Score值提高了0.77個百分點,AUC 提高了0.06 個百分點;相較于DeepFM,DCFM的準確率提高了0.66個百分點,F(xiàn)1-Score值提高了0.42 個百分點,AUC 提高了0.12 個百分點;相較于DCN,DCFM的準確率提高了2.8個百分點,F(xiàn)1-Score值提高了1.8個百分點,AUC提高了0.54個百分點。
由圖4、圖5 和表1 可以看出,DeepFM 模型的低階特征與高階特征組合的模型設計思路能夠有效提升推薦效果,DCFM模型在此基礎上又加入Cross交叉網(wǎng)絡,進一步提取出數(shù)據(jù)間的交叉組合特征,使推薦的綜合性能又有所提高,在各個指標上都優(yōu)于FM、DeepFM、DCN模型效果。
本文針對于智能商品推薦問題,提出了一種基于深度學習的混合推薦模型DCFM,模型由三部分以并行結構組成:因子分解機、深度神經(jīng)網(wǎng)絡和深度交叉網(wǎng)絡,輸入層共享權值,輸出層線性組合各部分結果。模型充分利用用戶屬性、商品屬性,并挖掘其低階特征、交叉組合特征和非線性高階特征用于模型訓練。并且與當下效果較好的模型FM、DCN和DeepFM做了實驗對比,以交叉熵、均方根誤差RMSE分別作為損失函數(shù)和混淆矩陣衍生出的多種評估指標為標準,結果證明DCFM模型的推薦效果更好。
該模型通過挖掘用戶和商品間的內在交互隱特征,有效緩解了數(shù)據(jù)稀疏問題,但由于較依賴歷史交易記錄,在冷啟動問題上還有待進一步優(yōu)化。下一步工作是將傳統(tǒng)算法與深度學習進一步融合,形成多Agent框架結構,以期待解決冷啟動問題。