任永功,呂福澤,張志鵬
(遼寧師范大學(xué) 計(jì)算機(jī)與信息技術(shù)學(xué)院,遼寧 大連 116000)
推薦系統(tǒng)[1]是一種為用戶尋找滿足其個(gè)性化興趣的項(xiàng)目,向用戶提供有針對(duì)性推薦的方法.推薦系統(tǒng)的出現(xiàn),一方面,緩解了“信息過(guò)載”問(wèn)題,幫助用戶從海量的候選物品中篩選目標(biāo)物品,節(jié)省了用戶的時(shí)間,為用戶帶來(lái)便利;另一方面,為互聯(lián)網(wǎng)企業(yè)創(chuàng)造價(jià)值,為企業(yè)吸引和留住更多的目標(biāo)客戶,實(shí)現(xiàn)利潤(rùn)的增長(zhǎng).如今,推薦系統(tǒng)在網(wǎng)絡(luò)音樂(lè)、電影、微視頻、美食推薦和電子商務(wù)等領(lǐng)域都發(fā)揮著重要作用.
基于序列的推薦系統(tǒng)[2]是推薦系統(tǒng)的一個(gè)分支,通過(guò)挖掘用戶與項(xiàng)目交互的時(shí)間序列信息,預(yù)測(cè)用戶未來(lái)時(shí)期感興趣的項(xiàng)目.和傳統(tǒng)的推薦系統(tǒng)不同,基于序列的推薦系統(tǒng)對(duì)用戶興趣進(jìn)行動(dòng)態(tài)偏好建模,針對(duì)用戶興趣的動(dòng)態(tài)變化的進(jìn)行推薦,在推薦效果上優(yōu)于靜態(tài)建模的傳統(tǒng)推薦算法.如今,基于序列的推薦系統(tǒng)得到了國(guó)內(nèi)外學(xué)者的廣泛關(guān)注,但是,研究目標(biāo)過(guò)多集中在提升序列推薦的精確度上,提升序列推薦多樣性的研究工作相對(duì)較少[3].序列推薦中,推薦準(zhǔn)確度對(duì)于評(píng)價(jià)推薦系統(tǒng)的質(zhì)量有決定性作用,但推薦系統(tǒng)多樣性研究工作同樣重要,推薦列表中的物品多樣性更豐富,可以給用戶帶來(lái)更多的驚喜度和滿意度,使用戶獲得更好的使用體驗(yàn).
本文對(duì)提升序列推薦的多樣性存在的難點(diǎn)進(jìn)行研究,總結(jié)出存在以下幾方面問(wèn)題:1)由于序列推薦中缺少用戶信息和物品側(cè)面信息,這導(dǎo)致傳統(tǒng)推薦算法中提升多樣性的方法難以應(yīng)用到序列推薦當(dāng)中[3];2)提升多樣性的同時(shí)會(huì)降低推薦的精確度[4],多樣性和精確度是一個(gè)“蹺蹺板”問(wèn)題,提升一個(gè)另一個(gè)必然會(huì)造成下降,序列推薦通常預(yù)測(cè)目標(biāo)的范圍是用戶下一次將要與之交互的物品,與傳統(tǒng)推薦算法相比預(yù)測(cè)范圍要小得多,所以提升序列推薦的多樣性會(huì)導(dǎo)致精確度降低更加嚴(yán)重,影響推薦效果;3)用戶興趣表示準(zhǔn)確性存在表示偏差,常見(jiàn)的序列推薦中用單個(gè)向量表示用戶的下一次興趣的方法,不能準(zhǔn)確表示用戶的多樣性興趣[5],影響推薦結(jié)果多樣性的提升,如圖1所示.
圖1 單個(gè)向量不能表達(dá)多個(gè)興趣
考慮到現(xiàn)有工作的不足,本文提出一種融合知識(shí)圖譜和自注意力機(jī)制的序列推薦方法(sequence recommendation algorithm based on knowledge graph and attention mechanism,SR-KGA),與現(xiàn)有的推薦算法不同,SR-KGA方法可以顯著提高基于序列推薦的多樣性,同時(shí)保持推薦的準(zhǔn)確性.本方法主要在3個(gè)方面改進(jìn)了推薦算法:1)提升物品的表示準(zhǔn)確性,通過(guò)引入知識(shí)圖譜,用外部信息對(duì)物品進(jìn)行表示;2)提升序列模型的表示準(zhǔn)確性,采用注意力機(jī)制構(gòu)建seq2seq模型來(lái)表示序列模型,并用多向量表示用戶的興趣變化趨勢(shì),更好的表示了用戶興趣多樣性;3)增加預(yù)測(cè)序列物品之間差異性,采用多樣性正則化項(xiàng)優(yōu)化損失函數(shù),提升推薦結(jié)果的多樣性.
本文的主要貢獻(xiàn)如下:
1.融合了序列信息和知識(shí)圖譜信息,通過(guò)圖神經(jīng)網(wǎng)絡(luò)對(duì)知識(shí)圖譜數(shù)據(jù)中物品進(jìn)行嵌入操作,將生成的向量與物品常用的屬性向量相拼接,送入序列模型進(jìn)行訓(xùn)練,實(shí)現(xiàn)了序列信息和知識(shí)圖譜信息的融合.提升了物品表示的準(zhǔn)確性.
2.利用seq2seq模型來(lái)進(jìn)行序列推薦,預(yù)測(cè)未來(lái)用戶-物品交互序列.把傳統(tǒng)序列推薦中僅僅預(yù)測(cè)下一次用戶興趣的方法,更改為預(yù)測(cè)未來(lái)一段時(shí)間內(nèi)用戶的興趣動(dòng)態(tài)變化的方法,即預(yù)測(cè)一個(gè)物品的序列.由此產(chǎn)生多個(gè)向量,進(jìn)而可以用多個(gè)向量來(lái)表示未來(lái)一段時(shí)間內(nèi)用戶的興趣動(dòng)態(tài)變化趨勢(shì).
3.驗(yàn)證了多樣性正則項(xiàng)的有效性,證明了引入多樣性正則項(xiàng)約束推薦列表內(nèi)物品差異性的方法,可以學(xué)習(xí)到用戶不同時(shí)間的興趣偏好差異,有效的增加推薦結(jié)果的多樣性.
本文中的關(guān)鍵符號(hào)如表1所示.
表1 本文中的關(guān)鍵符號(hào)Table 1 Key symbols in this article
自序列推薦方法被提出后,已經(jīng)出版大量的研究文獻(xiàn),在早期,RENDLE等人提出結(jié)合馬爾可夫鏈模型和矩陣分解進(jìn)行推薦的方法[6]進(jìn)行序列推薦;深度神經(jīng)網(wǎng)絡(luò)興起后,鑒于其優(yōu)秀的表現(xiàn)能力,GAMA等人和HIDASI等人提出基于RNN循環(huán)神經(jīng)網(wǎng)絡(luò)的序列推薦模型[7,8],取得很好的推薦效果;KANG等人和WU 等人采用自注意力機(jī)制網(wǎng)絡(luò)[9,10]進(jìn)行序列推薦,緩解了循環(huán)神經(jīng)網(wǎng)絡(luò)長(zhǎng)距離依賴的問(wèn)題.隨著圖神經(jīng)網(wǎng)絡(luò)的出現(xiàn),一些人開(kāi)始尋求用圖神經(jīng)網(wǎng)絡(luò)表示序列關(guān)系,例如,WANG[11]等人利用圖神經(jīng)網(wǎng)絡(luò)模型來(lái)進(jìn)行推薦,同樣取得較好的推薦效果.
傳統(tǒng)推薦系統(tǒng)中提升多樣性的方法可分為兩類(lèi):列表重新排序和多樣性建模方法.列表重新排序法是在主算法計(jì)算出推薦結(jié)果的基礎(chǔ)上提升推薦列表的多樣性的方法,例如,Said等人提出的k-最遠(yuǎn)鄰評(píng)估算法[12],比以往的k-最近鄰?fù)扑]算法提升了推薦的多樣性;Ribeiro等人提出的多目標(biāo)優(yōu)化算法[13]通過(guò)采用強(qiáng)度帕累托進(jìn)化算法同時(shí)優(yōu)化多樣性和準(zhǔn)確性目標(biāo),提升了推薦列表的多樣性;多樣性建模法是對(duì)多樣性和準(zhǔn)確度共同建模,通過(guò)優(yōu)化模型的參數(shù),來(lái)提高推薦的多樣性同時(shí)保證推薦的準(zhǔn)確性,如,Hao等人提出,在損失函數(shù)中加入多樣化正則項(xiàng)可以提升多樣性效果[5].
由于傳統(tǒng)的提升推薦多樣性的方法不能直接應(yīng)用于序列推薦,一些研究人員進(jìn)行了提升序列推薦多樣性的研究工作,方法如下:RAZA等人提出聯(lián)合學(xué)習(xí)方法提升推薦多樣性[14],用LTSM模型表示用戶的長(zhǎng)短期興趣,用注意力機(jī)制表示的用戶的多樣性興趣的方法,實(shí)現(xiàn)了多樣性的推薦;Wang等人提出一種混合通道模型[15]可以覆蓋多目標(biāo)任務(wù),實(shí)現(xiàn)基于序列推薦列表的多樣性.
通過(guò)剖析序列推薦的研究工作可以發(fā)現(xiàn),基于序列的推薦系統(tǒng)存在以下兩方面問(wèn)題:一方面,預(yù)測(cè)下一次的交互物品的方法,忽視了用戶興趣未來(lái)趨勢(shì),不能滿足推薦需求.例如,用戶的喜好序列是手機(jī)-手機(jī)殼-藍(lán)牙耳機(jī),用戶在購(gòu)物網(wǎng)站上購(gòu)買(mǎi)了手機(jī)之后,卻在實(shí)體店中購(gòu)買(mǎi)了手機(jī)殼,購(gòu)物網(wǎng)站如果僅能預(yù)測(cè)出用戶要買(mǎi)手機(jī)殼,就會(huì)丟失用戶需要購(gòu)買(mǎi)藍(lán)牙耳機(jī)這個(gè)興趣趨勢(shì),失去一次交易機(jī)會(huì);另一方面,以往提升推薦多樣性的方法只針對(duì)用戶的一個(gè)興趣向量進(jìn)行多樣性推薦,在提升多樣性的同時(shí)必然會(huì)造成推薦準(zhǔn)確性的降低.因此,本文采用多向量表示用戶多樣性興趣,將提升推薦的多樣性作為模型目標(biāo)任務(wù),提出了一種融合知識(shí)圖譜與注意力機(jī)制的序列推薦算法.
本文方法SR-KGA是一種引入知識(shí)圖譜信息,用注意力機(jī)制表示序列信息,預(yù)測(cè)用戶未來(lái)動(dòng)態(tài)興趣的推薦方法.具體做法如下:首先,引入物品在知識(shí)圖譜中的外部信息,構(gòu)建知識(shí)子圖譜,用TransR[16]方法對(duì)子圖譜做預(yù)訓(xùn)練,其次,結(jié)合圖卷積神經(jīng)網(wǎng)絡(luò)[20]和自注意力機(jī)制共同挖掘圖譜內(nèi)物品關(guān)系信息和序列信息,構(gòu)建seq2seq模型,將模型任務(wù)確定為預(yù)測(cè)未來(lái)用戶與物品的交互的物品序列;最后,在模型訓(xùn)練中,用多樣化正則項(xiàng)來(lái)約束預(yù)測(cè)序列中的物品差異化,提升推薦列表的物品多樣性.本模型在保證了推薦準(zhǔn)確度的同時(shí),提高了推薦列表內(nèi)的物品多樣性,實(shí)現(xiàn)了個(gè)性化推薦.該方法簡(jiǎn)化圖如圖2所示.
圖2 SR-KGA方法模型簡(jiǎn)化圖Fig.2 Simplified diagram of SR-KGA model
在圖2中,S為訓(xùn)練集內(nèi)的序列物品,
下面分別介紹方法中每個(gè)步驟.
知識(shí)圖譜是一種有向信息異構(gòu)圖,數(shù)據(jù)形式是包含“頭節(jié)點(diǎn)”、“尾節(jié)點(diǎn)”與“關(guān)系”這樣的三元組.在圖譜中包含了海量的物品與物品之間,物品與屬性之間、物品與其他節(jié)點(diǎn)的信息,為物品表示的準(zhǔn)確性研究提供了豐富外部信息和關(guān)系數(shù)據(jù)[21].由于知識(shí)圖譜數(shù)據(jù)信息過(guò)多,里面有很多與推薦無(wú)關(guān)的冗余信息,直接引入知識(shí)圖譜計(jì)算不僅耗費(fèi)計(jì)算機(jī)資源,而且會(huì)導(dǎo)致模型的整體訓(xùn)練速度過(guò)慢.所以,需要對(duì)知識(shí)圖譜進(jìn)行預(yù)處理與預(yù)訓(xùn)練.
知識(shí)圖譜預(yù)處理的做法是在知識(shí)圖譜數(shù)據(jù)中提取出包含需要推薦物品的知識(shí)子圖譜.其作用在于剔除知識(shí)圖譜中與推薦物品無(wú)連通性的“節(jié)點(diǎn)”和“關(guān)系”,減少訓(xùn)練的數(shù)據(jù)量.
知識(shí)圖譜數(shù)據(jù)預(yù)訓(xùn)練的做法是采用的常用知識(shí)圖譜嵌入方法TransR[16]將子圖譜中“節(jié)點(diǎn)”和“關(guān)系”信息嵌入到連續(xù)向量空間中,通過(guò)這樣的預(yù)訓(xùn)練方式,可以獲得知識(shí)子圖譜中所有“節(jié)點(diǎn)”和“關(guān)系”的低維稠密嵌入向量.
(1)
公式(1)中,Wr=Ra×b是關(guān)系r的變換矩陣,將實(shí)體從a維實(shí)體空間投影到b維關(guān)系空間.g(h,r,t)得分越低,說(shuō)明三元組的嵌入表示效果越理想,反之亦然.
TransR的訓(xùn)練過(guò)程考慮了圖譜之中圖結(jié)構(gòu)的差異性,通過(guò)隨機(jī)生成負(fù)例的方式,增加不同關(guān)系之間的差異性,計(jì)算成對(duì)排序損失,公式為:
(2)
公式(2)中,max(x,y)的目的是計(jì)算出x和y之間的最大值,t是知識(shí)圖譜中h、r正確的對(duì)應(yīng)值,t′是h、r對(duì)應(yīng)不正確的值,t′的獲得方法是通過(guò)替換元祖(h,r,t′)正確的實(shí)體,得到的不正確的三元組(h,r,t′).通過(guò)使正確的關(guān)系和不正確關(guān)系之間的差異最大化,來(lái)進(jìn)行訓(xùn)練知識(shí)圖譜.預(yù)訓(xùn)練在模型訓(xùn)練之前進(jìn)行訓(xùn)練的,預(yù)訓(xùn)練過(guò)程中采用隨機(jī)梯度下降方法優(yōu)化模型,最終通過(guò)預(yù)訓(xùn)練得到知識(shí)子圖譜的低維稠密嵌入向量.
嵌入模塊是對(duì)物品信息進(jìn)行向量表示,把物品映射到向量空間,方便傳入神經(jīng)網(wǎng)絡(luò)的下一層,進(jìn)行后續(xù)的神經(jīng)網(wǎng)絡(luò)計(jì)算.嵌入模塊分為3個(gè)并列的層:知識(shí)圖譜卷積嵌入層、屬性嵌入層和位置嵌入層,下面分別介紹這3個(gè)嵌入層.
3.2.1 知識(shí)圖譜嵌入層
為了進(jìn)一步挖掘知識(shí)圖譜中的圖結(jié)構(gòu)信息,知識(shí)圖譜嵌入層采用圖卷積神經(jīng)網(wǎng)絡(luò)對(duì)預(yù)訓(xùn)練后的圖譜向量進(jìn)行了圖卷積操作,生成序列中物品的表示向量.由于圖卷積神經(jīng)網(wǎng)絡(luò)GCN只能在一個(gè)確定的圖中去學(xué)習(xí)頂點(diǎn)的嵌入向量,而序列推薦中,每個(gè)序列都需要生成一個(gè)子圖,圖大小不是確定的,不能直接采用GCN進(jìn)行計(jì)算.所以,此處采用簡(jiǎn)化的GraphSAGE[17]圖卷積方式進(jìn)行計(jì)算.簡(jiǎn)化方法是取消了GraphSAGE控制采樣鄰居數(shù)量的操作,利用平均聚合函數(shù),將目標(biāo)物品的一階鄰居,二階鄰居進(jìn)行聚合操作,生成物品的卷積嵌入向量,進(jìn)而表示一個(gè)序列中的所有物品的向量.圖卷積每一層卷積方法公式如下:
hd←σ(W·MEAN(hk-1))
(3)
在公式(3)中,MEAN(x)表示求解x的平均值,k代表的是知識(shí)圖的階數(shù),σ為非線性激活函數(shù),其中W∈Ra′×a是可訓(xùn)練權(quán)重矩陣.經(jīng)過(guò)平均聚合后得到目標(biāo)物品的嵌入向量.
為了方便表示,對(duì)于所有物品{i1,i2,…,in}的知識(shí)圖譜嵌入向量表示如下:
kgembedding:{EK1,EK2,…,EKn}
(4)
由于不同序列之間會(huì)存重復(fù)物品,對(duì)每個(gè)序列都構(gòu)建子圖進(jìn)行訓(xùn)練,會(huì)造成計(jì)算資源的浪費(fèi),所以在訓(xùn)練時(shí),把多個(gè)序列劃分為一組,按組中物品構(gòu)建子圖共同訓(xùn)練物品的嵌入向量.再把這些向量放回到序列中,作為序列的嵌入向量進(jìn)行下一步的計(jì)算.
如圖3所示,就是一個(gè)物品圖譜信息傳遞的過(guò)程,其中,i表示一個(gè)物品的向量,e表示知識(shí)圖譜中的實(shí)例節(jié)點(diǎn).
圖3 輸入節(jié)點(diǎn)i的特征表示Fig.3 Feature representation of input node i
3.2.2 屬性嵌入層
屬性嵌入模塊是表示和挖掘物品屬性的模塊,通過(guò)采用one-hot編碼對(duì)物品屬性編碼,獲取物品的屬性嵌入向量.具體方法是,其中屬性值為真,則用1表示,屬性值為假,則用0表示.物品屬性嵌入表示如表2所示.
表2 物品多屬性編碼方式Table 2 Multi-attribute coding methods of items
如此,定義對(duì)物品列表{i1,i2,…,in}的屬性向量嵌入表示如下:
attributeembeding:{Ea1,Ea2,…,Ean}
(5)
此處,將屬性嵌入矩陣M1用表示,知識(shí)圖譜嵌入矩陣用M2表示,然后,拼接兩個(gè)矩陣,構(gòu)造嵌入矩陣:
M=[M1,M2],∈Rn×d
(6)
其中d為嵌入向量的維數(shù).M中的每一行向量都代表物對(duì)應(yīng)品的嵌入向量.對(duì)于每個(gè)輸入的序列來(lái)說(shuō),嵌入后的矩陣為M∈Rls×d,M中的每個(gè)行向量代表對(duì)應(yīng)序列的物品嵌入向量.
3.2.3 位置嵌入層
在序列推薦中,序列中物品位置對(duì)未來(lái)瀏覽或購(gòu)買(mǎi)物品的有不同程度的影響.由于自注意力機(jī)制對(duì)位置信息不敏感,因此,為了挖掘序列推薦中的物品位置信息,提升序列中物品位置因素對(duì)推薦結(jié)果的影響效果,此處引入位置嵌入模塊.在文獻(xiàn)[18]中已經(jīng)證明,位置嵌入的方法有很多種,不同位置嵌入方法之間的推薦效果差距不大,因此,此處采用和文獻(xiàn)[18]一樣的位置嵌入方法(positional embedding),這是一種正余弦函數(shù)位置嵌入方法可以更方便控制推薦序列的長(zhǎng)度.
該位置嵌入方法公式如下:
(7)
(8)
其中,pos為物品在序列中在排位序號(hào),m為位置嵌入的維度,其數(shù)值等于物品的嵌入維度,ls為序列的長(zhǎng)度,PE為位置嵌入的結(jié)果.這樣運(yùn)算可以使得位置嵌入向量的維度與物品嵌入向量的維度相同,然后將上述兩個(gè)向量進(jìn)行相加.這里之所以不采用拼接,是因?yàn)?,在文獻(xiàn)[18]中已經(jīng)證明,相加的結(jié)果好于拼接結(jié)果,并且相加后不會(huì)增加維度,可以使模型運(yùn)算速度更快,所以此處采用相加來(lái)進(jìn)行計(jì)算,公式如下:
(9)
公式(9)中,Msl為序列S上第l位置上的物品嵌入向量,EPl序列上第l位置上的物品嵌入向量,fE(Sn)表示對(duì)序列進(jìn)行嵌入計(jì)算.
接下來(lái)為嵌入模塊訓(xùn)練嵌入層的參數(shù):
E=WE·fE(Sn)+θ
(10)
在公式(10)中,E表示物品向量經(jīng)過(guò)嵌入層后的結(jié)果,作為下一層的輸入,WE為可訓(xùn)練的嵌入層參數(shù),θ為可訓(xùn)練的偏置權(quán)重.
編碼器模塊是對(duì)序列信息進(jìn)行注意力編碼的操作.在編碼器模塊中,包括自注意力層,正則化層和前向傳播層.序列物品進(jìn)行嵌入后的嵌入向量經(jīng)過(guò)編碼器后,會(huì)生成包含上下文信息的編碼矩陣,流程圖見(jiàn)圖4所示.
圖4 編碼器模塊的簡(jiǎn)化圖Fig.4 Simplified diagram of encoder
編碼器的第1層是自注意力層,采用“Scaled Dot-Product Attention”.通過(guò)構(gòu)造3個(gè)矩陣,分別是查詢矩陣Q、鑰匙矩陣K和目標(biāo)矩陣V.然后計(jì)算矩陣查詢矩陣Q與鑰匙矩陣K的點(diǎn)積,并應(yīng)用softmax激活函數(shù)獲得的權(quán)重值.公式如下:
(11)
A(E)=Attention(EWQ,EWK,EWV)
(12)
接下來(lái),對(duì)注意力層的輸出進(jìn)行正則化LayerNorm層和Dropout操作.為了避免深度神經(jīng)網(wǎng)絡(luò)出現(xiàn)過(guò)擬合、消失梯度的問(wèn)題,引入殘差網(wǎng)絡(luò),將編碼器輸入與注意力層輸出相加.然后送入前向傳播層,使用RELU激活函數(shù),最后得到編碼層的輸出,此層公式如下:
g(A(E))=Dropout(LayerNorm(A(E)))
(13)
N(E)=E+g(A(E))
(14)
Enout=RELU(W×N(E)+b)
(15)
公式(13)是對(duì)自注意力機(jī)制的結(jié)果進(jìn)行正則化LayerNorm和Dropout的操作;公式(14)為將上一層的輸出與編碼器的輸入進(jìn)行簡(jiǎn)單相加,這樣的做法是為了防止信息隨著網(wǎng)絡(luò)的加深而丟失;公式(15)為簡(jiǎn)單的前向傳播,使用RELU作為激活函數(shù),計(jì)算結(jié)果Enout為編碼器輸出,其維度與輸入維度一致.
解碼器模塊的目的是計(jì)算得出用戶未來(lái)興趣物品.這里使用了教師監(jiān)督系統(tǒng),因?yàn)?,預(yù)測(cè)物品序列中的物品越靠后,正確預(yù)測(cè)的可能就會(huì)越低,所以,不能簡(jiǎn)單計(jì)算后期用戶興趣與歷史興趣的關(guān)系,應(yīng)隨時(shí)對(duì)用戶的興趣偏好進(jìn)行修正.方法是,無(wú)論預(yù)測(cè)的下一次是否正確,都會(huì)向解碼器中送入真實(shí)的、正確的數(shù)據(jù),用來(lái)預(yù)測(cè)之后的數(shù)據(jù),以保證未來(lái)預(yù)測(cè)的可靠性.由于這和真實(shí)的情況不大相同,所以,僅在模型訓(xùn)練階段會(huì)使用教師監(jiān)督系統(tǒng),模型訓(xùn)練完成之后,不會(huì)送入真實(shí)的數(shù)據(jù),具體測(cè)試方法將在實(shí)驗(yàn)分析中論述.解碼器的簡(jiǎn)化結(jié)構(gòu)如圖5所示.
圖5 解碼器模塊訓(xùn)練過(guò)程的簡(jiǎn)化圖Fig.5 Simplified diagram of decoder
解碼器模塊第一層是遮蓋層.由于教師監(jiān)督方法會(huì)送入真實(shí)的、正確的數(shù)據(jù),這會(huì)造成模型還沒(méi)開(kāi)始預(yù)測(cè)就已經(jīng)知道了結(jié)果,即“泄題”問(wèn)題.此處引入遮蓋層對(duì)目標(biāo)序列進(jìn)行遮蓋,防止模型看到未來(lái)的結(jié)果.當(dāng)模型訓(xùn)練時(shí),每預(yù)測(cè)出一個(gè)物品編號(hào)之后,遮蓋層減少遮蓋一個(gè)物品,把正確的物品送入網(wǎng)絡(luò)中用來(lái)預(yù)測(cè)下一次交互物品,具體的做法如下:
遮蓋層是維度為lp×lp的單位下三角矩陣,這里命名為Mask,見(jiàn)公式(12),矩陣中數(shù)字為0的位置表示該位置對(duì)應(yīng)序列位置的向量不參與計(jì)算,數(shù)字為1的位置表示參與計(jì)算.
(16)
同時(shí),目標(biāo)序列在送入遮蓋層之前還需要添加開(kāi)始標(biāo)記
遮蓋層后面兩層是自注意力層、正則化層,這兩層是為了進(jìn)行與編碼一樣的操作,對(duì)送入的目標(biāo)序列進(jìn)行編碼,挖掘目標(biāo)序列中物品的上下文關(guān)系,并使目標(biāo)序列向量維度與歷史序列的向量維度相同,便于計(jì)算他們之間的注意力關(guān)系權(quán)重.公式如下:
N(Epr)=Epr+g(A(Epr))
(17)
公式(17)中,Epr為目標(biāo)序列經(jīng)過(guò)嵌入層后的向量表示,g(A(Epr))同公式計(jì)算方法相同,計(jì)算的是注意力LayerNorm和Dropout層的輸出,N(Epr)為將上一層的輸出與解碼器的輸入進(jìn)行簡(jiǎn)單相加.通過(guò)公式計(jì)算,可以獲得目標(biāo)序列的嵌入向量.
下一層多頭注意力層的輸入分兩個(gè)部分,包括上一層的輸出和是編碼器輸出.這里采用多頭注意力的原因是,多頭注意力能挖掘出預(yù)測(cè)序列和目標(biāo)序列之間的多種注意力的權(quán)重關(guān)系,公式如下:
(18)
MultiHead(Q,K,V)=concat(head1,…,headh)WO
(19)
經(jīng)過(guò)多頭注意力層后,是正則化LayerNorm層、dropout層和全連接層,公式如下:
g(MA(Epr))=Dropout(LayerNorm(MA(Epr)))
(20)
N(Epr)=MA(Epr)+g(MA(Epr))
(21)
(22)
Deout=RELU(W×N(Epr)+b)
(23)
在公式(20)中,MA表示的是多頭注意力MultiHead計(jì)算方法;在公式(21)中,N(Epr)得到的是目標(biāo)序列物品向量,每一個(gè)向量代表用戶未來(lái)的一個(gè)興趣.為了挖掘用戶興趣之間差異性,用公式(22)計(jì)算不同向量之間的差異性,此處采用余弦相似度作為計(jì)算多樣性方法,之后通過(guò)多樣性正則化,以保證序列推薦物品的多樣性.公式(23)為解碼器的輸出層,可以直接輸出預(yù)測(cè)物品的編號(hào),這里用Deout表示解碼器的輸出.
在損失函數(shù)中,除了采用負(fù)對(duì)數(shù)似然函數(shù)作為損失函數(shù)外,還加入多樣化正則項(xiàng),以此保證推薦的準(zhǔn)確性的同時(shí)提升推薦列表中物品多樣性.由于解碼器輸出的是多個(gè)的向量,向量的數(shù)量就是序列的長(zhǎng)度,此處的思想是,另不同向量最大程度趨近于用戶不同時(shí)間段的興趣,同時(shí),另向量之間的差異性最大.計(jì)算方法如下:
(24)
(25)
公式(24)用softmax方法計(jì)算預(yù)測(cè)向量和目標(biāo)物品向量的交互概率,公式(25)為損失函數(shù)計(jì)算公式,l為預(yù)測(cè)序列的長(zhǎng)度,divnorm是公式(22)中計(jì)算的結(jié)果,表示推薦向量的之間多樣性差異.
本次實(shí)驗(yàn)選用Movielens1M 和 Lastfm2k兩個(gè)數(shù)據(jù)集作為實(shí)驗(yàn)數(shù)據(jù)集,Movielens1M數(shù)據(jù)集是針對(duì)電影的評(píng)分常用的公開(kāi)推薦數(shù)據(jù)集,包含豐富的交互數(shù)據(jù);Lastfm2k數(shù)據(jù)集是音樂(lè)網(wǎng)站Last.fm 的對(duì)音樂(lè)評(píng)分的數(shù)據(jù)集,里面包括用戶社交網(wǎng)絡(luò)、標(biāo)記、音樂(lè)藝術(shù)家和收聽(tīng)信息.Movielens1M 和 Lastfm2k數(shù)據(jù)集都是最常用的公開(kāi)推薦數(shù)據(jù)集,在很多推薦工作中被用作實(shí)驗(yàn)的數(shù)據(jù)基礎(chǔ).
知識(shí)圖譜選取的是在Microsoft Satori知識(shí)庫(kù)上抽取的知識(shí)子圖譜,抽取后的圖譜包括上述數(shù)據(jù)集的數(shù)據(jù)及關(guān)系數(shù)據(jù)和節(jié)點(diǎn).數(shù)據(jù)集和知識(shí)圖譜信息見(jiàn)表3所示.
表3 數(shù)據(jù)集信息表Table 3 Data set information table
通過(guò)兩個(gè)指標(biāo)對(duì)結(jié)果進(jìn)行評(píng)價(jià),分別是命中率,和多樣性.命中率代表公式分別如下:
(26)
(27)
公式(26)是命中率計(jì)算公式,其中nhit是推薦的命中目標(biāo)物品的次數(shù),N是推薦的次數(shù).公式(27)是推薦列表多樣性計(jì)算公式,其中Sim()是相似度度量函數(shù),本方法采用余弦相似度來(lái)計(jì)算列表中任意兩個(gè)物品(x,y) 向量的相似度.
接下來(lái)構(gòu)造序列數(shù)據(jù),通過(guò)滑動(dòng)窗口在數(shù)據(jù)集上按時(shí)間順序構(gòu)造序列數(shù)據(jù),提取固定長(zhǎng)度的序列,把序列中末尾1/10序列長(zhǎng)度的物品作為標(biāo)簽列表.對(duì)所有用戶的序列數(shù)據(jù)都提取后,打亂混合到一起,作為訓(xùn)練數(shù)據(jù)S,并對(duì)其以(8∶2)的比例劃分訓(xùn)練集和測(cè)試集.例如,將Movielens1M中每個(gè)序列長(zhǎng)度定為110個(gè),將前100個(gè)作為序列輸入,后10個(gè)作為預(yù)測(cè)序列輸出標(biāo)簽;將Lastfm2k中每個(gè)序列長(zhǎng)度定位13個(gè),將前10個(gè)物品作為序列輸入,后3個(gè)物品作為預(yù)測(cè)序列輸出標(biāo)簽.
共與3個(gè)常用算法進(jìn)行對(duì)比實(shí)驗(yàn)
ItemCF[19]:基于物品的協(xié)同過(guò)濾推薦算法.
GRU4REC[8]:基于RNN循環(huán)神經(jīng)網(wǎng)絡(luò)的序列推薦算法.
SASREC[9]:基于自注意力機(jī)制的序列推薦算法.
為便于對(duì)比,ItemCF算法將每個(gè)序列當(dāng)作用戶,來(lái)預(yù)測(cè)下一次物品,進(jìn)而計(jì)算出推薦列表.由于GRU4REC、SASREC方法在推薦中進(jìn)行抽樣數(shù)據(jù)集上進(jìn)行排序,計(jì)算結(jié)果不具有全局性,為了對(duì)比的公平性,本方法對(duì)其改為在所有物品列表中進(jìn)行物品召回推薦,然后進(jìn)行對(duì)比.
在驗(yàn)證過(guò)程中,由于訓(xùn)練時(shí)解碼器采用了教師監(jiān)督系統(tǒng),送入了真實(shí)目標(biāo)序列的物品數(shù)據(jù),為了在測(cè)試時(shí)模擬真實(shí)情況,所以測(cè)試階段,對(duì)解碼器部分進(jìn)行一些修改,具體方法如下:1)在解碼器內(nèi)輸入編碼器輸出和開(kāi)始標(biāo)記,不輸入測(cè)試集的真實(shí)目標(biāo)序列;2)把輸出的沒(méi)有經(jīng)過(guò)softmax層的向量作為下一次物品向量,加入開(kāi)始標(biāo)記,送入解碼器,從而輸出下個(gè)物品編號(hào),并以此類(lèi)推,預(yù)測(cè)出目標(biāo)序列;3)通過(guò)人為設(shè)置輸出序列的長(zhǎng)度,使得輸出序列長(zhǎng)度與真實(shí)目標(biāo)序列長(zhǎng)度相同,進(jìn)行對(duì)比,驗(yàn)證模型的效果.測(cè)試流程圖如圖6所示.
圖6 模型驗(yàn)證簡(jiǎn)化流程圖Fig.6 Flow chart of model validation
在圖6中,S為測(cè)試集的測(cè)試樣本序列,
預(yù)訓(xùn)練中,采用64維向量表示物品向量,通過(guò)知識(shí)圖譜TransR[16]嵌入實(shí)體向量,在預(yù)訓(xùn)練中總共訓(xùn)練30000輪,采用20%的負(fù)采樣方法,經(jīng)過(guò)嵌入輸出知識(shí)圖譜所有實(shí)體的向量表示;在模型訓(xùn)練部分;多頭注意力機(jī)制采用2層多頭注意力層,注意力頭數(shù)為2個(gè);自注意力層,采用2層自注意力層,知識(shí)圖卷積GraphSAGE采用卷積層數(shù)為2層,這是由于GraphSAGE[17]中對(duì)卷積的層數(shù)已經(jīng)進(jìn)行了相關(guān)實(shí)驗(yàn),驗(yàn)證2層的卷積的效果較好,過(guò)多的化可能導(dǎo)致過(guò)平滑的問(wèn)題,所以本文采用2層作為圖卷積的層數(shù);前向傳播神經(jīng)節(jié)點(diǎn)為64個(gè),這樣可以保證與預(yù)訓(xùn)練的物品向量一致,采用dropout層的概率為0.2,構(gòu)建好模型后,通過(guò)隨機(jī)梯度下降算法進(jìn)行優(yōu)化模型,以lr=0.01的步長(zhǎng)迭代更新模型參數(shù),通過(guò)訓(xùn)練模型取得理想的效果.
通過(guò)大量實(shí)驗(yàn)驗(yàn)證,發(fā)現(xiàn)SR-KGA方法在推薦列表的命中率和列表內(nèi)物品多樣性上表現(xiàn)明顯優(yōu)于其他算法,現(xiàn)將實(shí)驗(yàn)結(jié)果繪制成折線圖,見(jiàn)圖7、圖8所示.同時(shí),為了證明正則化項(xiàng)的有效性,設(shè)置了有正則化項(xiàng)和沒(méi)有正則化項(xiàng)的兩組模型進(jìn)行了對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果見(jiàn)表4所示.
圖7 在Movielen1M數(shù)據(jù)集上的命中率和多樣性對(duì)比Fig.7 Comparison of the hit rate and diversity on the Movielen1M data set
圖8 在Lastfm2k數(shù)據(jù)集上的命中率和多樣性對(duì)比Fig.8 Comparison of the hit rate and diversity on the Lastfm2k data set
表4 有正則化項(xiàng)和無(wú)正則化項(xiàng)的實(shí)驗(yàn)結(jié)果表Table 4 A result table with and without a normalization layer
通過(guò)對(duì)比各算法在兩個(gè)數(shù)據(jù)集上的命中率和多樣性表現(xiàn)可得出,在命中率上來(lái)看,本文算法再兩個(gè)數(shù)據(jù)集上都優(yōu)于GRU4REC,這說(shuō)明SR-KGA同GRU4REC相比較,可以有效的提高序列推薦的準(zhǔn)確度;在Movielen1M數(shù)據(jù)集上,SR-KGA優(yōu)于ItemCF方法,在Lastfm2k數(shù)據(jù)集上,略差于ItemCF方法,已知訓(xùn)練時(shí)采用 Lastfm2k數(shù)據(jù)集的序列長(zhǎng)度較短,僅為13個(gè)物品,而Movielen1M數(shù)據(jù)集的序列長(zhǎng)度較長(zhǎng)為110個(gè)物品組成,結(jié)果證明SR-KGA的方法可以更好的捕捉長(zhǎng)序列信息;與SASREC方法相比,推薦物品多的時(shí),SR-KGA優(yōu)于SASREC方法,而這兩種方法的區(qū)別在加入知識(shí)圖譜,說(shuō)明知識(shí)圖譜嵌入的方式對(duì)推薦的準(zhǔn)確度有一定的提升作用.命中率結(jié)果反映出,用多向量表示用戶未來(lái)興趣變化趨勢(shì)的方法不僅不會(huì)降低推薦的準(zhǔn)確性,而且對(duì)推薦的效果還會(huì)有一定的提升.
從推薦物品多樣性上看,SR-KGA效果均好于其它方法,尤其是在推薦物品數(shù)目較少時(shí),SR-KGA的多樣性優(yōu)先好于其它方法.隨著推薦列表的序列長(zhǎng)度的增加,相似物品增多,SR-KGA的多樣性才會(huì)下降.反觀其它方法,整體的推薦多樣性在短列表與預(yù)測(cè)上推薦多樣性就較低,隨著推薦物品的增多,多樣性才緩慢的增加,這表明,其他方法的推薦列表內(nèi)物品多樣性較低.對(duì)比數(shù)據(jù)集發(fā)現(xiàn)Movielen1M數(shù)據(jù)集的物品數(shù)量較少,Lastfm2k數(shù)據(jù)集的物品數(shù)量的較多,證明了SR-KGA無(wú)論是在小數(shù)據(jù)和大數(shù)據(jù)量上均可以提升推薦的多樣性,同時(shí)保證推薦的精確性.
通過(guò)觀察有正則化項(xiàng)和無(wú)正則化項(xiàng)的實(shí)驗(yàn)結(jié)果表可以發(fā)現(xiàn),加入多樣性正則化后,推薦列表中的物品多樣性更好,同時(shí)推薦命中率變化不大或基本沒(méi)變化.這個(gè)結(jié)果證明了加入正則化項(xiàng)可以提升的推薦列表的物品多樣性,驗(yàn)證了多樣性正則化的有效性.
眾所周知,預(yù)訓(xùn)練可以大幅度提升模型的訓(xùn)練的收斂速度.為了測(cè)試SR-KGA實(shí)驗(yàn)中預(yù)訓(xùn)練的效果,在Movielen1M數(shù)據(jù)集上進(jìn)行了簡(jiǎn)單的測(cè)試,在推薦效果一樣的情況下(用準(zhǔn)確度和多樣性作為評(píng)價(jià)結(jié)果),采用預(yù)訓(xùn)練模型的在90輪就可以完成收斂;假如不用預(yù)訓(xùn)練的向量,而采用隨機(jī)初始化的向量,模型會(huì)在200輪左右才能完成收斂,訓(xùn)練速度提升了122.2%.這證明了,采用TransR對(duì)知識(shí)圖譜進(jìn)行預(yù)訓(xùn)練可以顯著提升模型訓(xùn)練速度.
綜合實(shí)驗(yàn)結(jié)果來(lái)看,可以得出如下3條結(jié)論:1)引入知識(shí)圖譜對(duì)物品進(jìn)行嵌入表示,可以提高物品表示準(zhǔn)確性,進(jìn)而提升推薦準(zhǔn)確性;2)用注意力機(jī)制構(gòu)建seq2seq模型來(lái)預(yù)測(cè)未來(lái)用戶交互序列的方法是可行的,用多向量來(lái)表示用戶興趣方法是有效的;3)對(duì)于推薦結(jié)果命中率和多樣性這樣的二元優(yōu)化問(wèn)題,采用損失函數(shù)中加入多樣性正則項(xiàng),可以保證準(zhǔn)確度的同時(shí)提高推薦多樣性.
本文針對(duì)序列推薦中出現(xiàn)的推薦內(nèi)容同質(zhì)化的問(wèn)題,提出了一種融合知識(shí)圖譜和注意力機(jī)制的seq2seq模型的序列推薦方法SR-KGA.此方法用用知識(shí)圖譜外部數(shù)據(jù)對(duì)物品進(jìn)行信息擴(kuò)充表示,用注意力機(jī)制構(gòu)建seq2seq模型來(lái)預(yù)測(cè)用戶未來(lái)一段時(shí)期內(nèi)交互物品的序列,把多樣性正則項(xiàng)加入損失函數(shù)中,提高了推薦列表的個(gè)體多樣性的同時(shí),保證推薦準(zhǔn)確度.通過(guò)在兩個(gè)數(shù)據(jù)集上的大量實(shí)驗(yàn)結(jié)果表明,SR-KGA的在保證準(zhǔn)確性的情況下,多樣性優(yōu)于其他算法,實(shí)現(xiàn)了用戶個(gè)性化推薦.在以后的工作中,計(jì)劃通過(guò)整合豐富的上下文信息(例如停留時(shí)間、動(dòng)作類(lèi)型、位置、設(shè)備等)來(lái)擴(kuò)展模型,研究處理時(shí)間多樣性的個(gè)性化推薦方法.