导读: 招聘业务是多行为场景,用户需求和交互周期短、行为稀疏。本次分享基于业务挑战,将介绍代价敏感、向量检索等技术在招聘深度召回中的应用,最后总结实践中的教训与心得。
主要内容包括:
首先和大家分享下58招聘涉及的业务及场景。
招聘行业:
据2018年统计,我国总人口13.9亿,就业人口7.7亿,三大产业就业人口占比分别为26.11%、27.57%、46.32%;据2019年8月统计,城镇调查失业率达到5.2%,25~59岁人口失业率达到4.5%;2019年800万+毕业生进入求职市场;求职者和招聘方的需求都十分强烈。
58招聘:
58招聘在互联网招聘界占有率居首;服务于大规模求职者及大中小型企业;平台上每天达成海量连接,促成大量成功就业。
求职场景分为C端求职者和B端招聘方:
58招聘是一个典型的双边业务,交互渠道非常多样。
58招聘主要实现了以下招聘场景的推荐:
推荐内容主要包括toC的职位推荐、标签推荐、企业推荐,以及toB的简历推荐。
产品主要包括普通职位和广告职位。
3. 58招聘场景下面临的问题与挑战
在我们的工作中,主要面临以下问题和挑战:
下面和大家分享下58招聘推荐系统的整体架构和召回实现。
58招聘推荐系统的整体处理流程和其他场景的推荐系统大同小异。在用户到来后首先进行用户意图理解,从职位池中多路召回职位,对召回职位根据优化目标进行精排和重排序,最后加入多样性等策略将最终内容展现给用户。
58招聘推荐系统的召回策略多达十几种。主要有:上下文召回、附近召回、实时CF召回、用户画像、标签召回、向量召回、实时深度召回。
从图中直观地看,实时召回在召回序列中性能最优。
不论传统或深度召回方法,都要先构建物品的索引和理解用户的请求,对用户的请求返回匹配的物品。不同处在于深度召回中物品索引和用户请求表现为向量的形式。
离线使用DNN对招聘帖向量化,保存向量至KNN检索引擎:
在线依历史行为生产用户兴趣向量:
推荐系统将物品对用户展现后,用户可能会产生点击、投递、电话、IM等多种行为。上图右上展示了58招聘如何收集用户行为链。图中每一个点代表一个行为,点中有两个属性,招聘帖自身信息和用户行为。
招聘帖自身信息:
用户行为:
在语言学中,分布式假设可以表述为:一个单词的特征可以被总和它一同出现的单词所描述。我们自然可以联想到:职位可以通过在行为链中与其相邻的其他职位刻画。当然这只是一种假设,并没有严格的证明。
特别的,用户行为的重要性是不同的。在招聘推荐场景下,显然投递行为的价值大于点击。
网络架构上节已介绍过,在实践过程中我们主要有以下几个优化点。
① Session优化:
Airbnb的经验是将Session划分为2周,58招聘则进行不同的尝试;上图左半部显示的是将Session划分为1天或1周时的用户行为密度对比,其中蓝色表示划分间隔为1天,黄色为1周,图中纵轴表示用户不区分点击或投递的行为链长度,纵轴表示长度所占百分比,可以看出差异并不显著,故初步选定为1天;上图右半部显示的是天内不同Session长度性能比较,左图表示不同划分时平均推荐位置排序,越小表示相关结果的推荐越靠前,右图表示预测结果的AUC,越高代表预测结果越准确,两个度量指标均为6小时划分最优;Session长度取决于产品特性和用户行为生命周期;Session长度需要平衡模型性能和训练资源消耗。
② 正向样本Left-wise采样,负向样本全局空间负采样加局部市场空间采样:
③ 行为权重代价敏感损失:
图中上面的公式表示不考虑代价敏感时向量训练的损失函数,其作用是使正样本之间的向量表示更相似,同时正负样本之间的表示区别更大。图中下面的公式是考虑代价敏感时向量训练的损失函数,具体做法是区分点击和投递两种行为,在正样本之间加入一个代价矩阵,表示该样本的行为是哪一种,表示不同行为之间的代价权重,是一个根据经验给出的超参数。
评估方法:
展现给用户的职位会形成一个列表,用户行为链中包含点击、投递,同时用户可能会对展现列表中的职位进行点击、投递;依照用户历史行为链中职位和展现行为职位间的Cosine距离,考察行为链对展现职位的位置提升。
离线评估结果:
图中表格显示了用户历史行为链对展现职位的位置提升,如在没有使用Embedding时,历史行为链投递的职位与展现列表中产生投递行为的职位计算Cosine距离重排序后,平均位置为7.1074,使用Embedding后平均位置为4.8236,得到了32.09%的提升,类似的,历史行为链中的点击行为与展现列表中产生投递行为的职位计算Cosine距离重排序,显示对展现职位的位置得到了29.73%的提升。
我们对所有的职位都生产一个向量, 使用Faiss构建向量相似度检索库,对每个职位都计算与其最相近的top k职位,最终离线形成职位与职位之间的索引。在线上推荐时我们首先根据用户的历史点击行为链和历史投递行为链分别在索引库中召回职位,再经过精排和补充策略后展现给用户。
业务效果:
上图中横轴表示不同的展现位,纵坐标表示提升幅度,不同的曲线表示不同指标下的提升,包括PVR、CTR、Money等;从图中看出,所有主体指标在线上的反馈都是正向的,且产出较大。
使用双塔架构进行实时召回在业界得到了极为广泛的使用,Facebook、微软、百度等公司都针对自身业务提出了各自的双塔网络架构。58招聘则参考了Youtube技术团队19年提出的双塔架构[1]。
用户侧的处理流程:
物品侧的处理流程:
招聘帖信息经过与用户侧共享的Item Embedding层后再进行一次L2的归一化操作。
其中,共享Item Embedding层的操作为:
实时召回时要对模型进行在线的增量更新,无法使用离线时的负采样操作;我们参考了Youtube团队19年提出的batch softmax方法,在batch内进行负采样,具体细节请参考论文[1]。
我们比较了不同batch size的效果区别,实践表明batch取512时效果最优。
实时深度召回目前在58招聘还没有完全开展,所以整体的业务效果不能给大家呈现,目前只能给大家展示与上节介绍的Embedding方法的效果对比。
实时深度召回方法在CTR、CVR指标上都有1个百分点以上的提高。
我们将召回分成了三个阶段,分别为前、中、后。
召回前:
召回中:
召回后:
总之,召回阶段需要考虑的主要有:场景匹配、实时性、需求意图匹配、个性化。场景匹配我们主要在召回前进行,在三个阶段则都要加强实时性。需求意图匹配包括对C端和B端两部分,个性化主要体现在召回中和召回后阶段。
召回前的优化得到了约32%的收益提升,召回中的优化得到了约64%的收益提升,召回后的优化只得到了约4%的收益提升,召回后阶段还有很大的优化空间。
3. 后续优化点
[1]. Yi, Xinyang, et al. “Sampling-bias-corrected neural modeling for large corpus item recommendations.” Proceedings of the 13th ACM Conference on Recommender Systems. 2019.
[2]. Shan, Ying, et al. “Deep crossing: Web-scale modeling without manually crafted combinatorial features.” Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. 2016.
[3]. Qu, Yanru, et al. “Product-based neural networks for user response prediction.” 2016 IEEE 16th International Conference on Data Mining (ICDM). IEEE, 2016.
今天的分享就到这里,谢谢大家。
作者介绍:
李祖定,58同城算法架构师
58招聘业务推荐系统算法策略负责人,负责招聘推荐系统的算法策略建设和优化,包括召回、排序等,致力于提升平台用户体验和变现能力。
领取专属 10元无门槛券
私享最新 技术干货