58 招聘推荐排序算法实战与探索


本文地址:http://www.6aiq.com/article/1570879139349
知乎专栏 点击关注
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出

背景

58 同城作为中国最大的分类信息网站,为用户提供招聘、租房、二手车及黄页等多种信息服务,其中招聘业务是公司的主要业务之一。招聘平台有千万级的求职者用户,每天有百万级的新增职位发布,如何提高招聘方与求职者的双边匹配效率和用户体验,是招聘数据策略团队一直致力于解决的核心问题。此外,58 招聘求职者用户的需求在多个维度都具有个性化的特点,具体表现为

▪ 行业个性化:销售、工人、餐饮、家政、互联网。

▪ 季节个性化:寒暑假、毕业季、春季后返工潮、秋收农忙季。

▪ 地域个性化:一线城市、二线城市、三线城市、农村、南北差异。

▪ 人群个性化:性别差异、年龄差异、学历差异、技能差异、经验差异。

图 1  典型招聘推荐场景

 

为解决招聘平台匹配效率低和缺乏个性化元素的问题,我们开始搭建招聘推荐系统,推荐系统可以帮助用户发现自己需要什么或者让需要的信息主动找到用户,做到“千人千面”。目前招聘业务有几种典型的推荐场景,如图 1 所示,主要有招聘首页为你推荐、细分标签推荐(最近关注、底部标签)、专区推荐(附近职位、急招职位)、详情页推荐(看了又看、附近在招、同类热门)、聊天找工作等。

招聘推荐中的排序

招聘业务的本质是优化人力资源市场中求职者和企业 /HR 的双边供求关系。图 2 展示了 58 招聘业务链条中双边供给与需求的状态流转,求职者与企业 /HR 既是供给方又是需求方。

图 2 招聘双边供求关系

优化双边供求关系依赖于推荐系统引擎,召回和排序是其中两个核心模块。召回主要负责从海量的职位中筛选出与当前推荐场景匹配的候选集,排序又分为粗排、精排、重排三个部分。

**•**推荐排序框架

图 3 展示了招聘推荐的排序框架,粗排基于职位时效性、B 端活跃度、职位质量因子等设计规则筛选 topK 候选集;精排采用机器学习算法对求职者兴趣与企业 /HR 满意度进行精细化建模、优化双边连接;重排通过实现供给资源均衡、同用户打散、商业因子等策略支持对招聘整体流量的调控。

图 3 招聘推荐排序框架

**•**排序优化目标

图 4 展示了招聘求职业务中的 5 个重要环节:流量、展现、单向转化、双边连接、入职履约。目前在入职履约环节无法实现完全闭环(即求职者与招聘方产生双边连接后,求职链条发生中断,求职者是否入职履约也很难追踪),因此算法优化更多聚焦在前 4 个环节。在不同的业务阶段想要实现的目标是不一样的。业务成长初期,优化各推荐场景的点击率、单向转化率(投递、电话、im);当求职者发起单向转化之后,需进一步考虑提升双边撮合效率,优化双边连接率。此外,从平台内容治理角度需考虑信息质量度,从平台流量合理分配角度需考虑资源分配因子。 

 

图 4 排序优化目标

推荐排序算法演进

如图 4 所示,目前排序优化的主要目标是 GCV(Gross Connection Volume)最大化,我们将这个目标拆解为 CTR(点击率)、CVR(投递率)、FBR(反馈率)三个预估子模型。因此,本小节重点介绍预估模型的演进。如图 4 所示,招聘推荐排序中的预估模型经历了 5 个阶段:人工规则、大规模离散 LR、特征工程、非线性模型、深度学习。

图 5 预估模型演进

 

•人工规则

人工规则阶段,通过对招聘业务的理解制定不同规则,比如用户期望类别与职位类别是否相同、职位所属企业是否名企,然后基于人工经验敲定不同规则的权重,线上进行 A/B 实验。当线上效果不太满意时,再次修改因子或权重,这种迭代方式效率比较低下,同时也不够科学。主要表现为有限规则刻画匹配关系的局限性,以及不同规则权重定义的随意性。

 

