Song, Guoqiong , Zhan Wenjing, Eisinger, Jacob作者

Talroo使用Analytics Zoo和AWS利用深度学习在工作推荐上的应用

基于关键字的求职搜索通常不能充分传达求职者意图。而在人力资源(HR)技术领域,大量含有丰富文本内容提供了更为丰富的信息。例如,求职者的简历中包含了其理想工作的各种指标。这个项目主要演示了如何在基于Amazon Web Services (AWS) 的Databricks平台上利用Analytics Zoo的自然语言文本分析和基于深度学习的推荐模型,根据简历内容和工作职位描述,来预测求职者申请工作职位的可能性。

背景

Talroo 面临基于关键字搜索的挑战。Talroo是一个高容量、数据驱动的全国性招聘网站,有着丰富的市场合作关系,其网络庞大而有针对性。目前,Talroo大规模的根据求职者输入的关键词,通过搜索去匹配和推荐工作。每个月Talroo都会处理百亿条招聘广告和十亿条工作查询的数据,这会导致数以千万计像点击和转换的交互事件。这些描述、查询和交互事件都在AWS上的Databricks平台上处理,并作为parquet table被存储到Amazon Simple Storage Service(Amazon S3)上。了解更多有关 Talroo *

Talroo碰到的挑战之一是,较短的招聘周期限制了招聘广告面向求职者的有效投放。目前,Talroo已有的推荐系统通过关键字搜索来解决这个冷启动问题。但这个简短的关键词缺少上下文来源并不能有效描述求职者的意向。相比单纯的关键词,个人简历在自然语言中提供了更丰富的上下文来源。

新开发的深度神经网络(DNN)已经在捕获用户项数据非线性关系的推荐系统中得到成功应用。经验证据表明,使用更深层次的神经网络可以提供更好的推荐性能2

因此,将自然语言处理(NLP)和大规模DNN技术结合在AWS Databricks生产平台上,是完善Talroo推荐系统的关键。本项目通过使用基于BigDL1的Analytics Zoo构建了端到端的解决方案。

数据集成

我们直接从Talroo的数据处理过程中提取求职者简历和招聘广告以及相关的数据,用于训练和测试模型。并通过含有申请、点击和广告的显示量的日志文件来还原申请职位的过程。基本流程如下:

  1. 为申请日志中的每一位求职者生成(Resume, Applied-Job) pair
  1. 将生成的(Resume, Applied-Job) pair 和点击日志结合生成点击信息
  1. 使用 (Resume, Applied-Job, Click) tuple和广告显示日志匹配得到所有推荐的招聘广告,不考虑工作是否被申请

该项目应用了包含了查询、广告显示、点击和转换的5个月简历搜索数据,用于构建解决方案。其中用于模型训练/测试之间的分配比例为4:1。

Analytics Zoo深度学习应用到AWS上的Databricks平台非常直接。首先通过上传适当的Java* ARchive文件包(JARs),将Analytics Zoo APIs加载到 Databricks 平台的classpath中;然后,我们通过Databricks平台的Jupyter笔记本接口进行深度学习模型的训练和迭代,如任何其他机器学习模型一样。

Analytics Zoo解决方案

Analytics Zoo是Intel开源的一个统一的数据分析人工智能平台,它无缝地将Spark、TensorFlow、Keras和BigDL程序集成到一个整合的流水线中,可以透明地扩展到大型Apache Hadoop/Spark集群中,用于分布式训练或推理,而无需额外的GPU基础设施。

此端到端的处理流程运行在已经包含了 Apache SparkAnalytics Zoo 的Databricks集群上,整个流程包括了数据采集、 特征提取、 推荐模型的训练和评估。推荐系统的输入是一个简历-招聘广告配对,用来训练Neural Collaborative Filtering (NCF) 模型从而学习工作职位与求职者之间的关系,并预测某些求职者申请特定职位的可能性。在当前版本中,点击表示正样本,而非点击表示负样本。下图 1 显示了完整的端到端处理流程。

图 1:基于Analytics Zoo 和 Apache Spark的简历推荐系统

 1 

我们首先会读取Spark中的原始数据作为DataFrames,然后提取用于模型训练的数据特征。在原始数据集中,每份简历或招聘广告的文本内容是我们要处理的对象。我们对每一个文本内容来提取一个数据向量表示该文本,用于训练和测试推荐模型。

