朱馨培
(哈爾濱陸軍預備役炮兵旅,哈爾濱150000)
現有的兩類推薦模型(基于循環神經網絡的推薦模型和基于協同過濾的推薦模型)將用戶編碼在一個低維想兩種,限制了用戶偏好的記憶能力。為增大模型記憶空間,匹配用戶需求,提出基于混合矩陣分解的記憶網絡模型,在基于矩陣分解的框架下混合使用深度神經網絡和記憶網絡,得到兩個層級的用戶表示。
矩陣分解;神經網絡;記憶網絡;推薦模型
矩陣分解技術廣泛應用于協同過濾推薦模型中,該算法使用低維空間的向量編碼用戶和物品,并將向量的點積結果作為用戶對物品的喜好程度。對于用戶來說,他的喜好往往是復雜多變的,將用戶興趣壓縮到一個向量中既存在信息丟失的問題,又不能夠表示出用戶喜好的動態性和復雜性。另外,現有研究表明,用物品向量和用戶向量之間的點積來表示結果的方式沒有考慮到用戶和物品之間的交互關系。所以,需要對用戶和物品之間的交互進行建模,得到用戶的物品級別的表不。本文首先介紹了傳統的矩陣分解模型,然后介紹如何改進矩陣分解的兩個缺陷,并在此基礎上提出混合矩陣分解和記憶網絡模型(下文簡稱記憶網絡模型)。
矩陣分解是基于隱因子模型的一種協同過濾算法。隱因子可以理解為用戶對物品喜好的潛在原因或者物品的潛在特征。該潛在特征可以通過學習物品-物品、用戶-用戶或用戶-物品的交互關系而得到。把每一個潛在特征作為用戶或物品編碼的一個維度,則用戶或物品就可以表示為一個大小為潛特征因子的向量。如果把隱因子數量設置為3,矩陣分解可以表示為:將已有的用戶-物品交互矩陣R分解為兩個低維的用戶隱矩陣P和物品隱矩陣Q,原矩陣中每一個單元格的數值由對應行列的隱因子向量的點積所得。
上文中所述的用戶-物品交互矩陣是用戶的評分矩陣,它表示的就是在該系統中的用戶對于購買過的物品的總體評分。評分在推薦系統中屬于顯示反饋,顯示反饋的信息往往會比較稀疏,所以只基于顯示評分的矩陣分解往往也不會有太好的效果。為了改進這一點,許多模型把矩陣中的顯示反饋信息改為隱式反饋,即把用戶的購買、評分、瀏覽等不同的行為統一成一個反饋信號-用戶與該物品交互過。如果用戶和物品交互過,則對應的單元格的值設置為1,否則設置為0。
對用戶和物品實體,使用大小為D維的向量來表示。對應的M個用戶和N個物品分別可以表示為P∈?M*D和Q∈?N*D的矩陣,矩陣中的每一行表示一個用戶或物品,矩陣分解的表示方法為:

R?ui的內容可以表示為PuQTi使用預測的矩陣中的值擬合原有矩陣中的已有數據,并且基于平方損失函數等目標函數對用戶和物品矩陣進行優化,加入L2正則項的目標函數如下:

在目標函數的基礎上,通過隨機梯度下降等優化方法優化P、Q矩陣。最后,使用相應用戶向量和物品向量的點積作為該用戶對該物品的評分預測,并根據評分的高低在未消費物品中選擇最高的幾項推薦給用戶。
為了解決引言中提出的原始矩陣分解算法的兩個缺點,本文混合使用特征記憶網絡和多層全連接網絡,得到記憶網絡模型。
模型結構如圖1所示,模型的核心是得到用戶的物品級和特征級的向量表示,并將這兩者綜合起來求解用戶對物品的喜好。下面分別介紹求解這兩個向量表示對應的模塊。