•大规模离散 LR

大规模离散 LR 阶段,开始考虑采用机器学习建模的方式自动刻画众多规则,并从海量数据中学习规则权重。招聘业务中的目标行为概率预估问题可表示为

     

其中,Target 表示预估目标(点击率、投递率、反馈率),U 表示用户维度、I 表示职位维度、C 表示上下文。目标行为概率预估模型是机器学习中典型的有监督二分类问题,假设目标行为的概率服从 0,1 伯努力分布,自然想到使用 LogisticRegression 模型,表示为

          

其中,y 是建模目标,X 表示特征向量(包含上下文、用户简历、职位 + 企业、用户交互行为)。LR 模型具有很好的记忆能力和可解释性,在实践中会把所有连续值特征离散化,增强连续值特征在不同区间的刻画,同时保证模型对异常数据的稳定性。招聘平台的数据量是亿级别的,并且呈稀疏性,针对大规模离散稀疏特征,我们尝试了不同的优化算法。首先尝试了 Spark mllib 的 mini-Batch SGD 和 LBFGS,准确性和稀疏性不太理想。然后借鉴 google 在 2012 发表的 FTRL 优化算法在 Spark 框架下进行工程实践,并行化方面参考文献 [1] 中提出的 ParallelSGD 算法,FTRL 准确性和模型稀疏性达到相对理想的效果(模型稀疏性在线上 serving 时至关重要,直接决定线上的计算复杂度和 serving 的质量),并行 FTRL 优化的模型也因此成为我们算法迭代的 Base 模型。

 

图 6 优化算法对比 

 

图 7  ParallelSGD 算法

LR 模型阶段,在线预估服务 recjobscore 初具雏形,并且打通了特征引擎、离线训练、模型 serving、在线打分各个环节。第一版预估模型在 APP 上线后,职位点击率和投递率均有 20% 以上的提升。

在线性模型迭代中,算法工程师大部分精力会花在特征工程相关的工作上,特征引擎对特征的迭代效率起着至关重要的作用,因此我们设计开发了自己的特征生产框架。

•特征迭代

数据和特征决定了机器学习的上限,特征工程的目的是最大限度地从原始数据中提取信息以供算法学习。基于特征生产框架,我们在特征挖掘、特征设计及特征优化花了很多精力。招聘推荐的特征体系如图 8,包含用户特征、职位特征、上下文特征及组合特征,特征迭代过程中特征挖掘和优化主要从四个方面开展:

▪ 基础特征:尽可能挖掘所有与招聘效果相关的因子,并结合数据分析做特征筛选。

▪ 统计特征:用户偏好及职位 / 企业相关变量多窗口统计、统计置信度、统计平滑。

▪ 组合特征:基于业务理解人工交叉组合,引入非线性表达、构建用户与职位的匹配度特征(岗位、薪资、距离)。

▪ 文本标签特征:与类目体系相比,基于自然语言内容理解技术构建的招聘标签体系对用户和职位的刻画更加细致和完善,可从多个维度挖掘出更有价值的特征。



图 8 特征体系

非线性模型

公式(1)在真实的招聘场景中是非线性函数,而 LR 是线性模型,无法学习原始特征与拟合目标之间的非线性关系,因此在特征迭代阶段引入了大量特征交叉组合。比如男性用户更偏向于找普工 / 保安类工作、女性用户更偏向于找美容 / 保姆类工作,此时引入性别与职位类别的特征组合,就能增加 LR 模型的非线性表达能力。但是人工进行特征组合通常会存在诸多困难,如特征爆炸、特征难以被识别、组合特征难以设计等。业界已有不少自动特征组合的实践经验,基于业界经验,我们先后实践了 FM(Factorization Machine)模型和 XGoost 树模型。

FM 算法是由 Konstanz 大学的 Steffen Rendle 于 2010 年最早提出的,旨在解决离散稀疏数据下的特征组合问题,让模型自动地学习特征之间的二阶组合信息,原理上通过线性模型推广为二阶多项式,具体为

