open-jobs
收藏资源简介:
一个包含约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.
数据集概述: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 判断资源:
- 筛选(Hull):使用廉价的结构化过滤(如级别、职能、国家等)将百万级数据缩小至数千条候选。
- 学习(Learn):仅在经过筛选的候选集上利用 LLM 进行成对比较(而非绝对评分),收集有信息的比较判断。
- 排序(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。




