撿漏拿獎(jiǎng)賽事(目前拿獎(jiǎng)率90%):科大訊飛人崗匹配賽題
Datawhale干貨
方向:自然語(yǔ)言處理,科大訊飛賽事
-
賽題名稱(chēng):人崗匹配挑戰(zhàn)賽2023 -
賽題類(lèi)型:自然語(yǔ)言處理 -
撿漏賽題:9月5號(hào)截止,目前提交人數(shù)11人,拿獎(jiǎng)率90% -
賽題鏈接??:
https://challenge.xfyun.cn/topic/info?type=person-post-matching-2023&ch=vWxQGFU
賽題背景
訊飛智聘是一款面向企業(yè)招聘全流程的智能化解決方案。運(yùn)用科大訊飛先進(jìn)的智能語(yǔ)音、自然語(yǔ)言理解、計(jì)算機(jī)視覺(jué)等AI技術(shù)及大數(shù)據(jù)能力,具備業(yè)界領(lǐng)先的簡(jiǎn)歷解析、人崗匹配、AI面試、AI外呼等產(chǎn)品功能,助力企業(yè)提升招聘效率,降低招聘成本。
人崗匹配是企業(yè)招聘面臨一個(gè)重大挑戰(zhàn),尤其在校園招聘等集中招聘的場(chǎng)景下,面對(duì)海量的簡(jiǎn)歷,如何快速分類(lèi)篩選出最適合招聘崗位的簡(jiǎn)歷,以及在內(nèi)推和獵頭場(chǎng)景下,如何為一份簡(jiǎn)歷找到合適的崗位,做到人適其崗、崗適其人,提升人崗匹配的效率和準(zhǔn)確度,是困擾每一個(gè)HR和面試官的難題。
賽事任務(wù)
智能人崗匹配需要強(qiáng)大的數(shù)據(jù)作為支撐,本次大賽提供了大量的崗位JD和求職者簡(jiǎn)歷的加密脫敏數(shù)據(jù)作為訓(xùn)練樣本,參賽選手需基于提供的樣本構(gòu)建模型,預(yù)測(cè)簡(jiǎn)歷與崗位匹配與否。
賽題數(shù)據(jù)集
本次比賽為參賽選手提供訓(xùn)練集與測(cè)試集,測(cè)試集不對(duì)外開(kāi)放,僅用于提交時(shí)進(jìn)行測(cè)試,選手在本地調(diào)試完算法模型后,提交算法代碼至大賽平臺(tái),調(diào)用其中內(nèi)含測(cè)試集進(jìn)行測(cè)試。數(shù)據(jù)包含數(shù)據(jù)結(jié)構(gòu)為:崗位JD數(shù)據(jù)包含4個(gè)特征字段:崗位ID, 崗位名稱(chēng), 崗位介紹, 崗位要求

評(píng)價(jià)指標(biāo)
本模型依據(jù)提交的結(jié)果文件,采用macro-F1 score進(jìn)行評(píng)價(jià)。
賽題思路
本賽題提供訓(xùn)練集下載數(shù)據(jù),選手在本地進(jìn)行算法調(diào)試,在比賽頁(yè)面提交模型進(jìn)行在線推理。
賽題可以視為文本匹配的賽題,可以通過(guò)文本崗位與簡(jiǎn)歷之間提取特征,然后構(gòu)建模型進(jìn)行訓(xùn)練。
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['解析結(jié)果'] = train_data['解析結(jié)果'].apply(lambda x : json.dumps(x).replace('"', ' ').replace('"', ' ').split())
test_data = pd.read_json('/work/data/personnel-matching-test-set/test.json')
test_data['解析結(jié)果'] = test_data['解析結(jié)果'].apply(lambda x : json.dumps(x).replace('"', ' ').replace('"', ' ').split())
joblist = pd.read_json('./job_list.json')
joblist['解析結(jié)果'] = joblist['崗位名稱(chēng)'] + ' ' + joblist['崗位介紹'] + ' ' + joblist['崗位要求']
joblist['解析結(jié)果'] = joblist['解析結(jié)果'].apply(lambda x : x.split())
train_feat = []
for row in train_data.iterrows():
label = row[1]['崗位ID']
query_text= row[1]['解析結(jié)果']
feat = [
label,
len(query_text), len(set(query_text)), len(query_text) - len(set(query_text)),
]
for target_text in joblist['解析結(jié)果']:
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]['解析結(jié)果']
feat = [
len(query_text), len(set(query_text)), len(query_text) - len(set(query_text)),
]
for target_text in joblist['解析結(jié)果']:
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({
'簡(jiǎn)歷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 從比賽官網(wǎng)下載
job_list.json 從比賽官網(wǎng)下載
打包提交過(guò)程
tar -cvzf person-post-matching-2023.tar.gz person-post-matching-2023/
s3cmd put person-post-matching-2023.tar.gz s3://ai-competition/你的url/
完整代碼見(jiàn)??:
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
一起“點(diǎn)贊”三連↓
