推薦系統中不得不學的對比學習(Contrastive Learning)方法
大家好,我是對白。
今天我們來聊一聊推薦系統中不得不學的Contrastive Learning方法,近年來Contrastive Learning在CV和NLP領域的應用越來越廣泛,在推薦系統中當然也不例外。我想大家將對比學習與推薦系統結合主要有以下四個原因:
一、是因為數據的稀疏性。眾所周知,在推薦系統中有點擊的數據是非常少的,可能系統推薦了十篇文章,用戶只點擊了一篇文章,因此我們可以通過自監督學習對點擊數據進行增強;
二、是因為item的長尾分布。主流商品往往代表了絕大多數用戶的需求,而長尾商品往往代表了一小部分用戶的個性化需求,若要對用戶行為很少的長尾商品進行推薦,也可以通過自監督進行增強;
三、是因為在跨域推薦中若有多個不同的view,可以通過自監督學習融合多個view的信息,而非動態的線性加權,增強網絡的表達能力;
四、是因為增加模型的魯棒性或對抗噪音,可以通過一些例如Mask和Droupout的方法。
那我們今天就一起討論一下Contrastive Learning在推薦系統中的主流做法和前沿應用。
1.DHCN
論文標題:Self-Supervised Hypergraph Convolutional Networks for Session-based Recommendation
論文方向:會話推薦
論文來源:AAAI2021
論文鏈接:https://arxiv.org/abs/2012.06852
論文代碼:https://github.com/xiaxin1998/DHCN
Session-based recommendation (SBR) 也就是會話推薦主要的任務就是基于目前已有的多個用戶物品交互序列,完成 next-item 預測。在這種情況下,用戶配置文件不可用,因此從多個用戶物品交互序列中提取用戶意圖嵌入就格外重要。
基于此本文將會話數據建模為超圖,提出了一種雙通道超圖卷積網絡DHCN。同時本文為了增強超圖建模,創新性地將自監督學習融入到網絡訓練中,最大化通過 DHCN 中兩個通道學習的會話表示之間的互信息,作為改進推薦任務的輔助任務。
超圖定義
線圖定義
將超圖中的每個邊(即每個用戶的session)看作是一個節點,而任意兩個節點之間的邊權重看作是這兩個用戶session的相似度,計算為
構建超圖
因為超圖定義為超邊可以包含多個節點,因此這些節點可以被看作是通過共同的邊而互相連接,因此每個用戶的session或者超邊將構成一個完全子圖,且該子圖中的邊權重都相等(因為共享同一條超邊)。而對應的線圖則是一個完全圖,任意兩個節點(session)的邊權重說明了這兩個用戶session的相似程度。
超圖卷積
包含多個超圖卷積層,用于items-embedding的傳播和更新,描述為:涉及同一條超邊的兩個節點進行消息傳遞,因此在構建好的超圖上就是相鄰的兩個節點進行傳播(因為它們涉及共同的超邊,或者共同出現在某個用戶的session中):
矩陣表達形式為:
注意上述操作沒有涉及序列特征,為此作者引入一個可訓練的位置編碼矩陣來體現用戶session中items的序列性,將其與item-embedding進行拼接和一個Dense層操作后得到帶有序列特征的item-embedding:
自監督學習增強DHCN
超圖建模使模型能夠實現良好性能。作者認為會話數據的稀疏性可能會阻礙超圖建模,這將導致次優推薦性能。受自監督學習在簡單圖上的成功實踐的啟發,作者將自監督學習集成到網絡中以增強超圖建模。利用自監督信號進行學習被視為有利于推薦任務的輔助任務,它分為兩個步驟:
創建自監督信號
在DHCN中,通過這兩個通道學習兩組特定于通道的會話Embedding。由于每個通道編碼一個超圖,該圖只描述由會話誘導的超圖的物品級(插入)或會話級(會話間)結構信息,所以兩組Embedding對象彼此了解很少,但可以互補。在訓練中,兩組會話Embedding之間有一個客觀映射。簡單地說,這兩組映射可以成為彼此的基礎用于自監督學習,這種一對一的映射被視為標簽的增廣。如果兩個會話Embedding在兩個視圖中都表示同一個會話,就將這一對標記為 ground-truth,否則將其標記為 negative。
對比學習
通過創建自監督信號,利用互信息最大化原則對兩個圖得到的表示進行對比,以及對線圖卷積得到的embedding使用row-wise and column-wise shuffling后得到負樣本,即增大兩個角度session-embedding之間的一致性:
最后的損失函數為兩部分之和:
總結文本的創新點如下:
為 SBR 任務提出了一種雙通道超圖卷積網絡 DHCN,通過超圖建模,可以捕獲項目之間的超配對關系和交叉會話信息。
首次將自監督學習學習的概念放入到推薦任務的網絡訓練中,自監督學習可以加強模型的表達能力和推薦任務的完成效果。
2.MHCN
論文標題:Self-Supervised Multi-Channel Hypergraph Convolutional Network for Social Recommendation
論文方向:社交推薦
論文來源:WWW2021
論文鏈接:https://arxiv.org/abs/2101.06448
論文代碼:https://github.com/Coder-Yu/QRec
在推薦系統中,當用戶-物品交互數據比較稀疏時,通常使用社交關系來提高推薦質量。大多數現有的社交推薦模型利用成對關系來挖掘潛在的用戶偏好。然而,現實生活中用戶之間的互動非常復雜,用戶關系可能是高階的。超圖提供了一種自然的方法來建模復雜的高階關系,而它在改善社交推薦方面的潛力還有待開發。
在本文中,作者提出了一個多通道超圖卷積網絡(MHCN),利用高階用戶關系來增強社交推薦。從技術上講,網絡中的每個通道都通過超圖卷積來編碼一個超圖,該超圖描繪了一個常見的高階用戶關系模式。通過聚合多個通道學習到的Embedding,可以得到全面的用戶表示,從而生成推薦結果。
然而,聚合操作也可能掩蓋不同類型的高階連接信息的固有特征。為了彌補聚合損失,作者將自監督學習融入超圖卷積網絡的訓練中,以獲得層次互信息最大化的連通性信息。
現有的自監督學習(SSL)方法主要用于訓練來自人工平衡數據集(如ImageNet)的表示模型。目前還不清楚它們在實際情況下的表現如何,在實際情況下,數據集經常是不平衡的。基于這個問題,作者在訓練實例分布從均勻分布到長尾分布的多個數據集上,對自監督對比學習和監督學習方法的性能進行了一系列的研究。作者發現與具有較大性能下降的監督學習方法不同的是,自監督對比學習方法即使在數據集嚴重不平衡的情況下也能保持穩定的學習性能。
社交推薦系統中常見的高階用戶關系類型(引自MHCN論文)
構建超圖
超圖,它推廣了邊的概念,使其連接到兩個以上的節點,為建模用戶之間復雜的高階關系提供了一種自然的方法。作者通過統一形成特定三角形關系的節點來構造超圖,這些三角關系是一組精心設計的具有底層語義的三角主題的實例,如下圖所示:
從左到右為圖M1 ~ M10,我們根據其隱含的語義將其分為三組。M1~M7概括了顯性社交網絡中所有可能的三角關系,并描述了高階社交連接,比如“有一個共同的朋友”,我們稱之為“Social Motifs”。M8~M9表示聯合關系,即“朋友購買同一件物品”。這種類型的關系可以看作是加強聯系的信號,我們將M8 ~ M9命名為“Joint Motifs”。最后,我們還應該考慮那些沒有顯性社交關系的用戶。因此,M10是非封閉的,它定義了沒有社交關系但購買了相同物品的用戶之間的隱性高階社會關系。我們將M10命名為“Purchase Motif”。在這三種模態的約束下,我們可以構造出包含不同高階用戶關系模式的三個超圖。
MHCN框架圖(引自MHCN論文)
多通道超圖卷積
在本文中,作者使用了三種通道設置,包括“社交通道(s)”、“聯合通道(j)”和“購買通道§”,以應對三種類型的三角形主題,但通道的數量可以調整,以適應更復雜的情況。每個通道負責編碼一種高階用戶關系模式。因為不同的模式可能會對最終的推薦性能表現出不同的重要性,所以直接將整個基本的用戶嵌入Embedding提供給所有通道是不明智的。為了控制從基本的用戶Embedding到每個通道的信息流,作者設計了一個具有自門控單元(SGU)的預過濾器,其定義為:
超圖卷積定義為:
學習全面的用戶表示
在通過𝐿層傳播用戶嵌入后,我們平均每一層獲得的Embedding,以形成最終的特定于通道的用戶表示:
為了避免過度平滑問題,然后我們利用注意力機制對不同通道的用戶嵌入信息進行選擇性聚合,形成全面的用戶嵌入。對于每個用戶𝑢,我們學習了一個三元組(𝛼𝑠、𝛼𝑗、𝛼𝑝)來測量三個特定于通道的嵌入對最終推薦性能的不同貢獻。注意力函數
定義為:
全面的用戶表示定義為:
自監督學習增強MHCN
由于利用了高階關系,MHCN表現出了很好的性能,然而,MHCN的一個缺點是聚合操作可能會導致高階信息的丟失,因為不同的通道會在不同的超圖上學習不同分布的Embedding。為了解決這個問題,并充分繼承超圖中豐富的信息,我們將自監督學習融入到MHCN的訓練中。
創建自監督信號
對于MHCN的每個通道,我們建立鄰接矩陣𝑨𝑐,以捕獲高階連接信息。𝑨𝑐中的每一行都表示以行索引表示的用戶為中心的相應超圖的子圖,然后我們可以引出一個層次結構:“用戶節點←以用戶為中心的子超圖←超圖”,并從該結構創建自監督信號。
作者引入自監督任務的目標是:全面的用戶表示應該反映用戶節點在不同超圖中的局部和全局的高階連接模式,可以通過分層最大化用戶表示、以用戶為中心的子超圖和每個通道中的超圖之間的互信息來實現這一目標。
對比學習
Deep Graph Infomax (DGI)是一種通用和流行的方法,用于自監督的方式學習圖結構數據中的節點表示。我們遵循DGI,使用InfoNCE作為我們的學習目標,以最大化層次互信息。但我們發現,與二元交叉熵損失相比,成對排序損失(在互信息估計中也被證明是有效的)更適合推薦任務。因此定義自監督任務的目標函數如下:
最后,我們將推薦任務的目標(主要的)和最大化層次互信息的任務(輔助的)統一起來進行聯合學習。總體目標函數定義為:
本文的主要貢獻總結如下:
研究了通過利用多通道設置下的多種高階用戶關系,在社交推薦中融合超圖建模和圖神經網絡。
將自監督學習融入到超圖卷積網絡的訓練中,證明了一種自監督輔助任務可以顯著改善社交推薦任務。
3.SGL
論文標題:Self-supervised Graph Learning for Recommendation
論文來源:SIGIR2021
論文鏈接:https://arxiv.org/abs/2010.10783
論文代碼:https://github.com/wujcan/SGL
這篇文章提出了一種應用于用戶-物品二分圖推薦系統的圖自監督學習框架。核心的思想是,對輸入的二分圖,做結點和邊的dropout進行數據增強,增強后的圖可以看做原始圖的子視圖;在子視圖上使用任意的圖卷積神經網絡,如LightGCN來提取結點的表征,對于同一個結點,多個視圖就能形成多種表征;然后借鑒對比學習的思路,構造自監督學習任務,即:最大化同一個結點不同視圖表征之間的相似性,最小化不同結點表征之間的相似性;最后對比學習自監督任務和推薦系統的監督學習任務聯合起來,構成多任務學習的范式。
文章的方法很簡潔,這種思想和陳丹琦的工作,基于對比學習的句子表征SimCSE有異曲同工之處,值得借鑒到實際的圖表征學習中。
解決目前基于user-item二分圖表征學習的推薦系統面臨的兩大核心問題:
- 長尾問題。high-degree高度的結點對表征學習起了主導作用,導致低度的結點,即長尾的item的學習很困難。
- 魯棒性問題。交互數據中包含著很多噪聲。而基于鄰域結點匯聚的范式,會擴大”噪聲觀測邊”的影響力,導致最終學習的表征受到噪聲交互數據的影響比較大。
因此,作者提出了圖自監督學習的方法SGL,來提高基于二分圖推薦的準確性和魯棒性。
SGL的總體系統框架(引自SGL論文)
圖結構上的數據擴充
由于以下特定特征,直接在基于圖的推薦中采用CV和NLP任務中的數據增強是不可行的。
- 用戶和物品的特征是離散的,如one-hot ID等分類變量。因此,圖像上的增強操作,如隨機裁剪、旋轉或模糊,是不適用的。
- 更重要的是,與將每個數據實例視為獨立的CV和NLP任務不同,交互圖中的用戶和項目本質上是相互連接和依賴的。因此,我們需要為基于圖的推薦定制新的增強運算符。
二部圖建立在觀察到的用戶-物品交互上,因此包含協同過濾信號。具體來說,第一跳鄰近節點直接描述了自我用戶和項目節點,即用戶的歷史項目(或項目的交互用戶)可以被視為用戶(或項目)的預先存在特征。用戶(或項目)的第二跳鄰近節點表示類似用戶(或類似項目)。此外,從用戶到商品的higher-order路徑反映了用戶對商品的潛在興趣。毫無疑問,挖掘圖結構中的固有模式有助于表示學習。因此,作者在圖結構上設計了三個算子:node dropout, edge dropout 和 random walk,以創建不同的節點視圖。運算符可以一致表示為:
其中,在圖G中獨立進行隨機選擇s1和s2,從而構建兩個相關視圖Z1(l)和Z2(l)。三個增廣算子詳細闡述如下:Node Dropout (ND):以概率ρ從圖中丟棄每個節點及其連接邊。
式中,M`, M``∈{0,1} | V |是兩個掩碼向量,應用于節點集V生成兩個子圖。因此,這種增強可以從不同的增強視圖中識別出有影響的節點,使表示學習對結構變化不那么敏感。Edge Dropout (ED):以概率ρ從圖中丟棄邊。
其中M1, M2∈{0,1} | E |是邊集E上的兩個掩碼向量。只有鄰域內的部分連接對節點表示有貢獻。因此,耦合這兩個子圖的目的是捕獲節點局部結構的有用模式,并進一步賦予表示對噪聲交互的更強的魯棒性。
Random Walk :上面的兩個算子生成一個跨所有圖卷積層共享的子圖。為了探索更高的性能,作者考慮為不同的層分配不同的子圖。這可以看作是使用隨機游走為每個節點構造單獨的子圖。假設在每一層(有不同的比例或隨機種子)選擇edge dropout,則可以通過利用邊掩蔽向量對層敏感來制定RW(如下圖所示):
為了簡單起見,作者在圖結構的每個epoch上應用這些增強,也就是說,在一個新的訓練epoch開始時,對每個節點生成兩個不同的視圖(對于RW,每層生成兩個不同的視圖)。請注意,對于兩個獨立進程(即s1和s2), dropout和masking比率是相同的。我們將不同比例的調整留到以后的工作中。值得一提的是,只涉及到dropout和masking操作,并且沒有添加任何模型參數。
對比學習
將來自同一節點的增強視圖視為正例,來自不同節點間的增強視圖視為負例。正例輔助監督促進了同一節點的不同視圖之間的預測一致性,而負例監督則強化了不同節點之間的分歧。形式上,遵循SimCLR,并采用對比損失InfoNCE來最大化正例的一致性,最小化負例的一致性:
項目上的損失如上類似構建。最終的自監督任務損失如下:
多任務學習
為了改進自監督學習任務的推薦,作者利用多任務訓練策略聯合優化經典推薦任務和自監督學習任務:
本文的主要貢獻總結如下:
探索了自監督學習解決監督學習范式下基于圖推薦的局限性的潛力;
提出了一個模型無關的框架SGL來補充監督推薦任務與自監督學習的用戶-項目圖;
從圖結構的角度,設計了三種不同方面的數據擴充來構建輔助對比任務。
下面給大家留一個討論題,希望大家踴躍發表意見,讓我們所有人都從討論中受益:
除了DHCN、MHCN和SGL,你還知道哪些將對比學習與推薦系統結合的模型,它們是如何將自監督應用在推薦任務中的,損失函數又是什么樣的?