资讯中心

在 Talentcom 上使用 Amazon SageMaker 精简 ETL 数据处理 机器学习

2026-01-27 13:36:53



Talentcom 使用 Amazon SageMaker 优化 ETL 数据处理

作者: Dmitriy Bespalov Abdenour Bezzouh Anatoly Khomenko Tong Wang Yanjun Qi 和 Yi Xiang发布日期: 2023年12月14日来源: Amazon SageMaker

关键要点

Talentcom 通过改进的 ETL 流程,有效处理每日 500 万条记录的数据,并在一小时内完成数据处理。该系统利用 Amazon SageMaker 构建机器学习推荐引擎,以帮助求职者找到合适的职位。该数据处理流水线支持增量更新,确保推荐系统能实时反映最新的数据。

在过去的十多年中,Talentcom 作为一个信息平台,聚合了来自客户和公共职位列表的付费招聘广告,为求职者提供了一个统一且易于搜索的平台。Talentcom 的任务是促进全球劳动力的连接,提供超过 3000 万个职位信息,覆盖 75 个国家和多个语言和行业。

为实现此目标,Talentcom 与 AWS 合作开发了一种基于深度学习的职位推荐引擎,旨在帮助用户提升职业发展。为了确保该推荐系统的有效运行,需要实现一个大规模数据处理流水线,负责从 Talentcom 聚合的招聘信息中提取和精炼特征。

该流水线能够在不到一小时内处理 500 万条每日记录,并支持多个日期的数据并行处理。另外,它同样允许迅速将解决方案部署到生产环境中。流水线主要数据来源是 JSON Lines 格式,存储在 Amazon Simple Storage ServiceAmazon S3中,并按日期分区。每天都会生成数万个 JSON Lines 文件,并进行增量更新。

流水线目标

此数据处理流水线的主要目标是支持为在 Talentcom 上训练和部署的职位推荐引擎创建所需的特征。流水线属于常见的 ETL提取、转换和加载过程,用于将多个源的数据合并到一个统一的中央存储库中。

对于有关 Talentcom 和 AWS 如何共同构建自然语言处理及深度学习模型,请参考这篇文章。该系统包括特征工程、深度学习模型架构设计、超参数优化和模型评估,所有模块均使用 Python 进行操作。

解决方案概述

该流水线主要包括三个阶段:1 使用 Amazon SageMaker Processing 处理指定日期的原始 JSONL 文件。可以通过多个处理作业同时处理不同日期的数据。2 在处理完多天数据后,利用 AWS Glue 进行数据爬取。3 使用 SQL 从 Amazon Athena 表中加载特定日期范围内的处理特征,然后训练和部署职位推荐模型。

处理原始 JSONL 文件

我们通过 SageMaker Processing 作业处理指定日期的原始 JSONL 文件。该作业实施特征提取和数据压缩,并将处理后的特征保存为每个文件包含 100 万条记录的 Parquet 文件。我们利用 CPU 并行化,针对每个原始 JSONL 文件在并行执行特征提取。每个 JSONL 文件的处理结果被保存到一个临时目录中的单独 Parquet 文件中。处理完所有 JSONL 文件后,将成千上万个小 Parquet 文件压缩为多个包含 100 万条记录的文件。压缩后的 Parquet 文件随后上传到 Amazon S3,作为处理作业的输出。

下面是使用 SageMaker SDK 调度处理作业的示例代码,处理日期为 20200101:

python

安装依赖

pip install sagemaker pyarrow s3fs awswrangler

import sagemakerimport boto3from sagemakerprocessing import FrameworkProcessorfrom sagemakersklearnestimator import SKLearnfrom sagemaker import getexecutionrolefrom sagemakerprocessing import ProcessingInput ProcessingOutput

region = boto3sessionSession()regionnamerole = getexecutionrole()bucket = sagemakerSession()defaultbucket()

使用 16 个 CPU 和 128 GiB 内存的实例

instance = mlr54xlargenjobs = 8 # 我们使用 8 个进程工作date = 20200101 # 处理一天的数据

estcls = SKLearnframeworkversionstr = 0200

调度处理作业

scriptprocessor = FrameworkProcessor( role=role instancecount=1 instancetype=instance estimatorcls=estcls frameworkversion=frameworkversionstr volumesizeingb=500)

