鄭 磊
(中國西南電子技術(shù)研究所, 成都 610036)
隨著互聯(lián)網(wǎng)技術(shù)快速發(fā)展,用戶可以同時與諸多領(lǐng)域中的事件交互,例如電子商務(wù)(用戶購買物品)[1]、教育(用戶注冊MOOC課程)[2],以及社交和協(xié)作平臺(用戶在Reddit的群組中發(fā)帖)[3]。同一用戶可能在一段時間內(nèi)與不同的事件進行交互,這些相互作用也會隨著時間發(fā)生變化。隨著時間變化,交互創(chuàng)建了一個用戶和物品之間的時域交互網(wǎng)絡(luò)。準(zhǔn)確實時地推薦物品,以及預(yù)測用戶狀態(tài)的變化是需要解決的基本問題。例如,預(yù)測學(xué)生何時會退出 MOOC課程對于制定早期干預(yù)措施非常重要[4];預(yù)測用戶何時會在Reddit和維基百科等社交平臺上進行惡意評論[5],以確保平臺安全性和完整性等。
表示學(xué)習(xí)又被稱為學(xué)習(xí)實體的低維嵌入,是一種可以表示用戶和物品的屬性演化的方法。然而生成動態(tài)嵌入方法面臨如下挑戰(zhàn):
1) 大多數(shù)現(xiàn)有方法僅在用戶采取行動時為用戶生成嵌入。但是,考慮當(dāng)日進行購買并且其嵌入已更新的用戶。如果在第二天、一周甚至一個月后返回平臺,嵌入將保持不變。因此,無論該用戶何時返回,都會對其做出相同的預(yù)測和建議。然而,用戶的意圖會隨著時間而改變,因此其嵌入需要更新(投影)到當(dāng)前查詢時刻。如何隨著時間的推移準(zhǔn)確預(yù)測用戶和物品的嵌入軌跡成為一個難點。
2) 實體既具有不隨時間變化的靜止特性,又具有演化特性。現(xiàn)有的方法在生成嵌入時通常僅考慮兩者之一。然而,必須在一個統(tǒng)一的框架中考慮上述2種特性,以利用這2種不同的信息。
3) 許多現(xiàn)有方法通過對每個用戶對應(yīng)的所有物品進行評分來預(yù)測用戶與物品的交互信息。這類方法具有線性時間復(fù)雜度,在具有數(shù)百萬個物品的場景中不實用。然而,需要設(shè)計在常量時間內(nèi)可以給用戶推薦物品的方法。
基于上述挑戰(zhàn),本文提出一種在時域交互網(wǎng)絡(luò)中預(yù)測動態(tài)嵌入軌跡的方法(UICRNN),它學(xué)習(xí)時域交互網(wǎng)絡(luò)中生成的所有用戶和物品的嵌入軌跡。當(dāng)用戶采取行動時,用戶和物品的嵌入被更新,投影算子將預(yù)測用戶未來的嵌入軌跡。
對用戶和物品通常采用2種嵌入方式:靜態(tài)嵌入和動態(tài)嵌入。靜態(tài)嵌入表示實體長期靜止,而動態(tài)嵌入表示實體時刻變化。使用UICRNN進行學(xué)習(xí),上述2種嵌入用于交互關(guān)系軌跡的生成。這使UICRNN不但能夠根據(jù)用戶的靜態(tài)屬性進行預(yù)測,而且可以根據(jù)用戶的動態(tài)屬性進行預(yù)測。
UICRNN由2個主要操作組成:更新操作和投影操作。更新操作由2個循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNNs)來生成用戶和物品的嵌入。通過把2個RNNs進行耦合連接,使其可以明確地結(jié)合用戶和物品之間的相互依賴關(guān)系。每次交互后,用戶端RNN通過使用物品嵌入更新用戶嵌入。同樣地,物品RNN使用用戶嵌入更新物品嵌入。UICRNN模型還能夠合并交互的特征向量,例如,Reddit帖子文本[6]。UICRNN具有很強的擴展性,它可以通過為每個實體訓(xùn)練一個RNN來處理多種類型的實體類型。
UICRNN使用了投影操作預(yù)測用戶未來的嵌入軌跡。直觀地講,自從用戶上次與任何物品交互以來,用戶的嵌入會在短時間內(nèi)發(fā)生輕微變化,而在很長時間后可能會發(fā)生顯著變化。因此,UICRNN訓(xùn)練了一個時域注意力層,在之前的交互經(jīng)過一段時間后投影用戶的嵌入。嵌入過程在很長一段時間后會發(fā)生顯著變化,然后使用投影的用戶嵌入來預(yù)測用戶最有可能與之交互的物品。
此外,大多數(shù)現(xiàn)有模型通過逐步處理交互,然后從一系列其他的交互關(guān)系中學(xué)習(xí)嵌入,以增加時間順序來保持交互之間的時間依賴性。這使得此類方法無法擴展到具有數(shù)百萬次交互的真實數(shù)據(jù)。因此,本文提出了一種批處理方案,通過創(chuàng)建獨立交互的訓(xùn)練批次來訓(xùn)練模型,這樣每個批次中的交互可以并行處理。為此,從交互網(wǎng)絡(luò)中迭代地選擇獨立的邊集。在每個批次中,每個用戶和物品最多出現(xiàn)一次,并且每個用戶和物品的基于時域排序的交互是單調(diào)遞增的,確保在時間序列上的一致性。
本文的主要貢獻如下:
1)新模型:提出了一種用戶-物品耦合循環(huán)神經(jīng)網(wǎng)絡(luò),稱為UICRNN。其由2個循環(huán)神經(jīng)網(wǎng)絡(luò)來生成用戶和物品的嵌入。訓(xùn)練了一個時域注意力層,在交互經(jīng)過一段時間后投影用戶的嵌入。
2) 新方法:提出了一種新的嵌入方法,可以學(xué)習(xí)用戶和物品的嵌入軌跡,還可以學(xué)習(xí)投影算子,預(yù)測用戶的嵌入軌跡以及預(yù)測未來的交互。此外,提出了一種有效的批處理訓(xùn)練方案來創(chuàng)建獨立但時間一致的訓(xùn)練數(shù)據(jù)批次,這有助于訓(xùn)練所提出的UICRNN模型。
3) 有效性:在未來交互預(yù)測和用戶狀態(tài)變化預(yù)測時,UICRNN優(yōu)于6種最先進的算法。預(yù)測未來交互行為的準(zhǔn)確率至少提高42.91%,預(yù)測用戶狀態(tài)變化的準(zhǔn)確率平均提高了15.79%
本節(jié)討論與本文研究問題密切相關(guān)的工作,涵蓋如下3個領(lǐng)域的內(nèi)容。
深度循環(huán)推薦模型。近期,主要工作采用循環(huán)神經(jīng)網(wǎng)絡(luò)RNN和其變體長短期記憶網(wǎng)絡(luò)LSTM(long short-term memory)或門控循環(huán)單元GRU(gate recurrent unit)來構(gòu)建推薦系統(tǒng)。Wu等[7]使用RNNs從層次型網(wǎng)絡(luò)生成動態(tài)用戶和物品的嵌入。Beutel等[8]和Zhu等[9]學(xué)習(xí)如何將特征融合到嵌入中。Zhao等[10]將用戶的偏好和文本情感特征轉(zhuǎn)化為注意力信息,并結(jié)合不同的LSTM模型來預(yù)測用戶的軌跡。然而,大多數(shù)方法有2個主要缺點:使用物品的one-hot向量作為輸入以更新用戶嵌入,僅包含物品id,忽略物品的當(dāng)前狀態(tài);只為用戶生成動態(tài)嵌入,而不為物品生成動態(tài)嵌入。
動態(tài)協(xié)同進化模型。最近一些研究使用點過程建模[11-12]和基于RNN的建模[13-14]協(xié)同學(xué)習(xí)用戶和物品表示。這些模型的基本思想類似于UICRNN,即學(xué)習(xí)用戶和物品嵌入的相互影響。然而,UIRCNN與這些模型的主要區(qū)別在于,訓(xùn)練一個投影操作來隨時預(yù)測用戶嵌入,輸出物品嵌入而不是交互的概率,并使用批處理來訓(xùn)練模型。
時域網(wǎng)絡(luò)嵌入模型。在時域網(wǎng)絡(luò)中,一些相關(guān)的研究同時為節(jié)點生成嵌入(用戶和物品)。Nguyen等[15]使用隨時間增加的隨機游走來生成嵌入,但它會生成節(jié)點的最終靜態(tài)嵌入。同樣,文獻[16]生成一個來自交互圖的用戶和物品的最終嵌入,需要為每個新生成的邊重新創(chuàng)建動態(tài)嵌入。另一些主流的算法[17-18]從圖快照的序列中學(xué)習(xí)嵌入,但不適用于連續(xù)交互的場景。Xu等[19]利用分層注意機制來捕捉時間敏感的用戶潛在偏好,并融合上下文信息以得出用戶在給定時間內(nèi)不同位置的投影概率。還有一些研究從節(jié)點之間的持久連接中學(xué)習(xí)嵌入[20-21],但這些連接在交互網(wǎng)絡(luò)中不存在,因為邊代表瞬時交互。
在本節(jié)中,提出了用戶-物品耦合循環(huán)神經(jīng)網(wǎng)絡(luò)(UICRNN),它可以從用戶-物品交互的順序序列中學(xué)習(xí)用戶和物品的嵌入軌跡。時域用戶-物品的交互關(guān)系記為Sr= (ur,ir,tr,fr)。在時刻tr,用戶ur和物品ir的發(fā)生一次交互Sr。每個交互都有一個相關(guān)的特征向量fr。表1列出了所使用的符號。為了方便使用符號,將在本節(jié)的其余部分去掉下標(biāo)r的標(biāo)注。其中,加粗的符號表示向量。
所提模型UICRNN可以學(xué)習(xí)用戶和物品的嵌入軌跡,其中,更新操作使用交互來更新用戶和物品的交互狀態(tài),投影操作可以利用前一個觀察到的狀態(tài)和經(jīng)過的時間來預(yù)測用戶的未來嵌入。當(dāng)觀察到用戶和物品的下一次交互時,它們的嵌入會再次更新。
表1 相關(guān)符號及說明
每個用戶和物品都包含2個嵌入:靜態(tài)嵌入和動態(tài)嵌入,使用這2種嵌入方式來編碼實體的長期靜態(tài)屬性及其動態(tài)屬性。
靜態(tài)嵌入:不會隨著時間變化的嵌入,所以將其用于表達靜態(tài)屬性,比如用戶的長期興趣。使用one-hot向量作為所有用戶和物品的靜態(tài)嵌入。
動態(tài)嵌入:給每個用戶u和物品i分配一個動態(tài)嵌入,在t時刻分別表示為u(t)∈Rn和i(t)∈Rn。Rn表示歐幾里得空間。這些嵌入會隨著時間的推移而變化,從而可以將它們隨時間變化的行為和屬性進行建模。用戶和物品的動態(tài)嵌入序列稱為其軌跡。
接下來描述更新和投影操作,將描述如何預(yù)測未來的交互項嵌入。
在更新操作中,用戶u和物品i在t時刻的交互S=(u,i,t,f)用于生成它們的動態(tài)嵌入u(t)和i(t)。圖1給出了更新操作。
圖1 UICRNN原理圖
如圖1所示,UICRNN使用2個循環(huán)神經(jīng)網(wǎng)絡(luò)進行更新。用戶RNNU可以跨用戶共享,以更新用戶嵌入;物品RNNI在所有物品之間共享,以更新物品嵌入。RNNU和RNNI的隱藏狀態(tài)分別表示用戶嵌入和物品嵌入。
上述2個RNN是相互耦合的。當(dāng)用戶u與物品i交互時,RNNU通過使用在時間t之前的物品i的嵌入i(t-)作為輸入,更新嵌入u(t)。i(t-)表示物品i在t前一時刻與其他用戶交互后生成的物品嵌入。這一設(shè)計決策與使用物品的one-hot向量來更新用戶嵌入形成了對比,one-hot向量具有以下2個缺點:
1) one-hot向量僅包含有關(guān)物品id的信息,而不包含物品的當(dāng)前狀態(tài)。
2) 當(dāng)真實數(shù)據(jù)集有數(shù)百萬個物品時,one-hot 向量的維度會非常大,使得模型難以訓(xùn)練和擴展。
相反,使用物品的動態(tài)嵌入,可以反映物品的當(dāng)前狀態(tài),從而產(chǎn)生更有意義的動態(tài)用戶嵌入且編碼簡潔更易于訓(xùn)練。出于同樣的考慮,RNNI通過使用動態(tài)用戶嵌入u(t-)更新物品i的動態(tài)嵌入i(t),使嵌入之間相互依賴。形式化表示如式(1)(2)所示:
W3(u)·f+W4(u)·Δu)
(1)
W3(i)·f+W4(i)·Δi)
(2)
其中,Δu表示用戶u之前與任意物品i交互的時間,Δi表示物品i之前與任何用戶u交互的時間。f為相互作用的特征向量。W1(u),…,W4(u)表示RNNU的參數(shù)矩陣,W1(i),…,W4(i)表示RNNI的參數(shù)矩陣。σ是非線性的sigmoid函數(shù)。這些矩陣被訓(xùn)練用于預(yù)測下一個交互中的嵌入,將在第2.4節(jié)中解釋。
本節(jié)解釋了嵌入投影算子,它預(yù)測了用戶未來的嵌入軌跡,通過在未來的一段時間內(nèi)投影用戶的嵌入來實現(xiàn)。
圖2給出了投影用戶嵌入軌跡的主要思想。投影操作預(yù)測用戶在t時刻進行最后一次交互后,經(jīng)過一段時間后的嵌入。如圖2所示,在時間t后的短持續(xù)時間Δ1,用戶u的投影嵌入u*(t+Δ1)接近于先前得到的嵌入u(t)。隨著Δ>Δ2>Δ1時間的推移,嵌入將投影到更遠的u*(t+Δ2)和u*(t+Δ)。當(dāng)在t+Δ時刻觀察到下一個交互時,用戶的嵌入將使用更新操作更新為u(t+Δ)。
圖2 投影操作示意圖
投影操作需要2個輸入:在時刻t的用戶u的嵌入和時間間隔Δ。通過Hadamard乘積[22]將時間納入投影嵌入中,將嵌入和時間連接起來,并通過線性層提取特征。神經(jīng)網(wǎng)絡(luò)對多個輸入進行拼接,但對相關(guān)的交互進行建模是低效的,而本文所提投影方法創(chuàng)建了一個時域注意力向量,提升了建模效率。
具體做法是使用線性層(被表示為參數(shù)矩陣Wp)將Δ轉(zhuǎn)換為時間背景向量w∈Rn,其中w=WpΔ。使用均值0的高斯分布來初始化Wp。然后將投影嵌入作為時間上下文向量與之前嵌入的元素作逐元素乘積,如式(3)所示:
u*(t+Δ)=(1+w)*u(t)
(3)
向量1+w作為一個時間注意向量來縮放過去的用戶嵌入。當(dāng)Δ為0時以及w為0時,投影嵌入與輸入嵌入向量相同。Δ值越大,投影嵌入向量與輸入嵌入向量的差異越大,投影嵌入向量隨時間的投影距離越遠。此外,本文發(fā)現(xiàn)單個線性層投影嵌入的效果最好,因為它等價于嵌入空間中的一個線性變換。
用戶u在t時刻與物品i交互,然后在t+Δ時刻與物品j交互。問題在于到達t+Δ時刻之前,如何預(yù)測用戶u會與哪個物品交互?訓(xùn)練UICRNN,使用u的投影嵌入u*(t+Δ)來做出這個預(yù)測。
一個關(guān)鍵的設(shè)計為:UICRNN直接輸出一個物品的嵌入向量j*(t+Δ),而不是用戶u和物品i之間的交互概率。這樣做的優(yōu)點是將推理時間的計算從線性時間復(fù)雜度減少到常數(shù)時間復(fù)雜度。大多數(shù)現(xiàn)有的輸出交互概率的方法[23-24]均需要經(jīng)過神經(jīng)網(wǎng)絡(luò)向前傳遞|I|次(一個物品一次),以找到概率得分最高的物品,但是時間代價非常昂貴。相比之下,UICRNN僅需要一次向前傳遞,并輸出一個預(yù)測的物品嵌入。然后,通過使用局部敏感哈希技術(shù)[25],可以在接近常數(shù)的時間復(fù)雜度內(nèi)返回最接近該嵌入的物品。為了維護局部敏感哈希的數(shù)據(jù)結(jié)構(gòu),將在一個物品的嵌入被更新時更新該數(shù)據(jù)結(jié)構(gòu)。
訓(xùn)練UICRNN來最小化L2正則化損失函數(shù),該損失函數(shù)為||j?(t+Δ)-[j~,j(t+Δ-)]||2,可以衡量預(yù)測物品的嵌入與真實物品的嵌入之間的不同。其中,預(yù)測物品的嵌入為j?(t+Δ),真實物品的嵌入為[j~,j(t+Δ-)]。[x,y]表示向量x和y的拼接,上標(biāo)“-”表示在該時間之前的嵌入。
使用在時間t+Δ之前的物品i(用戶u之前交互的物品)的嵌入i(t+Δ-)和投影的用戶嵌入u*(t+Δ)來進行該預(yù)測??紤]i(t+Δ-)有2個原因:① 物品i可能與其他用戶在時間t和t+Δ之間交互,因此嵌入包含最近的信息;② 用戶u經(jīng)常與同一物品i連續(xù)交互(即i=j),包含之前的物品嵌入有助于此類預(yù)測。使用物品i的靜態(tài)和動態(tài)嵌入來預(yù)測物品j的靜態(tài)和動態(tài)嵌入。預(yù)測采用全連接線性層,如式(4)所示:
j?(t+Δ)=W1·u*(t+Δ)+W2·u~+
W3·i(t+Δ-)+W4·i~+B
(4)
其中,參數(shù)矩陣W1,…,W4和偏置向量B構(gòu)成線性層。
訓(xùn)練模型。在每次交互時,UICRNN最小化預(yù)測物品嵌入和真實物品嵌入之間的L2距離,并進行訓(xùn)練。計算出的總損失如式(5)所示:
Loss=∑(u,i,t, f)∈S||j?(t) -[i~,i(t-)]||2+
λU||u(t)-u(t-)||2+λI||i(t)-i(t-)||2
(5)
第一個損失項使預(yù)測的嵌入誤差最小化,添加后兩項是為了正則化損失,并防止用戶和物品的連續(xù)動態(tài)嵌入變化太大。λU和λI是縮放參數(shù),以確保損失在同一范圍內(nèi)。
本節(jié)介紹所提并行化訓(xùn)練數(shù)據(jù)的批處理方案。在訓(xùn)練期間保持交互之間的時域依賴性很重要。使用單個RNN的現(xiàn)有方法將用戶分成不同的批次然后并行處理。因為這些方法使用物品的one-hot向量作為輸入,可以使用標(biāo)準(zhǔn)的時間反向傳播機制進行訓(xùn)練。然而,在UICRNN中,耦合的RNN能夠合并物品的嵌入來更新用戶嵌入。與同一物品交互的2個用戶之間將創(chuàng)建相互依賴關(guān)系,防止簡單地將用戶分成單獨的批次。
大多數(shù)現(xiàn)有方法也使用2個耦合的RNN[23-24]按順序逐一處理所有交互。但是,由于訓(xùn)練過程非常緩慢,因此無法擴展到大量交互。基于此,本文提出一種新的批處理數(shù)據(jù)方案來訓(xùn)練UICRNN。
創(chuàng)建訓(xùn)練滿足要求的批次具有一定難度,包含2個挑戰(zhàn):每個批次中所有的交互應(yīng)該并行處理;按索引的遞增順序處理批次應(yīng)該保持交互的時間順序,應(yīng)該生成與任何批次均不相同的嵌入。
為了克服上述挑戰(zhàn),通過選擇交互網(wǎng)絡(luò)的獨立邊集來創(chuàng)建每個批次,即同一批次中的2個交互不共享任何共同的用戶或物品。UICRNN迭代執(zhí)行以下2個操作:選擇操作和減少操作。在選擇操作中,通過選擇最大的邊集來創(chuàng)建一個新批次。在減少操作中,從網(wǎng)絡(luò)中刪除選定的邊。UICRNN迭代執(zhí)行這2個操作,直到圖中沒有邊。每個批次都可以并行化,并且按順序處理批次可以保持順序依賴關(guān)系。
在實現(xiàn)過程中,將每個交互Sr分配給一個批次Bk,其中k∈[1,|I|]。初始化|I|個空批次(在最壞的情況下,每個批次只有一次交互)。迭代基于時域排序的交互序列{S1,…,S|I|},每個交互被添加到批次Bk中。設(shè)maxBatch(e,r)是具有最大索引的批次,該批次具有涉及實體e的交互(此處e表示用戶u或物品i),交互的最大編號為r。然后,將交互Sr+1分配給索引為max{1+maxBatch(u,r),1+maxBatch(i,r)}的批次。創(chuàng)建批次的復(fù)雜性為O(|S|),即交互次數(shù)是線性的,因為每個交互僅使用1次。
本文提出的批處理方案確保每個用戶和物品在每個批次中最多出現(xiàn)一次,因此每個批次都可以并行化。此外,每個用戶和每個物品的第r次和r+1次交互分別分配給批次Bk和Bl,k 在多個數(shù)據(jù)集上進行實驗,并與6個基準(zhǔn)方法進行比較,驗證了UICRNN在未來交互預(yù)測和用戶狀態(tài)變化預(yù)測上的有效性。 在前τ%(不同的任務(wù)所設(shè)置的τ不同)的交互數(shù)據(jù)上訓(xùn)練模型,用后τv%的交互數(shù)據(jù)作為驗證集,用最后剩余的交互數(shù)據(jù)作為測試集。將所有方法的動態(tài)嵌入維數(shù)和靜態(tài)嵌入的維數(shù)設(shè)置為128,所有算法都運行了50個epochs。 基準(zhǔn)方法。實驗中比較了UICRNN與6個相關(guān)算法,這6個算法屬于3個類別(在相關(guān)工作中已介紹):① 深度循環(huán)推薦模型。在這一類別中,與RRN[7]、LatentCross[8]、Time-LSTM[9]和標(biāo)準(zhǔn)LSTM[9]進行了比較。這些算法是推薦系統(tǒng)中主流的算法,可以生成動態(tài)的用戶嵌入。② 動態(tài)協(xié)同進化模型。與主流的深度協(xié)同進化模型DeepCoevolve[14]進行了比較。③ 時域網(wǎng)絡(luò)嵌入模型。比較了算法CTDNE[15],該算法從時域網(wǎng)絡(luò)中生成嵌入,當(dāng)它生成靜態(tài)嵌入時,會在添加每條邊之后生成新的嵌入。 實驗中使用如下2個公開的數(shù)據(jù)集進行實驗。 1) Redditpost數(shù)據(jù)集。這一數(shù)據(jù)集由用戶一個月內(nèi)在subreddits[2]上發(fā)布的帖子組成。實驗選擇了 1 000個最活躍的subreddits作為物品,然后選用 10 000個最活躍的用戶,產(chǎn)生了 672 447次交互。將每篇文章的文本轉(zhuǎn)換為一個表示其LIWC(linguistic inquiry and word count)類別[26]的特征向量。 2) Wikipedia edits數(shù)據(jù)集。這個公共數(shù)據(jù)集收集了對維基百科頁面[3]在1個月內(nèi)進行的編輯操作。實驗中選擇1 000個編輯操作最多的頁面作為物品,每個編輯作為用戶進行了至少5次編輯操作(共8 227個用戶)。產(chǎn)生了 157 474個交互作用。與Redditpost數(shù)據(jù)集類似,將編輯文本轉(zhuǎn)換為LIWC特征向量。 預(yù)測任務(wù)定義為:給定到t時刻的所有交互,預(yù)測用戶u將在t時刻與哪個物品交互。 使用前80%的數(shù)據(jù)進行訓(xùn)練,后10%的數(shù)據(jù)進行驗證,最后的10%進行測試。用MRR(mean reciprocal rank)和recall@10來衡量算法的性能,MRR是倒數(shù)排名的平均值,recall@10表示物品交互預(yù)測的前十的置信度中,正確預(yù)測所占的比例。對于每一次交互,需要計算數(shù)據(jù)集中所有物品的置信度排名。 表2顯示了UICRNN與6種主流方法的性能。可以觀察到,在基準(zhǔn)方法中,RRN在Redditpost和Wikipedia edits數(shù)據(jù)集中表現(xiàn)較好。CTDNE生成靜態(tài)嵌入,所以其性能較低。在Wikipedia edits數(shù)據(jù)集上,UICRNN在指標(biāo)MRR上至少提升42.91%。在Reddit數(shù)據(jù)集上,UICRNN在recall@10上至少提升14.05%。 表2 未來交互預(yù)測實驗 在本實驗中,任務(wù)是預(yù)測交互是否會導(dǎo)致用戶狀態(tài)變化,特別是在如下2個案例中:預(yù)測用戶是否會被禁止和預(yù)測學(xué)生是否會退出課程。用戶被禁止或退出之前,用戶的標(biāo)簽為“0”,他們最后一次的交互標(biāo)簽為“1”。對于未被禁止或未退出的用戶,標(biāo)簽始終為“0”。這是一項極具挑戰(zhàn)性的任務(wù),因為只有不到1%的標(biāo)簽是“1”。 本實驗使用如下3個公開的數(shù)據(jù)集進行實驗。 1) Reddit bans。屬于Reddit post數(shù)據(jù)集,帶有來自Reddit被禁止用戶的真實標(biāo)簽。在672 447次交互中包含了366個真實標(biāo)簽,約占0.05%。 2)Wikipedia bans。屬于Wikipedia edits數(shù)據(jù)集,帶有被禁用戶的公開真實標(biāo)簽[3]。在157 474次交互中有217個正例標(biāo)簽,約占0.14%。 3) MOOC student drop-out。這個公共數(shù)據(jù)集由學(xué)生在MOOC在線課程[1]上完成的行為組成,例如觀看視頻、提交答案等。該數(shù)據(jù)集由7 047名用戶與98個物品(視頻、答案等)進行交互,產(chǎn)生超過411 749次交互,有4 066個輟學(xué)事件,約占0.98%。 在本實驗中,在前60%的交互數(shù)據(jù)上訓(xùn)練模型,在余下數(shù)據(jù)中選擇20%的交互數(shù)據(jù)進行驗證,并在最后20%的交互數(shù)據(jù)上進行測試,使用AUC(areaunder the curve)評估模型。對于基準(zhǔn)方法,在訓(xùn)練數(shù)據(jù)上,使用動態(tài)用戶嵌入作為輸入訓(xùn)練邏輯回歸分類器。 表3將UICRNN在3個數(shù)據(jù)集上的性能與基準(zhǔn)模型進行比較。可以發(fā)現(xiàn),在預(yù)測所有數(shù)據(jù)集的用戶狀態(tài)變化時,UICRNN的性能比其他基線平均高出至少15.79%。在用戶禁用預(yù)測任務(wù)中,UICRNN比RRN(最接近的對比基線)至少高出2.22%,而在學(xué)生輟學(xué)任務(wù)中,它比RRN高出35.48%。UICRNN在各種數(shù)據(jù)集上表現(xiàn)均為最佳。原因在于:其他基準(zhǔn)沒有考慮動態(tài)嵌入,導(dǎo)致訓(xùn)練數(shù)據(jù)少的時候無法充分抽取用戶和物品之間的關(guān)系。 表3 用戶狀態(tài)改變預(yù)測實驗 本節(jié)將UICRNN的運行時間與基準(zhǔn)算法進行比較。 從結(jié)果的相似性看,DeepCoevolve最接近UICRNN,因為前者也訓(xùn)練了2個相互耦合的RNN,而其他方法只訓(xùn)練一個RNN。圖3顯示了Reddit數(shù)據(jù)集一個epoch的運行時間(以分鐘為單位),可以發(fā)現(xiàn)UICRNN比DeepCoevolve快9.25倍。同時,UICRNN的運行時間與其他僅使用一個 RNN的基線相當(dāng)。由于使用了所提出的批處理訓(xùn)練方法,UICRNN能夠與非相互耦合模型所用相似時間進行模型訓(xùn)練。 圖3 運行時間柱狀圖 此外,還發(fā)現(xiàn)沒有使用所提批處理方案的 UICRNN需要43.53 min完成訓(xùn)練,而使用所提批處理方案的UICRNN僅需要5.1 min完成訓(xùn)練。 因此,所提批處理方案可以產(chǎn)生8.4倍的加速。 在本實驗中,通過改變訓(xùn)練數(shù)據(jù)的百分比并比較算法在未來交互預(yù)測任務(wù)中的性能,證明UICRNN的魯棒性較強。 對于下一個物品的預(yù)測,將訓(xùn)練數(shù)據(jù)百分比設(shè)置為10%~80%。在每種條件下,將訓(xùn)練數(shù)據(jù)的后10%作為驗證集,然后再選擇數(shù)據(jù)集中剩下部分的10%作為測試集。這樣做是為了比較不同測試數(shù)據(jù)大小下算法的性能。圖4和圖5顯示了隨著訓(xùn)練數(shù)據(jù)量的增加,2個數(shù)據(jù)集上所有算法MRR的變化。 圖5 在Reddit數(shù)據(jù)集上的魯棒性測試曲線 實驗結(jié)果表明,UICRNN始終明顯優(yōu)于其他基準(zhǔn)模型。說明了UICRNN在不同的數(shù)據(jù)集以及不同的訓(xùn)練數(shù)據(jù)大小的情況下,魯棒性較強。主要原因在于:其他基準(zhǔn)沒有考慮動態(tài)嵌入,且訓(xùn)練方案較差,導(dǎo)致訓(xùn)練數(shù)據(jù)少的時候無法充分抽取用戶和物品之間的關(guān)系。而UICRNN同時考慮靜態(tài)嵌入和動態(tài)嵌入,并且對批處理訓(xùn)練進行了改進,在精確度和魯棒性上有了巨大提升。此外,可以發(fā)現(xiàn)UICRNN的性能是穩(wěn)定的,并且在數(shù)據(jù)點之間變化不大。 提出了UICRNN的耦合遞歸神經(jīng)網(wǎng)絡(luò)模型,從一系列時間交互中學(xué)習(xí)用戶和物品交互關(guān)系的動態(tài)嵌入。UICRNN學(xué)習(xí)預(yù)測用戶和物品的未來嵌入,使它對未來用戶和物品交互以及用戶狀態(tài)變化提供更好的預(yù)測性能。此外,提出了訓(xùn)練數(shù)據(jù)并行化批處理方法,使UICRNN比類似的基準(zhǔn)具有更快的訓(xùn)練速度。 未來的工作主要包括:由于單個用戶和物品學(xué)習(xí)嵌入昂貴,故可以學(xué)習(xí)用戶和物品組的交互關(guān)系軌跡以減少參數(shù)的數(shù)量;聚集相似的實體表示軌跡;根據(jù)用戶可能交互的物品設(shè)計新物品。3 實驗及分析
3.1 實驗設(shè)置
3.2 未來交互預(yù)測
3.3 狀態(tài)改變預(yù)測
3.4 運行時間
3.5 魯棒性測試
4 結(jié)論