潘理虎,郝彥杰,周耀輝,龔大立
(1.太原科技大學 計算機科學與技術學院,山西 太原 030024;2.山西省華晉焦煤集團,山西 呂梁 033300;3.精英數(shù)智科技股份有限公司,山西 太原 030024)
伴隨著日益蓬勃發(fā)展的信息產(chǎn)業(yè)技術和信息化管理在企業(yè)中的普及,眾多傳統(tǒng)煤企都從“白紙黑字”式的辦公方式進而轉(zhuǎn)向新型的數(shù)字網(wǎng)絡信息化以提高工作效率。不僅僅在礦井下開采的環(huán)境數(shù)字化、技術手段的智能化及信息網(wǎng)絡的傳輸方面,甚至可以延伸到煤炭銷售領域,在客戶依據(jù)煤炭產(chǎn)品種類、發(fā)熱量、發(fā)售地區(qū)等多種因素綜合考慮后做出購買決策上提供信息化技術的支持,其本質(zhì)是一種基于協(xié)同過濾思想的推薦系統(tǒng)。
針對協(xié)同過濾算法與推薦系統(tǒng)的結(jié)合方面,文獻[1]提出一種基于文本情感分析的推薦算法,將評論文本的相似度計算視為協(xié)同過濾中的部分影響因子,利用LDA主題模型分析用戶在物品各個屬性面中的偏好以計算用戶間的相似度,從而構建較為新穎的推薦模型。文獻[2]為解決新聞、音樂、電影、餐飲等領域內(nèi)的用戶群推薦問題,比較模型融合與推薦融合的優(yōu)缺點,得出了用戶群偏好與個體用戶偏好間具有相似性的結(jié)論,是一種效果顯著的基于模型的協(xié)同過濾推薦算法。文獻[3]結(jié)合信任用戶間兩種評分方式提出一種融合建模的概率矩陣分解模型,對用戶內(nèi)在影響因子做出了分類和量化,實現(xiàn)了聚類算法與推薦系統(tǒng)的有機融合。文獻[4]利用文本數(shù)據(jù)提取物品的隱性特征,在推薦系統(tǒng)與深度學習算法結(jié)合的基礎上構建一種變分矩陣分解推薦模型,以處理物品輔助信息的方式,盡可能地彌補了用戶對物品評分信息缺失的問題。傳統(tǒng)協(xié)同過濾算法會因其用戶數(shù)量和產(chǎn)品數(shù)量急劇增大時,用戶不可能對所有產(chǎn)品均提供評分的必然性導致其評分矩陣稀疏,且當新用戶加入體系時,因得不到其興趣偏好導致的冷啟動問題都會使得基于協(xié)同過濾的推薦算法近鄰計算結(jié)果不準確,推薦質(zhì)量差[5-7]。這些研究都從用戶之間、產(chǎn)品之間的相似性入手,僅僅把用戶對產(chǎn)品的評分作為相似度計算的唯一指標,然而一種煤炭產(chǎn)品可能具有多種特征,用戶屬性基因也不應僅僅捕捉用戶本身的特性,還應與其對煤炭產(chǎn)品偏好具備一定的相關影響,因此傳統(tǒng)協(xié)同過濾算法在實際的推薦過程中因矩陣數(shù)據(jù)稀疏、系統(tǒng)的冷啟動問題等效果較差。
針對以上問題,該文提出一種基于煤炭產(chǎn)品的多特性因素綜合評價的協(xié)同過濾算法[8-10]。綜合考慮將煤炭產(chǎn)品的種類、發(fā)熱量、銷售地區(qū)作為煤炭產(chǎn)品特征,用戶的公司、規(guī)模和地區(qū)相結(jié)合以概括用戶的特征,在此基礎上定義一種新的煤炭產(chǎn)品推薦方式,改善了以往算法中因用戶評判標準過于單一和數(shù)據(jù)矩陣稀疏導致的相似偶然性問題,提高了推薦精度。
TCRM模型主要包括數(shù)據(jù)的預處理模塊、神經(jīng)網(wǎng)絡設計模塊、訓練模塊、用戶對煤炭產(chǎn)品評分部分及推薦部分。數(shù)據(jù)的預處理模塊主要包括格式轉(zhuǎn)換、數(shù)據(jù)清洗及抽取、文本轉(zhuǎn)數(shù)字字典、空白填充四大類,將處理完畢后的數(shù)據(jù)信息按照7∶3的比例分為訓練數(shù)據(jù)和測試數(shù)據(jù);特征提取后直接將訓練數(shù)據(jù)置于模型中按照相關參數(shù)設定進行迭代,其余訓練數(shù)據(jù)用于模型的測試和校正,待模型訓練完成后依據(jù)設定好的評分規(guī)則進行計算,按照相似度大小排列得到相應的推薦列表,完成不同要求前提下的推薦功能[11-13]。整個推薦系統(tǒng)流程如圖1所示。