式中二次项包含了二阶特征交叉的所有组合, n 是特征数量,xi 表示第 i 个特征取值,wi 表示一阶特征权重,代表二阶权重,是第 i 个特征隐向量 vi 与第 j 个特征隐向量 vj 的内积。FM 算法在优化求解时,我们采用对数损失,学习算法借鉴目前分布式 FM 实现得较好的 DIFACTO 框架,wi 采用 FTRL 更新,隐向量 vi 采用 adagrad 更新,并在 Spark 框架下进行工程实践。模型训练过程中,对迭代次数、隐向量维度 k 和其他模型参数调整后,与大规模离散 LR 相比,模型评估 AUC 在百分位有 1-2 个点的提升。

另外,我们也尝试采用树模型的方式进行自动特征组合。Facebook 在 2014 年发表的文章中介绍通过 GBDT(Gradient Boost Decision Tree)解决 LR 的自动特征组合问题,Boosting 树模型较 FM 能提取更高维的组合特征。XGBoost 树模型是 GBDT 的升级版,加入正则化项控制模型的复杂度,通过迭代的方式生成新树,并在迭代过程考虑了二阶梯度,性能更佳。因此,我们优先考虑采用 XGBoost 树进行高维特征组合,并将 XGBoost 模型的输出进行离散编码,输入大规模离散 LR,通过 Stacking 的方式进行模型融合,算法框架如图 8 所示,具体步骤为

▪ XGBoost 树模型分布式训练,生成树。

▪ XGBoost 输出进行离散编码(one-hot)。

▪ 原离散特征级联 XGBoost 特征,训练 LR 模型。

 图 9  LR+XGBoost 融合模型

XGBoost 模型训练时,特征的使用方面有一些经验,XGBoost 非常适合处理连续特征,但在招聘场景中存在高维稀疏的 ID 类特征,如职位三级地域,直接输入会增加树的深度,导致过拟合,因此 ID 类特征的类别数目过大时(>100),会考虑 ID 类特征连续化。由于招聘推荐中样本数量较大,模型训练需考虑分布式架构,我们使用 DMLC(分布式机器学习联盟)开源的 XGBoost4j,它支持 Spark 框架,公司现有的资源能够很好地支撑。

图 9 给出单棵树的特征编码过程,通过训练生成树后,树中每个分裂节点使用的特征及特征值已知,编码时每条样本在每棵树中都会落入 1 个叶子节点,对叶子节点进行 one-hot 编码,最终将所有树的编码级联。最后,将原离散特征与 XGBoost 树编码的离散特征级联,输入 LR 模型,仍然采用并行 FTRL 优化方法学习模型参数。

LR+XGBoost 融合模型在 APP 上线后,累计收益职位点击率提升 3%,投递率提升 5%。

 图 10  XGBoost 特征编码

    

深度学习模型

LR 模型时代,人工特征组合是效果提升的重点,但耗时耗力,而且会存在特征爆炸、组合特征难以设计的问题。FM 与 XGBoost 虽然能够实现自动特征交叉,但仍然没有跳出特征工程框架,FM 能刻画的也仅仅是二阶特征组合,尽管 XGBoost 能够捕捉更高维度的组合信息,但对高维稀疏 ID 类特征表达能力较弱,而且如果想得到更高维度的特征表达,树的结构会很复杂,模型缺乏泛化能力。

深度学习具有端对端学习(节省特征工程)、能够从数据中自动学习信息更加丰富的隐式高阶特征表达、泛化能力强的特点。随着数据量的增长、大规模计算能力的提升及深度神经网络算法研究的进展,深度学习在人脸识别、自动驾驶、语音识别及对话系统应用中。目前在业界各公司的推荐、广告业务中也陆续落地,Google 2016 年提出 wide & deep 模型,并应用到 Appstore 的下载推荐中,该模型结合 LR 模型的记忆能力和 Deep 模型的泛化能力,取得较好的效果。后续 Wide&Deep 作为基础框架,演化出 DeepFM、DeepCross、XdeepFM 等一系列模型,这些模型的区别只是在宽度模型中设计不同的特征交叉结构。

 图 11  DeepFM 算法框架

 