圖1 記憶網絡模型整體框架
在上節介紹中,傳統矩陣分解將用戶和物品映射到同一個向量空間,再采用向量內積的方式求用戶和物品的相似度。向量內積可以看作是未歸一化的夾角余弦距離,即以向量之間夾角衡量向量的距離。該方式一方面不能夠表達用戶物品之間的交互關系,另一方面也會帶來距離求解上比較大的損失。表1是假設的用戶之間的相似度,可以知道s23(0.66)>s12(0.5)>s13(0.4)。根據該關系大小,可以將三個向量的位置關系表示在空間中如圖2所示。此時考慮新用戶u4,可以知道相似度排名是s41>s43>s42。在u4與u1最相近,需要放在離p1最近的前提下,無論怎么放p4,都會使得p4與p2的距離比與p3的距離近,這會導致巨大的排序損失。綜上,為了解決矩陣分解存在的這個問題,本文使用DNN來學習用戶物品之間的交互特征。由于該網絡學習的是用戶和物品的交互關系,所以將網絡最后一層的輸出作為用戶的物品級表示。

表1 用戶相似度

圖2 用戶向量分布形式
如圖1左半部分所示,該模塊的輸入是[mu;ei],“;”表示兩個向量首尾相連,將其輸入到多層全連接網絡之后,通過神經網絡學習到用戶和物品的高階交互特征。最后將神經網絡的最后一層輸出zL作為用戶的物品層的表示zui該神經網絡的具體定義如下:

其中,Φ表示非線性激活函數,在FMN中使用ReLU作為模型的激活函數。神經網絡的激活函數包括sigmoid、tanh、ReLU等,其中sigmoid函數將每個神經元的值x通過公式映射到0到1之間。一方面這種方式將值映射在一個小的數字區間會限制神經元的表達能力,另一方面從該激活函數的函數圖像可以看出:在x的值非常大或非常小時,該激活函數的梯度接近于0,此時神經元停止學習。tanh激活函數是sigmmd激活函數的改進版本。神經元的輸出在-1和1之間,但是由于tanh(x/2)=2σ(x)-1它也只能在一定程度上緩解sigmoid飽和的問題,而不能消除。ReLU在負數區取0,正數區直接輸出原值,這種計算方式比前兩者收斂更快,且不存在飽和的問題(正數區梯度始終不變)。綜上,在隱藏層的激活函數選擇上選擇Re-LU效果會更好。Wx、bx是第x層隱藏層的權重和偏罝參數。本文使用最后一層的輸出結果作為用戶的表示,zui=zL,zui∈?d并使用和文獻中一樣的塔式結構。塔式結構是一種在最低隱藏層擁有最多神經元數量,剩余每一層在前一層基礎上遞減的網絡結構。通過在高層使用數量更少的神經元的方式,可以學習到數據的高階交互特征。除了輸入層的向量大小為2d之外,隱藏層從低到高倍減神經元數目。
在文獻[5]中,用戶、物品的向量的每一維度表示該實體的一個特征,使用一個低維空間的向量表示其潛在特征因子。該方法的缺點是:一個向量不能充分編碼所有用戶信息。一種解決方案是增大向量維度,但是有可能會導致對訓練數據過擬合從而使模型的泛化能力降低。受文獻[2]啟發,將每一個特征因子看作一個獨立的向量,用戶對物品的喜好表現的是用戶對物品存在的某些特征的喜好。這樣一來,通過預先定義好的總特征數量,每個物品的表示是由某幾個特征組成,而用戶的喜好表示則是對不同特征的喜好程度的累加。為了更好的存儲用戶對特征的喜好,該模塊使用記憶矩陣存儲用戶對特征的偏好,其整體結構如圖2右半部分所示。
從整體上看,網絡中包含四個記憶矩陣:每個用戶的特征尋址矩陣、特征記憶矩陣、物品的表示矩陣和用戶的表示矩陣。具體地,用戶u的記憶矩陣為FKu∈?Kxd、FVu∈?Kxd和M∈?Pxd,其中K是定義的總特征數,d是每個記憶片段的大小。在用戶額外的記憶矩陣M∈?Pxd中,P表示用戶數量,每一行表示一個用戶。物品的記憶矩陣為E∈?Pxd,Q表示數據集的物品數量大小,矩陣E中每一行表示一個物品。
數據的輸入形式為(用戶,物品)二元組,本文采用與文獻[34]中相似的方法得到用戶在該物品下對特征的喜好。對每一個輸入數據對(u,i)來說,物品i帶來的用戶u對每個特征的偏好表示為puij,它的計算方式