圖1 推薦系統(tǒng)流程
本實驗所使用的用戶和評分數(shù)據(jù)集是來自企業(yè)內(nèi)收集的6 039條客戶信息表及10 000條購買意向評分表;煤炭產(chǎn)品類數(shù)據(jù)集是經(jīng)過采集整理后得到200種包含煤炭產(chǎn)品ID、煤炭名稱、發(fā)熱量、銷往地區(qū)四個字段。對于煤炭名稱和銷往地區(qū)等諸如“Steam coal”及“Ningbo port”這樣的String字段,需要先把該詞組拆分成各個單詞再將其轉(zhuǎn)換為數(shù)字字典,然后根據(jù)具體單詞種類數(shù)轉(zhuǎn)換為不重復的數(shù)字列表,將其空白部分用
完成數(shù)據(jù)的預處理后,需要從中提取用戶和煤炭產(chǎn)品的特征。對于較為復雜的煤炭產(chǎn)品特征的提取,因其不僅包含數(shù)字字段,還包含文本字段如單詞和詞組,通常的做法是將其轉(zhuǎn)化成one hot編碼,但考慮到其過于稀疏的矩陣形式可能會導致輸入數(shù)據(jù)維度的急劇性膨脹,所以該文引入一種基于文本的卷積神經(jīng)網(wǎng)絡。以獲取煤炭產(chǎn)品名稱字段的特征為例,網(wǎng)絡結(jié)構在第一層將從原始數(shù)據(jù)中的詞字段轉(zhuǎn)換成數(shù)字作為嵌入矩陣的索引,將這些訓練而得到的詞向量以字嵌入的形式插入至一個低維向量中。在第二層利用多個卷積核在前一層的基礎上進行卷積操作,比如設置不同大小的卷積窗口,每次滑動2個,3個,4個或5個單詞。在第三層添加一個max-pooling層,添加dropout正則項,在保留文本主要特征的同時減少參數(shù)以達到提高模型的泛化能力和防止過擬合的作用。通過以上三層結(jié)構的網(wǎng)絡得出煤炭產(chǎn)品名稱的特征。
由于NLP中句子長度不同,所以在CNN神經(jīng)網(wǎng)絡中輸入矩陣的形狀也不相同,T是一個D維長度為M的句子,要從名稱為Yulin Bituminous coal這種煤炭產(chǎn)品中提取出CoalName的特征,首先需將其名稱詞組拆分成Yulin、Bituminous、coal三個單詞,這樣的文本T1:n可以表示為:
T1:n=T1⊕T2⊕…⊕Tn
(1)
其中,⊕表示將單詞拼接成詞組的級聯(lián)操作符,通常將Ti:i+j代表由Ti,Ti+1至Ti+j拼接而成的文本。卷積層在本質(zhì)上作為抽取特征的途徑,設置不同的超參數(shù)會導致特征抽取的結(jié)果不盡相同,對于卷積的移動窗口來講,可以對窗口大小做出合理的假設,如其尺寸為K*D,K代表窗口的大小即每次滑動的單詞數(shù),D等同于嵌入矩陣的維度,通過神經(jīng)網(wǎng)絡中的非線性變換,窗口不斷向后移動,卷積核所對應的特征值不斷產(chǎn)生從而形成特征向量。不同卷積窗口h會導致卷積產(chǎn)生的特征并不完全相同,例如特征Fi是由Ti:i+h-1長度的文本經(jīng)過式(2)變換產(chǎn)生的:
Fi=f(w*Ti:i+h-1+b)
(2)
其中,b是一個等同于卷積核維度的固定大小的常量,f是一個類雙曲線正切的非線性函數(shù),根據(jù)不同卷積窗口大小和不同詞組F={F1,F2,…,Fn-h+1}會產(chǎn)生一個特征集合公式,表示為:
{T1:h,T2:h+1,…,Tn-h+1:n}
(3)
其中,F(xiàn)屬于R:n-h+1。由于卷積核尺寸不同,每個卷積核經(jīng)過卷積操作后產(chǎn)生的張量維度也不同,所以所有卷積層都需要創(chuàng)建一層網(wǎng)絡,最后需把所有卷積之后的結(jié)果及不需要卷積的嵌入字段全連接合并成一個大的特征向量。
在初步了解煤炭產(chǎn)品名稱的前提下,如果存在某一種產(chǎn)品其名稱為Yulin Bituminous coal或者Bituminous Yulin coal的情況,本質(zhì)上兩者代表同樣的煤種,故可應用Max Pooling Over Time下采樣操作在Feature Map抽取到的若干特征中僅保留最顯著的特征即得分最大的值作為pooling層值,而拋棄其他弱特征,這樣做不僅可以保證特征位置及旋轉(zhuǎn)不變性,還可以固定pooling層長度即確定之后輸出結(jié)果進入全連接層的神經(jīng)元個數(shù),以滿足網(wǎng)絡結(jié)構的設計。在dropout層中規(guī)定只允許部分比例的節(jié)點參與學習過程,通過減少神經(jīng)元數(shù)量降低模型復雜度,增強模型泛化能力,防止過擬合。不同卷積核根據(jù)其窗口大小采用不同filter_weight,將卷積操作之后的結(jié)果通過不同的激活函數(shù)進行非線性處理得到輸出值,每個卷積核都將完全覆蓋詞向量的長度,但其每次滑動覆蓋的單詞數(shù)卻是不同的。在單詞上滑動時采取不對邊緣進行填充的窄卷積操作,最后輸出的維度為[1,coal_name_max-window_size,1,1]。對特定卷積的輸出做最大池化操作,得到維度為[batch_size,1,1,filter_num]的特征向量,其中最后一個維度與特征值相對應,將所有來自各個卷積核的輸出向量合并成一個維度為[batch_size,max_num]長的特征向量即為該文本對應的特征向量。
特征提取步驟僅僅是從用戶和煤炭產(chǎn)品的信息中得到相對應的用戶特征和煤炭特征,為衡量用戶對煤炭之間的偏好關系,可以在訓練好的網(wǎng)絡上通過正向傳播得到用戶對煤炭的評分inference概念。inference指用戶對煤炭產(chǎn)品的偏好程度,對于inference的定義方式,該文給出兩種可供考慮的選擇:一種是將來自池化層的用戶特征和煤炭特征向量作為輸入,經(jīng)過全連接做特征加權得到一個分數(shù)最高的類別,其公式表示為:
inference=w(u,c)x+b
(4)
其中,w(u,c)為一個從截斷的正態(tài)分布中輸出的服從具有制定平均值和標準偏差的隨機值,b為一個滿足以上矩陣相加的常量。
評分矩陣生成算法流程:
輸入:需要預測的用戶特征集U1,需要預測的煤炭產(chǎn)品特征集C1。
輸出:TCRM預測評分矩陣T1。
1.forU1i∈{U11,U12,…,U1n}andC1i∈{C11,C12,…,C1n}do:
2.for useri∈U1iand itemi∈C1ido:
3.用式(4)中方法計算用戶對產(chǎn)品的評分
4.end for
5.end for
其中,U1i={user1,user2,…},C1i={item1,item2,…}。
另一種比例特征法是在將用戶特征與電影特征做除法運算的基礎上再乘一個特定的系數(shù)cf,cf為用戶數(shù)量與煤炭產(chǎn)品數(shù)量的比值,這樣做避免了在某些特殊情況下用戶和煤炭產(chǎn)品某一方抽取特征為0的情況,其公式表示為:
(5)
其中,F(xiàn)u表示該用戶的所有特征,F(xiàn)c表示該煤炭產(chǎn)品所包含的所有特征。這樣得出的inference作為用戶對煤炭產(chǎn)品打分的預測值,在數(shù)據(jù)預處理部分將用戶表與評分表及煤炭產(chǎn)品表合并只取出其中的評分列得出的targets作為用戶與煤炭產(chǎn)品對應分數(shù)的真實值。
評分矩陣生成算法流程:
輸入:需要預測的用戶特征集U1,需要預測的煤炭產(chǎn)品特征集C1。
輸出:TCRM預測評分矩陣T1。
1.forU2i∈{U21,U22,…,U2n}andC2i∈{C21,C22,…,C2n}do:
2.for useri∈U2iand itemi∈C2ido:
3.用式(5)中方法計算用戶對產(chǎn)品的評分
4.end for
5.end for
其中,U2i={user1,user2,…},C2i={item1,item2,…}。
損失值是對模型所造成的誤差的度量,以下給出損失計算losses的公式:
(6)
其中,N表示batchsize,targets和inference分別表示實際分數(shù)和經(jīng)過評分計算得到的預測分數(shù),該公式將不斷累加各批次損失直至推薦結(jié)束。由于推薦結(jié)果只能無限接近真實情況,準確率用于訓練階段和測試階段跟蹤模型的性能,以下給出準確率計算的公式:
(7)
其中,N表示batchsize,num_correct表示預測得到inference中分數(shù)等于targets樣本真實評分的個數(shù),num_items表示targets標簽的個數(shù),整個公式可以計算所有批次中預測結(jié)果準確地占所有真實分數(shù)情況的比例。
協(xié)同過濾是近年來一種信息系統(tǒng)中很受歡迎的推薦算法思想,相較于傳統(tǒng)的基于內(nèi)容過濾,協(xié)同過濾會從用戶興趣入手,找到與指定用戶興趣類似的用戶,結(jié)合相似用戶對某一產(chǎn)品的評分,預測用戶對該產(chǎn)品的喜好程度。協(xié)同過濾主要包括基于用戶的協(xié)同過濾(user-based)、基于項目的協(xié)同過濾(item-based)、基于模型的協(xié)同過濾(model-based)[14-16]。以用戶和項目為基礎的協(xié)同過濾統(tǒng)稱為以記憶為基礎的協(xié)同過濾技術(memory-based),但是在數(shù)據(jù)稀疏和數(shù)據(jù)量很大時,其推薦難以達到令人滿意的效果,因此衍生出一種以模型為基礎的協(xié)同過濾,其核心思想是先用歷史數(shù)據(jù)得出一個模型,再在此模型的基礎上進行預測。想要實現(xiàn)推薦功能,其基本思路是將訓練好的用戶特征和煤炭特征組合成用戶的特征矩陣和煤炭的特征矩陣并保存。計算當前煤炭產(chǎn)品與整個煤炭特征矩陣的相似度,在計算相似度時,由于傳統(tǒng)余弦相似度計算只關注方向上的差異,而對具體數(shù)值的絕對值大小不敏感,而歐氏距離只關注具體數(shù)值特征的差異,但可能會忽視個體向量不同維度的數(shù)值差異,也會造成推薦結(jié)果與實際情況不符的情況。一種較為合理的相似度計算方法是利用皮爾遜相關系數(shù)公式(Pearson similarity)計算向量每個維度上的均值,每個向量在各個維度上都減去均值后再進行相似度的計算,其計算公式如下:
(8)

