【RS】Collaborative Memory Network for Recommendation Systems - 基於協同記憶網絡的推薦系統

【論文標題】Collaborative Memory Network for Recommendation Systems    (SIGIR'18)html

【論文做者】—Travis Ebesu (Santa Clara University)、—Bin Shen (Google)、—Yi Fang (Santa Clara University)web

【論文連接】Paper (10-pages // Double column)數組

【摘要】網絡

  在現代網絡平臺上,推薦系統對於保持用戶對個性化內容的關注起着相當重要的做用。深度學習已經完全改變了許多研究領域,最近人們對將其應用於協同過濾(CF)的興趣大增。然而,現有的方法使用隱含因子模型構建深度學習體系結構,忽略了CF模型、鄰域或基於內存( memorybased ?)的方法這一大類。咱們提出了協同記憶網絡(CMN)這是一種利用隱含因子模型的全局結構和基於局部鄰域結構的非線性方式將兩類CF模型統一塊兒來的深度架構。在記憶網絡成功的激勵下,咱們記憶組件和神經注意機制融合爲鄰域組件記憶模塊中與用戶和物品記憶的關聯尋址方案編碼複雜的用戶-物品關係,並結合神經注意機制,學習用戶-物品特定的鄰域。]  最後,輸出模塊與用戶和物品記憶共同利用鄰域生成排名分數。將多個記憶模塊堆疊在一塊兒能夠獲得更深層的架構,以捕獲日益複雜的用戶-物品關係。此外,咱們還展現了CMN組件、記憶網絡和三類CF模型之間的緊密聯繫。綜合實驗結果代表,CMN在三個公共數據集上的有效性優於競爭基線。注意力權重的定性可視化提供了對模型推薦過程的洞察,並建議存在更高階的交互。架構

【關鍵詞】框架

深度學習、記憶網絡、協同過濾。函數

 

 

 

【Reference】post

一、推薦系統趕上深度學習(二十九)--協同記憶網絡理論及實踐:https://www.jianshu.com/p/3e80d8426f7f性能

二、記憶網絡之Memory Networks:https://zhuanlan.zhihu.com/p/29590286學習

三、記憶網絡之End-To-End Memory Networks:https://zhuanlan.zhihu.com/p/29679742

1 介紹】

在信息過載的時代,推薦系統顯得十分重要。而在推薦系統中,協同過濾是一種很是受歡迎且有效的方法。協同過濾基於用戶和物品的過去交互行爲,同時認爲類似的用戶會消費類似的物品,從而進行推薦。

協同過濾是一類推薦方法,大致上能夠分爲三個分支:

基於鄰域的方法。這也是咱們常說的基於物品的協同過濾基於用戶的協同過濾方法。咱們首先須要計算用戶之間、物品之間的類似度,隨後基於計算的類似度進行推薦。這種方法的一個主要缺陷就是只使用了局部的結構,而忽略了不少全局的信息,由於咱們只使用K個類似用戶或者類似物品進行相關的推薦。好比KNN

  基於隱向量的方法。(隱含因子模型)這一分支中最具表明性的是矩陣分解及後面的各類改進方法。一般的作法是將每個用戶和物品表示成一個n維的向量,經過用戶矩陣和物品矩陣的相乘,但願可以儘量還原評分矩陣。這種作法雖然考慮了全局的信息,可是忽略了一些比較強的局部聯繫。好比MF矩陣分解

  基於混合模型的方法。因爲上述兩種方法都有各自的缺陷,所以混合方法開始出現。結合基於鄰域的方法和隱含因子模型來強化預測能力。最具表明性的是因子分解機SVD++方法。


也就是說,在使用協同過濾這些方法時,咱們一般須要關注兩點:
1
、須要考慮全局的信息,充分利用整個評分矩陣。
2
、須要考慮局部的信息,考慮用戶或者物品之間的類似性。類似性高的用戶或者物品給予更高的權重。

本文將要介紹的協同記憶網絡,即是充分利用了上述兩方面的信息。協同過濾咱們已經介紹了,那麼什麼是記憶網絡呢?咱們接下來進行介紹。

2. 記憶網絡Memory Network簡介

Memory Network是深度學習的一個小分支,從2014年被提出到如今也逐漸發展出了幾個成熟的模型。咱們這裏只介紹其中兩個比較基礎的模型。一個是 Basic Memory Network,另外一個是End to End Memory Network

咱們首先要搞清楚的是,爲何要有記憶網絡?在翻譯、問答等領域的任務中,咱們一般使用的是Seq2Seq結構(是一個Encoder-Deocder結構的模型,輸入是一個序列,輸出也是一個序列。),由兩個循環神經網絡組成。傳統的深度學習模型、循環神經網絡(RNN,LSTM,GRU)使用hidden states或者Attention機制做爲他們的記憶功能,可是這種方法產生的記憶過小了,沒法精確記錄一段話中所表達的所有內容,也就是在將輸入編碼成dense vectors的時候丟失了不少信息。所以,在模型中加入一系列的記憶單元,加強模型的記憶能力,便有了Memory Network

2.1 Basic Memory Network

基本的Memory NetworkFacebook2014年的「Memory Networks」一文中提出。該模型主要包含一系列的記憶單元m能夠當作是一個數組,每一個元素保存一句話的記憶)和IGOR四個模塊。主要由一個記憶數組mIGOR四個模塊。結構圖以下所示:

preview

簡單來講,就是輸入的文本通過Input模塊編碼成向量,而後將其做爲Generalization模塊的輸入,該模塊根據輸入的向量對memory進行讀寫操做,即對記憶進行更新。而後Output模塊會根據Question(也會通過Input模塊進行編碼)對memory的內容進行權重處理,將記憶按照與Question的相關程度進行組合獲得輸出向量,最終Response模塊根據輸出向量編碼生成一個天然語言的答案出來。

各模塊做用以下:

preview

basic model的實現細節以下:

1) basic modelI模塊就是一個簡單的embedding lookup操做,也就是將原始文本轉化爲詞向量的形式;

2G模塊則是直接將輸入的向量存儲在memory數組的下一個位置,不作其餘操做,也就是直接寫入新的記憶,對老的記憶不作修改。

主要的工做在OR兩個模塊進行。

3O模塊根據輸入的問題向量在全部的記憶中選擇出top-K相關的記憶,具體選擇方式爲,先選記憶中最相關的memory
  

接下來根據選擇出的o1和輸入x一塊兒選擇與他們兩個最相關的記憶o2

(對於上面這個等式,若是xo1採用的都是線性的向量表示(BOW等),則能夠拆分紅下面加和的方式,不然不能夠。

就這樣選擇出於Question最相關的top-Kmemory slot便可。將其做爲

4R模塊的輸入,用於生成最終的答案。

其實這裏也很簡單就是使用與上面相同的評分函數計算全部候選詞與R輸入的相關性,得分最高的詞語就做爲正確答案輸出便可:

而上面屢次用到的評分函數知足下面的形式便可:

最終模型選擇margin ranking loss做爲損失函數,即要求正確答案的得分比錯誤答案的得分高至少一個margin r。公式以下:

preview

這裏的錯誤答案都是隨機從樣本中採樣而來,而不是計算全部錯誤樣本。下面咱們舉一個簡單的例子來講明上述過程:

對於第一個問題:where is the milk now?輸出模塊會對全部的memory(其實就是輸入的句子)進行評分,獲得「Joe left the milk。」得分最高,也就是與問題最相關,而後再對剩下的記憶進行評分,找出與where is the milk now?和Joe left the milk最相關的memory。咱們發現是「Joe travelled to the office」。這樣咱們就找到了最相關的記憶,接下來使用R模塊對全部的單詞進行評分找到得分最高的單詞做爲答案便可。

(這篇論文的重點在於他提出了一種普適性的模型架構(Memory Network),可是不少部分並無作得很完善,論文後面也對輸入是詞、memory比較大、新詞等問題進行了專門的闡述,不過我以爲看後面別人在此基礎上發的論文更有借鑑意義。因此這裏再也不進行詳細的介紹。)

 

2.2 End to End Memory Network

End to End Memory NetworkMemory Network的一個改進版本,能夠進行端對端的學習。原文中介紹的網絡模型應用於QA任務。

這是Facebook AIMemory networks以後提出的一個更加完善的模型,前文中咱們已經說到,IG模塊並未進行復雜操做,只是將原始文本進行向量化並保存,沒有對輸入文本進行適當的修改就直接保存爲memory。而OR模塊承擔了主要的任務可是從最終的目標函數能夠看出,在OR部分都須要監督,也就是咱們須要知道O選擇的相關記憶是否正確,R生成的答案是否正確。這就限制了模型的推廣,太多的地方須要監督,不太容易使用反向傳播進行訓練。所以,本文提出了一種end-to-end的模型,能夠視爲一種continuous formMemory Network,並且須要更少的監督數據即可以進行訓練。論文中提出了單層和多層兩種架構多層其實就是將單層網絡進行stack

們先來看一下單層模型的架構:

單層 Memory Networks

單層網絡的結構以下圖所示,主要包括下面幾個模塊:

preview

模型主要的參數包括A,B,C,W四個矩陣,其中A,B,C三個矩陣就是embedding矩陣,主要是將輸入文本和Question編碼成詞向量,W是最終的輸出矩陣。從上圖能夠看出,對於輸入的句子s分別會使用AC進行編碼獲得InputOutput的記憶模塊,Input用來跟Question編碼獲得的向量相乘獲得每句話跟q的相關性,Output則與該相關性進行加權求和獲得輸出向量。而後再加上q並傳入最終的輸出層。接下來詳細介紹一下各個模塊的原理和實現(這裏跟論文中的敘述方式不一樣,按照本身的理解進行介紹)。

輸入模塊

首先是輸入模塊(對應於Memory Networks那篇論文的IG兩個組件),這部分的主要做用是將輸入的文本轉化成向量並保存在memory中,本文中的方法是將每句話壓縮成一個向量對應到memory中的一個slot(上圖中的藍色或者黃色豎條)。其實就是根據一句話中各單詞的詞向量獲得句向量。論文中提出了兩種編碼方式,BoW和位置編碼

BoW就是直接將一個句子中全部單詞的詞向量求和表示成一個向量的形式,這種方法的缺點就是將丟失一句話中的詞序關係,進而丟失語義信息;

位置編碼的方法,不一樣位置的單詞的權重是不同的,而後對各個單詞的詞向量按照不一樣位置權重進行加權求和獲得句子表示。位置編碼公式以下:lj就是位置信息向量(這部分能夠參考咱們後面的代碼理解)。

此外,爲了編碼時序信息,好比Sam is in the bedroom after he is in the kitchen。咱們須要在上面獲得mi的基礎上再加上個矩陣對應每句話出現的順序,不過這裏是按反序進行索引。將該時序信息編碼在TaTc兩個矩陣裏面,因此最終每句話對應的記憶mi的表達式以下所示:

輸出模塊

上面的輸入模塊能夠將輸入文本編碼爲向量的形式並保存在memory中,這裏分爲InputOutput兩個模塊,一個用於跟Question相互做用獲得各個memory slot與問題的相關程度,另外一個則使用該信息產生輸出。

 

首先看第一部分,將Question通過輸入模塊編碼成一個向量u,與mi維度相同,而後將其與每一個mi點積獲得兩個向量的類似度,在經過一個softmax函數進行歸一化:

pi就是qmi的相關性指標。而後對Output中各個記憶ci按照pi進行加權求和便可獲得模型的輸出向量o

Response模塊

輸出模塊根據Question產生了各個memory slot的加權求和,也就是記憶中有關Question的相關知識,Response模塊主要是根據這些信息產生最終的答案。其結合oq兩個向量的和與W相乘再通過一個softmax函數產生各個單詞是答案的機率,值最高的單詞就是答案。而且使用交叉熵損失函數作爲目標函數進行訓練。

 

多層 Memory Networks

多層記憶網絡模型,其實就是將多個單層模型進行stack在一塊。這裏成爲hop。其結構圖以下所示:

 

首先來說,上面幾層的輸入就是下層ou的和。至於各層的參數選擇,論文中提出了兩種方法(主要是爲了減小參數量,若是每層參數都不一樣的話會致使參數不少難以訓練)。

1. Adjacent:這種方法讓相鄰層之間的A=C。也就是說Ak+1=Ck,此外W等於頂層的CB等於底層的A,這樣就減小了一半的參數量。

2. Layer-wiseRNN-like):與RNN類似,採用徹底共享參數的方法,即各層之間參數均相等。Ak=...=A2=A1,Ck=...=C2=C1。因爲這樣會大大的減小參數量致使模型效果變差,因此提出一種改進方法,即令uk+1=Huk+ok,也就是在每一層之間加一個線性映射矩陣H

