遇见数据集

open-jobs

收藏
github2026-06-18 更新2026-06-19 收录
官方服务:

资源简介:

一个包含约967,000个当前开放职位的数据集,来自16个申请人跟踪系统,通过LLM提取结构化字段和预计算嵌入进行增强,以Parquet文件格式发布,每日更新,采用CC0许可(公共领域,无需署名)。数据集包括职位身份信息、内容、嵌入向量和约34个结构化字段,如级别、职能、薪资范围和工作模式等。

This dataset contains approximately 967,000 currently open job postings, sourced from 16 Applicant Tracking Systems (ATS). It is augmented with structured fields extracted by Large Language Models (LLMs) and pre-computed embeddings, released in Parquet file format, updated daily, and licensed under CC0 (Public Domain, no attribution required). The dataset includes job identity information, job content, embeddings, and around 34 structured fields such as job level, job function, salary ranges, and work arrangements, among others.

创建时间:
2026-06-17
原始信息汇总

数据集概述:open-jobs

这是一个公开的、每日更新的职位数据集,以单个 Parquet 文件形式提供,包含约 967,000 个当前开放的职位。数据来源于 16 个求职者跟踪系统 (Applicant Tracking Systems),并经过了 LLM 的结构化信息提取和预计算嵌入向量的增强处理。

核心内容

  • 数据量:约 967,000 行,每行代表一个开放职位。
  • 更新频率:每日更新,文件被覆盖重写,无历史版本。
  • 数据格式:单个 Parquet 文件,约 21 GB。
  • 下载地址https://download.jobscream.com/open-jobs.parquet

数据结构(每行字段)

类别 字段 描述
身份与申请 id, ats, company, url 职位唯一标识、来源系统、公司名称、真实申请链接
内容 title, jd_markdown 职位名称、经清理并转为 Markdown 格式的完整职位描述
嵌入向量 (1536维, 基于 text-embedding-3-small) 标题嵌入、职位描述嵌入、以及备选标题的嵌入向量列表(每个备选标题单独嵌入)
结构化字段 约34个字段 由 LLM 提取,包括:level(级别)、function(职能)、sub_function(子职能)、salary_min_k/salary_max_k(薪资范围)、work_mode(工作模式)、remote_scope(远程程度)、country_code(国家代码)、visa_sponsorship(签证赞助)、skills(技能)、alt_titles(备选标题)、years_experience_min(最低经验年限)等。缺失值使用明确的哨兵值(如 -1, "", "unknown")表示。

提供的工具与管道

该仓库不仅包含数据集,还提供了一套完整的职位匹配与排序脚本:

文件 功能
AGENTS.md 操作手册,可直接提供给 LLM 代理使用。
download.py 支持断点续传的数据集下载脚本。
stream.py 逐行迭代数据集的工具,支持内存受限环境。
hull.py 步骤1: 根据搜索条件筛选出“凸包”,即包含所有相关角色的最小集合。
langsort.py 步骤2: 收集 LLM 对候选职位对的成对偏好判断(“哪个更适合?”)。
btrank.py 步骤3: 利用 Bradley-Terry 模型聚合判断结果,形成一个排名。
rank.py 仅基于嵌入向量的召回与排序(词汇检索 -> 岭回归排序器 -> 语料评分)。
match.py 对短名单中的每个角色,提供 LLM 生成的评估(优势、差距、结论)。

工作流程

整个管道是一个三步流水线,旨在高效利用昂贵的 LLM 判断资源:

  1. 筛选(Hull):使用廉价的结构化过滤(如级别、职能、国家等)将百万级数据缩小至数千条候选。
  2. 学习(Learn):仅在经过筛选的候选集上利用 LLM 进行成对比较(而非绝对评分),收集有信息的比较判断。
  3. 排序(Rank):使用 Bradley-Terry 模型将这些成对判断聚合为一个全局排名。

快速使用示例: bash pip install pyarrow numpy # + 需要 OPENAI_API_KEY 用于步骤2和3