在相似度計算完成后,為了完成推薦同類型煤炭的目標,需要從煤炭特征矩陣中取得與已知煤炭產(chǎn)品相似度最大的topN個,忽略用戶等其他影響因素,直接推薦最類似于這個煤炭產(chǎn)品的其他產(chǎn)品;當推薦當前用戶喜歡的其他煤炭產(chǎn)品時,需要使用用戶的特征向量與煤炭特征矩陣計算該用戶對所有煤炭產(chǎn)品的inference評分,這里的評分計算可使用1.3節(jié)評分計算方法中的任意一種inference求解公式,取得矩陣中得分最高的topN個作為推薦列表;當推薦購買過該煤炭產(chǎn)品的人還可能喜歡哪些煤炭產(chǎn)品時,先使用煤炭特征向量與用戶特征矩陣求得所有用戶對該煤炭產(chǎn)品的inference矩陣,從中選出最喜歡該產(chǎn)品的topN個人,然后分別計算這些人對煤炭產(chǎn)品矩陣中所有煤炭產(chǎn)品的評分,選擇每個人評分最高的煤炭產(chǎn)品作為推薦。
為了更高效快速地完成煤炭產(chǎn)品推薦系統(tǒng)搭建的Spark集群,使用了實驗室中3臺普通計算機,組成了一個由Master主節(jié)點和Slave1、Slave2兩個從節(jié)點構成的運行環(huán)境,三臺計算機均采用Centos7 Linux操作系統(tǒng),這樣可以實現(xiàn)Spark在服務器環(huán)境中的快速部署,進而便于有效進行特征的提取,完成算法的實現(xiàn)以及數(shù)據(jù)模型的構建。所有實驗開發(fā)語言為Python,Hadoop版本為hadoop-2.6.5.tar.gz,Spark版本為spark-1.6.2-bin-hadoop2.6.tgz,軟件開發(fā)環(huán)境采用JetBrains PyCharm。集群中所有軟件安裝并配置完畢后方可啟動Spark分布式集群進行實驗。
該文將從兩種不同評分計算方式入手通過分析模型的損失和準確率指標、數(shù)據(jù)集大小對推薦系統(tǒng)運行的時間影響,衡量基于文本卷積模型的多因素煤炭產(chǎn)品協(xié)同過濾推薦模型的性能好壞。根據(jù)用戶對煤炭產(chǎn)品評分的計算方式不同分為兩組對照實驗A和B。實驗A采取特征加權全連接的方法,其推薦模型的損失和準確率如圖2、圖3所示。

