RecipeRec: 一个为了食谱推荐而设计的异构图学习模型

RecipeRec: A Heterogeneous Graph Learning Model for Recipe Recommendation

本次带来一篇IJCAI-22的会议。
原文链接

Motivation

1、在食谱推荐系统中,现存的recipe recommendation systems只应用了Content-based和collaborative filtering的推荐方法(计算食谱相似度、利用用户信息),忽略了高阶协同信号的影响(如用户、食谱与食物成分的关系框架信息)。
2、个体偏好是复杂的,个体选择一份食谱可能是由于它的食物成分、烹饪方式或朋友的推荐。因此一个全面的食谱推荐系统应该考虑到所有的因素,将高阶协同信号编码入食谱推荐中+对"用户-食谱-食物成分"的关系进行建模迫在眉睫。

Contribution

1、设计了一个URI-Graph,是一个新的大范围"用户-食谱-成分"异构图,如下图1所示
在这里插入图片描述
URI图有3种节点,分别是User、Recipe和Ingredient,3种节点之间有四种类型的边,分别是成分-成分、食谱-食谱、食谱-成分、用户-食谱。目前看来,这是第一个以图的方式来研究食谱推荐的文章

2、基于自己设计的URI数据图集,提出了一个RecipeRec,它是一个异构图学习模型,上图2
在这里插入图片描述
具体来说,这个RecipeRec是用来捕获URI图中的食谱内容和关系框架信息的
①首先设计了一个层级注意的共享异构GNN(图中紫框和(c))来对节点进行编码:
(1)为了全面地获取URI图的信息,提出了一个自适应节点级注意力模块,它可以区分特定关系下相邻节点之间的细微差异。
(2)此外,作者团队还设计了一个关系级的注意力模块,用来筛选出节点周围最有意义的关系,并且将它们与适当的权重进行融合。
②应用了 [Lee et al., 2019]的transformer(图中黄框和(b))来对食物成分信息进行编码,并对成分之间的成对相互作用和高阶相互作用进行建模。
③接着引入了一种自监督方式的图对比增强策略(图左下方),来提取信息图中的知识。
④最后设计了一个联合目标函数(图中灰框)和图对比学习(图中橙框)去优化整个模型

3、进行了大量实验证明了RecipeRec在食谱推荐中的优越性。

Solution

一、URI-Graph Data.

在开始讲模型之前,先讲一下他的URI图是怎么做的

Definition 1. User-Recipe-Ingredient Graph.

一个user-recipe-ingredient graph被定义为异构图G = (V, E, C):G有3种类型的节点V(用户、食谱和成分)和4种类型的边E
(成分-成分、食谱-食谱、食谱-成分、用户-食谱),此外每一个节点都与contents C有关(食谱说明、营养成分或用户评分)。
如图1所示,首先从Reciptor [Li and Zaki, 2020]收集食谱,然后从www.food.com抓取用户对每一个食谱的评分当做用户-食谱交互数据来用,最后将食谱里的每一种成分与美国农业部营养数据库做match。这样一来URI图的三种节点就bulid完成了,四种边的构建不再赘述。
最后,作者团队构建了具有7958个用户节点、68794个食谱节点和8847个成分节点的图。图中包含四种边,分别是135353对user-recipe边、6474146对recipe-recipe边、463485对recipes -ingredient边和146188个对ngredient-ingredient边。

Problem 1. Recipe Recommendation with Graphs.

给定一个G = (V, E, C),task是设计一个机器学习模型F(Θ)来完成食谱推荐,具体来说就是为用户返回一个有排名的推荐列表。

二、RecipeRec

为了解决Problem 1,作者团队设计了异构图学习模型RecipeRec,如图2所示,它包含一个具有层级注意的共享异构GNN和一个成分集transformer,图对比增强策略和一个联合目标函数。

1、GNN with Hierarchical Attention

目的:获得用户和食谱的embedding。
由于G中有三种类型的节点,那么它们的特征空间必定有出入,为了让三种节点落到同一个特征空间上,使用了一个基于特定类型的输入映射。

Type-specific Input Projection 特定类型的输入映射—— W ϕ i W_ϕi Wϕi