【本文主要貢獻】

1) 基於記憶網絡的成功經驗,咱們提出了一種解決隱式協同過濾問題的協同記憶網絡(CMN)CMN加強了外部記憶和神經注意力機制。記憶模塊的關聯尋址方案做爲識別類似用戶的最近鄰模型。該注意力機制根據特定的用戶和物品學習用戶鄰域的自適應非線性加權。輸出模塊利用自適應鄰域狀態與用戶、物品記憶之間的非線性相互做用,推導出推薦值。

2)咱們揭示了CMN與兩類重要的協同過濾模型之間的聯繫:隱含因子模型和基於鄰域的類似度模型。進一步,咱們揭示了非線性積分融合兩種模型的優勢,獲得了一個混合模型。

3在三個公共數據集上的綜合實驗證實了CMN在七個對比基線上的有效性。多個實驗配置證明了記憶模塊的額外好處。

4)注意力權重的定性可視化提供了對記憶組件的深刻了解,爲更深層次的體系結構捕獲更高階的複雜交互提供了支持證據。

 

 

 

2 相關工做】

2.1 推薦系統中的深度學習】

最近,將深度學習應用於推薦系統的興趣激增。在早期的做品中,Salakhutdinov等人經過應用兩層限制玻爾茲曼機模型的電影分級表來解決協同過濾問題。自動編碼器Autoencoders)一直是推薦系統深度學習體系結構的一種流行選擇[20,28,333,37,41]

