显式利用用户画像的多兴趣建模
目前在多兴趣建模中,用户侧的特征包括用户基础画像特征(年龄、性别、地域等)、用户在当前场景的静态兴趣画像特征(短期兴趣画像、长期兴趣画像)、交互的历史正向行为序列特征(正向物料id序列、正向物料类目序列、正向行为间隔序列等)。不论是基础画像、静态兴趣画像,都称为用户画像,经过Embedding层之后,与用户序列特征经过兴趣编码层提取后的兴趣Embedding拼接后进入最后的MLP。这里直接简单的拼接应该有更有效的方式来处理,有一篇paper使用attention的方式较好的结合了兴趣Embedding和用户画像Embedding。
论文地址:https://dl.acm.org/doi/pdf/10.1145/3477495.3532073
整体结构
多兴趣编码前
用户序列在输出多兴趣编码层之前,对序列每个正向行为的Embedding和用户画像计算attention分数,即计算每个正向行为和用户画像的相关性。然后attention分数乘到行为的Embedding上面,即对用户画像相关程度高的行为进行强化,对用户还行相关程度低的行为降权弱化,这个操作类似于对用户序列进行去噪。
其中计算attention分数的方式如下,这里也是用到了一个网络,论文中称为user-guided attention Network, e i \mathbf e_i ei是用户序列Embedding, e u \mathbf e_u eu是用户画像Embedding, [ e i , e u ] [\mathbf e_i, \mathbf e_u] [ei,eu]表示用户画像Embedding和行为Embedding拼接成一个Embedding, W i T \mathbf W^T_i WiT是学习的参数, a i a_i ai是attention分数。
a i = s i g m o i d ( W 2 T R e L U ( W 1 T [ e i , e u ] + b 1 ) + b 2 ) a_i = sigmoid(\mathbf W^T_2ReLU(\mathbf W^T_1[\mathbf e_i, \mathbf e_u] + \mathbf b_1) + b_2) ai=sigmoid(W2TReLU(W1T[ei,eu]+b1)+b2)
计算出的attention分数再乘回到序列Embedding上面,作为兴趣编码层的输入(如果是capsule编码,则计算方式如下)
z
j
=
∑
i
=
1
T
a
i
c
i
j
W
j
e
j
z_j = \sum_{i=1}^T a_ic_{ij} \mathbf W_j \mathbf e_j
zj=i=1∑TaicijWjej
多兴趣编码后
经过多兴趣编码之后,产生的多个兴趣向量,需要再度与用户画像进行兴趣精调,即用产生的兴趣向量和用户画像向量再次计算相关性,对相关性高的兴趣进行强化。论文中称这部分为IR Unit。
假设编码出了 K K K个兴趣向量, v k \mathbf v_k vk表示一个兴趣向量, e u \mathbf e_u eu表示用户画像Embedding, o k \mathbf o_k ok表示最终的兴趣向量。精调过程如下
o k = M L P ( [ o k , e u ] ) k = 1 , 2 , . . . , K \mathbf o_k = MLP([\mathbf o_k, \mathbf e_u]) \ \ \ \ k=1,2,...,K ok=MLP([ok,eu]) k=1,2,...,K
不得不说,利用用户画像的这个方式挺有效的。兴趣编码之前,对每个行为序列根据用户画像进行去噪提纯;兴趣编码之后,对每个兴趣向量根据用户画像进行精调。
其他策略
这个paper还提出了一个hard negetive策略
使用argmax从用户兴趣向量池
O
u
\mathbf O_u
Ou中选择出和目标物料
e
t
\mathbf e_t
et最匹配的兴趣向量
o
k
\mathbf o_k
ok
o
k
=
O
u
[
a
r
g
m
a
x
(
O
u
T
e
t
)
]
\mathbf o_k = \mathbf O_u[argmax(\mathbf O_u^T \mathbf e_t)]
ok=Ou[argmax(OuTet)]
那么基于这个用户兴趣
o
k
\mathbf o_k
ok,最可能的交互物料
x
t
x_t
xt可以由最大化
p
(
x
t
∣
u
)
p(x_t|u)
p(xt∣u)得到
p
(
x
t
∣
u
)
=
e
x
p
(
o
k
T
e
t
)
∑
j
∈
I
e
x
p
(
o
k
T
e
j
)
p(x_t|u) = \frac {exp(\mathbf o_k^T \mathbf e_t)} {\sum_{j \in I} exp(\mathbf o_k^T \mathbf e_j)}
p(xt∣u)=∑j∈Iexp(okTej)exp(okTet)
这里面兴趣向量
o
k
\mathbf o_k
ok是和正向物料
x
t
x_t
xt最相关的,计算负样本中的
x
j
x_j
xj的相关性也是用这个兴趣向量来计算的,训练和推断时有个较大的gap,因为
o
k
o_k
ok和目标物料
x
t
x_t
xt明显相关,但是和其他物料
x
t
x_t
xt明显无关。因此可以构造hard negetive,argmax操作不仅仅包括正向物料,也报告负向物料,即选出每个物料最相关的兴趣向量,不论这个物料是正向的还是负向的。
o k ( q ) = O u [ a r g m a x ( O u T e q ) ] \mathbf o_k^{(q)} = \mathbf O_u[argmax(\mathbf O_u^T \mathbf e_q)] ok(q)=Ou[argmax(OuTeq)]
p ( x t ∣ u ) = e x p ( ( o k ( t ) ) T e t ) ∑ j ∈ I e x p ( ( o k ( j ) ) T e j ) p(x_t|u) = \frac {exp(\mathbf (o_k^{(t)})^T \mathbf e_t)} {\sum_{j \in I} exp(\mathbf (o_k^{(j)})^T \mathbf e_j)} p(xt∣u)=∑j∈Iexp((ok(j))Tej)exp((ok(t))Tet)
损失函数如下:
L
=
∑
u
∈
U
∑
x
t
∈
I
u
−
log
(
p
(
x
t
∣
u
)
)
L = \sum_{u \in U} \sum_{x_t \in I_u} -\log (p(x_t|u))
L=u∈U∑xt∈Iu∑−log(p(xt∣u))