招聘推荐排序中,为学习更高维、更丰富的特征表达,我们目前已对 DeepFM 模型进行了探索和验证。DeepFM 的算法框架如图 11,首先对离散稀疏特征做 Embedding;然后分别输入 FM 层(一阶特征、二阶组合特征)和 DNN 模型的全连接隐层,两个模块共享 Embedding;最后将二者输出级联作为 sigmoid 函数的输入。实践过程几个关键点总结如下:

▪ Wide 部分以帖子属性、用户属性为主,Deep 部分以用户偏好、帖子反馈统计为主;

▪ FM 求和项展开为隐向量维度的带 weight 求和,离线效果会有提升。

▪ 连续特征做归一化处理、Batch Normalization 能大大加快模型收敛速度。                                        

目前在 CVR 预估建模中应用 DeepFM 模型,分别实现了单机版和分布式训练。离线效果与 LR+XGBoost 模型相比,AUC 提升 1 个百分点;模型部署与在线服务正在进行性能测试。

总结与展望

优化求职者与企业 /HR 的双边连接效率是 58 招聘推荐排序中关键环节,为提升双边连接效果,我们将排序建模任务拆解为三个子预估模型:点击率、投递率、反馈率。预估模型的演进经历了人工规则、LR 模型、特征挖掘与迭代、非线性模型,以及目前正在实践的深度学习模型。

基于现有工作基础,未来招聘推荐排序建模将围绕以下几个方面开展:

▪ 模型实时性,流式学习实现模型分钟级更新。

▪ Mutitask-learning(多任务学习),多业务目标协同优化。

▪ 深度模型结合 attention 机制对用户序列行为进行兴趣建模。

▪ 探索 Listwise 方法,推荐列表排列组合优化。

参考文献

[1] Martin A. Zinkevich, Markus Weimer, Alex Smola & Lihong Li. Parallelized Stochastic Gradient Descent. In NIPS 2010.

[2] 冯扬. 在线最优化 (Online Optimization) 求解.

[3] Rendle S. Factorization machines[C]//Data Mining (ICDM), 2010 IEEE 10th International Conference on. IEEE, 2010: 995-1000.

[4] https://wormhole.readthedocs.io/en/latest/learn/difacto.html

[5] He X, Pan J, Jin O, et al. Practical lessons from predicting clicks on ads at facebook[C]//Proceedings of the Eighth International Workshop on Data Mining for Online Advertising. ACM, 2014: 1-9.

[6] https://XGBoost.readthedocs.io/en/latest/jvm/XGBoost4j_Spark_tutorial.html

[7] Chen T, Guestrin C. XGBoost: A scalable tree boosting system[C]//Proceedings of the 22nd acm sigkdd international conference on knowledge discovery and data mining. ACM, 2016: 785-794.

[8] Cheng H T, Koc L, Harmsen J, et al. Wide & deep learning for recommender systems[C]//Proceedings of the 1st Workshop on Deep Learning for Recommender Systems. ACM, 2016: 7-10.

[9] Wang R, Fu B, Fu G, et al. Deep & cross network for ad click predictions[C]//Proceedings of the ADKDD’17. ACM, 2017: 12.

[10] Lian J, Zhou X, Zhang F, et al. xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems[J]. arXiv preprint arXiv:1803.05170, 2018.

[11] https://www.zhihu.com/people/lambdaji

[12] https://github.com/ChenglongChen/tensorflow-DeepFM

 

团队介绍

58 招聘数据策略算法团队是支撑招聘业务中智能匹配的核心团队,涵盖推荐、广告、搜索、知识图谱、对话系统、反作弊等多个技术领域。帮助 58 招聘千万级用户提升职位匹配效率,改善用户体验。目前,58 招聘策略算法团队在人工智能领域进行积极地实践和探索,致力于用 AI 技术给广大求职者和招聘方带来更好的服务体验。


本文地址:http://www.6aiq.com/article/1570879139349
知乎专栏 点击关注
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出