今天的博客主要参考了阿里妈妈定向广告团队的论文《Res-embedding for Deep Learning Based Click-Through Rate Prediction Modeling》和香侬科技李纪为团队的论文《Dice Loss for Data-imbalanced NLP Tasks》。首先声明的是,这两篇paper在内容上并没有直接的关系,但是最近是我看的论文里比较有启发意义的,所以索性就在一篇博客里一起总结一下。
首先介绍《Res-embedding for Deep Learning Based Click-Through Rate Prediction Modeling》,其主要应用场景是阿里广告推荐系统中的Embedding场景。众所周知,阿里淘宝系统中的用户数量、交易数量和商品数量都是上亿维度的,当下的成规模公司的推荐系统一般都采用的是深度学习的方法,这些稀疏的特征在入模之前都会进行Embedding表示:Embedding => concat(x,target) => MLP => sigmoid 已经成为了标准基础的处理框架。当前很多顶会paper的创新改进思路都是对MLP模型部分进改动,比方说DIN,DIEN等,但是对于很关键的Embedding部分确鲜有关注。作者通过理论证明发现:基于深度学习的CTR模型的泛化误差受限于同一interest领域的商品构成的item子空间的半径大小;也就是说,如果具有同一interest的商品构成的item子空间越小,那么模型的泛化能力就越好。至于这个结论是怎么得出来的?是来源于作者对于用户在淘宝浏览购物行为的建模与抽象,大致过程如下(具体的细节还建议读一下原文,这里仅给出关键的步骤描述):
首先作者做出假设,用户在淘宝的所有浏览行为都是在兴趣“interest”的驱动下完成的,而往往用户的兴趣点是多种多样的。假设用户每次浏览淘宝网站时,都会在某一个兴趣点的驱动下进行一段时间内的浏览行为。用数学公式刻画的话就是,假设所有用户的兴趣空间为
z
=
{
1
,
2
,
3
,
N
Z
}
z=\{1,2,3,N_Z\}
z={1,2,3,NZ},那么用户的行为就是兴趣特征空间下的条件概率
P
(
X
∣
Z
)
P(X|Z)
P(X∣Z),那么根据全概率公式可得某一个用户的行为可以拆分成:
P
(
X
)
=
∑
z
P
(
X
∣
Z
)
P
(
Z
)
P(X)=\sum_zP(X|Z)P(Z)
P(X)=∑zP(X∣Z)P(Z),整个过程用图像描述就如下所示:
上面那个例子就是2个interest空间
中的item分布图,可以明显看出两个item有一定的聚集性,而下面的图从
Z
1
.
.
.
Z
P
Z_1...Z_P
Z1...ZP,就是用户hidden interest从1时刻到p时刻的一个变化过程,而在每一个hidden interest支配下用户会产生相对应的浏览行为数据,即
Z
1
Z_1
Z1 interest对应的浏览行为就是
x
1
1
.
.
.
x
1
T
x_1^1...x_1^T
x11...x1T,而
x
t
x_t
xt就是最终的目前商品信息。
基于对用户在淘宝购物浏览商品行为的抽象,作者通过一个复杂的证明过程(具体的严格数学证明过程论文里并没有直接给出,期待未来可以放出来)最终证明了要想降低模型经验误差和实践误差值
∣
E
s
(
l
(
f
,
s
)
)
−
∑
i
=
1
N
l
(
f
,
s
i
)
/
N
∣
|E_s(l(f,s))-\sum_{i=1}^Nl(f,s_i)/N|
∣Es(l(f,s))−∑i=1Nl(f,si)/N∣,一个行之有效的方法是:让同一兴趣空间中的商品距离更近,不同兴趣空间中的商品距离更远。在这种思想的驱动下,作者提出了一种新的表征item Embedding结构的方式:
即 e m b e d d i n g ( i t e m ) = e m b e d d i n g ( c e n t r a l ) + e m b e d d i n g ( r e s i d u a l ) embedding(item)=embedding(central)+embedding(residual) embedding(item)=embedding(central)+embedding(residual),即每一个商品最终的表征由其对应的interest表征加上其在对应interest内的残差表征组成,同时为了保证residual不至于偏差太大(进一步确保同一interest空间内的item更近),会对residual Embedding向量加上L2正则约束。
但是现在问题出现了,如何确定interest的数量以及每一个item对应于哪一个或者哪几个interest空间??这里作者采用了一种比较巧妙的方式,即根据相邻物品间具有相似的interest空间,作者提出了最终Embedding向量的计算公式:
E
=
W
C
b
+
R
E=WC_b+R
E=WCb+R,其中
R
∈
R
H
∗
d
R \in R^{H*d}
R∈RH∗d代表了redusial向量矩阵(H为商品个数,d代表最终Embedding维度),
C
b
∈
R
H
∗
d
C_b \in R^{H*d}
Cb∈RH∗d代表了中心向量矩阵,而矩阵
W
∈
R
H
∗
H
W \in R^{H*H}
W∈RH∗H代表了关系矩阵,即定义了某一个商品和其他商品之间的关联关系,值越高说明关系越紧密(一般而言这个矩阵是一个稀疏矩阵),即最终某一个目标商品
i
t
e
m
i
item_i
itemi的中心向量由这个关系矩阵所表征的目标商品和其对应关系紧密的商品加权求和得出,而不同的关系矩阵的定义方式决定了不同的加权求和的方式,这里作者给出了三种参考方式:
在生成关联矩阵
W
W
W之前,需要先构造商品graph图谱,即商品之间的临接矩阵,具体的构造方式如下图所示:
在生成了临接矩阵
Z
Z
Z之后,就可以开始定义关联矩阵
W
=
g
(
Z
)
W=g(Z)
W=g(Z):
1
g
a
v
g
=
a
v
g
(
I
(
Z
>
0
)
)
g_{avg}=avg(I(Z>0))
gavg=avg(I(Z>0)),即将某一个节点周围和其有关系的节点求平均值得出;
2
g
G
C
N
(
Z
)
=
D
−
1
/
2
Z
D
−
1
/
2
g_{GCN}(Z)=D^{-1/2}ZD^{-1/2}
gGCN(Z)=D−1/2ZD−1/2,即借鉴了GCN网络的思想;
3 attention思想,即计算当前item和其周围item对应central向量的相似性权重,然后再加权求和得出。
最终,作者通过实验证明了GCN和attention效果明显优于平均值的效果,同时也优于original向量的效果。
第二篇介绍的paper是《Dice Loss for Data-imbalanced NLP Tasks》是香侬科技李纪为团队针对NLP一些正负样本不均衡的任务提出的基于Dice loss的损失函数。众所周知,在机器学习的分类任务中最常用、最经典的二分类损失函数是交叉熵损失函数, C E = − 1 N ∑ i ∑ j ∈ { 0 , 1 } y i , j l o g p i , j CE=-\frac{1}{N}\sum_i \sum_{j \in \{0,1\}}y_{i,j}logp_{i,j} CE=−N1∑i∑j∈{0,1}yi,jlogpi,j。这种损失函数在正负样本相对比较均衡的情况下是比价好的,但是如果正负样本不均衡的话,就对于少样本的类来说就不是特别友好,因此又衍生出了带权重的交叉熵损失函数 W e i g h t e d Weighted Weighted C E = − 1 N ∑ i α i ∑ j ∈ { 0 , 1 } y i , j l o g p i , j CE=-\frac{1}{N}\sum_i \alpha_i\sum_{j \in \{0,1\}}y_{i,j}logp_{i,j} CE=−N1∑iαi∑j∈{0,1}yi,jlogpi,j ,公式中的 α i \alpha_i αi就代表了类别i的权重。
然而,在很多实际场景中,特别是在正负样本严重不均衡的情况下(在以下博客的介绍中,我们把样本label为1的样本定义为少类别样本),即使是这种带样本权值的损失函数其效果也往往是比较有限的,于是有人提出了关于衡量集合A和B相似性的dice coefficient = D S C ( A , B ) = 2 ∗ ∣ A ⋂ B ∣ ∣ A ∣ + ∣ B ∣ = 2 T P 2 T P + F N + F P = ( 2 T P T P + F N T P T P + F P ) / ( T P T P + F N + T P T P + F P ) = 2 ∗ P r e ∗ R e c P r e + R e c = F 1 DSC(A,B)=\frac{2*|A\bigcap B|}{|A|+|B|}=\frac{2TP}{2TP+FN+FP}=(2\frac{TP}{TP+FN}\frac{TP}{TP+FP})/(\frac{TP}{TP+FN}+\frac{TP}{TP+FP})=\frac{2*Pre*Rec}{Pre+Rec}=F1 DSC(A,B)=∣A∣+∣B∣2∗∣A⋂B∣=2TP+FN+FP2TP=(2TP+FNTPTP+FPTP)/(TP+FNTP+TP+FPTP)=Pre+Rec2∗Pre∗Rec=F1,即优化DSC(A,B)等价于优化目标的F1值,这个值是兼顾了目标预测值的召回率和准确率两个维度的指标,相对于交叉熵来说更加适合样本不均衡的场景,结合模型的输出概率 p i 1 p_{i1} pi1和样本的真实label y i 1 y_{i1} yi1得到 D S C ( x i ) = 2 p i 1 y i 1 p i 1 + y i 1 DSC(x_i)=\frac{2p_{i1}y_{i1}}{p_{i1}+y_{i1}} DSC(xi)=pi1+yi12pi1yi1,当然这个损失函数只考虑了样本label 为1(即少量样本)对最终目标函数的贡献,为了把label为0的样本也考虑进来同时也为了使公式更加的平滑,在分子和分母都加入平滑项系数 γ \gamma γ,即将公式转换成 D S C ( x i ) = 2 p i 1 y i 1 + γ p i 1 + y i 1 + γ DSC(x_i)=\frac{2p_{i1}y_{i1}+\gamma}{p_{i1}+y_{i1}+\gamma} DSC(xi)=pi1+yi1+γ2pi1yi1+γ,这样的话无论目标样本的label是0还是1都会对最终的损失有所贡献。
在DSC公式的基础上,为了进一步加快模型的收敛速度,一种被称之为DL的损失函数也被提出来了, D L = 1 N ∑ i [ 1 − 2 p i 1 y i 1 + γ p i 1 2 + y i 1 2 + γ ] DL=\frac{1}{N}\sum_i[1-\frac{2p_{i1}y_{i1}+\gamma}{p_{i1}^2+y_{i1}^2+\gamma}] DL=N1∑i[1−pi12+yi12+γ2pi1yi1+γ]。最终作者在原始DSC基础上进行了进一步的修改,得到了最终的损失函数 D S C ( x i ) = 2 ( 1 − p i 1 ) p i 1 y i 1 + γ ( 1 − p i 1 ) p i 1 + y i 1 + γ DSC(x_i)=\frac{2(1-p_{i1})p_{i1}y_{i1}+\gamma}{(1-p_{i1})p_{i1}+y_{i1}+\gamma} DSC(xi)=(1−pi1)pi1+yi1+γ2(1−pi1)pi1yi1+γ。