苗啟朋, 何麗莉, 姜 宇, 白洪濤
(吉林大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 長春 130012;吉林大學(xué) 符號計(jì)算與知識工程教育部重點(diǎn)實(shí)驗(yàn)室, 長春 130012)
在推薦系統(tǒng)中, 商品的會話序列是一種特殊的數(shù)據(jù)形式, 指在一段時(shí)間內(nèi)某用戶點(diǎn)擊商品的次序, 具有數(shù)據(jù)量大、 隨機(jī)性強(qiáng)、 用戶匿名情況多等特點(diǎn). 基于會話序列的商品推薦旨在通過已有的會話預(yù)測當(dāng)前用戶下一個(gè)可能感興趣的商品實(shí)體. 傳統(tǒng)的推薦系統(tǒng)通常只關(guān)注于會話序列最后一個(gè)商品項(xiàng)目實(shí)體(簡稱項(xiàng)目)或某幾個(gè)會話中的項(xiàng)目轉(zhuǎn)換[1], 局部偏好過強(qiáng)導(dǎo)致推薦效果不理想, 甚至易引起用戶的反感. 隨著會話序列數(shù)據(jù)量以及用戶的不斷增加, 傳統(tǒng)方法做出推薦的計(jì)算代價(jià)也在增加. 在推薦領(lǐng)域, 協(xié)同過濾以實(shí)現(xiàn)簡單且推薦準(zhǔn)確被眾多電商網(wǎng)站廣泛使用. 協(xié)同過濾可分為基于用戶的算法和基于項(xiàng)目的算法兩類[2]. 基于用戶的協(xié)同過濾核心是計(jì)算用戶與鄰居用戶之間的相似性[3], 根據(jù)鄰居用戶的點(diǎn)擊情況, 預(yù)測當(dāng)前用戶可能的點(diǎn)擊情況, 需要用戶的明確偏好和歷史交互[4]. 在實(shí)際推薦系統(tǒng)中, 需要維護(hù)一個(gè)巨大的用戶商品交互矩陣, 有嚴(yán)重的矩陣稀疏性問題, 新增加用戶或商品也將導(dǎo)致重新計(jì)算用戶相似度, 可伸縮性差[5-7]. 在用戶匿名情況較多時(shí), 基于用戶的協(xié)同過濾也無法滿足需求. 與基于用戶的協(xié)同過濾算法不同, 在會話序列推薦中基于項(xiàng)目的協(xié)同過濾推薦準(zhǔn)確度較好, 算法復(fù)雜度低, 但由于需要計(jì)算所有商品項(xiàng)目的相似度信息, 也有一定的計(jì)算代價(jià). Markov鏈方法是一種基于當(dāng)前用戶最后一次點(diǎn)擊項(xiàng)目的最近點(diǎn)擊情況預(yù)測下一個(gè)項(xiàng)目的方法[8], 它不能捕捉會話整體特征以及全局項(xiàng)目點(diǎn)擊信息, 且只關(guān)注了最后一次的點(diǎn)擊項(xiàng)目, 基于Markov鏈推薦的準(zhǔn)確度也低于基于項(xiàng)目的協(xié)同過濾算法. 總之, 傳統(tǒng)的推薦方法在用戶匿名以及大規(guī)模數(shù)據(jù)量的情況下性能較差. 因此, 能滿足在匿名情況下使用且實(shí)現(xiàn)簡便、 推薦效率高的算法成為該領(lǐng)域當(dāng)前研究的熱點(diǎn)問題.
基于上述問題, 本文提出一種基于全局有向圖的商品會話序列推薦算法(session recommendation algorithm based on global directed graph, SRGDG). 采用Neo4j圖數(shù)據(jù)庫[9]存儲項(xiàng)目點(diǎn)擊關(guān)系構(gòu)建全局會話序列有向圖, 并使用全局偏好傳播的策略得到當(dāng)前會話序列每個(gè)項(xiàng)目的全局影響, 最后獲得當(dāng)前會話的待推薦項(xiàng)目評分信息. 在獲取評分過程中, 通過提高會話序列中靠后項(xiàng)目對應(yīng)的參數(shù)考慮點(diǎn)擊的時(shí)間因素對推薦的重要影響, 并通過大量的對比實(shí)驗(yàn)驗(yàn)證了所提出方法的有效性.
Item-KNN[10]通過計(jì)算項(xiàng)目之間的相似度找到與當(dāng)前項(xiàng)目最相似的k個(gè)項(xiàng)目.項(xiàng)目相似度的計(jì)算方式一般有兩種: 通過共現(xiàn)規(guī)則和計(jì)算項(xiàng)目向量表示之間的余弦值[11].共現(xiàn)規(guī)則即若兩個(gè)項(xiàng)目出現(xiàn)在同一會話中, 則它們即為共現(xiàn)的, 從而根據(jù)共現(xiàn)的次數(shù)計(jì)算相似度.
通過計(jì)算余弦值計(jì)算相似度[12]的一般算法如下:
步驟1) 對于會話序列中正在點(diǎn)擊的項(xiàng)目, 通過計(jì)算項(xiàng)目向量之間的余弦值計(jì)算與待推薦項(xiàng)目的相似度, 選出與該項(xiàng)目最相似的前k個(gè)項(xiàng)目,k也稱為該項(xiàng)目的鄰居數(shù);
步驟2) 從與項(xiàng)目最相似的k個(gè)鄰居中刪除用戶已點(diǎn)擊過的項(xiàng)目集合M, 剩余的保存到集合R中;
步驟3) 計(jì)算集合R和M中每兩個(gè)項(xiàng)目的相似度, 最后按照相似度大小將R中項(xiàng)目排序并做出推薦.
項(xiàng)目之間的相似度可以離線進(jìn)行計(jì)算, 在實(shí)際推薦過程中只需進(jìn)行項(xiàng)目相似度的比較[13], 但若項(xiàng)目數(shù)據(jù)量較大, 則離線計(jì)算的代價(jià)也會很大. 此外, Item-KNN只計(jì)算了項(xiàng)目之間的相似度, 且僅基于最后一次點(diǎn)擊生成預(yù)測, 并未考慮當(dāng)前會話序列中項(xiàng)目的點(diǎn)擊次序以及其他項(xiàng)目. 因此, 本文基于圖數(shù)據(jù)庫, 提出一種優(yōu)于傳統(tǒng)協(xié)同過濾的基于全局有向圖的商品會話序列推薦算法[14].
本文使用的Neo4j圖數(shù)據(jù)庫是一個(gè)目前在技術(shù)及市場中應(yīng)用最廣的NOSQL圖數(shù)據(jù)庫. Neo4j3.0可根據(jù)需要?jiǎng)討B(tài)地?cái)U(kuò)展可用地址空間, 能存儲任意大小的圖數(shù)據(jù), 并改進(jìn)了Cost-based查詢優(yōu)化器, 支持多種語言驅(qū)動(dòng)器, 能滿足存儲大數(shù)據(jù)量點(diǎn)擊序列的需求, 與其他圖數(shù)據(jù)庫相比, Neo4j還具有規(guī)模較大及較活躍的社區(qū). Cypher是Neo4j圖數(shù)據(jù)庫的聲明式查詢語言, 通過圖模式匹配的方式進(jìn)行數(shù)據(jù)查詢或修改, 語法規(guī)則類似SQL. 本文使用neo4j-import api進(jìn)行數(shù)據(jù)集的插入.
數(shù)據(jù)集的每行數(shù)據(jù)包含該次點(diǎn)擊的session_id(會話id), item_id(項(xiàng)目id), timeframe(時(shí)間片), eventdate(日期). 首先將數(shù)據(jù)集進(jìn)行預(yù)處理, 提取出圖數(shù)據(jù)庫節(jié)點(diǎn)集和節(jié)點(diǎn)關(guān)系集. 預(yù)處理步驟如下.
1) 對于每行點(diǎn)擊數(shù)據(jù), 提取項(xiàng)目以生成圖數(shù)據(jù)庫節(jié)點(diǎn)集.
2) 對于每個(gè)會話序列, 將項(xiàng)目按照時(shí)間片排序. 定義點(diǎn)擊關(guān)系: 在同一會話中每兩個(gè)前后相鄰的項(xiàng)目有一次點(diǎn)擊關(guān)系, 即“item_id1(項(xiàng)目id1), item_id2(項(xiàng)目id2)”.
3) 遍歷數(shù)據(jù)集所有點(diǎn)擊關(guān)系, 將點(diǎn)擊關(guān)系出現(xiàn)的次數(shù)作為節(jié)點(diǎn)關(guān)系的屬性值, 定義節(jié)點(diǎn)關(guān)系: “item_id1(項(xiàng)目id1), item_id2(項(xiàng)目id2), weight(屬性值)”, weight表示該點(diǎn)擊關(guān)系出現(xiàn)的次數(shù). 提取所有節(jié)點(diǎn)關(guān)系生成節(jié)點(diǎn)關(guān)系集.
最終將原始數(shù)據(jù)集轉(zhuǎn)化為圖數(shù)據(jù)庫節(jié)點(diǎn)集和節(jié)點(diǎn)關(guān)系集.
本文基于圖數(shù)據(jù)庫技術(shù)構(gòu)建全局有向圖. 通過Neo4j的neo4j-import api將數(shù)據(jù)預(yù)處理后得到的兩個(gè)數(shù)據(jù)文件導(dǎo)入圖數(shù)據(jù)庫(將Diginetica數(shù)據(jù)集導(dǎo)入數(shù)據(jù)庫用時(shí)4.57 s, 將Yoochoose數(shù)據(jù)集導(dǎo)入數(shù)據(jù)庫用時(shí)3.78 s). 將所有的項(xiàng)目節(jié)點(diǎn)以及關(guān)系導(dǎo)入數(shù)據(jù)庫后, 可得到數(shù)據(jù)集所有會話序列的全局有向圖G=(V,E), 其中V為圖數(shù)據(jù)庫節(jié)點(diǎn)集,E為節(jié)點(diǎn)關(guān)系集. 圖1為項(xiàng)目實(shí)體節(jié)點(diǎn)在圖數(shù)據(jù)庫中的連接情況示例, 其中實(shí)體之間的邊具有屬性click, 屬性值為權(quán)重weight(節(jié)點(diǎn)關(guān)系集中的屬性值類型為int).
圖1 數(shù)據(jù)庫節(jié)點(diǎn)連接示例Fig.1 Example of node connecting in database
圖2 節(jié)點(diǎn)偏好傳播“波紋”Fig.2 Node preference propagation “ripple”
波紋式傳播[15-16]是一種典型的網(wǎng)絡(luò)傳播模型, 該模型體現(xiàn)了在社交網(wǎng)絡(luò)中一對多廣播的特點(diǎn). 受波紋式拓?fù)淠P偷膯l(fā), 本文提出通過全局項(xiàng)目偏好傳播策略獲得項(xiàng)目的全局影響. 全局偏好傳播就是項(xiàng)目按照偏好傳播規(guī)則在全局有向圖中傳播影響. 一次點(diǎn)擊就產(chǎn)生一個(gè)“水波”在有向圖中向外擴(kuò)散, “水波”會有疊加效應(yīng), 一個(gè)會話中有多次點(diǎn)擊, 最后在圖中尋找受“水波”影響最大的項(xiàng)目做出推薦. “水波”在傳播過程中有衰減機(jī)制, 否則將永不停止地?cái)U(kuò)散, 本文將路徑長度作為衰減參數(shù). 圖2為一個(gè)項(xiàng)目節(jié)點(diǎn)的偏好傳播“波紋”示例, 其中內(nèi)圈為1-hop節(jié)點(diǎn), 外圈為2-hop節(jié)點(diǎn), 從內(nèi)到外傳播的影響將逐漸減弱.
項(xiàng)目在圖中偏好傳播以及評分規(guī)則如下: 對于每個(gè)項(xiàng)目, 建立一個(gè)初始值為0的m元數(shù)組(m的大小為項(xiàng)目總數(shù), 數(shù)組每個(gè)下標(biāo)對應(yīng)項(xiàng)目id), 數(shù)組中的每個(gè)元素對應(yīng)一個(gè)項(xiàng)目節(jié)點(diǎn)的評分值, 通過該項(xiàng)目的偏好傳播更新數(shù)組中對應(yīng)的元素值. 評分策略如下:
(1)
基于全局有向圖的商品會話序列推薦算法步驟如下:
1) 對于當(dāng)前會話S{v1,v2,…,vn}的項(xiàng)目vi, 初始化對應(yīng)的m元為0的數(shù)組si,m為項(xiàng)目總數(shù);
2) 使用cypher語句在圖數(shù)據(jù)庫中搜索vi項(xiàng)目的1-hop,2-hop集合, 并根據(jù)全局偏好傳播策略更新對應(yīng)的評分值到si數(shù)組中(在實(shí)驗(yàn)中遍歷1-hop取得了較好結(jié)果);
3) 將通過會話S{v1,v2,…,vn}節(jié)點(diǎn)偏好傳播得到的n個(gè)m元數(shù)組s1,s2,…,sn按照
(2)
圖3 節(jié)點(diǎn)偏好傳播示例Fig.3 Example of node preference propagation
的加和得到m元數(shù)組s,s即為當(dāng)前會話S的全局評分, 取s中Top20元素的數(shù)組下標(biāo)對應(yīng)的項(xiàng)目做出推薦.
在考慮時(shí)間因素的情況下, 會話序列中最近被點(diǎn)擊的項(xiàng)目有更大的影響力, 因此式(2)中參數(shù)ki設(shè)置規(guī)則為:kn>kn-1>…>k1, 本文通過實(shí)驗(yàn)分析驗(yàn)證了不同組參數(shù)設(shè)置對推薦的影響.
圖3為會話{v1,v2,v3}的情況示例, 其中a,b,c,d,e為有向圖中的關(guān)系權(quán)重,k2,k3是v2,v3對應(yīng)的參數(shù)權(quán)重.此時(shí)v4,v5是v3的1-hop節(jié)點(diǎn),v3,v5是v2的1-hop節(jié)點(diǎn), 而v4則是v2的2-hop節(jié)點(diǎn).由全局偏好傳播策略, 此時(shí)v3總評分
scorev3=k2×e,
v5總評分
scorev5=k2×a+k3×b,
v4總評分
scorev4=k3×c+k2×(a+d)/2.
最后根據(jù)v3,v4,v5的評分值大小決定被推薦的優(yōu)先級.
本文使用目前在商品會話序列推薦研究中應(yīng)用最廣泛的兩個(gè)標(biāo)準(zhǔn)數(shù)據(jù)集Diginetica(http://cikm2016.cs.iupui.edu/cikm-cup)和Yoochoose(http://2015.recsyschallenge.com/challege.html). Diginetica是CIKMCup2016公開數(shù)據(jù)集, 為歐洲某電商平臺6個(gè)月內(nèi)所有匿名用戶的交易數(shù)據(jù); Yoochoose是RecSys Challenge 2015比賽的公開數(shù)據(jù)集, 其包含了某電子商務(wù)網(wǎng)站6個(gè)月的點(diǎn)擊流. 本文將Diginetica數(shù)據(jù)集最后7 d的會話作為測試集, 而將其他會話序列作為原始數(shù)據(jù)存入圖數(shù)據(jù)庫. Yoochoose 1/64數(shù)據(jù)集取最后1 d的會話作為測試集, 其他會話序列作為原始數(shù)據(jù)存入圖數(shù)據(jù)庫. 兩個(gè)數(shù)據(jù)集的基本信息列于表1.
表1 實(shí)驗(yàn)數(shù)據(jù)集信息
本文采用P@20和MRR@20作為評價(jià)指標(biāo). P@20(Precision@20)表示前20名中有正確推薦的占所有推薦的比例, 在推薦領(lǐng)域廣泛使用:
P@20=Chit/N,
(3)
其中N表示做出推薦的總次數(shù),Chit表示前20名中有正確推薦的總次數(shù). MRR@20(mean reciprocal rank)表示平均數(shù)倒數(shù)排名, 是正確推薦在前20名推薦結(jié)果排名的倒數(shù)相加結(jié)果(如果無正確推薦項(xiàng)就設(shè)倒數(shù)后的值為0), 其中較大的MRR值表示正確的推薦在推薦結(jié)果中排名靠前:
(4)
其中N表示做出推薦的總次數(shù), rank(t)表示每次推薦中正確推薦項(xiàng)在推薦列表中所排的位置.
實(shí)驗(yàn)比較本文方法與基于項(xiàng)目相似性的方法Item-KNN[10]、 Bayes排序的方法BPR-MF[17]和Markov鏈的方法FPMC[2]的性能. 評價(jià)方法參考當(dāng)前主流評價(jià)方法[18]. 通過在兩個(gè)數(shù)據(jù)集上不同參數(shù)設(shè)置情形下的多次實(shí)驗(yàn), 所得結(jié)果列于表2.
表2 不同方法在兩個(gè)數(shù)據(jù)集上的推薦準(zhǔn)確率結(jié)果比較
由表2可見: Item-KNN方法優(yōu)于多數(shù)基于Markov鏈的方法, 因?yàn)槎鄶?shù)基于Markov鏈的方法僅使用會話中最后一個(gè)項(xiàng)目實(shí)體在最近會話中的項(xiàng)目點(diǎn)擊信息, 在大規(guī)模數(shù)據(jù)量情況下, 其不能獲得某個(gè)項(xiàng)目全局的點(diǎn)擊信息; 本文的SRGDG方法優(yōu)于Item-KNN方法, 在Diginetica,Yoochoose 1/64兩個(gè)數(shù)據(jù)集上, P@20分別提高了6.12%,30.25%, MRR@20分別提高了15.04%,33.88%. 相比較而言, MRR@20值提高的更多, 體現(xiàn)了Item-KNN方法只考慮了項(xiàng)目的相似關(guān)系, 未考慮先后次序的缺點(diǎn). SRGDG方法通過對數(shù)據(jù)集全部會話進(jìn)行建模構(gòu)成全局有向圖, 在全局有向圖中擴(kuò)散會話各項(xiàng)目的影響, 同時(shí)增加會話中靠后項(xiàng)目的偏好參數(shù), 最終獲得當(dāng)前會話序列的推薦, 該方法既考慮了會話中項(xiàng)目的先后順序, 又考慮了會話中其他項(xiàng)目的影響, 實(shí)驗(yàn)結(jié)果證明該方法有效. 由于Yoochoose 1/64數(shù)據(jù)集的項(xiàng)目數(shù)少于Diginetica數(shù)據(jù)集, 且各項(xiàng)目之間的關(guān)聯(lián)性更強(qiáng), 因此Yoochoose 1/64推薦的準(zhǔn)確率遠(yuǎn)好于Diginetica數(shù)據(jù)集上的準(zhǔn)確率, Diginetica數(shù)據(jù)集則更類似于現(xiàn)在的大規(guī)模商品與用戶的實(shí)際情況. 此外, 圖數(shù)據(jù)庫可根據(jù)需求增加商品數(shù)量以及設(shè)置點(diǎn)擊關(guān)系權(quán)重, 因此SRGDG方法也具有解決推薦系統(tǒng)可擴(kuò)展性與避免矩陣稀疏性問題的優(yōu)勢[19]. 由于全局點(diǎn)擊關(guān)系都是可見的, 因此使用圖數(shù)據(jù)庫也增強(qiáng)了推薦系統(tǒng)推薦的可解釋性.
式(2)獲得了全局評分信息. 通過在Diginetica和Yoochoose數(shù)據(jù)集上的大量實(shí)驗(yàn)表明, 全局偏好傳播策略能提升推薦準(zhǔn)確率. 由于式(2)中的k1,k2,…,kn有kn>kn-1>kn-2>…>k1的規(guī)則, 且由圖4和圖5的Diginetica和Yoochoose數(shù)據(jù)集會話序列長度分布圖可見, 大量會話序列的長度都小于3和4, 因此, 實(shí)驗(yàn)中首先分析每次會話中最后3個(gè)項(xiàng)目實(shí)體對應(yīng)kn-2,kn-1,kn的影響, 對于其余項(xiàng)目實(shí)體對應(yīng)的k1,k2,…,kn-3則設(shè)置為0.不同的(kn-2,kn-1,kn)組合在數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果分別列于表3和表4. 在Diginetica數(shù)據(jù)集和Yoochoose數(shù)據(jù)集上各組參數(shù)設(shè)置的實(shí)驗(yàn)結(jié)果比較分別如圖6和圖7所示.
圖4 Diginetica數(shù)據(jù)集會話序列長度分布Fig.4 Distribution of Diginetica data set session sequences length
圖5 Yoochoose數(shù)據(jù)集會話序列長度分布Fig.5 Distribution of Yoochoose data set session sequences length
表3 在Diginetica數(shù)據(jù)集上各組參數(shù)設(shè)置的推薦準(zhǔn)確率結(jié)果比較
表4 在Yoochoose數(shù)據(jù)集上各組參數(shù)設(shè)置的推薦準(zhǔn)確率結(jié)果比較
圖6 Diginetica數(shù)據(jù)集上各組參數(shù)的推薦結(jié)果比較Fig.6 Comparison of recommended results of each group of parameters in Diginetica data set
圖7 Yoochoose數(shù)據(jù)集上各組參數(shù)的推薦結(jié)果比較Fig.7 Comparison of recommended results of each group of parameters in Yoochoose data set
由表4可見: 在Diginetica數(shù)據(jù)集上的實(shí)驗(yàn)中, (0,0,1)組相當(dāng)于只考慮了最后一個(gè)項(xiàng)目的影響, P@20值為30.77%; (0,0.4,1)組考慮了最后兩個(gè)項(xiàng)目的影響, 但倒數(shù)第二個(gè)項(xiàng)目由于系數(shù)較小導(dǎo)致影響較小, 實(shí)驗(yàn)結(jié)果基本與(0,0,1)組相同; (0,0.6,1)組增加了倒數(shù)第二個(gè)項(xiàng)目的影響, P@20比上一組提高了19.07%, MRR@20提高了13.25%; (0,0.8,1)組相對于(0,0.6,1)組提升較小, 說明倒數(shù)第二個(gè)項(xiàng)目的影響已經(jīng)達(dá)到了較好的效果; (0.2,0.6,1)組相比于(0,0.8,1)組P@20提高了3.46%, MRR@20提高了1.29%, 如圖7所示. 表明考慮倒數(shù)第三個(gè)項(xiàng)目也會有影響, 并且能提升推薦的準(zhǔn)確度, 但后序組提升不明顯. 由于第5,6,7,8組提升相比于第2,3,4組提升較小, 因此本文認(rèn)為僅考慮會話最后3個(gè)節(jié)點(diǎn)的全局影響已經(jīng)能得到較好的推薦結(jié)果, 如果繼續(xù)向前設(shè)置參數(shù), 不僅會增加推薦的計(jì)算代價(jià), 且提升較小, 考慮最后3個(gè)節(jié)點(diǎn)已經(jīng)驗(yàn)證了考慮多個(gè)節(jié)點(diǎn)影響的全局偏好傳播策略的有效性.
同理, 在Yoochoose 1/64數(shù)據(jù)集上也同時(shí)考慮后3個(gè)節(jié)點(diǎn)能得到推薦結(jié)果的較好值. 在組(0.2,0.4,1)中P@20取得了最好值, 比(0,0,1)提高了3.71%. 由于在Yoochoose 1/64數(shù)據(jù)集上已經(jīng)達(dá)到了一個(gè)較好的精度, 在MRR@20值的比較上, 總體提升較小, 或者有下降. 經(jīng)過在兩個(gè)實(shí)際數(shù)據(jù)集上大量的實(shí)驗(yàn)證實(shí), 多個(gè)實(shí)體的偏好傳播策略能有效提升推薦的準(zhǔn)確度.
綜上所述, 針對目前很多推薦系統(tǒng)推薦效果差、 算法復(fù)雜度高的問題, 本文提出了通過構(gòu)建全局有向圖的方法對數(shù)據(jù)集所有會話序列進(jìn)行建模, 對于當(dāng)前會話使用偏好傳播策略并考慮時(shí)間因素獲得會話中項(xiàng)目的全局影響, 從而生成所有待推薦項(xiàng)目的評分, 從中優(yōu)選Top20做出推薦. 在兩個(gè)標(biāo)準(zhǔn)數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果表明, 與傳統(tǒng)基于項(xiàng)目的協(xié)同過濾以及Markov鏈等方法相比, 本文方法在P@20和MRR@20評價(jià)指標(biāo)下性能均更好.