武多才,張 謐
(復旦大學 軟件學院,上海 201438)
推薦系統(tǒng)能夠幫助用戶從浩繁的信息快捷地選出他們感興趣的內容,但是我們面臨一個重要問題是用戶的興趣會隨著時間發(fā)生變化[1,2],此外新用戶也會不斷到來.根據(jù)最新的調研,電商平臺的銷售量和其推薦服務對用戶的響應性呈現(xiàn)顯著的正相關關系[3].在這樣的背景下,我們提出響應性作為一個在線推薦系統(tǒng)需要滿足的重要指標.具體來說,當系統(tǒng)收集到用戶少量的最新交互信息之后,一個響應式推薦系統(tǒng)需要滿足如下需求:
(1)對老用戶的響應性.響應式推薦系統(tǒng)需要及時有效地捕捉到老用戶興趣的變化.以圖1中的上半部分為例,對于一個老用戶,他之前都是比較喜歡科幻類型的電影.但是最近,該用戶的興趣發(fā)生了變化,展現(xiàn)出了對情感類型電影的興趣.這種變化可能是受朋友影響或者個人經(jīng)歷變化等因素.
圖1 兩個典型的響應式推薦系統(tǒng)需求場景示意圖
(2)對新用戶地響應性.響應式推薦系統(tǒng)需要準確地學習新用戶興趣.以圖1中下半部分所示為例,該用戶為系統(tǒng)中新用戶且只有只看了一部戰(zhàn)爭類型地電影.
接下來,我們將這兩點響應性需求統(tǒng)稱為學習用戶近期的興趣.根據(jù)我們的調研,盡管響應性是推薦系統(tǒng)中一個重要的需求,現(xiàn)有的方法還沒有很好地滿足該需求.一方面,傳統(tǒng)的推薦系統(tǒng)方法采用線下訓練線上預測的模式[4,5].這些方法很難滿足響應性的需求,因為模型訓練好之后就不再改變.重新訓練模型又十分耗時難以滿足時間需求.另一方面,最近的一些研究工作提出了一些增量更新的在線推薦算法[1,6-10].相比于重新訓練模型,這些方法很好地提升了模型更新的時間效率.這些方法主要分為兩類,一類是在線下訓練好的模型的基礎上,只使用新的交互信息微調(finetuning)模型[8-10];另一類方法會緩存一部分交互信息到一個池子(reservoir)中,然后定時更新模型,更新模型是使用池子中的交互信息和新的交互信息同時微調模型[1,7].
雖然這些基于微調的更新方法可以解決模型更新的時間效率問題,他們面臨著新的交互信息量太少的問題.傳統(tǒng)的機器學習模型需要大量的數(shù)據(jù)才能準確學習樣本的表征,以 MNIST 手寫數(shù)字識別數(shù)據(jù)集為例,該數(shù)據(jù)集有 6 萬張圖片,平均每個數(shù)字有 6 千張圖片.為了應對新的交互信息量太少的問題,我們提出了一套基于元學習[11]的增量式模型更新方案.該方案能夠從之前的利用大量的歷史交互數(shù)據(jù)訓練的過程中,學習出一些解決訓練數(shù)據(jù)量少問題的先驗知識,然后我們將這些先驗知識應用于最近的利用少量新的交互信息的更新過程中,從而指導模型更好地學習用戶近期的興趣.
元學習在許多小樣本學習(few shot learning)的任務中都取得了超過了微調的方法[11-13].其設計理念借鑒于人類的學習過程.人類在學習新的種類的分類任務時,往往只需要一兩張樣例圖片就可以了,這是因為人類在分類未見過的種類時,會使用到之前學習到的先驗知識,而不是像傳統(tǒng)的機器學習算法一樣從頭開始學習.
從元學習的角度看,在我們的推薦場景中,響應式推薦的要求是根據(jù)某個用戶少量的最新的交互信息為其推薦下一個物品.我們將這個需求定義為一個任務.為了能夠利用少量的樣本學習出用戶在新交互物品上的興趣.借鑒于元學習的思想,我們需要為該任務準備先驗知識.接下來的問題是要如何學習這樣的先驗知識.為了學習先驗知識,我們首先利用大量的歷史交互數(shù)據(jù)構建與當前任務相似的任務,即使用用戶相連的少量交互去預測緊接著的下一個交互.從歷史數(shù)據(jù)中,我們可以構建大量的這樣的任務.然后我們使用模型的初始參數(shù)作為先驗知識.該初始參數(shù)能夠使得模型在該任務上僅使用少量的樣本就能準確學習出用戶近期的興趣.為了學習到這樣的初始參數(shù),借鑒于元學習的想法,我們將該需求建模成線下訓練過程中監(jiān)督損失函數(shù),即線下訓練的任務要在使用該初始參數(shù)的基礎上,經(jīng)過少量交互的更新,都能準確預測其任務中對應的下一個交互物品.這樣,在新的任務中,模型就可以在之前的相似任務中學習到的初始參數(shù)的基礎上更好地學習出用戶的興趣.
從傳統(tǒng)方法的角度看,相比于傳統(tǒng)的線下訓練好模型然后線上微調模型的策略.我們的方法的優(yōu)勢是在線下訓練模型的時候考慮到了之后線上更新只會有少量的交互信息,并將其設計在了線下更新模型參數(shù)的損失函數(shù)中.這樣學習到的模型參數(shù)能夠在線上更新的過程中僅使用少量的新的交互信息就能更準確地學習出用戶近期的興趣.
后文組織如下:第1 節(jié)介紹我們提出的基于元學習的響應式推薦算法;第2 節(jié)介紹實驗設置和實驗結果分析;第3 節(jié)進行總結和展望未來工作.
我們將(u,v)定義為用戶u和物品v之間的一個交互.交互的集合記為R={···,(u,v),···}.從元學習的角度,為了對應線上使用少量最新交互信息準確更新用戶興趣表征的需求,我們將線下的大量的歷史交互信息重組為大量的如圖2所示的響應式推薦任務.每個任務就是使用用戶少量的k個連續(xù)交互信息去預測該用戶緊接著的下一個交互物品.因為當前用戶的k個交互數(shù)量太少,我們使用鄰居的交互信息來豐富當前任務的數(shù)據(jù)量.我們將鄰居定義為與當前用戶的k個交互物品至少存在一個交互的其他用戶.如圖2所示的用戶i和j為用戶1的鄰居.然后我們從鄰居的交互信息中隨機選取K-k個交互信息補充到當前的訓練任務中.然后一個線下訓練任務t定義為用這K個交互信息(記為集合RtK)去預測當前用戶的下一個交互(記為集合R1t).從歷史的交互信息中,我們可以構建大量的這樣的任務,記為集合T={t1,t2,···,tH},其中H為線下任務數(shù)量.
圖2 一個帶有鄰居信息的線下訓練任務
我們將推薦模型記為f,所有任務共享相同的推薦模型結構,然后在自己的任務上調整其參數(shù)以滿足任務需求.借鑒于 MAML[11]的想法,我們將先驗知識定義為模型f的初始參數(shù),記為Θ.然后對于任意一個任務t∈T,響應式推薦的目的是使用交互信息RtK來更新模型,使得模型能夠準確預測任務對應用戶的下一個交互R1t.模型更新過程我們就使用簡單的一步或者多步梯度下降更新方法.以一步梯度下降更新為例,模型參數(shù)的更新規(guī)則如下:
其中,LtK(·)為模型在任務t的RtK交互集合上的損失函數(shù),α為學習率.然后我們對先驗知識 Θ的要求是模型在這樣的初始參數(shù)上經(jīng)過少量樣本的更新就能準確的預測對應用戶的下一個交互信息,根據(jù)該要求我們設計如下優(yōu)化目標來學習所有任務公用的初始參數(shù) Θ:
其中,Lt1(·)為模型在任務t的R1t交互集合上的損失函數(shù).值得注意的是,在我們的方法中,我們在梯度更新計算Θt的過程中會保存所有中間狀態(tài),所以 Θt可以視為關于參數(shù) Θ的一個函數(shù),然后最后的學習目標是對參數(shù)Θ求導數(shù),然后更新參數(shù) Θ.直觀地說,我們的優(yōu)化目標是學習到初始參數(shù) Θ,使其在線下訓練的過程中,對于每個任務都可以經(jīng)過少量交互的更新,然后準確預測對應用戶的下一個交互物品.之后,我們可以將參數(shù)Θ作為先驗知識,對于線上的更新需求,其正好與我們線下訓練的任務相似,所以在線上更新的過程中,使用該參數(shù)作為初始參數(shù)更新模型,也能夠在少量樣本上準確地學習到用戶的近期興趣,以準確地預測用戶的下一個交互.
在我們的場景中,我們使用矩陣分解模型[3]來實現(xiàn)推薦模型f,模型的參數(shù) Θ={P,Q},其中P為用戶的特征矩陣,pi為矩陣P的第i列,表示用戶ui的特征;Q為物品的特征矩陣,qj為Q的第j列,表示物品vj的特征.根據(jù)矩陣分解模型,我們使用特征的內積表示用戶ui對物品vj的喜好程度,記為rij=pTi qj.有了喜好程度的評分之后,我們可以根據(jù)評分為用戶推薦喜歡的物品.
然后我們基于BPR (Bayesian Personalized Ranking)[14]的方法來設計優(yōu)化目標Lt1.BPR的優(yōu)化目標是優(yōu)化排序,要求模型給出的評分將交互過的物品排在為交互過的物品之前.為了滿足該要求,給定一個交互集合R,首先需要如下定義BPR中的訓練數(shù)據(jù)集,記為DR.
然后結合矩陣分解給出的評分,對于用戶ui,其交互過的物品vj和為交互過的物品vk之間的排序關系定義為:
因為我們需要將交互過的物品排在為交互過的物品之前,所以需要最大化.加上正則化項之后,最終的BPR 損失函數(shù)定義如下:
其中,λP,λ+Q,λ-Q是正則化項的權重超參數(shù).
有了 BPR 損失函數(shù)的定義之后,對于某個任務t∈T,我們定義該任務的損失函數(shù)LTt如下:
其中,DRtK是以交互集合RtK構建的BPR 訓練數(shù)據(jù)集.對于L1t,我們也使用 BPR 損失函數(shù),與LTt不同的是Lt1是在交互集合R1t上構建的損失函數(shù).
值得注意的是在任務t上經(jīng)過L次更新之后得到的參數(shù),記為ΘtL.在我們的設計中,ΘtL相當于關于初始參數(shù) Θ的一個L層的網(wǎng)絡.這樣當L增加時,模型在訓練過程中容易發(fā)生梯度爆炸的現(xiàn)象[15].為了解決這個問題,我們再加上淺層的BPR 損失函數(shù)來限制參數(shù)的空間以保證模型的穩(wěn)定性.最終的優(yōu)化目標如下:
其中,λML是基于元學習的損失函數(shù)的權重超參數(shù).
學好了先驗知識 Θ之后,我們可以利用該先驗知識在線上的推薦任務中實現(xiàn)響應式推薦.對于一個用戶u,我們首先利用其最近的k個交互構建響應式推薦任務中的交互集合RtK,然后我們以之前學習到的先驗知識 Θ為基礎,利用該任務上的損失函數(shù)LtK做L次參數(shù)更新得到模型參數(shù) ΘtL.在先驗知識 Θ的幫助下,L次參數(shù)更新得到的模型能夠更好地捕捉到用戶最近的興趣.
最后,我們的模型非常容擴展線上增量更新.給定一個新的交互(u,v),如果用戶u或者物品v是新用戶或新物品,我們照如下公式初始化他們的特征:
其中,U和V表示現(xiàn)有用戶和物品的集合;M和N是現(xiàn)有用戶和物品的數(shù)目;?p和?q是采樣自標準多維高斯分布N(μ,σ2I)的小噪聲.通過這種方法,新用戶的表征可以利用到模型學習到的老用戶的表征,使得將新用戶加入后,模型也可以快速調整,學習出新用戶的表征.
如果用戶u不是新用戶,則我們可以為該新交互構建一個任務,其中待預測交互集合R1t={(u,v)},然后我們可以使用該用戶之前最近的k個歷史交互信息構建任務訓練交互集RtK.如果該用戶的歷史交互信息少于k個,我們就重復采樣直至湊夠k個歷史交互.有了新任務t的交互集合RKt和R1t之后,我們就可以前面的優(yōu)化目標更新先驗知識 Θ.
我們使用了MovieLens-1M和Netflix 這兩個公開數(shù)據(jù)集做了驗證實驗.兩個數(shù)據(jù)集都是電影評分數(shù)據(jù)集.其中,MovieLens-1M 數(shù)據(jù)集大約包含6 千用戶,4 千部電影和1 百萬個評分,后面簡稱MovieLens;Netflix數(shù)據(jù)集大約包含1.8 萬用戶,45 萬部電影和1 億個評分.評分的范圍是從1 到5.所有的評分都有一個時間戳.在我們的實驗中,類似于BPR[14]的設置,我們將評分大于等于3的電影視為正樣本,其它的都視為為交互過的樣本.
我們選取如下流行的線上推薦模型作為對比:
(1)RKMF[5]:該方法使用核函數(shù)建模用戶與物品特征向量間的關系.在迭代更新的過程中,該方法交替地更新用戶特征或者物品特征.
(2)sRec[9]:該方法使用概率模型建模用戶特征和物品特征的演變過程,并且使用現(xiàn)有特征來初始化新用戶或者新物品特征.
(3)SPMF[10]:該方法在迭代增量的更新過程中,同時會使用緩存的之前的一部分老的交互信息.
我們首先隨機選出10%的用戶作為新用戶,將他們的交互信息從數(shù)據(jù)集中移除.為了驗證推薦模型的響應性,對于這些新用戶,我們?yōu)槟P吞峁┻@些用戶的n個新的交互,然后檢測模型是否能夠準確預測這些用戶的下一個交互.在實驗中,設置n=1,5,10 三種情況.
然后我們將剩下的交互信息按照時間順序劃分為90%和10%兩部分.對于所有的模型,我們將90%的部分用于線下訓練模型,然后后面10%的部分用于線上迭代更新模型并檢驗模型對于老用戶興趣變化的響應性.在這個過程中,對于后面10%的交互信息,按照時間順序,每當來一批交互信息的時候,我們先驗證模型是否能夠準確預測這些交互信息,然后再用這些新的交互信息更新模型.
根據(jù)之前的工作,我們采取 leave-one-out的評估模式[16,17].我們的目標是預測用戶的下一個交互的物品,為了評估模型同時提升評估效率,我們從為交互過的物品中隨機采樣100 個物品作為負樣本.然后我們根據(jù)模型對這101 個物品的評分計算如下3 個評測指標:
(1)HR@K(Hit Ratio):評估正樣本出現(xiàn)在排序前K個之中的比例.
(2)AUC:ROC 曲線下的面積值.簡單來說,該方法綜合評估了正樣本排在負樣本前面的概率.
(3)NDCG@K (Normalized Discounted Cumulative Gain):該方法要求正樣本排在前K個的同時還會根據(jù)排序位置進行懲罰.排序越靠后,懲罰越多.
總的來說,這3 個指標都是得分越高,模型性能越好.
圖3展示了不同模型在更新更新過程中的性能變化曲線.從圖中可以看出,RKMF和sRec 模型的性能在線上更新的過程中迅速下降.因為這些模型在線上更新的過程中忽略了歷史數(shù)據(jù),從而導致模型在少量新樣本上容易過擬合,出現(xiàn)模型不穩(wěn)定現(xiàn)象.與之不同,我們的模型在自己相對獨立的任務中,基于共有的先驗知識,獨立地優(yōu)化自己的參數(shù),導致模型不會受到少量新交互信息的劇烈擾動,從而表現(xiàn)出更高的穩(wěn)定性.同時,由于使用的歷史信息的先驗知識更利于模型在少量樣本上快速收斂,我們的模型在響應式推薦的任務中性能表現(xiàn)也更好.
圖3 不同模型對老用戶響應性的AUC 值對比
表1展示了不同模型在學習新用戶興趣任務上的表現(xiàn),其中n為模型當前觀測到的新用戶的交互的數(shù)量.從表中可以看出我們的模型在學習新用戶興趣上的顯著優(yōu)勢.舉例來說,在Netflix 數(shù)據(jù)集上,當n=1時,我們的模型在NDCG@10的指標上超出了對比模型13%.
表1 不同模型對新用戶響應性對比(HR@10和NDCG@10 簡記為HR和NDCG)
此外,相對于HR@10 評價指標,我們的模型在NDCG@10 評價指標上取得了更高的提升.舉例來說,在 MovieLens 數(shù)據(jù)集上,當n=5的時候,我們的模型在HR@10 指標上取得了10.7%的提升,在NDCG@10 指標上取得了13.4%的提升.在Netflix的數(shù)據(jù)集上也有相同的現(xiàn)象.由于NDCG 指標會對排序位置進行懲罰,這說明了我們的模型可以將正樣本排得更靠前.
我們細化研究了元學習損失函數(shù)對我們模型性能的影響.圖4展示了實驗結果,從圖中我們我們可以分析得出如下結論:
圖4 元學習損失函數(shù)權重 λML對模型性能的影響
(1)使用適當?shù)臋嘀?我們的元學習損失函數(shù)能夠使得模型學習出更好的性能
(2)隨著元學習損失函數(shù)權重λML的增加,模型的性能先提高后降低.同時值得注意的是,當λML超過一定值之后,模型會發(fā)生梯度爆炸現(xiàn)象.由前面的方法部分介紹可知,這是由于元學習損失函數(shù)相當于建立在多層的神經(jīng)網(wǎng)絡之上,容易過擬合,甚至發(fā)生梯度爆炸現(xiàn)象.
在本文中,我們提出了一套基于元學習的響應式在線推薦系統(tǒng)設計.在線上更新的過程中,由于新的交互信息數(shù)量少,導致模型很難根據(jù)少量新的交互信息準確快速地學習出用戶最近的興趣.在我們的方法中,我們通過基于元學習的方案,從大量的歷史交互信息中提取出先驗知識,然后使用該先驗知識指導模型的線上更新過程,從而使得模型能夠更加準確地學習出用戶最近的興趣.我們通過大量的實驗證明了我們方案的有效性.
在未來的工作中,我考慮使用社交網(wǎng)絡的信息來增強對用戶興趣特征的建模[18-20];同時我們希望通過元學習的方法更加細致地建模分析用戶的興趣隨時間變化的模式.