CIKM'21序列推荐|基于区域的embedding捕获用户行为中的偏好

2022-09-19 11:43:21 浏览数 (1)

Seq2Bubbles: Region-Based Embedding Learning for User Behaviors in Sequential Recommenders https://dl.acm.org/doi/pdf/10.1145/3459637.3482296

可以先看背景和总结部分,对整个文章做的工作进行了简单的概括,公式太长的可以左右滑动哦~

1. 背景

用户的历史行为序列中包含丰富的信息,但是现存的方法很多都是将用户序列表征为一个向量,最后映射为一个标量,而这对具有多模态信息和异质集的复杂分布的用户序列来说表达能力是有限的。本文提出了新的表征模型 Seq2Bubbles,来解决上述问题。现有的序列推荐的方法存在以下问题:

  • 如图所示,用户在不同item上的兴趣是呈聚类分布的,这里的意思是用户可能会对美妆、裙子感兴趣,而美妆内部的具体item之间他们存在相似性,而美妆中的item和裙子中的item具有异质性。因此将用户兴趣用单个标量来表示是无法捕获到多模态的用户兴趣的。
  • 用户对不同item有不同的集中度(concentration),例如用户可能对美妆中的某品牌口红情有独钟,而对其他不感兴趣;对某个款式的裙子感兴趣而对其他不感兴趣。因此可以理解为在同一行为序列中,不同的item的重要性是不一样的

集中度(concentration):这里对集中度这个概念简单解释一下,可能不好理解,这里举个例子:有的用户他挑选口红的时候,他会细致到具体的品牌,颜色等,这反映了该用户只喜欢之中品牌和类型的口红;而他在挑衣服的时候,他觉得只要是这一种款型的,他就喜欢。这就是所谓的集中度

2. 定义

M个用户的集合定义为

mathcal{U}

,N个item的集合定义为

mathcal{I}

,交互序列为

mathcal{T}_u={i_1^u,...,i_{n_u}^u}

i^u_m

表示用户u第m个点击的item。

mathcal{T}_u^t={i_1^u,...,i_{t}^u}

表示在

i_t^u

之前点击的序列。

3. 方法

本文所提方法主要包含embedding、encoding和decoding三层,embedding层和之前的方法类似,这里不赘述。

3.1 Region-based Embedding Model

3.1.1 Bubble Embedding的定义

Bubble:这里先对bubble进行简单的介绍,bubble在文中可以理解为是一个超椭球区域,作者将其形式化的描述为bubble(气泡)。

一个球形区域(bubble region)可以定义为,其中是中心向量,是径向量。bubble embedding表示一个闭合区域,向量空间中的超椭球体,对于一个行为序列,将其转换为bubble的集合,其中,bubble表示的球形区域内可能会包含候选集中的item。而在这个球形区域内的item的embedding应该和同在球形内并且被点击过的item的embedding类似。这些区域有的存在相交,有的不相交,对他们求并集后可以得到整个覆盖的区域,如下式:

bigcup_{k=1}^{m}left{mathbf{x}:left|left(mathbf{x}-mathbf{c}_{k}right) odot frac{1}{mathbf{r}_{k}}right|_{2} leq 1right}

根据上面的定义,这样的区域可以被视为用户将来根据历史序列点击的item集的估计,因此这可以作为反映用户兴趣的表征。bubble embedding具有以下优点

  • 更优秀的表达能力:序列中被点击item的中心向量适应用户兴趣的多模态,半径向量可以代表用户兴趣在每个方面的不同集中程度。
  • 足够灵活:可以适用于高维的序列输入,不需要其他专家知识。
  • 可解释性:球形区域显式的反映了用户在隐空间中的兴趣分布。到item的距离反映了对这些item的偏好程度。

3.1.2 Encoding Layer

这一层为 Bubble Embedding Estimation,即通过建模得到bubble embedding。将序列中的item embedding 作为当前区域的中心。半径向量反映了用户兴趣的集中程度,而集中度的特性可以通过点击序列来反映。如果用户在一个小区域内点击了数个具有相似embedding的item,则它的集中度是很强的,即用户可能喜欢某个具体品牌的某个具体商品。而如果用户点击的item的embedding不相似,那集中度就是弱的,即用户可能喜欢某一种风格的商品,没有前一种情况那么具体

为了使bubble embedding可以捕获到这一层信息,本文采用DNN

Phi(cdot)

