1 动机
- 传统推荐系统一般只考虑购买行为,忽略了放入购物车、浏览行为;
- 本文将购买、放入购物车、浏览三个行为一起考虑;
- 考虑购买和放入购物车行为的差异,进行对比学习;
- 考虑购买和浏览行为的差异,进行对比学习。
2 相关工作
主要有图神经网络(GNN)和多行为推荐(Multi-behavior recommendation)两个方面。
2.1 图神经网络(GNN)
- NGCF [Wang et al., 2019]:在推荐中提出了一种空间 GNN (spatial GNN);
- LightGCN [He et al., 2020]:学习用户和商品的编码;
2.2 多行为推荐
- [Chen et al., 2020a; Wang et al., 2021]:增加了辅助行为;
- [Jin et al., 2020]:基于异质网络heterogeneous graph;
- MB-GMN [Xia et al., 2021b]:赋予用户-项目交互学习以发现依赖于类型的行为表示的能力,从而自动提取行为异质性和交互多样性以进行推荐。
总结现有的多行为推荐方法,没有考虑捕捉多行为的共性,数据稀疏的问题依然存在。
3 主要算法
算法主要分为三个部分:
- (1) 利用GCN对三个行为进行编码;
- (2) 对用户和商品分别进行编码;
- (3) 利用对比学习(Contrastive Learning)来建立购买和放入购物车行为之间的差异、购买和浏览行为之间的差异。
3.1 GCN编码三个行为
数据说明:
- GGG:包含购买、放入购物车、浏览三个行为的原始数据集;
- G1G_1G1:用户和购买关系图;
- G2G_2G2:用户和放入购物车关系图;
- G3G_3G3:用户和浏览关系图。
算法流程: - 通过LightGCN对三个行为进行初始化编码。
3.2 用户和商品编码
对用户进行编码:
- 利用用户uuu的购买、放入购物车、浏览三个行为的编码,对用户uuu进行编码:
eu=σ{W(∑k=1Kauk∗xuk)+b}(1)\boldsymbol{e}_{\boldsymbol{u}}=\sigma\left\{\boldsymbol{W}\left(\sum_{k=1}^{K} a_{u k} * \boldsymbol{x}_{\boldsymbol{u} \boldsymbol{k}}\right)+\boldsymbol{b}\right\} \tag1 eu=σ{W(k=1∑Kauk∗xuk)+b}(1)
– auka_{u k}auk:用户uuu的行为kkk对应的权重;
– xuk\boldsymbol{x}_{\boldsymbol{u} \boldsymbol{k}}xuk:用户uuu在行为kkk下的编码,来源于XU1,XU2,XU3X_{U1}, X_{U2}, X_{U3}XU1,XU2,XU3;
– W\boldsymbol{W}W和b\boldsymbol{b}b:神经网络的权重和偏置; - 计算auka_{u k}auk:分子为单个行为,分母为三个行为的加权累加和。
auk=exp(wk∗nuk)∑m=1Kexp(wm∗num)(2)a_{u k}=\frac{\exp \left(w_{k} * n_{u k}\right)}{\sum_{m=1}^{K} \exp \left(w_{m} * n_{u m}\right)} \tag2 auk=∑m=1Kexp(wm∗num)exp(wk∗nuk)(2)
– wkw_{k}wk:行为kkk的下标,作者用的是一个全局的变量,所用用户采用的同一个值,比如购买是0.5,放入购物车是0.3,浏览是0.2;
– nukn_{u k}nuk:用户uuu在行为kkk下的物品个数,比如张三购买了2个商品,将3个商品放入购物车,浏览了5个商品;
对商品进行编码:利用多层感知机将第iii个商品在行为kkk下的编码拼接起来。
ei=g{Cat(xik)}(3)\boldsymbol{e}_{\boldsymbol{i}}=g\left\{\operatorname{Cat}\left(\boldsymbol{x}_{\boldsymbol{i k}}\right)\right\} \tag3 ei=g{Cat(xik)}(3)
3.3 对比学习(Contrastive Learning)
- 计算用户购买和放入购物车之间的差异、用户购买和浏览之间的差异:
Lsst−k′user=∑u∈U−log∑u+∈Uexp{(xu1)Txu+k′/τ)}∑u−∈Uexp{(xu1)Txu−k′/τ}(4)\mathcal{L}_{s s t-k^{\prime}}^{u s e r}=\sum_{u \in U}-\log \frac{\left.\sum_{u^{+} \in U} \exp \left\{\left(\boldsymbol{x}_{\boldsymbol{u} \boldsymbol{1}}\right)^{T} \boldsymbol{x}_{\boldsymbol{u}^+\boldsymbol{k}^{\prime}} / \tau\right)\right\}}{\sum_{u^{-} \in U} \exp \left\{\left(\boldsymbol{x}_{\boldsymbol{u} \boldsymbol{1}}\right)^{T} \boldsymbol{x}_{\boldsymbol{u}^{-} \boldsymbol{k}^{\prime}} / \tau\right\}} \tag4 Lsst−k′user=u∈U∑−log∑u−∈Uexp{(xu1)Txu−k′/τ}∑u+∈Uexp{(xu1)Txu+k′/τ)}(4)
– k′k^{\prime}k′:有两个取值,分别为2和3,2代表放入购物车,3代表浏览;
– u+u^{+}u+和u−u^{-}u−:以用户uuu为基础,找到用户uuu的正用户集和负用户集,PMIP M IPMI值大于某个阈值为正,小于某个阈值为负,计算方法如下:
PMI(u,u′)=logp(u,u′)p(u)p(u′)p(u)=∣I(u)∣∣I∣p(u,u′)=∣I(u)∩I(u′)∣∣I∣(5)\begin{array}{c} P M I\left(u, u^{\prime}\right)=\log \frac{p\left(u, u^{\prime}\right)}{p(u) p\left(u^{\prime}\right)} \\ p(u)=\frac{|I(u)|}{|I|} \\ p\left(u, u^{\prime}\right)=\frac{\left|I(u) \cap I\left(u^{\prime}\right)\right|}{|I|} \end{array} \tag5 PMI(u,u′)=logp(u)p(u′)p(u,u′)p(u)=∣I∣∣I(u)∣p(u,u′)=∣I∣∣I(u)∩I(u′)∣(5)
– τ\tauτ:温度参数,作者取的是1。 - 计算商品被购买和放入购物车之间的差异、商品被购买和浏览之间的差异,计算方法与用户类似。
3.4 损失函数
总的损失函数如下:
L=Lst+λLsst+μ∥Θ∥22(6)\mathcal{L}=\mathcal{L}_{s t}+\lambda \mathcal{L}_{s s t}+\mu\|\Theta\|_{2}^{2} \tag6 L=Lst+λLsst+μ∥Θ∥22(6)
第一项为BPR Loss:
Lst=∑(u,i,j)∈O−log{σ(euTei−euTej)}(7)\mathcal{L}_{s t}=\sum_{(u, i, j) \in O}-\log \left\{\sigma\left(e_{u}^{T} e_{i}-e_{u}^{T} e_{j}\right)\right\} \tag7 Lst=(u,i,j)∈O∑−log{σ(euTei−euTej)}(7)
- eue_ueu:用户uuu的编码;
- eie_iei:用户uuu购买过、或放入购物车、或浏览过的商品编码;
- eje_jej:用户uuu未购买过、或未放入购物车、或未浏览过的商品编码,作者在代码里面选的64个未产生过行为的商品。
第二项为对比学习产生的Loss:
Lsst=∑k′=2K(Lsst−k′user+Lsst−k′item)(8)\mathcal{L}_{s s t}=\sum_{k^{\prime}=2}^{K}\left(\mathcal{L}_{s s t-k^{\prime}}^{u s e r}+\mathcal{L}_{s s t{-k^{\prime}}}^{i t e m}\right) \tag8 Lsst=k′=2∑K(Lsst−k′user+Lsst−k′item)(8)
- Lsst−k′user\mathcal{L}_{s s t-k^{\prime}}^{u s e r}Lsst−k′user:同公式(4);
- Lsst−k′item\mathcal{L}_{s s t{-k^{\prime}}}^{i t e m}Lsst−k′item:商品的Loss。
参考文献
[1] Self-supervised Graph Neural Networks for Multi-behavior Recommendation
[2] 源代码:https://github.com/GuShuyun/MBRec