自動編碼器的做用是做爲一個非線性分解的評分矩陣取代了傳統的線性內積。例如,AutoRec[28]使用AutoEncoder分解評分矩陣,而後進行重構,以直接預測評分,從而在衆多基準數據集上得到具備競爭力的結果。協同去噪自編碼器(CDAE)[37]經過集成一個特定於用戶的偏置到一個自編碼器作出top- n推薦,證實了CDAE能夠被看做是許多現有協同過濾方法的推廣。Li等人採用邊緣去噪的自動編碼器,下降了與深度學習相關的計算成本。使用兩個自動編碼器,一個用於物品內容,另外一個用於鏈接用戶和物品隱含因子的用戶內容。AutoSVD++[41]擴展了原有的SVD++模型,使用對比式自動編碼器捕獲輔助的物品信息。一個分層貝葉斯模型[33]橋接矩陣分解與最深層的堆疊去噪自動編碼器利用項目內容的過程。

    神經矩陣分解[11]經過學習矩陣分解和前饋神經網絡處理隱式反饋。而後在最終輸出以前將輸出鏈接起來,以產生隱含因子和非線性因素之間的交互做用。EbesuFang[4]經過對物品內容作緊密耦合深度神經網絡(DNN)來解決物品冷啓動問題,並經過成對矩陣分解來分解評分。DNN爲新物品構建了物品內容和物品隱含因子的健壯表示。Cheng等人聯合訓練了一個logistic迴歸和一個DNN來利用深度學習的泛化方面和針對谷歌Play store中移動應用推薦的泛化線性模型的特殊性。

推薦系統中的卷積神經網絡(Convolutional neural network, CNN)被用來捕獲音樂[31]、文本[16,29]和圖像[40]的本地化物品特徵表示。以前的方法將文本表示爲詞袋錶示,CNN經過學習權重過濾器來識別文本中最突出的短語,從而克服了這一限制。遞歸神經網絡(RNNs)的序列特性爲時間感知的[36]和基於會話的推薦系統[12]提供了理想的特性。例如,循環推薦網絡[36]利用用戶和項目的長期短時間記憶(LSTM)細胞結合穩定因素捕捉時間方面,從而識別電影受歡迎程度的波動。JannachLudewig[14]用基於會話的RNN[12]插入KNN,顯示了進一步的性能改進。然而,插值方案是一個固定權重的超參數,缺少非線性相互做用來捕捉更復雜的關係。Wang等人將生成和判別方法統一在生成對抗網絡[7]框架下,用於web搜索、項目推薦和問題回答。

注意力機制最近在推薦系統中獲得了探索。龔和張[6]CNN的關注頻道上進行話題標籤推薦,關注最能提供信息(觸發)的單詞。可是,必須謹慎地設置超參數,以控制觸發單詞的閾值,使其具備信息性。Huang等人使用端到端記憶網絡[30]處理相同的任務,該網絡在單詞和句子級別上集成了針對用戶以前tweet的分層注意機制。Chen等人的[2]將多媒體內容與表示用戶偏好的物品級別注意力和用於隔離物品特定視覺特徵的組件級別注意力結合起來。相似地,Seo等人的[29]引入了一種局部和全局的注意力機制來對評論文本進行建模。Xiao等人利用注意機制擴展了因子分解機[24],以瞭解每一對交互的重要性,而不是對它們進行統一處理。現有的基於神經注意力機制的方法大多依賴於附加的內容或上下文信息,而咱們的任務是研究協同過濾據咱們所知,目前尚未研究使用內存網絡結構來處理協同過濾設置中的隱式反饋的工做。

相關文章
相關標籤/搜索