利用序列中item的embedding来估计得到半径向量。该DNN模型需要满足三个条件:

  • 能够去除序列中的噪声,即用户可能是误点的,不能反映他的兴趣。
  • 需要将行为序列中的时序依赖编码进去,因为用户的兴趣会随着时间演化。
  • 需要根据不同的状态区分不同历史行为的重要性

基于以上三点,作者将

Phi(cdot)

设计为分层结构,低级序列单元

Phi_A(cdot)

和高级输出单元

Phi_R(cdot)

[h_1,...,h_m]=Phi_A(mathcal{Q^m})
[r_1,...,r_m]=Phi_R([h_1,...,h_m])

低阶序列单元采用自注意力机制进行建模,将序列中item的embedding

mathcal{Q}^m={q_{i_1},...,q_{i_m}}

作为输入,计算自注意力权重并进行加权求和得到下式:

mathrm{z}_{k}=sum_{j=1}^{k} alpha_{j k} mathrm{q}_{i_{j}}, quad text { where } alpha_{j k}=sigmaleft(frac{left(mathrm{W}_{K}^{1} mathrm{q}_{i_{k}}right)^{top}left(mathrm{W}_{Q}^{1} mathrm{q}_{i_{j}}right)}{sqrt{d}}right)

其中w为可学习权重,k=(1,2,...,m),这里直接采用sigmoid之后的权重进行加权,不采用softmax进行标准化,这有助于过滤掉无关信息和噪声。得到z之后在采用全连接层使特征点之间进行交互,如下式:

h_k=Dropout(PReLU(W^1_Nz_k b_N^1))

高阶输出单元需要整合历史序列中的相似行为,并建模用户的兴趣集中度。此处仍然采用自注意力机制,但是是在整个序列上进行,和低阶序列单元有所不同,具体如下,k=(1,2,...,m),w为可学习参数

mathbf{z}_{k}=sum_{j=1}^{m} beta_{j k} cdot mathbf{h}_{j}, quad text { where } beta_{j k}=sigmaleft(frac{left(mathbf{W}_{K}^{2} mathbf{h}_{k}right)^{top}left(mathbf{W}_{Q}^{2} mathbf{h}_{j}right)}{sqrt{d}}right)

对于加权求和得到的z可以进一步通过全连接层得到半径向量r,如下式:

r_k=Softplus(W^2_Nz_k b_N^2)

到这位置我们就得到了bubble区域的表示

b_k=(c_k,r_k)

3.1.3 Decoding Layer

通常召回阶段,我们会采用比较embedding之间的相似度来推荐相应的item,因此这里就需要考虑如何计算bubble embedding和目标item的embedding之间的相似度,或者距离。作者采用的相似度计算方式如下:

begin{array}{l} mathbf{p}_{k}=left[mathbf{c}_{k} deltaleft(mathbf{q}_{i}-mathbf{c}_{k}right) odot mathbf{r}_{k}right] odot mathbf{q}_{i}, quad k=1, cdots, m \ mathbf{a}_{m}=operatorname{MaxPooling}left{left[mathbf{p}_{1}, mathbf{p}_{2}, cdots, mathbf{p}_{m}right]right} \ mathcal{S}left(mathcal{B}_{m}, mathbf{q}_{i}right)=sleft(mathbf{a}_{m}, mathbf{q}_{i}right) end{array}

其中

delta(x)

表示当x大于0时,值为1;反之值为-1。本文相似度的计算方式为点积:

hat{y}_{ui}^m=(q_i)^Ta_m

3.1.4 Context-Aware Bubble Embedding

bubble embedding的序列和目标item,之间计算embedding之间相似度可能无法发掘历史行为和目标item之间的关系,因此本节同样将目标item也表示成bubble embedding,计算方式如下:

tilde{mathbf{c}}_{m}=sum_{k=1}^{m} gamma_{k m} mathbf{q}_{i_{k}}, quad text { where } gamma_{k m}=sigmaleft(frac{left(mathbf{W}_{K}^{3} mathbf{h}_{k}right)^{top}left(mathbf{W}_{Q}^{3} mathbf{q}_{i}right)}{sqrt{d}}right)
tilde{mathbf{r}}_{u}^{m}=operatorname{Softplus}left(mathbf{W}_{mathrm{N}}^{3}left[tilde{mathbf{c}}_{m} | mathrm{q}_{i}right] mathrm{b}_{N}^{3}right)

