CMI:结合对比学习和多兴趣挖掘的微视频推荐

2022-09-19 10:12:43 浏览数 (1)

关注我们,一起学习~

标题:Improving Micro-video Recommendation via Contrastive Multiple Interests 链接:https://arxiv.org/pdf/2205.09593v1.pdf 会议:SIGIR 2022 公司:MX Media

1. 导读

本文主要关注微视频的推荐方面的一篇短文,现有的微视频推荐模型依赖于多模态信息,并且学习的embedding无法反映用户对微视频的多种兴趣。本文结合对比学习提出提取对比多兴趣并设计微视频推荐模型 CMI。CMI 从用户的历史交互序列中为每个用户学习多个兴趣embedding,其中隐式正交微视频类别用于解耦多个用户兴趣。此外,构建对比多兴趣损失,以提高兴趣embedding的鲁棒性和推荐的性能。

2. 方法

用户集合表示为U,商品集合为V,用户u在时间t与商品v交互可以表示为

(u_i,v_j,t)

,给定用户

u_i

,其交互序列可以表示为

s_i=[v_{i1},...,v_{i|s_i|}]

,用户的多个兴趣表征可以表示为

[mathbf{u}_i^1,...,mathbf{u}_i^m]

,然后,对于每个兴趣embedding,计算每个候选微视频的余弦相似度,并召回具有相似度最高的K个微视频,即总共召回了mK个微视频。最后,从召回的微视频中,根据余弦相似度选取topK个微视频。

2.1 多兴趣和一般兴趣编码器

本文认为商品的类别用户兴趣的基础。假设有m种全局类别并设置可学习的隐式embedding为

[g_1,...,g_m]

。对于交互序列

s_i

中的商品,通过embedding层依次得到每个商品的embedding,得到

mathbf{S}_i=[mathbf{v}_{i1},...,mathbf{v}_{i|s_i|}]

。使用商品embedding和类别embedding之间的余弦相似度作为衡量商品

v_{ik}

属于类别

l

的分数。公式如下,

w_{i k}^{l}=frac{mathbf{g}_{l}^{T} mathbf{v}_{i k}}{left|mathbf{g}_{l}right|_{2}left|mathbf{v}_{i k}right|_{2}}

然后归一化得到相应的概率,

p_{i k}^{l}=frac{exp left(w_{i k}^{l} / epsilonright)}{sum_{l=1}^{m} exp left(w_{i k}^{l} / epsilonright)}

然后可以得到商品类别

l

对应的用户兴趣

mathbf{u}_i^l

mathbf{u}_{i}^{l}=sum_{k=1}^{left|s_{i}right|} p_{i k}^{l} mathbf{v}_{i k}

在执行类别分配时,可能会遇到两种退化情况。

  • 每个商品具有相同或相似的属于不同类别的概率。造成这种退化的原因是学习到的商品类别embedding很相似。
  • 所有商品都属于同一类。

为了避免退化情况,将类别embedding和商品embedding都约束在一个单位超球面内,即

left|mathbf{g}_{i}right|_{2}=left|mathbf{v}_{*}right|_{2}=1

,并将两两类别的embedding约束为正交,公式如下,

mathcal{L}_{o r t h}=sum_{i=1}^{m} sum_{j=1, j neq i}^{m}left(mathbf{g}_{i}^{T} mathbf{g}_{j}right)^{2}

除了对用户的多种兴趣进行编码外,还使用 GRU 对用户的一般兴趣的演变进行建模,获得用户的一般兴趣

mathbf{u}_i^g=GRU([mathbf{v}_{i1},...,mathbf{v}_{i|s_i|}])

2.2 对比正则项

部分交互中隐含的用户兴趣与所有交互(所有交互的意思是整个交互序列

s_i

)中隐含的用户兴趣相同。因此,采用随机抽样来得到不同的子序列,从而获得增广的数据。具体来说,给定用户

u_i

的历史交互序列

s_i=[v_{i1},...,v_{i|s_i|}]

,从

s_i

中采样

min(mu|s_i|,f)

个微视频,并根据它们在

s_i

中的顺序形成一个新序列

s_i'

,其中μ是采样率,f是最长序列长度默认值为 100。通过随机采样

