基于NLP的职业推荐系统构建:Talentcom与Amazon SageMaker的合作案例
关键要点
项目背景:Talentcom致力于为求职者提供最佳匹配的工作机会,使用先进的自然语言处理和深度学习技术建立推荐系统。模型架构:采用Triple Tower Deep Pointwise模型,整合用户搜索查询、职位描述及用户互动数据进行个性化推荐。推荐效果:新系统在A/B测试中与之前的XGBoost解决方案相比,实现了86的点击率提升。本文由Talentcom的首席技术官Abdenour Bezzouh和机器学习工程师Anatoly Khomenko共同撰写。
Talentcom成立于2011年,是全球最大的就业平台之一。该公司结合客户的付费职位和公开职位,创建一个统一的搜索平台。目前,Talentcom在75个国家拥有超3000万个职位,支持多种语言和行业,其使命是帮助求职者找到最佳工作机会,并提供优化的搜索体验。
Talentcom中心化了网络上所有可用的工作,旨在帮助求职者找到最相关的职位。职位推荐的顺序至关重要,因为它能够最大限度地展示最符合用户兴趣的工作。Talentcom的匹配算法的性能对其商业成功至关重要,同时也是用户体验的关键因素。然而,基于有限的信息一般只有几个关键词和一个地点来预测最相关的职位是一项挑战。
为实现这一目标,Talentcom与AWS合作,利用先进的自然语言处理NLP和深度学习模型训练技术,通过Amazon SageMaker开发了一个无与伦比的职业推荐引擎。本文展示了我们在设计这一推荐系统时采取的共同方法,包括特征工程、深度学习模型架构设计、超参数优化和模型评估方式,确保我们的解决方案对求职者和雇主都有效可靠。该系统由专门的应用机器学习科学家、工程师和领域专家共同开发。
推荐系统在在线A/B测试中,与之前的XGBoost解决方案相比,提升了86的点击率CTR,帮助数以百万计的用户获取更好的工作机会。
解决方案概述
系统的概要如图所示。系统以用户的搜索查询为输入,输出按相关性排序的职位列表。职位的相关性通过点击概率求职者点击职位以获取更多信息的概率来衡量。
该系统包含四个主要组件:
组件描述模型架构基于深度学习的Triple Tower Pointwise模型,包含查询编码器、文档编码器和交互编码器。特征工程采用标准特征工程和经过微调的SBERT嵌入,将有价值的信息提取并输入模型。模型优化与调优使用SageMaker中的高级训练方法,包括分布式数据并行SMDDP、自动模型调优等,提升模型性能。模型评估进行离线和在线评估,包括AUC和mAP@K。接下来的部分将详细介绍这四个组件的内容。
深度学习模型架构设计
我们设计了Triple Tower Deep PointwiseTTDP模型,采用三层的深度学习架构和逐点配对建模方法。三层架构提供了三个并行的深度神经网络,每个网络独立处理一组特征。这种设计模式使模型能够从不同的信息源学习到独特的表示。
三层的命名基于它们处理的信息:
查询编码器:处理用户搜索查询。文档编码器:处理职位的文档内容,包括职位标题和公司名称。交互编码器:利用提取的用户过去互动特征进行计算。每个编码器独立生成输出,最终将这些输出拼接并通过分类头进行最终的点击概率预测。这种架构灵活地捕捉了不同输入或特征之间复杂的关系,从而使模型在推荐职业时更加准确。
特征工程
我们进行了两套特征工程过程,以提取原始数据中的有价值信息并输入相应的模型塔:标准特征工程和经过微调的SBERT嵌入。
标准特征工程我们数据准备过程的第一步是标准特征工程。我们定义了四种特征类型:
流行度:计算职位、职业和公司层面的流行度分数,评估特定工作或公司的吸引力。文本相似性:计算不同文本元素之间的相似性得分,以了解它们的语境关系。互动:提取用户过去与职位列表互动的特征,例如计算用户历史点击职位与候选职位之间的嵌入相似性。个人资料:提取用户定义的职位偏好信息,以比较新的职位候选。我们采用经过训练的命名实体识别NER模型,识别和标记职位标题和搜索查询中的命名实体,从而计算这些实体之间的相似性,提供更专注和符合上下文的相关性度量。这种方法减少了数据中的噪音,增加了比较职位的精确度。
微调SBERT嵌入为了提高推荐系统的相关性和准确性,我们利用了SBERT这一强大的变压器模型。虽然通用的SBERT嵌入有效,但可能不足以捕捉特定行业独有的细微差别和术语。我们使用领域特定的数据微调SBERT嵌入,从而优化模型,提高对行业特定语言的理解,使得嵌入更具代表性。
以下图示展示了SBERT微调的步骤。
我们采用Triplet Loss与余弦距离度量学习文本嵌入,使锚点和正样本之间的余弦相似度高于锚点与负样本之间的相似度。用户搜索查询作为锚点文本,职位标题与雇主名称组合为正负样本。正样本来自用户点击的职位,而负样本来自未点击的职位。以下是微调过程的示例代码:
pythonimport mathfrom datetime import datetimefrom torchutilsdata import DataLoaderfrom sentencetransformers import (SentenceTransformer SentencesDataset losses)from sentencetransformersreaders import InputExample
modelname = allmpnetbasev2trainbatchsize = 16numepochs = 1modelsavepath = (foutput/{modelname} datetimenow()strftime(YmdHMS))
load pretrained SBERT model
model = SentenceTransformer(modelname device=cuda)
construct training dataset of triplet texts
trainexamples = []for anchor positive negative in zip(anchors positives negatives) trainexamplesappend(InputExample(texts=(anchor positive negative)))
traindataset = SentencesDataset(trainexamples model)traindataloader = DataLoader(traindataset shuffle=True batchsize=trainbatchsize)
use TripletLoss with cosine distance metric
distancemetric=lossesTripletDistanceMetricCOSINEtrainloss = lossesTripletLoss(model=model distancemetric=distancemetric tripletmargin=05)
Train the model
modelfit(trainobjectives=[(traindataloader trainloss)] epochs=numepochs warmupsteps=mathceil(len(traindataloader) numepochs 01) outputpath=modelsavepath)
使用SageMaker的分布式数据并行进行模型训练
我们使用SageMaker Distributed Data ParallelSMDDP,该功能在SageMaker ML平台上基于PyTorch DDP构建,旨在显著加快深度学习模型的训练。它通过将数据集拆分为更小的部分并在多个GPU上分配处理来达到目标。每个GPU独立处理其指定的数据,最后合并和同步结果。SMDDP利用优化的AllReduce算法,减少GPU之间的通信时间,并提高训练速度。
有关此架构的更多信息,请参阅介绍SageMaker的分布式数据并行库。
利用SMDDP,我们显著减少了TTDP模型的训练时间,使其速度提升了八倍。这种提升使我们能够更快地迭代和改进模型,从而在短时间内为用户提供更好的工作推荐。在快速变化的就业市场中,这种效率提升对保持推荐引擎的竞争力至关重要。
只需三行代码即可将训练脚本与SMDDP适配,如下所示,以PyTorch为例:pythonimport smdistributeddataparalleltorchtorchsmddpimport torchdistributed as dist
distinitprocessgroup(backend=smddp)
一旦您的PyTorch脚本能够使用分布式数据并行库工作,您就可以通过SageMaker Python SDK启动分布式训练作业。
评估模型性能
在评估推荐系统的性能时,选择与业务目标紧密相关且能清晰反映模型有效性的指标至关重要。在我们的案例中,我们使用AUC评估TTDP模型的职位点击预测性能,并使用mAP@K评估最终排名列表的质量。
AUC是接收器操作特征ROC曲线下的面积,表示随机选择的正例被排名高于随机选择的负例的概率。其值范围为0到1,1表示理想分类器,05表示随机猜测。mAP@K是评估信息检索系统如职位推荐引擎质量的常用指标,测量给定查询或用户在前K个相关项目中的平均精度。我们使用AUC、mAP@1和mAP@3进行评估,这些指标一起帮助我们分析模型在区分正负类AUC和在顶级排名中找到相关项目的能力mAP@K。
根据我们的离线评估,TTDP模型的AUC比基线模型现有的XGBoost生产模型高出1665,mAP@1高出20,mAP@3高出1182。
此外,我们设计了一项在线A/B测试来评估提议的系统,并在6周内对部分美国邮件用户进行了测试。总计向约2200万用户发送了新系统推荐的职位邮件。结果显示,与以前的生产模型相比,点击率提升了86。Talentcom正在逐步增加这套系统在其用户群体和渠道中的推广比例。
结论
创建职位推荐系统是一项复杂的工作。每位求职者都有独特的需求、偏好和职业经历,这些信息无法仅从简短的搜索查询中推断而来。本文中,Talentcom与AWS合作,开发了一套端到端的基于深度学习的职位推荐解决方案,为用户推荐相关职位。Talentcom团队在解决这一问题的过程中十分享受与AWS团队的合作。此项目标志着Talentcom转型历程中的重大里程碑,利用深度学习的力量推动业务发展。
项目使用SBERT微调生成文本嵌入。写作时,AWS已推出Amazon Titan Embeddings作为其基础模型的一部分,通过AWS Bedrock提供高性能的基础模型。我们鼓励读者探索本文中介绍的机器学习技术,利用AWS所提供的能力,如SMDDP,同时结合AWS Bedrock的基础模型来创建自己的搜索功能。
参考文献
SBERT训练概述PyTorch分布式概述SageMaker分布式数据并行库概述介绍SageMaker的分布式数据并行库关于作者
Yi Xiang是Amazon机器学习解决方案实验室的应用科学家,在那里帮助AWS客户加速AI和云端的采用。
Tong Wang是Amazon机器学习解决方案实验室的高级应用科学家,帮助AWS客户加速AI和云端的采用。
安易加速器安卓Dmitriy Bespalov是Amazon机器学习解决方案实验室的高级应用科学家,协助AWS客户加速AI和云端的采用。

Anatoly Khomenko是Talentcom的高级机器学习工程师,热衷于通过自然语言处理将优秀人才与优质岗位匹配。
Abdenour Bezzouh是一位拥有超过25年技术解决方案构建和交付经验的高管,在AWS团队为Talentcom设计和实施该系统时担任其首席技术官。
Dale Jacques是生成式AI创新中心的高级AI战略师,帮助AWS客户将业务问题转化为AI解决方案。
Yanjun Qi是Amazon机器学习解决方案实验室的高级应用科学经理,创新和应用机器学习来帮助AWS客户加速其AI和云端的采用。
发表评论