多兴趣建模中兴趣向量多样性度量
多兴趣建模中兴趣向量多样性度量
多兴趣建模(例如Mind、SINE、ComiRec)过程中,通常会产生多个用户兴趣向量,同一个用户的多个兴趣向量在空间中应当相距足够远,以此来代表不同的兴趣点。
通常在实践中,会在模型主损失后面加一个多样性损失(diversity loss)来对兴趣向量进行约束。各个用户兴趣向量越不相似,则多样性损失越小。
L o s s = ( 1 − α ) ∗ L o s s m a i n + α ∗ L o s s d i v e r s i t y ( 1 ) Loss = (1-\alpha)*Loss_{main}+\alpha * Loss_{diversity} \ \ \ \ (1) Loss=(1−α)∗Lossmain+α∗Lossdiversity (1)
常用的衡量多样性损失如下,假设用户的两个兴趣向量表示为 v i v_i vi和 v j v_j vj, v i ∈ R n × 1 v_i \in R^{n \times 1} vi∈Rn×1, v j ∈ R n × 1 v_j \in R^{n \times 1} vj∈Rn×1,用户兴趣向量个数为 M M M
cos相似度
L
o
s
s
d
i
v
e
r
s
i
t
y
=
1
M
2
∑
i
=
1
M
∑
j
=
1
M
v
i
T
v
j
∣
∣
v
i
∣
∣
∣
∣
v
j
∣
∣
(
2
)
Loss_{diversity} =\frac {1} {M^2} \sum_{i=1}^M \sum_{j=1}^M \frac {v_i^T v_j} {\vert \vert v_i \vert \vert \vert \vert v_j \vert \vert} \ \ \ \ (2)
Lossdiversity=M21i=1∑Mj=1∑M∣∣vi∣∣∣∣vj∣∣viTvj (2)
兴趣向量越不相似,点积结果越小,多样性loss越小
L
o
s
s
d
i
v
e
r
s
i
t
y
=
−
1
M
2
∑
i
=
1
M
∑
j
=
1
M
log
(
1
−
v
i
T
v
j
∣
∣
v
i
∣
∣
∣
∣
v
j
∣
∣
)
(
3
)
Loss_{diversity} =- \frac {1} {M^2} \sum_{i=1}^M \sum_{j=1}^M \log(1 - \frac {v_i^T v_j} {\vert \vert v_i \vert \vert \vert \vert v_j \vert \vert} ) \ \ \ \ (3)
Lossdiversity=−M21i=1∑Mj=1∑Mlog(1−∣∣vi∣∣∣∣vj∣∣viTvj) (3)
使用
log
\log
log函数进行激活,兴趣向量越相似,多样性loss越大,随相似度增加loss非线性增长
L2距离
L
o
s
s
d
i
v
e
r
s
i
t
y
=
−
1
M
2
∑
i
=
1
M
∑
j
=
1
M
(
v
i
−
v
j
)
T
(
v
i
−
v
j
)
(
4
)
Loss_{diversity} =- \frac {1} {M^2} \sum_{i=1}^M \sum_{j=1}^M (v_i -v_j)^T(v_i-v_j) \ \ \ \ (4)
Lossdiversity=−M21i=1∑Mj=1∑M(vi−vj)T(vi−vj) (4)
兴趣向量越不相似,L2距离越大,多样性loss越小
L
o
s
s
d
i
v
e
r
s
i
t
y
=
−
1
M
∑
i
=
1
M
(
v
i
−
m
e
a
n
(
v
)
)
2
(
5
)
Loss_{diversity} =- \frac {1} {M} \sum_{i=1}^M (v_i -mean(v))^2 \ \ \ \ (5)
Lossdiversity=−M1i=1∑M(vi−mean(v))2 (5)
这里用兴趣向量之间的方差大小度量多样性,方差越小,多样性loss越大
KL距离
KL距离是度量两个分布的差异,设
p
(
x
)
p(x)
p(x)和
q
(
x
)
q(x)
q(x)是2个分布,kl距离计算如下
D
(
p
∣
∣
q
)
=
∑
x
p
(
x
)
log
p
(
x
)
q
(
x
)
(
6
)
D(p \vert \vert q) = \sum_{x}p(x) \log \frac {p(x)} {q(x)} \ \ \ \ (6)
D(p∣∣q)=x∑p(x)logq(x)p(x) (6)
在这里分布我们泛化成2个兴趣向量,同时因为kl计算没有对称性,所以我们采用如下方式
L
o
s
s
d
i
v
e
r
s
i
t
y
=
1
2
(
D
(
v
i
∣
∣
v
j
)
+
D
(
v
j
∣
∣
v
i
)
)
(
7
)
Loss_{diversity} = \frac {1} {2}( D(v_i \vert \vert v_j) + D(v_j \vert \vert v_i) ) \ \ \ \ (7)
Lossdiversity=21(D(vi∣∣vj)+D(vj∣∣vi)) (7)
附上tf代码实现