从本篇博客开始,我准备把最近看的一些深度学习在工业界的落地案例进行一个总结,素材的主要来源是DataFun社区举办的一些在线沙龙技术分享。话不多说,直入主题。
这一次的分享主要是来自58同城的算法工程师在招聘推荐环节使用的深度召回模型。其实招聘推荐和广告推荐在流程上是相似的,都是从"海选 => 召回(粗排)=> 排序(精排)"。这次分享的主要亮点就是在召回阶段引入了深度学习模型。
首先想提的一点是,由于业务本身的特性,导致招聘推荐场景的“冷启动”问题非常的突出,一方面是新的求职者,一方面是新的招聘者。一般解决这种冷启动问题的思路都是引入side information即引入标签信息来对新加入的item进行近似表征。
下图就58同城在招聘推荐中采用的召回策略模型架构:
先来看左边的模型,这其实就是针对每一个招聘帖子借鉴了word2vec模型思想生成帖子向量,但是其中又有几个地方和word2vec不完全一致同时需要注意的地方:
1 在输入层的时候,每一个帖子并不是直接用一个embedding向量来表示的,而是使用了当前帖子的一些feature vector(side info)来进行表征,图中用到的有:帖子描述信息,企业信息,联系方式信息等,然后通过average pooling方式生成当前帖子的向量表示,最终当整个模型训练完之后,将 a v g ( v e c ( i n f o c o n t e n t ) , v e c ( e n t e r p r i s e ) , v e c ( c o n t a c t c o n t e n t ) ) avg(vec(info content),vec(enterprise),vec(contact content)) avg(vec(infocontent),vec(enterprise),vec(contactcontent))作为每一个“招聘”embedding表征;
2
由于用户的行为分为“点击”和“投递”这两种行为,这两种行为和用户的关联强度是不同的。显然“投递”比“点击”会包含更多的信息,所以对于这两种行为所采用的windows size大小也是不同的,“投递”行为的上行文窗口显然要大于“点击”所对应的窗口。
3 在采集当前action 对应帖子的正样本的时候采用left wise的方式,即只采集左边的信息(具体为什么会采用这种方式,作者解释说是因为这样子训练出来的embedding性能效果好,但是确无法给出业务上的解释原因);在采集负样本的时候,会采用全局负采样+局部市场负采样结合的方式来进行处理。全局负采样好理解,就是从全局的帖子中随机的采取一些作为负样本;“局部市场负采样”是说在采集的时候会重点考虑和当前action对应帖子在同一个局部市场的那些帖子,这个局部市场包含了地域信息+职位信息,比方说:上海销售岗,北京司机岗等。这个做法还是挺make sense的,因为如果地域一样,职位信息一样而用户确没有点击的话,说明这两个帖子还是非常不相似的。
4 在采集完正负样本之后,就要带入损失函数进行训练了,同样由于“点击”和“投递”这两种行为和当前用户关联强度的不同,这里的二分类损失函数是带有权重的:
L
=
−
1
c
∑
i
∈
C
σ
(
α
(
i
)
,
α
(
k
)
)
∗
l
o
g
(
P
(
v
i
∣
v
k
)
)
−
1
N
∑
i
∈
C
l
o
g
(
1
−
P
(
v
i
∣
v
k
)
)
L=-\frac{1}{c}\sum_{i\in C}\sigma(\alpha(i),\alpha(k))*log(P(v_i|v_k))-\frac{1}{N}\sum_{i\in C}log(1-P(v_i|v_k))
L=−c1∑i∈Cσ(α(i),α(k))∗log(P(vi∣vk))−N1∑i∈Clog(1−P(vi∣vk))
其中只对正样本加了一个权重,负样本不变。而正样本权重的计算公式中
σ
(
α
(
i
)
,
α
(
k
)
)
\sigma(\alpha(i),\alpha(k))
σ(α(i),α(k))里面的
α
(
i
)
\alpha(i)
α(i)和
α
(
k
)
\alpha(k)
α(k)分别代表了行为i和行为k的向量,其中一共也就4中组合:点击-点击,点击-投递,投递-点击,投递-投递。
最后给出整个过程的模型框架图:
其实很简单就是经典的双塔结构,左边是用户的特征,包括:用户的画像信息,上下文信息,用户点击的招聘帖子信息,用户投递的招聘帖子信息;右边是招聘帖子的信息。其实从整体来看无论是模型架构还是实施方案都是非常简洁而直接的,需要注意的就是这些看似简洁操作之下的细节处理,比方说在生成招聘帖子embedding的时候,虽然借鉴了word2vec中的skip-gram思想,但是在很多地方:输入向量的处理,正负样本的采用策略还是需要细细考究的,一定要适配当前的业务场景,才能使算法发挥出最大的威力来。