圖2 全連接方式計算評分模型損失

圖3 全連接方式計算評分模型準確率
由圖2、圖3可以看出,當采取特征全連接方式擬合用戶對煤炭產(chǎn)品的評分時,模型的損失隨批次增加逐漸減小最終穩(wěn)定在1.0左右,準確率隨批次增加不斷升高最終穩(wěn)定在0.251左右。實驗B采用數(shù)值比例特征法求得用戶對煤炭產(chǎn)品的評分inference,其推薦模型的損失和準確率如圖4、圖5所示。

圖4 比例特征法計算評分模型損失
由圖4、圖5可以看出,當采用比例特征法擬合用戶對煤炭產(chǎn)品的評分時,模型的損失隨批次增加逐漸減小最終穩(wěn)定在1.2左右,準確率隨批次增加不斷升高最終穩(wěn)定在0.262左右。A、B兩組實驗中系統(tǒng)運行時間隨著數(shù)據(jù)集大小的變化情況如圖6所示。

圖5 比例特征法計算評分模型準確率

圖6 系統(tǒng)運行時間隨數(shù)據(jù)集大小的變化情況
在數(shù)據(jù)集大小對推薦系統(tǒng)運行的響應時間上,當數(shù)據(jù)量較小時,特征全連接擬合評分的實驗方法系統(tǒng)運行所需時間較小,然而當數(shù)據(jù)量達到一定程度,相比于比例特征法擬合評分,全連接帶來的網(wǎng)絡損失和偏置將導致系統(tǒng)運行效率顯著降低,響應時間過長。經(jīng)過以上幾組實驗可以看出,由于在實際的推薦系統(tǒng)中數(shù)據(jù)量往往較大,推薦準確率評價指標的重要性往往也大于模型損失指標,此時應采用特征全連接加權的方式計算用戶對煤炭產(chǎn)品的評分可以提高推薦的準確率,但同時也要付出更長時間的代價。在衡量系統(tǒng)能否正常滿足實際推薦需求時,根據(jù)推薦需求的不同共分為3組實驗,每個小組的實驗結(jié)果如下:
實驗一:通過相似度計算公式隨機對煤炭產(chǎn)品ID為100、120、140、160、180的煤種推薦與其最相似的煤炭產(chǎn)品。按照該煤炭產(chǎn)品與煤炭產(chǎn)品矩陣中所有產(chǎn)品的相似度由大到小排序可以得出煤炭產(chǎn)品ID為192、134、26、61、376的五種煤分別最類似于這些煤種(見表1)。

