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