多兴趣建模中兴趣向量多样性度量

多兴趣建模中兴趣向量多样性度量

多兴趣建模(例如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} viRn×1, v j ∈ R n × 1 v_j \in R^{n \times 1} vjRn×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=1Mj=1M∣∣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=1Mj=1Mlog(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=1Mj=1M(vivj)T(vivj)    (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=1M(vimean(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)=xp(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代码实现

你可能感兴趣的:(python,人工智能)