Man2Dev/job-classification
GitHub: Man2Dev/job-classification
基于Mistral Nemo 12B的零样本职位经验等级分类项目,支持本地GPU推理和语义聚类分析。
Stars: 0 | Forks: 0
# 工作经验等级分类
使用本地 LLM 通过零样本分类将 LinkedIn 职位发布划分为不同的经验等级(初级、中级、高级)。该项目使用 Mistral Nemo Instruct 作为分类器,并根据数据集中的真实标签评估其预测结果。
## 数据集
来自 Kaggle 的 LinkedIn Job Postings 数据集 (`arshkon/linkedin-job-postings`),包含约 12.4 万条发布信息。经过清洗后,我们处理了约 9.4 万条具有有效经验等级标签的职位发布。
使用的列:
- `company_name` — 招聘公司名称
- `title` — 职位名称
- `description` — 完整职位描述文本
- `location` — 工作地点
- `formatted_work_type` — 雇佣类型(全职、兼职、合同工等)
- `original_listed_time` — 职位最初发布的时间
- `formatted_experience_level` — LinkedIn 上的原始经验等级标签
- `skills_desc` — 所需技能
- `normalized_salary` — 标准化薪资数值
## 流程
1. **数据清洗** — 加载原始数据,选择相关列,删除缺少职位名称/描述/经验等级的行
2. **标签标准化** — 将 LinkedIn 的经验等级(Entry level、Internship、Associate、Mid-Senior level、Director、Executive)映射为三个类别:junior、mid、senior
3. **文本准备** — 将职位名称和描述合并为单个文本字段以供分类
4. **模型设置** — 通过支持 CUDA 的 llama.cpp 下载并加载 Mistral Nemo Instruct(Q5_K_M 量化)
5. **零样本分类** — 使用带有 JSON schema 约束的结构化提示对每条职位发布进行分类,使模型输出三个标签之一
6. **评估** — 使用准确率、F1 分数(宏平均和加权平均)以及按类别细分来比较预测结果与真实值
7. **语义聚类** — 使用 Mistral Nemo 生成嵌入,然后运行社区检测以发现相似职位发布的聚类
8. **分析** — 识别模糊聚类、错误分类模式以及关于经验等级标记的其他见解
## 环境要求
- Python 3.10+
- 支持 CUDA 的 NVIDIA GPU
- llama-cpp-python(使用 CUDA 构建)
- pandas, numpy, scikit-learn
- kagglehub
## 使用方法
打开 `notebooks/Job_Experience.ipynb` 并按顺序运行单元格。该 Notebook 旨在 Google Colab 的 GPU 运行时环境中运行,但也适用于任何支持 CUDA 的 Jupyter 环境。
## 许可证
GPL-3.0 — 详情请参阅 [LICENSE](LICENSE)。
标签:DLL 劫持, Kaggle 数据集, llama.cpp, LLM 应用, Mistral Nemo, Python, Vectored Exception Handling, 人力资源科技, 大语言模型, 招聘自动化, 数据清洗, 数据科学, 文本挖掘, 无后门, 求职, 职位分类, 职场经验, 薪资分析, 语义聚类, 资源验证, 逆向工具, 零样本分类