公式的第一項表示目標用戶u對第j個特征的偏好。第二項表示物品i造成的用戶對該項特征的喜好程度的置信度的偏移。因此,整個尋址方式表明用戶u在物品i的影響下,對特征j的喜好程度。用戶對每個特征都有不同的偏好程度,在用特征記憶向量表示用戶時,不能賦予每個特征相同的權重。模型中的注意力機制可以學習到一個動態權重值,將注意力集中在特征集合的部分子集當中,從而以加權和的形式表示用戶。

該公式生成了用戶在特征上的歸一化權重分布。注意力機制的引入,使得用戶在自己喜好的特征上獲得更高的分值,在無關的特征上投入更少的關注。接著模型再使用該權重得分乘以存儲的特征記憶單元得到用戶的特征級表示:

其中,(fv)uj尋址矩陣中對應的特征記憶單元。這種外存機制允許模型在存儲用戶對特征的長期喜好的同時,還能根據存儲的內容和當前物品的信息動態更新記憶。從另一個角度來講,模型首先通過制定的尋址方案,從尋址矩陣FKu中學習用戶對每個特征的偏好權重,再對存儲在特征記憶矩陣FV中的相關記憶進行加權求和。記憶網絡動態選取相關的特征子集,并將加權和的結果作為用戶的特征級表示向量。
在上面提到的工作中,用戶的權重偏好是由簡單的(用戶,特征)向量點積加上(物品,特征)向量點積而得。考慮到該方式有可能不能一次性獲取到所有相關信息,本文采取多層記憶網絡的形式來獲取與用戶最相關的特征信息。將記憶網絡拓展為多層結構,每一層的記憶更新中,借助前一層給予的信息重新搜索整個特征集合,更新記憶的權重值。這種結構一方面可以在較高層中修正在低層中由于對信息的錯誤理解而導致的錯誤結果,另一方面可以借助更多的先驗知識,提取出之前未發現的關鍵信息,每一層得到特征權重的方式如下:


其中,Wh、Uh是參數方陣,將上一層的信息和當前層的輸出映射到同樣的向量空間,再通過非線性激活函數得到當前層的候選輸出。然后將候選輸出作為尋址的查詢向量,將其與尋址向量做內積得未歸一化的權重。記憶網絡的第一層的尋址輸入為
前兩個模塊分別在物品級和特征級編碼用戶,最終的輸出模塊將兩者綜合起來得到用戶對物品的喜好預測。所以,對于給定的用戶u和物品i,物品的得分計算方式如下:

“;”表示向量連接,v∈?2d是在訓練過程中需要學習的參數。
最后,本文選擇交叉熵損失函數作為模型的目標方程。最小化該目標方程,并且根據鏈式傳導法則去優化模型中涉及到的各個參數,

本文從介紹傳統的矩陣分解算法開始,詳細介紹記憶網絡模型每個模塊的功能。綜上所述,本文提出的記憶網絡模型相比傳統協同過濾等推薦算法有以下優勢:
第一,用戶的物品級表示模塊可以通過MLP獲取用戶和物品之間的非線性交互關系,并且對相似用戶之間的距離有一個更好的度量方法。
第二,用戶的特征級表示由記憶網絡中存儲的特征進行加權和得到,這種表示方法集成了多個特征的信息,解決了矩陣分解模型中使用單一向量表示用戶的問題。