s_i

两次,得到两个序列

s_i'

s''_i

。然后将这两个增强序列馈送到两个多兴趣编码器,以学习两组用户兴趣,即

mathbf{U}_{i}^{prime}=left[mathbf{u}_{i}^{1 prime}, mathbf{u}_{i}^{2 prime}, ldots, mathbf{u}_{i}^{m prime}right]

mathbf{U}_{i}^{prime prime}=left[mathbf{u}_{i}^{1 prime prime}, mathbf{u}_{i}^{2 prime prime}, ldots, mathbf{u}_{i}^{m prime prime}right]

,可以表示为下式,

U_i'=text{Multi-Interest-Encoder}(s_i')
U_i''=text{Multi-Interest-Encoder}(s_i'')

然后,构建一个对比多兴趣损失。对于用户

u_i

的任何兴趣embedding

mathbf{u}_i^{k prime} in mathbf{U}_i'

,构造一个正对

(mathbf{u}_i^{kprime},mathbf{u}_i^{kprime prime})

,用

mathbf{u}_i^{k'}

和其他2m-2个兴趣embedding构造2m-2个负样本对。由于m通常不会太大,因此上述负对的数量是有限的。给定

mathbf{u}_i^{k prime}

,利用同一批次中每个其他用户的兴趣embedding来构建额外的负对。综上,设训练batch为B,batch size为|B|,对于每个正对,有2m(|B| − 1) 2m − 2 = 2(m|B| − 1) 个负对,形成负集

S^-

。损失函数如下所示,

operatorname{sim}(mathbf{a}, mathbf{b})=mathbf{a}^{T} mathbf{b} /left(|mathbf{a}|_{2}|mathbf{b}|_{2} tauright)
begin{aligned} mathcal{L}_{c l}left(mathbf{u}_{i}^{k prime}, mathbf{u}_{i}^{k prime prime}right)=&-log frac{e^{operatorname{sim}left(mathbf{u}_{i}^{k prime}, mathbf{u}_{i}^{k prime prime}right)}}{e^{operatorname{sim}left(mathbf{u}_{i}^{k prime}, mathbf{u}_{i}^{k prime prime}right)} sum_{mathbf{s}^{-} in mathcal{S}^{-}} e^{operatorname{sim}left(mathbf{u}_{i}^{k prime}, mathbf{s}^{-}right)}} \ &-log frac{e^{operatorname{sim}left(mathbf{u}_{i}^{k prime}, mathbf{u}_{i}^{k prime prime}right)}}{e^{operatorname{sim}left(mathbf{u}_{i}^{k prime}, mathbf{u}_{i}^{k prime prime}right)} sum_{mathbf{s}^{-} in mathcal{S}^{-}} e^{operatorname{sim}left(mathbf{u}_{i}^{k prime prime}, mathbf{s}^{-}right)}} end{aligned}

通过数据增强和对比多兴趣损失,用户兴趣学习不再对特定的正交互敏感,从而减少噪声正交互的影响,实现正交互降噪。

2.3 损失函数

用户

u_i

和候选商品

v_t

的预测方式为

c_{i t}=max _{0 < k leq m}left(left{mathbf{u}_{i}^{k T} mathbf{v}_{t} / epsilonright}right) mathbf{u}_{i}^{g T} mathbf{v}_{t}

。在训练过程中,对于用户

u_i

的每个正样本

v_p^i

,从所有微视频中随机抽取从未交互过的n个微视频作为负样本。为了避免高采样成本,给定一个正样本,只采样一个负样本,即n为1。此外,将同一批次中其他用户的正样本商品和负样本商品作为负样本,从而形成负样本集N。然后采用以下交叉熵损失函数,公式如下,

mathcal{L}_{text {main }}left(u_{i}, v_{p}^{i}right)=-ln frac{exp left(c_{i p}right)}{sum_{v_{*} inleft{mathcal{N} cup v_{p}^{i}right}} exp left(c_{i *}right)}

总损失函数为下式,

mathcal{L}=mathcal{L}_{main} lambda_{cl}mathcal{L}_{cl} lambda_{orth}mathcal{L}_{orth}

3. 结果

0 人点赞