在这里插入图片描述
如果节点的类型 ϕ i ϕ_i ϕi是ingredient,那么我们用营养向量( x i n g x_{ing} xing)去表示它
如果节点的类型 ϕ i ϕ_i ϕi是recipe,那么我们用预训练的跳过指令嵌入的平均值( x i n s x_{ins} xins)[Marin et al., 2019]去表示它
如果节点的类型 ϕ i ϕ_i ϕi是user,那么我们用表示用户的随机初始化向量( x u s e r x_{user} xuser)去表示它
三种类型就有三种输入映射转换矩阵 W ϕ i W_ϕi Wϕi,三种节点分别左乘 W ϕ i W_ϕi Wϕi后,映射到共享的embedding空间中了。

Adaptive Node-level Attention 自适应节点级注意力

目的: 获得 h i , r l + 1 h^{l+1}_{i,r} hi,rl+1——GNN的l+1层,特定关系r的节点 v i v_i viembedding
具体步骤:

z i l = W i l × h i l ( 1 ) z^l_i = W^l_i \times h^l_i\quad(1) zil=Wil×hil(1)
对投影到同一个特征空间的节点 v i v_i vi的初始向量 h i h_i hi,使用共享的权重矩阵 W i l W^l_i Wil来获得中间向量 z i l z^l_i zil

e i j l = L e a k y R e L U [ W i j l × ( z i l ∥ z j l ) ] ( 2 ) e^l_{ij} = LeakyReLU [W^l_{ij} \times (z^l_i∥z^l_j)]\quad(2) eijl=LeakyReLU[Wijl×(zilzjl)](2)
计算节点 v i v_i vi与节点 v j v_j vj之间的未归一的注意力分数,用来学习后者对前者的重要性。
notes: W i j l W^l_{ij} Wijl是可学习的权重矩阵。 ∥ ∥ 是拼接操作concatenation,将新向量拼接到原向量的后头,对应维数增加。LeakyReLU是一个常用的激活函数。

α i j l = e x p ( e i j l ) ∑ k ∈ N i , r e x p ( e i k l ) ( 3 ) α^l_{ij} = \frac{exp(e^l_{ij})}{\sum_{k∈N_{i,r}}exp(e^l_{ik})}\quad(3) αijl=kNi,rexp(eikl)exp(eijl)(3)
将得到的注意力分数 e i j l e^l_{ij} eijl进行0~1上的归一化(softmax),得到节点 v i v_i vi与节点 v j v_j vj之间的注意力权重系数 α i j l α^l_{ij} αijl N i , r N_{i,r} Ni,r指的是特定关系r中与 v i v_i vi有关联的邻居节点的集合索引。

为了使训练过程更加稳定,引入了multi-head attention多头注意力操作,公式如下所示:
h i , r l + 1 = ∥ m = 1 M R e L U ( ∑ j ∈ N i , r α i j l × z j l + W h l × ( h i l ⊙ h j l ) ) × W a ( 4 ) h^{l+1}_{i,r} =∥ ^M_{m=1}ReLU(\sum_{j∈N_{i,r}}α^l_{ij} \times z^l_j + W^l_h \times (h^l_i ⊙ h^l_j))\times W_a\quad(4) hi,rl+1=m=1MReLU(jNi,rαijl×zjl+Whl×(hilhjl))×Wa(4)
多头注意力的思想是重复M次将节点级注意力,最后拼接为一个整体。
公式(4)中的 W h l W^l_h Whl W a W_a Wa是可训练可训练权重矩阵、⊙是同纬度向量的每个元素分别相乘。RELU也是激活函数。
至此,自适应节点级注意的最终目标 h i , r l + 1 h^{l+1}_{i,r} hi,rl+1到手了。

Relation-level Attention 关系级的注意力

目的:学习每一个关系对节点 v i v_i vi的重要性分数 w i , r w_{i,r} wi,r,并将它们融入到特定关系r的节点embedding—— h i , r l + 1 h^{l+1}_{i,r} hi,rl+1

w i , r = ∑ i ∈ V r ∣ V r ∣ ⋅ q T ⋅ t a n h ( W R ⋅ h i , r l + 1 + b ) ( 5 ) w_{i,r} = \frac{\sum_{i∈V_r}}{|V_r|}·q^T · tanh(W_R · h^{l+1}_{i,r} + b)\quad(5) wi,r=VriVrqTtanh(WRhi,rl+1+b)(5)

