基于Naive Bayes的简历-岗位匹配分类及数据预处理方案咨询
简历与岗位匹配的朴素贝叶斯实现思路
一、先搞定数据预处理
你的数据集每个字段都是多值列表,得把这些非结构化内容转成模型能认的数值特征:
- 地点:要么按岗位要求做二进制标记(比如岗位要北京,简历里有北京就标1,没有标0),要么把所有城市做独热编码。
- 工作经历时长:直接转成数字(比如“3-5年”取中间值4),再做归一化(除以数据里的最长时长,把数值缩到0-1之间)。
- 教育背景:按学历等级赋值(大专=1,本科=2,硕士=3,博士=4),多值的话取最高学历;或者直接对标岗位要求(比如岗位要硕士,简历达标就标1,否则0)。
- 证书/技能/语言:用词袋模型或者TF-IDF处理——先把所有简历的这些字段合并成一个词汇表,每个简历对应一个向量,有某个技能/证书就标1(或TF-IDF值),没有就标0。比如岗位要Python证书,简历里有就把对应位置设为1。
注意:所有多值字段先扁平化,比如把["Python", "SQL"]转成集合,再提取特征。
二、准备训练数据(监督学习必须有标签)
朴素贝叶斯是监督学习,得有带标注的数据:
- 定义匹配标签:比如分成“高匹配(1)”和“低匹配(0)”,或者细分成高/中/低三类。
- 生成标签的方法:
- 用历史招聘数据:过去被录用的简历标1,没通过的标0;
- 手动标注一批:按岗位核心要求,满足80%以上的标1,其余标0。
- 把预处理后的特征矩阵和标签组合,按7:3或8:2拆分训练集和测试集。
三、模型训练与岗位匹配实操
用Python的sklearn库就能快速实现:
- 选合适的贝叶斯模型:离散特征(比如技能的二进制标记)用
MultinomialNB;连续特征(比如工作时长)用GaussianNB;如果数据不平衡(高匹配简历少),用ComplementNB更合适。 - 基础训练代码示例:
from sklearn.naive_bayes import MultinomialNB from sklearn.model_selection import train_test_split import pandas as pd # 假设X是预处理好的特征矩阵,y是标签 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) model = MultinomialNB() model.fit(X_train, y_train)
- 岗位匹配流程:
- 把岗位要求拆解成和简历同格式的特征向量(比如岗位要“北京、3年以上、本科、Python证书”,转成对应的数值特征);
- 用模型预测每个简历的匹配概率(
model.predict_proba(X_resume)),概率越高,匹配度越高; - 也可以直接预测分类结果(
model.predict(X_resume)),判断是高匹配还是低匹配。
四、优化与评估
- 模型评估:别只看准确率,因为简历匹配通常是不平衡数据(高匹配的少),所以重点看召回率(能不能把所有高匹配的简历找出来)和F1-score(兼顾准确率和召回率)。
- 特征优化:给核心要求(比如岗位必须的技能、学历)加权重,比如在TF-IDF里手动调高核心关键词的权重,或者用加权朴素贝叶斯。
- 降维:只保留岗位要求的核心特征,比如岗位只要Python和SQL技能,就忽略其他无关技能,减少特征维度,提升模型效率。
内容的提问来源于stack exchange,提问作者Nurul Atirah Binti Ahmad
相关产品推荐
相关产品推荐