表1 實驗1推薦效果
實驗二:分別采用全連接評分計算法和比例特征法為用戶ID編號為234、235、236、237、238的隨機5名用戶推薦最可能受到其歡迎的煤炭產(chǎn)品。按照用戶對煤炭產(chǎn)品矩陣中所有產(chǎn)品的打分由高到低排序可以得出煤炭產(chǎn)品ID為41、72、199、82、223的五種煤最可能受到該用戶喜愛,從表2可以看出,全連接評分計算法推薦效果好于采用比例特征法計算評分時的推薦效果。

表2 實驗2推薦效果
實驗三:分別采用比例全連接評分計算法及比例特征法隨機為購買過煤炭產(chǎn)品ID編號為100、101、102、103、104煤種的用戶找到與其興趣相似的用戶,并向其推薦購買過同類型產(chǎn)品的用戶還喜歡瀏覽哪些煤種。先將該煤炭產(chǎn)品與用戶矩陣中所有用戶計算評分得到相似用戶列表,得出用戶ID為911、2 755、4 233、4 006、21的幾位用戶最有可能購買過該種煤炭產(chǎn)品,再將這些用戶分別與煤炭產(chǎn)品特征矩陣中所有產(chǎn)品進行評分計算,其結(jié)果中按照由高到低順序排列的煤炭產(chǎn)品ID為162、199、114、97、322的幾種煤即為這些用戶還可能感興趣的產(chǎn)品,將其作為最終推薦列表。由表3可以看出,采用全連接計算評分方式的推薦效果好于采用比例特征法評分計算的推薦結(jié)果。

表3 實驗3推薦效果
從用戶及煤炭產(chǎn)品各個屬性面的文本角度分析,提出一種基于文本卷積神經(jīng)網(wǎng)絡的推薦模型。在煤炭產(chǎn)品間采用物品相似度排序方式推薦,用戶與產(chǎn)品間引入新的評分矩陣排序規(guī)則進行推薦,并在不同評分矩陣生成方式下的模型損失及準確率上驗證了該模型在實際應用中的可行性,克服了傳統(tǒng)協(xié)同過濾中的矩陣稀疏問題,能夠更充分有效地挖掘用戶及煤炭產(chǎn)品文本中的隱式信息,使推薦效率得到提升。