得到目标item的bubble embedding后,可以计算序列和目标item的相似度,如下式:

hat{y}_{u i}^{m}=left(mathbf{q}_{i_{t}}right)^{top} mathbf{a}_{m} left(mathbf{q}_{i_{t}}right)^{top} tilde{mathbf{p}}_{m}

其中

tilde{mathbf{p}}_{m}=tilde{mathbf{c}}_{m} deltaleft(mathbf{q}_{i}-tilde{mathbf{c}}_{m}right) odot tilde{mathbf{r}}_{m}

3.1.5 Bubble Embedding部分总结

这部分作者是对点击序列中的item构建bubble embedding,bubble embedding的构建包含两部分,中心和半径中心即为点击的item的embedding。半径向量通过自注意力机制来计算得到,这里用自注意力机制,从点击序列中挖掘点击当前item时,和其他item的相关程度,从而可以反映“集中度”

3.1.6 模型优化

3.1.6.1 监督学习

对于计算得到的相似度

hat{y}^m_{ui}

做sigmoid,得到估计概率,监督学习部分采用BPR损失,对于每一个用户的交互序列,采样一个负样本序列

overline{mathcal{S}}_{u}=left{bar{i}_{1}^{u}, bar{i}_{2}^{u}, cdots, bar{i}_{n_{u}}^{u}right}

bar{i}_{m}^{u}

采样自

mathcal{I} verb|| mathcal{T}^m_u

,BPR损失函数构建如下,

i_{1}^{u} succcurlyeq i_{2}^{u}

表示

i_{1}^{u}

i_{2}^{u}

之前出现。

mathcal{L}=sum_{u in mathcal{U}} sum_{m=1}^{n_{u}-1} log Pleft(i_{m 1}^{u} succcurlyeq bar{i}_{m 1}^{u} mid mathcal{T}_{u}^{m}right)

在实际训练中,采用mini-batch的方式训练,对于一个batch中的数据

{mathcal{T}_u}_{u in mathcal{U}_b}

的损失函数可以写为:

mathcal{L}_{s u p}=sum_{u in mathcal{U}_{b}} sum_{m=1}^{n_{u}-1} log sigmaleft(hat{y}_{u, i_{m 1}^{u}}^{m}-hat{y}_{u, bar{i}_{m 1}^{m}}^{m}right)
3.1.6.2 对比正则项(无监督)

作者发现直接优化上述损失函数容易过拟合,因为半径向量总是以激进的方式更新,因此采用了一个促进自一致性的正则项。掩盖(去除)第t个最近的bubble,得到序列集合

bar{mathcal{B}}_u^m=mathcal{B}_u^m verb|| {b_u^{m-t}}

,损失函数的目标是希望最大化

bar{mathcal{B}}_u^m

和历史点击item

i_{m-t}^u

的embedding的相似度,最小化

bar{mathcal{B}}_u^m

和其他user

mathcal{U}_b verb|| {u}

的序列的相似度。公式如下,其中

S(cdot)

计算相似度的方式和之前decoding layer的计算方式一致。

mathcal{L}_{text {reg }}=-sum_{u in mathcal{U}_{b}} sum_{m=t 1}^{n_{u}} log frac{exp left(mathcal{S}left(overline{mathcal{B}}_{u}^{m}, mathbf{q}_{i_{m-t}^{u}}right)right)}{sum_{u^{prime} in mathcal{U}_{b}} exp left(mathcal{S}left(overline{mathcal{B}}_{u}^{m}, mathbf{q}_{i_{i}^{u^{prime}}}right)right)}

加入正则化之前,仅采用BPR损失,我们考虑的是模型通过“向前看”,看历史数据来预测;加入正则项之后,我们希望模型也能“向后看”,充分保留序列中的信息。作者在实际操作中,t=1即可。因此总体损失函数为:

mathcal{L}=mathcal{L}_{sup} lambda mathcal{L}_{reg}

4. 实验结果

5. 总结

本文的最大的特点在于将用户的兴趣表征为超球的形式,从而避免了单个标量表征能力不足的问题。超球的半径反映了用户的对这类item的兴趣大小,文中通过自注意力机制从行为序列中学习得到。然后通过作者设计的相似度计算方法,计算序列和目标item的得分,最后采用BPR作为损失函数,同时结合对比学习的正则化项防止过拟合。在整体学习的过程中,主要涉及了自注意力机制、相似度求解、通过对比学习构建正则项等。

0 人点赞