scriptprocessorrun( code=processingscriptpy # 主要处理脚本的名称 sourcedir=/src/etl/ # 源代码目录的位置

# 我们的处理脚本直接从 S3 加载原始 jsonl 文件 inputs=[]  # 处理作业输入为空outputs=[    ProcessingOutput(destination=s3//bucket/processed/tablename/                     source=/opt/ml/processing/output)]arguments=[    # 作业输出目录    output /opt/ml/processing/output    # 实例内部临时目录    tmpoutput /opt/ml/tmpoutput    njobs str(njobs)  # 进程工作数量    date date  # 要处理的日期    # S3 中原始 jsonl 文件的位置    path s3//bucket/rawdata/]wait=False

)

爬取处理过的数据

在处理完多天的原始数据后,我们可以通过 AWS Glue 爬虫创建一个 Athena 表。我们使用 AWS SDK for pandas (awswrangler) 库创建该表,使用以下代码段:

pythonimport awswrangler as wr

加速器

爬取 S3 中的处理数据

res = wrs3storeparquetmetadata( path=s3//bucket/processed/tablename/ database=databasename table=tablename dataset=True mode=overwrite sampling=10 pathsuffix=parquet)

输出表的结构

print(res[0])

加载处理特征进行训练

经过处理的特征可以从 Athena 表中加载,之后用于训练职位推荐模型。以下代码段加载一个月的处理特征到 DataFrame:

pythonimport awswrangler as wr

query = SELECT FROM tablename WHERE daypartition BETWEEN 20200101 AND 20200201

在 Talentcom 上使用 Amazon SageMaker 精简 ETL 数据处理 机器学习

从 databasenametablename 中加载1个月的数据到 DataFrame

df = wrathenareadsqlquery(query database=databasename)

解决方案优势

实施该解决方案为现有工作流带来了多个优势,包括: 简化实现 解决方案允许使用 Python 和流行的机器学习库来实现特征提取;不需将代码移植到 PySpark 中。 快速生产 解决方案可以由数据科学家开发和部署,便于他们对数据进行特征提取并开发机器学习推荐模型。 可重用性 提供了可重用的特征提取模式,可以轻松适用于各种其他用例。 高效性 解决方案表现出色,处理 Talentcom 的单天数据耗时不到 1 小时。 增量更新 该解决方案支持增量更新,可以通过 SageMaker Processing 作业处理新的每日数据并更新 Athena 表。

通过该 ETL 流水线,Talentcom 每天处理 50000 个文件,包含 5 百万条记录,并从 90 天的原始数据中提取特征创建训练数据,总计 45 亿条记录。该流水线在仅 2 周内帮助 Talentcom 将推荐系统构建并投入生产。该系统在在线 A/B 测试中使点击率提高了 86,帮助 Talentcom 的用户更好地匹配工作机会。

结论

本文概述了我们为 Talentcom 开发的职位推荐模型训练及部署的特征处理 ETL 流水线。我们的流水线使用 SageMaker Processing 作业进行高效的数据处理和特征提取,允许以 Python 实现的流行机器学习库来执行特征提取,而无需将代码移植到 PySpark。

我们鼓励读者探索将本文中展示的流水线作为对特征提取需求的使用案例的模板。这一流水线不仅可以由数据科学家构建机器学习模型,也可以被机器学习工程师应用于生产环境中,从而显著缩短将机器学习解决方案产品化所需的时间。有关设置和运行 SageMaker Processing 作业的教程,读者可以参考。此外,我们也推荐读者阅读关于使用 Amazon SageMaker 构建 Talentcom 职位推荐系统的文章:从文本到理想工作:在 Talentcom使用 Amazon SageMaker 构建基于 NLP 的职位推荐器。

关于作者

Dmitriy Bespalov 是亚马逊机器学习解决方案实验室的高级应用科学家,帮助 AWS 客户加速 AI 和云的采用。

Yi Xiang 是亚马逊机器学习解决方案实验室的应用科学家 II,致力于帮助 AWS 客户加速 AI 和云的采用。

Tong Wang 是亚马逊机器学习解决方案实验室的高级应用科学家,帮助 AWS 客户加速 AI 和云的采用。

Anatoly Khomenko 是 Talentcom 的高级机器学习工程师,热衷于通过自然语言处理把合适的人与合适的工作匹配。

Abdenour Bezzouh 是一位具有 25 年经验的高管,致力于提供可扩展的技术解决方案。他在 Talentcom 担任首席技术官CTO期间,AWS 团队为 Talentcom 设计和执行了这一解决方案。

Yanjun Qi 是亚马逊机器学习解决方案实验室的高级应用科学经理,专注于创新和应用机器学习,帮助 AWS 客户加速 AI 和云的采用。