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


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

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

【論文鏈接】Paper (10-pages // Double column)

【摘要】

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

【關鍵詞】

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

 

 

 

【Reference】

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

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

3、記憶網絡之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 推薦系統中的深度學習】

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM