捡漏拿奖赛事(目前拿奖率90%):科大讯飞人岗匹配赛题
Datawhale干货
方向:自然语言处理,科大讯飞赛事
-
赛题名称:人岗匹配挑战赛2023 -
赛题类型:自然语言处理 -
捡漏赛题:9月5号截止,目前提交人数11人,拿奖率90% -
赛题链接👇:
https://challenge.xfyun.cn/topic/info?type=person-post-matching-2023&ch=vWxQGFU
赛题背景
讯飞智聘是一款面向企业招聘全流程的智能化解决方案。运用科大讯飞先进的智能语音、自然语言理解、计算机视觉等AI技术及大数据能力,具备业界领先的简历解析、人岗匹配、AI面试、AI外呼等产品功能,助力企业提升招聘效率,降低招聘成本。
人岗匹配是企业招聘面临一个重大挑战,尤其在校园招聘等集中招聘的场景下,面对海量的简历,如何快速分类筛选出最适合招聘岗位的简历,以及在内推和猎头场景下,如何为一份简历找到合适的岗位,做到人适其岗、岗适其人,提升人岗匹配的效率和准确度,是困扰每一个HR和面试官的难题。
赛事任务
智能人岗匹配需要强大的数据作为支撑,本次大赛提供了大量的岗位JD和求职者简历的加密脱敏数据作为训练样本,参赛选手需基于提供的样本构建模型,预测简历与岗位匹配与否。
赛题数据集
本次比赛为参赛选手提供训练集与测试集,测试集不对外开放,仅用于提交时进行测试,选手在本地调试完算法模型后,提交算法代码至大赛平台,调用其中内含测试集进行测试。数据包含数据结构为:岗位JD数据包含4个特征字段:岗位ID, 岗位名称, 岗位介绍, 岗位要求
评价指标
本模型依据提交的结果文件,采用macro-F1 score进行评价。
赛题思路
本赛题提供训练集下载数据,选手在本地进行算法调试,在比赛页面提交模型进行在线推理。
赛题可以视为文本匹配的赛题,可以通过文本岗位与简历之间提取特征,然后构建模型进行训练。
import json
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_predict
train_data = pd.read_json('./train.json')
train_data['解析结果'] = train_data['解析结果'].apply(lambda x : json.dumps(x).replace('"', ' ').replace('"', ' ').split())
test_data = pd.read_json('/work/data/personnel-matching-test-set/test.json')
test_data['解析结果'] = test_data['解析结果'].apply(lambda x : json.dumps(x).replace('"', ' ').replace('"', ' ').split())
joblist = pd.read_json('./job_list.json')
joblist['解析结果'] = joblist['岗位名称'] + ' ' + joblist['岗位介绍'] + ' ' + joblist['岗位要求']
joblist['解析结果'] = joblist['解析结果'].apply(lambda x : x.split())
train_feat = []
for row in train_data.iterrows():
label = row[1]['岗位ID']
query_text= row[1]['解析结果']
feat = [
label,
len(query_text), len(set(query_text)), len(query_text) - len(set(query_text)),
]
for target_text in joblist['解析结果']:
feat += [
len(set(query_text) & set(target_text)),
len(set(query_text) & set(target_text)) / len(query_text),
len(set(query_text) & set(target_text)) / len(target_text),
len(set(query_text) & set(target_text)) / len(set(target_text)),
len(set(query_text) & set(target_text)) / len(set(query_text))
]
train_feat.append(feat)
train_feat = np.array(train_feat)
m = RandomForestClassifier()
m.fit(
train_feat[:, 1:],
train_feat[:, 0],
)
test_feat = []
for row in test_data.iterrows():
query_text= row[1]['解析结果']
feat = [
len(query_text), len(set(query_text)), len(query_text) - len(set(query_text)),
]
for target_text in joblist['解析结果']:
feat += [
len(set(query_text) & set(target_text)),
len(set(query_text) & set(target_text)) / len(query_text),
len(set(query_text) & set(target_text)) / len(target_text),
len(set(query_text) & set(target_text)) / len(set(target_text)),
len(set(query_text) & set(target_text)) / len(set(query_text))
]
test_feat.append(feat)
test_feat = np.array(test_feat)
pd.DataFrame({
'简历ID': range(len(test_data)),
'岗位ID': m.predict(test_feat).astype(int)
}).to_csv('/work/output/result.csv', index=None)
本地目录如下:
person-post-matching-2023/
run.py
train.json 从比赛官网下载
job_list.json 从比赛官网下载
打包提交过程
tar -cvzf person-post-matching-2023.tar.gz person-post-matching-2023/
s3cmd put person-post-matching-2023.tar.gz s3://ai-competition/你的url/
完整代码见👇:
https://github.com/datawhalechina/competition-baseline/tree/master/competition/%E7%A7%91%E5%A4%A7%E8%AE%AF%E9%A3%9EAI%E5%BC%80%E5%8F%91%E8%80%85%E5%A4%A7%E8%B5%9B2023
一起“点赞”三连↓