W R W_R WR是l+1*l+1的共享非线性矩阵,用来转换 h i , r l + 1 h^{l+1}_{i,r} hi,rl+1 q T q^T qT是一个l+1维的向量,b是l+1维的偏差向量。W、q、b是共享的可训练的。 V r V_r Vr是关系r下的节点集合的数量, ∣ V r ∣ |V_r| Vr作分母是为了求平均值。tanh是双曲正切函数。

也就是说,给定一种关系r,该关系下有|V_r|个节点,对于每一个节点,首先将其在关系r下的embedding经过一个非线性层,然后乘上一个关系级注意力向量q,最后再将所有节点的转换结果求平均值,得到这个关系r的重要性。

β i , j = e x p ( w i , j ) ∑ r ∈ R i e x p ( w i , r ) ( 6 ) β_{i,j} = \frac{exp(w_{i,j})}{\sum_{r∈R_i}exp(w_{i,r})}\quad(6) βi,j=rRiexp(wi,r)exp(wi,j)(6)
在得到所有关系到重要性之后,利用softmax函数对其进行归一化,得到最终的关系级注意力权重 β i , j β_{i,j} βi,j R i R_i Ri是与节点 v i v_i vi关联的所有关系, β i , j β_{i,j} βi,j可以看作关系r对节点 v i v_i vi的贡献。

最后,用得到的 β i , j β_{i,j} βi,j对所有的特定关系节点embedding—— h i , r l + 1 h^{l+1}_{i,r} hi,rl+1进行加权融合
h i l + 1 = ∑ r = 1 R i β i , r ⋅ h i , r l + 1 ( 7 ) h^{l+1}_{i}=\sum^{R_i}_{r=1}β_{i,r} · h^{l+1}_{i,r}\quad(7) hil+1=r=1Riβi,rhi,rl+1(7)
h i G h^G_i hiG= h i L h^{L}_{i} hiL当作GNN最后一层传播的节点embedding,L是GNN的层数。

2、Ingredient Set Transformer 成分集合的转换器

目的:对于一个食谱,它有多种成分,并不是每个成分都是同等重要的,为了学习每个成分的重要性,本文应用一个成分集Transformer来整合食谱中的成分交互。最终得到基于transformer的食谱embedding—— h i T F h^{TF}_i hiTF,有别于上面GNN得到的食谱embedding—— h i G h^G_i hiG

本文使用的Transformer是2017年Google在Computation and Language上发表的方法,具体讲解请参考这篇文章详解Transformer中Self-Attention以及Multi-Head Attention,不想看文章可以看他发的视频理解更快Transformer中Self-Attention以及Multi-Head Attention详解

不管是self-Attention的本体公式 A t t ( Q , K , V ) = ω ( Q K ⊤ ) V ( 8 ) Att(Q, K, V ) = ω(QK^⊤)V\quad(8) Att(Q,K,V)=ω(QK)V(8)
或是后面的多头注意力Multi-Head Attention的设置,都可以从上面链接中的讲解得到答案。(ω是范围激活函数,ω=softmax(·/√d))

贴一下本文的多头注意力公式
A t t ( X 1 , X 2 ) = ω [ ( X 1 ⋅ W Q ) ( X 2 ⋅ W K ) ⊤ ] ( X 2 ⋅ W V ) ( 9 ) Att(X1, X2) = ω[(X1 · W_Q)(X2 · W_K)^⊤](X2 · W_V )\quad(9) Att(X1,X2)=ω[(X1WQ)(X2WK)](X2WV)(9)

M A B ( X 1 , X 2 ) = F F N [ W m ⋅ X 1 + A t t ( X 1 , X 2 ) ] , S A B ( X ) = M A B ( X , X ) , h i T F = F F N [ S A B ( X ) ] , ( 10 ) MAB(X1, X2) = FFN[W_m · X1 + Att(X1, X2)],\\ SAB(X) = MAB(X, X),\\ h^{TF}_i = FFN[SAB(X)],\quad(10) MAB(X1,X2)=FFN[WmX1+Att(X1,X2)],SAB(X)=MAB(X,X),hiTF=FFN[SAB(X)],(10)