python3 hull.py --function engineering --level Senior,Staff --country US --remote --title "software engineer,backend,platform" --out hull.json python3 langsort.py --resume resume.txt --candidates hull.json --mode sample --per-item 12 python3 btrank.py --candidates hull.json --decisions langsort_decisions.jsonl --out ranked.json

设计特点

  • 两阶段检索:先用低成本的结构化过滤,再在候选集中投入 LLM 判断,避免在明显不相关的职位上浪费成本。
  • 成对判断:使用“哪个更好”的成对比较,比绝对评分(如1-100分)更准确、更可靠。
  • 判断优先于模型:成对比较形成的部分排序(决策图)被优先尊重,模型仅用于填补决策图未覆盖的比较空缺。实验表明,这种方法在约2600个候选的凸包上,对保留的判断预测准确率可达约90%,远超纯模型方法(约68%)。
  • 避免冗余比较langsort.py 只询问那些尚不能通过现有决策图推算出顺序的职位对,从而最大化每次 LLM 调用的信息增益。
  • 词汇与语义联合召回:通过匹配备选标题和嵌入向量两种方式结合,可以召回比单独使用嵌入向量多56%的角色。
  • 知识蒸馏btrank.py 可以将数千个成对判断蒸馏成一个线性模型,用于对整个语料库进行评分,且无需额外的模型调用。
  • 内存友好:整个数据管道设计为可在有限内存(如38GB笔记本电脑)上运行,支持流式处理和内存映射。
  • 成本意识与可恢复性:使用小型模型并限制输出,同时将每个决策追加到日志文件中,中断后可从中断处恢复运行,无需重做。

许可协议

CC0 1.0 (公共领域)。可用于任何目的(包括商业用途),无需署名。但建议在使用前,对照 jd_markdown 字段核实关键信息(如薪酬、工作授权等)。

数据来源

由 Elliott Dehnbostel 构建。其产品化版本(用于对求职者简历进行排名并每日推送匹配结果)运行于 JobScream.com。更多信息请访问其 GitHub 主页:github.com/elliottdehn

