AAAI'21 | 会话推荐--稀疏注意力去除噪声,自注意力生成目标表征

2022-09-19 11:41:20 浏览数 (1)

Dual Sparse Attention Network For Session-based Recommendation https://ojs.aaai.org/index.php/AAAI/article/view/16593 代码(code):GitHub - SamHaoYuan/DSANForAAAI2021

1. 背景

注意力机制已经在基于会话推荐中得到广泛应用,但是现有的方法面临两个问题:

  • 一种是只将会话中的最后一个点击行为作为查询(query,即目标item)来反映用户的兴趣,但是只用最后一个行为不一定每次都能反映用户的兴趣
  • 另一种是考虑会话内的所有商品都对最终结果有利,这其中包括了不相关商品的影响(即虚假用户行为)

2. 定义

I={i_1,i_2,...,i_m}

表示所有商品的集合

S={s_1,s_2,...,s_n}

表示根据时间排序的会话,

s_p

表示第p个被点击的商品,n表示会话长度

3. Sparse Transformation

这里作者用到了一个新的激活函数,当然不是作者提出的。通常我们采用softmax来做最后的激活函数,或者作为注意力机制的归一化函数。但是softmax的归一化方式会为向量中的每一个元素都赋值,即他不会存在0的值,顶多是很小,比如10e-5等。而sparsemax是2016年提出的softmax的改进版,他可以得到稀疏的结果,即让一些值为0,它和softmax具有相似的性能,但具有选择性、更紧凑、注意力集中。正如背景中作者所说的,会话中包含的商品可能存在噪声,比如误点击的,而softmax的非零概率可能会为无用数据分配权重,从而影响找到相关项目的能力,并且一些本来分配高权重的位置也会有“缩水”。如下如所示,sparsemax相比如softmax是更硬的,在过大过小的地方对应1和0,即可以得到稀疏解。

在19年有人提出了sparsemax的改进版本,即可学习的介于softmax和sparsemax中间的激活函数,公式如下:

begin{aligned} &alpha text {-entmax }(x)=underset{p in Delta^{d-1}}{operatorname{argmax}} p^{T} x H_{alpha}^{T}(p), text { where } \ &H_{alpha}^{T}(p)= begin{cases}frac{1}{alpha(alpha-1)} sum_{j}left(p_{j}-p_{j}^{alpha}right), & alpha neq 1 \ H^{S}(p), & alpha=1end{cases} end{aligned}

如图所示,当α为1是该函数是softmax,α为2时该函数为sparsemax。

4. 方法

如图所示为模型的整体框架图,主要包含四个部分:embedding layer、target embedding learning、target attention layer、prediction layer。

4.1 Embedding Layer

该模块用户将会话数据转化为两个向量,分别是item embedding和positional embedding。positional embedding通过文献[1]中的方式获得,主要是将位置信息转化为稠密向量从而不过时间信息。对于会话中的每一个item,得到的embedding为下式,其中x为item embedding,p为时间embedding。

c_i=Concat(x_i,p_i)

为了在没有特定目标商品的情况下学习用户的偏好,这里作者加了一个特殊的embedding

c_s

,他是我们需要预测的目标embedding,他的位置就为t 1。得到C的序列为:

hat{C}={c_1,...,c_t,c_s}

注意点

笔者简单阅读了一下源码,本文所提方法中序列中对商品做embedding的时候是直接采用商品的id进行embedding的,而没有包含其他特征,例如商品的类型,产地等,因此才能直接在最后面添加一个,即作者添加的这个特殊的商品,id为最大id 1,位置为t 1。

4.2 Target Embedding Learning

该部分通过自注意力机制在会话的embedding c中学习到其中商品之间的协作信息,即同一会话中不同商品之间的关系。注意力机制如下,其中

K=V=hat{C}

,但是

Q=f(hat{C}W^Q b^Q)

,其中f为relu函数。

hat{A}=alpha text {-entmax }left(frac{Q K^{T}}{sqrt{2 d}}right) V

其中激活函数的α计算方式如下,这里的

c_s

就是前面说的特殊的embedding,其中w,b为可学习参数,σ为sigmoid,整体公式将α控制在[1,2],即为了使激活函数达到softmax和sparsemax的中间效果。

alpha=sigma(W_{alpha}c_s b_{alpha}) 1

然后经过逐位置的FFN得到下式,然后接上残差连接,layer norm和dropout。

F F N(hat{A})=max left(0, hat{A} W_{1}^{text {self }} b_{1}right) W_{2}^{text {self }} b_{2}

上述的整体过程可以表示为

E=SAN(hat{C})

E={e_1,...,e_t,e_s}

就是稀疏自注意力机制的得到的输出。前t个是item的embedding,字后一个es是目标embedding。

4.3 Target Attention Layer

上述的自注意力网络可以理解为特征提取,其中每个商品embedding包含了其他商品的信息,并且包含了目标embedding,但是忽略了初始信息。这一层采用vanilla注意力机制,来学习得到整个会话的表征,公式如下,可以发现就是经过多层的FFN然后经过激活函数得到权重β,该权重表示前t个商品的embedding和目标embedding的权重关系。

beta_{p}=alpha text {-entmax }left(W_{0} fleft(W_{1} e_{p} W_{2} e_{s} b_{a}right)right)
alpha=sigma(W_{alpha}e_s b_{alpha}) 1

得到所有的权重

beta={beta_1,...,beta_t}

后,可以计算整个会话的表征

h_s=sum_{p=1}{beta_pc_p}

4.4 预测层

预测层的总体流程为,将

h_s,e_s

拼接后,进过全连接层,在经过激活函数SELU(f函数),最后通过L2norm和softmax得到预测概率,具体公式如下,其中

x_i

为原始的item的embedding,

w_k

为标准化的权重。

begin{aligned} h &=operatorname{Concat}left(e_{s}, h_{s}right) \ z &=fleft(W_{z} h b_{z}right) end{aligned}
begin{gathered} hat{z}=w_{k} operatorname{L2Norm}(z), hat{x_{i}}=operatorname{L2Norm}left(x_{i}right) \ hat{y}_{i}=operatorname{softmax}left(hat{z}^{T} hat{x}_{i}right) end{gathered}

最后损失函数依旧采用交叉熵函数:

L(y,hat{y})=-sum_{i=1}^m{y_ilog(hat{y_i})}

5. 结果

image.png

6. 总结

本文主要针对背景汇总所述的两个问题,即会话中的最后一个点击的商品未必能反映用户的兴趣,另一方面会话中的点击可能存在噪声,因为可能存在虚假行为(点错)。

  • 针对第一个问题,作者采用学习target embedding的方式,而不是直接采用会话中最后一个点击的商品
  • 针对第二个问题,作者采用α-entmax的激活函数,主要是通过该方法产生稀疏解,从而避免给一些不感兴趣的商品加权。这里的这个方案相当于是把原先softmax认为不太相关(权重很小)的商品直接处置为不相关(权重为0)。

通过target embedding学习到和会话中点击商品相关的表征,另一方面结合整个会话的表征来共同预测,从而避免单个商品无法反应用户偏好的问题。

0 人点赞