在此项目中,我们通过Global Vectors (GloVe)3来得到文档的向量。该数据采用全域对数双线性回归模型的无监督算法,将每个单词转成对应的实数向量。该训练使用了来自2014年维基百科的单词与单词同时出现的统计数据。下载数据地址:zip file from the Stanford NLP Group.

我们将文档分割成词,清洗,然后根据每个单词的向量计算加权平均值,从而得到该文档的数据向量,文档的数据向量代表了该文档在向量空间中的线性子结构。

 2 

我们使用Spark 自有的APIs训练k-Means模型,将简历分到了多个组中。了解更多K-means++.

<<<<

val kmeans = new KMeans()

  .setK(param.kClusters)

  .setSeed(1L)

   .setInitMode("k-means||")

   .setMaxIter(param.numIterations)

   .setFeaturesCol("kmeansFeatures")

   .setPredictionCol("kth")

val trained: KMeansModel = kmeans.fit(resueDF)

<<<<

 3 

我们进一步处理每个组中的简历和招聘广告,对于每个简历-招聘广告配对,我们将对应的两个向量连接成一个向量作为数据特征,将点击或不点击分别转换表示为正标签或负标签。含有数据特征和标签的DataFrame被转换成Sample 的RDD。

 4 

然后,我们用Analytics Zoo APIs为每个组构建NCF推荐模型 (由四个线性层组成,如下所示),并训练模型。对模型的权重和偏差给与平均值为0且标准偏差为0.1初始值,以得到更快的收敛效果。

<<<<

val model = Sequential[Float]()

model

  .add(Linear(100, 40, initWeight = Tensor(40, 100).randn(0, 0.1), initBias = Tensor(40).randn(0, 0.1))).add(ReLU())

  .add(Linear(40, 20, initWeight = Tensor(20, 40).randn(0, 0.1), initBias = Tensor(20).randn(0, 0.1))).add(ReLU())

  .add(Linear(20, 10, initWeight = Tensor(10, 20).randn(0, 0.1), initBias = Tensor(10).randn(0, 0.1))).add(ReLU())

  .add(Linear(10, 2, initWeight = Tensor(2, 10).randn(0, 0.1), initBias = Tensor(2).randn(0, 0.1))).add(ReLU())

  .add(LogSoftMax())

<<<<

 5 

我们一共训练了五个推荐模型,对每个测试记录根据其对应的推荐模型做出预测,从而得到综合预测。

模型评估和结果

我们使用两种离线评估方法,根据一个月的数据来对推荐系统进行评估。一个关注数量和另一个关注模型的质量。

对于数量评估,需要测量求职者选择的推荐数量。应用准确率4,5公式来测量检索到的实例中相关实例的分数。准确率是通过模拟点击率来估计点击率(CTR)的一种离线方法。

质量意味着推荐的工作的排名位置准确地反映了他们与简历的相关性,这意味着更匹配的工作应该得到更高的排名。因为当前模型是二进制秩,我们使用Mean reciprocal rank(MRR)4。MRR从多个查询中计算出第一个相关实例的倒数的平均值,这将给出排名质量的统一衡量标准。

由于求职者的行为通常差异很大,最终的评估图表对应于工作的百分位数增加。我们没有使用召回率是因为很难得到真实的假阴性数据。

图 2 显示了推荐模型预测和搜索推荐的对比。橙线表示搜索的结果,蓝线表示 NCF 推荐模型的结果。两项统计信息图表分别是准确率 (图 2a) 和 MRR (图 2b) 。通过采用端到端Analytics Zoo解决方案的处理流程,我们看到了相比搜索推荐有大幅提高,MRR与准确率分别为 10%和6%。

­­

结论

本文简要介绍了Talroo在使用关键字搜索来推荐工作面临的挑战,以及可以利用丰富文本信息和深度学习来改进推荐系统的可能­­。我们给出了判断模型成功的关键指标,介绍了整个解决方案。该方案使用Analytics Zoo搭建了端到端的深度学习处理流程,首先通过自然语言分析得到文本向量作为数据特征,又搭建了深度学习NCF推荐模型,从而预测求职者申请某工作的可能性。我们的方案成功运行在基于AWS的Databricks集群上。类似的基于深度学习和丰富内容的推荐系统也可以应用到在其他场景中(如Web搜索和电子商务)并发挥关键作用。更多的示例和API请参考Analytics Zoo模型推荐