搜集汇总
数据集介绍
open-jobs 数据集图片
构建方式
open-jobs数据集汇聚了来自16个申请人追踪系统(ATS)的约96.7万个当前开放的职位信息,并以单一Parquet文件形式提供。数据集每日更新,覆盖前一日的快照而非历史记录。每条职位记录包含唯一标识符、所属ATS、公司名称以及真实的申请链接。职位描述被清洗并转换为Markdown格式存储。利用大型语言模型从每份职位描述中提取了约34个结构化字段,涵盖职级、职能、子职能、薪资范围、工作模式、远程程度、国家代码、签证赞助、技能要求、替代职位名称、最低工作经验年限等。缺失值采用显式哨兵值(如-1、空字符串或'unknown')标记,避免混淆。此外,还使用text-embedding-3-small模型为职位标题、描述和替代标题分别生成了1536维的嵌入向量,且替代标题的每个变体独立嵌入,以支持更精确的语义匹配。
特点
该数据集的核心设计体现在两阶段检索与成对比较的智能结合。第一阶段通过廉价的结构化过滤将百万级候选集压缩至数千个潜在匹配,第二阶段仅在此缩减范围内调用昂贵的语言模型进行成对偏好判断,显著降低了计算成本。成对比较方法避免了绝对评分产生的数据聚集现象,并通过Bradley-Terry模型将比较结果聚合为全局排序。比较决策本身构成偏序图,被完全保留作为黄金排序依据,语言模型仅用于填补未比较项间的排序空白。实验表明,基于约2600个职位的数据集,该方法对保留决策的预测准确率达90%,远优于仅依赖嵌入的68%。系统还能通过约2000次判断将学习到的排序偏好蒸馏为线性模型,进而无需额外模型调用即可对整个数据集进行评分。
使用方法
数据集的典型使用流程分为筛选、学习和排序三个步骤。首先运行hull.py脚本,结合职能、职级、国家、远程条件及职位标题进行结构化与语义联合检索,生成最小但完备的候选集。接着使用langsort.py脚本,将个人简历与候选集中的职位进行成对比较,收集语言模型对每对职位的偏好判断。最后通过btrank.py脚本,基于Bradley-Terry模型将这些判断聚合成最终排序。整个处理过程支持内存受限环境下的流式操作,所有脚本均可从断点恢复。开发者只需安装pyarrow和numpy等基础依赖,并配置OpenAI API密钥即可运行。数据集以CC0公共领域许可发布,用户可自由用于商业或非商业目的。
背景与挑战
背景概述
open-jobs数据集由Elliott Dehnbostel于近期创建,依托JobScream平台发布,旨在解决招聘数据分散且难以获取的行业痛点。该数据集汇集了来自16个申请人跟踪系统的约96.7万条当前开放的职位信息,并通过大型语言模型提取了约34个结构化字段(如职级、职能、薪资范围、远程办公模式、签证支持等),同时预计算了文本嵌入向量,为职位匹配与智能排序提供了高质量的标准化数据基础。数据集采用CC0公共领域许可,降低了学术与商业应用的门槛,对招聘领域的自动化简历匹配、职位推荐系统及劳动力市场分析等研究方向具有重要的推动作用。
当前挑战
open-jobs数据集面临的核心挑战在于大规模职位数据的实时性与质量保障。首先,职位信息每日更新,意味着前一日的快照会被覆盖,如何确保数据分析与模型训练的时效性与可复现性是一大难题。其次,从不同ATS系统中抓取的非结构化文本(如职位描述)存在格式、术语和详略程度的巨大差异,尽管依赖LLM进行了结构化提取,但薪资缺失、雇佣状态不明等字段的隐性语义仍需谨慎处理,以避免误导下游模型。此外,尽管采用了分层检索与成对比较策略来优化LLM的查询代价,但在处理近百万级别的数据量时,如何高效平衡计算成本与排序准确性,依然是工程与算法层面的持续挑战。
常用场景
经典使用场景
在劳动经济学与计算社会学交汇处,open-jobs数据集为大规模职位分析提供了前所未有的数据基石。其最经典的使用场景是作为面向求职者的个性化职位推荐系统的核心数据源。借助包含约96.7万条活跃职位信息的庞大Parquet文件,研究者可以利用其中LLM提取的结构化字段(如职能、级别、技能、薪资区间)和预计算嵌入向量,构建从海量岗位到个人简历的精细化匹配管道。该数据集特别设计的双阶段检索流程——先通过结构化过滤缩小候选集,再以成对比较方式实施LLM判断——构成了一个高效、可复现的推荐范式,为理解信息不对称下的劳动力市场匹配机制提供了实证实验平台。
实际应用
在实际应用中,open-jobs数据集直接支撑了面向求职者的智能匹配引擎,例如其产品化版本JobScream.com,它每日扫描新发布职位,依据用户简历生成个性化排名并推送摘要。企业招聘方亦可利用该数据集进行劳动力市场画像分析,追踪特定职能(如软件工程)在不同地区的薪资分布、技能需求变迁及远程工作渗透率;同时,通过分析同一职位在不同ATS(候选者追踪系统)中的发布模式,能够揭示招聘渠道的效率差异与策略偏好。求职者端则可以基于该数据集训练轻量级模型,实现无API调用的离线岗位评分,降低了信息搜索的认知负载与时间成本。
衍生相关工作
围绕open-jobs数据集,衍生出一系列极具启发性的经典工作。其中,最引人注目的是基于Bradley-Terry模型的偏好蒸馏框架:将数千对LLM判断压缩为嵌入空间上的逻辑回归模型,使其能够在无需再次调用昂贵模型的情况下,对未来快照的整个语料库进行评分。实验表明,该蒸馏策略在大约2000次比较后达到性能饱和,实现了高精度与低成本的优雅平衡。此外,hull.py中提出的词汇与语义检索联合机制(称为'凸包'策略)独立成一种可复用的两阶段检索范式,在后续研究中被扩展至多模态数据场景。而langsort.py中为保证无矛盾排序而设计的归并排序算法,则为小规模候选集提供了一种理论保证的完全排序方法,推动了关于LLM偏好一致性研究的深入。
以上内容由遇见数据集搜集并总结生成
二维码
社区交流群
二维码
科研交流群
商业服务