最后将食谱的两个embedding: h i T F h^{TF}_i hiTF h i G h^G_i hiG进行拼接
h i = W O ⋅ ( h i G + h i T F ) h_i =W_O · (h^G_i + h^{TF}_i) hi=WO(hiG+hiTF)

对于用户embedding来说,它只需要经过GNN就行了,即 h i = h i G h_i = h^G_i hi=hiG

3、Objective Function for Recommendation 用来训练推荐的目标函数

目的:训练使得有关联的用户-食谱节点之间的分数比无关联的用户-食谱节点之间的分数大

s i , j = s c o r e _ p r e d i c t o r ( h i , h j ) L r e c = ∑ i ∈ U , j ∈ N i m a x ( 0 , 1 − s i , j + s i , j ′ ) ( 11 ) s_{i,j} = score\_predictor(h_i, h_j)\\ L_{rec} =\sum_{i∈U,j∈N_i}max(0, 1 − s_{i,j} + s_{i,j}′)\quad(11) si,j=score_predictor(hi,hj)Lrec=iU,jNimax(0,1si,j+si,j)(11)
h i , h j , h j ′ h_i,h_j,h_j′ hi,hj,hj是用户节点 v i v_i vi、与该用户有关联的食谱 v j v_j vj、与该用户随机相关的食谱节点 v j ′ v_j′ vj的embedding。score_predictor是一个向量求内积的函数, L r e c L_{rec} Lrec是recommendation loss。

4、Graph Contrastive Augmentation 图对比增强策略

目的: 由于上述目标函数只考虑URI-Graph中的显式和监督信息,因此本文另外引入了图对比增强策略,以自监督的方式捕获图中的隐式信息。
具体步骤: 输入的URI图 G G G以节点缺失和边缘缺失[Wang et, 2019a]的方式,被增广成两种视角的子图 G ′ , G ′′ G′, G′′ G,G′′

L c o n = ∑ i ∈ Y T − l o g e x p ( h i ′ , h i ′′ / τ ) e x p ( h i ′ , h j ′′ / τ ) ( 12 ) L_{con} =\sum_{i∈Y_T}− log \frac{exp(h_i′,h_i′′/τ)}{exp(h_i′,h_j′′/τ)}\quad(12) Lcon=iYTlogexp(hi,hj′′/τ)exp(hi,hi′′/τ)(12)
将同一个节点的不同视角视为正样本对,不同节点作为负样本对。力求损失函数中的分子最大化和分母最小化,来达到提高相同节点不同视角图一致性的目的。

最后将推荐损失函数和图对比学习损失函数融合起来。
L = L r e c + λ L c o n ( 13 ) L = L_{rec} + λL_{con}\quad(13) L=Lrec+λLcon(13)

Evaluation

baselines

传统方法BPR [Rendle et al.,2009]和NeuMF [He et al., 2017]
食谱表示学习和推荐方法 Nutrition [Teng et al., 2012],PopIngre [Teng et al., 2012], IngreNet [Teng et al., 2012] and Reciptor [Li and Zaki,2020]
齐次GNNs GraphSAGE [Hamilton et al., 2017] and GAT[V eliˇckovi´c et al., 2018]
异构GNNs RGCN [Schlichtkrull et al., 2018], mp2vec [Dong et al., 2017],HAN [Wang et al., 2019b] and HGT [Hu et al., 2020]
基于图形的推荐方法PinSage [Ying et al.,2018] and NGCF [Wang et al., 2019a].

Performance Comparison

在这里插入图片描述

Summarization

在本文中,我们提出并形式化了用图来推荐食谱的问题。为了解决这个问题,我们创建了URI图,这是一个新的大规模的食谱图数据,以促进基于图的食品研究。此外,我们开发了一种新的异构图学习模型RecipeRec,用于食谱推荐。RecipeRec能够通过GNN和transformer捕获食谱内容和关系结构信息。采用推荐损失和图对比学习损失相结合的目标函数对模型进行优化。大量实验证明,RecipeRec优于最先进的基线。
题外话,本文的公式推导均可以在前人的文章中找到范例,相关推导本站一搜便有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值