参考资料

  1. J Dai, Y Wang, X Qiu, etc., 2018, "BigDL: A Distributed Deep Learning Framework for Big Data"
  2. X He, L Liao, H Zhang, etc., 2015, "Neural Collaborative Filtering"
  3. J Pennington, R Socher, C Manning, 2014, "GloVe: Global Vectors for Word Representation"
  4. Evaluation Measures (Information Retrieval)
  5. P Lak, A Bener, 2017, "Predicting Click Through Rate for Advertisements- Dealing with Imbalanced Data"
Analytics Zoo
Analytics Zoo

Analytics Zoo是一个统一的大数据分析+AI平台,它无缝地将Spark、TensorFlow、Keras和BigDL程序集成到一个整合的流水线中,可以透明地扩展到大型Apache Hadoop/Spark集群,用于分布式训练或预测,方便用户构建深度学习端到端的应用。通过该专栏希望和大家一起探讨AI在实际生活中各个领域的创新。

工程推荐系统数据集成AWSAnalytics Zoo深度学习
2
相关数据
AWS机构

亚马逊网络服务系统(英语:Amazon Web Services,缩写为AWS),由亚马逊公司所创建的云计算平台,提供许多远程Web服务。Amazon EC2与Amazon S3都架构在这个平台上。在2002年7月首次公开运作,提供其他网站及客户端(client-side)的服务。截至2007年7月,亚马逊公司宣称已经有330,000名开发者,曾经登录过这项服务。

相关技术
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

数据分析技术

数据分析是一类统计方法,其主要特点是多维性和描述性。有些几何方法有助于揭示不同的数据之间存在的关系,并绘制出统计信息图,以更简洁的解释这些数据中包含的主要信息。其他一些用于收集数据,以便弄清哪些是同质的,从而更好地了解数据。 数据分析可以处理大量数据,并确定这些数据最有用的部分。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

GloVe技术

Stanford开发的用于词向量表示的一个库/工具

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

Apache Spark技术

Apache Spark是一款快速、灵活且对开发者友好的工具,也是大型SQL、批处理、流处理和机器学习的领先平台。它是一个围绕速度、易用性和复杂分析构建的大数据处理框架,提供了一个全面、统一的框架用于管理各种不同性质(文本数据、图表数据等)数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

推荐系统技术

推荐系统(RS)主要是指应用协同智能(collaborative intelligence)做推荐的技术。推荐系统的两大主流类型是基于内容的推荐系统和协同过滤(Collaborative Filtering)。另外还有基于知识的推荐系统(包括基于本体和基于案例的推荐系统)是一类特殊的推荐系统,这类系统更加注重知识表征和推理。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

线性回归技术

在现实世界中,存在着大量这样的情况:两个变量例如X和Y有一些依赖关系。由X可以部分地决定Y的值,但这种决定往往不很确切。常常用来说明这种依赖关系的最简单、直观的例子是体重与身高,用Y表示他的体重。众所周知,一般说来,当X大时,Y也倾向于大,但由X不能严格地决定Y。又如,城市生活用电量Y与气温X有很大的关系。在夏天气温很高或冬天气温很低时,由于室内空调、冰箱等家用电器的使用,可能用电就高,相反,在春秋季节气温不高也不低,用电量就可能少。但我们不能由气温X准确地决定用电量Y。类似的例子还很多,变量之间的这种关系称为“相关关系”,回归模型就是研究相关关系的一个有力工具。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

文本分析技术

文本分析是指对文本的表示及其特征项的选取;文本分析是文本挖掘、信息检索的一个基本问题,它把从文本中抽取出的特征词进行量化来表示文本信息。

假阴性技术

假阳性是指模型因为种种原因将应该分类成特定情况的人/物错误地分类到了其他分类的情况。

查询技术

一般来说,查询是询问的一种形式。它在不同的学科里涵义有所不同。在信息检索领域,查询指的是数据库和信息系统对信息检索的精确要求

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

数据集成技术

数据集成是把不同来源、格式、特点性质的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享。在企业数据集成领域,已经有了很多成熟的框架可以利用。目前通常采用联邦式、基于中间件模型和数据仓库等方法来构造集成的系统,这些技术在不同的着重点和应用上解决数据共享和为企业提供决策支持。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

Apache Hadoop技术

Apache Hadoop是一套用于在大型集群上(由通用硬件构建)运行应用程序的框架。它实现了Map/Reduce编程范型,计算任务会被分割成小块(多次)运行在不同的节点上。除此之外,它还提供了一款分布式文件系统(HDFS),数据被存储在计算节点上以提供极高的跨数据中心聚合带宽。

暂无评论
暂无评论~