Coggle数据科学 | 科大讯飞AI大赛:人岗匹配挑战赛 赛季3

本文来源公众号“Coggle数据科学”,仅用于学术分享,侵权删,干货满满。

原文链接:科大讯飞AI大赛:人岗匹配挑战赛 赛季3

  • 赛题名称:人岗匹配挑战赛 赛季3

  • 赛题类型:自然语言处理、文本匹配

  • 赛题任务:基于提供的样本构建模型,预测简历与岗位匹配与否。

报名链接:https://challenge.xfyun.cn/topic/info?type=match-challenge-s3&ch=dw24_AtTCK9

赛事背景

讯飞智聘是一款面向企业招聘全流程的智能化解决方案。运用科大讯飞先进的智能语音、自然语言理解、计算机视觉等AI技术及大数据能力,具备业界领先的简历解析、人岗匹配、AI面试、AI外呼等产品功能,助力企业提升招聘效率,降低招聘成本。

人岗匹配是企业招聘面临一个重大挑战,尤其在校园招聘等集中招聘的场景下,面对海量的简历,如何快速分类筛选出最适合招聘岗位的简历,以及在内推和猎头场景下,如何为一份简历找到合适的岗位,做到人适其岗、岗适其人,提升人岗匹配的效率和准确度,是困扰每一个HR和面试官的难题。

赛事任务

智能人岗匹配需要强大的数据作为支撑,本次大赛提供了大量的岗位JD和求职者简历的加密脱敏数据作为训练样本,参赛选手需基于提供的样本构建模型,预测简历与岗位匹配与否。

数据说明

本次比赛为参赛选手提供训练集与测试集,数据包含数据结构为:

岗位JD数据包含4个特征字段:positionName, positionDescription, positionRequirements, positionID,对应含义分别为:岗位名称、岗位介绍、岗位要求、岗位ID。

求职者简历数据包含如下字段:

出于数据安全保证的考虑,所有数据均为脱敏处理后的数据。

评估指标

本模型依据提交的结果文件,采用macro-F1 score进行评价。

赛题 Baseline

  • 读取比赛数据

import pandas as pd
import numpy as np
import json
import re
from tqdm import tqdm

train = json.load(open('dataset/train.json'))
test = json.load(open('dataset/test.json'))
job_list = json.load(open('dataset/job_list.json'))
  • 人工特征工程

    • 简历部分单词与岗位名称、描述和要求中单词的交集的大小。

    • 简历部分单词与岗位名称、描述和要求中单词交集的大小,除以岗位名称、描述和要求中单词的数量,得到匹配比例。

    • 简历部分单词与岗位名称、描述和要求中单词交集的大小,除以简历部分单词的数量加一,得到匹配比例的另一种计算方式。

    • 对于简历中的每个关键部分(如教育经历、社会经验等),使用正则表达式模式\b\w+\b提取单词,并存储在cv_sample_word字典中。

    • 遍历岗位列表(job_list),对于每个岗位样本,使用相同的正则表达式模式提取岗位名称、岗位描述和岗位要求中的单词。

    • 对于简历中的每个关键部分,计算以下特征:

# 正则表达式模式,匹配单词,其中单词由空格、标点符号或字符串的开始和结束进行分割
pattern = re.compile(r'\b\w+\b')

train_feat = []
for train_sample in tqdm(train):
    cv_sample_word = {}
    for key in ['profileEduExps', 'profileSocialExps', 'profileLanguage', 'profileProjectExps', 'profileSkills', 'profileAwards', 'profileWorkExps', 'profileDesire']:
        cv_sample_word[key] = pattern.findall(str(train_sample['resumeData'][key]))
                           
    for job_sample in job_list:
        positionName_word = re.findall(pattern, job_sample['positionName'])
        positionDescription_word = pattern.findall(job_sample['positionDescription'])
        positionRequirements_word = pattern.findall(job_sample['positionRequirements'])

        feat = [
            len(train_sample['resumeData']['profileEduExps']),
        ]

        for key in ['profileEduExps', 'profileSocialExps', 'profileLanguage', 'profileProjectExps', 'profileSkills', 'profileAwards', 'profileWorkExps', 'profileDesire']:
            feat.append(len(set(cv_sample_word[key]) & set(positionName_word)))
            feat.append(len(set(cv_sample_word[key]) & set(positionDescription_word)))
            feat.append(len(set(cv_sample_word[key]) & set(positionRequirements_word)))

            feat.append(len(set(cv_sample_word[key]) & set(positionName_word)) / len(set(positionName_word)))
            feat.append(len(set(cv_sample_word[key]) & set(positionDescription_word)) / len(set(positionDescription_word)))
            feat.append(len(set(cv_sample_word[key]) & set(positionRequirements_word)) / len(set(positionRequirements_word)))

            feat.append(len(set(cv_sample_word[key]) & set(positionName_word)) / (len(set(cv_sample_word[key])) + 1))
            feat.append(len(set(cv_sample_word[key]) & set(positionDescription_word)) / (len(set(cv_sample_word[key])) + 1))
            feat.append(len(set(cv_sample_word[key]) & set(positionRequirements_word)) / (len(set(cv_sample_word[key])) + 1))


        if train_sample['positionID'] == job_sample['positionID']:
            feat.append(1)
        else:
            feat.append(0)


        train_feat.append(feat)
  • 模型训练

from lightgbm import LGBMClassifier

model = LGBMClassifier()
model.fit(train_feat[:-20000, :-1], train_feat[:-20000, -1])

model.score(train_feat[-20000:, :-1], train_feat[-20000:, -1])

完整代码见:

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%9B2024

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/875907.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pikachu靶场之csrf

CSRF 跨站请求伪造 CSRF入门及靶场实战 - FreeBuf网络安全行业门户 攻击者伪造恶意链接,诱使用户点击,这个链接附带了用户的认证凭据Cookie、Session等,执行操作如转账。 因为带了cookie、session,服务器认为是用户的行为。借用…

【诉讼流程-健身房-违约认定-私教课-诉讼书前提材料整理-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(2)】

【诉讼流程-健身房-违约-私教课-前期法律流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(2)】 (1)前言说明1、目的2、一个小测试1、更换原教练2、频繁更换教练3、上课估计拖课,占用上课时间,抽烟等。4、以…

谈谈LLM训练中的“过拟合”与“欠拟合”

如今,由于其出色的理解、生成和操纵人类语言的能力,语言模型已经成为焦点。据最新调查数据显示,大概30%的企业计划使用非结构化数据来提高大型语言模型(LLM)的准确性。在训练这些语言模型时,一个基本挑战是…

知识笔记合集

文章目录 vsCode可以运行c程序却无法运行c程序帆软填报属性不起作用java-实体类日期类型格式化Java-数据库id字段使用雪花算法IDEA-快捷键 vsCode可以运行c程序却无法运行c程序 vsCode中的tasks.json文件中添加"-lstdc" {"tasks": [{"type": &…

【vuetify】v-select 无法正常显示,踩坑记录!

一、上代码 template <v-selectv-model"editedUser.userRole":items"roles"label"角色"item-value"value":rules"[rules.required]" ></v-select>script const editedUser ref({userRole: customer // 设置…

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大&#xff0c;但不同的语言在不同领域都有着自己的优势&#xff0c;为了强强联合&#xff0c;LabVIEW提供了强大的外部程序接口能力&#xff0c;包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等…

利用 Zero-1-2-3 进行多视图 3D 重建:从单图像到多视图 3D 模型的生成

3D 模型生成在计算机视觉领域有着广泛的应用&#xff0c;从虚拟现实到自动驾驶&#xff0c;基于单张图像的 3D 重建技术正在迅速发展。这篇博客将带你深入探索如何使用 Zero-1-2-3 框架进行多视图 3D 重建&#xff0c;通过详细解析该框架中的代码结构和功能&#xff0c;帮助你理…

MFC工控项目实例之十五定时刷新PC6325A模拟量输入

承接专栏《MFC工控项目实例之十四模拟量信号名称从文件读写》 1、在BoardTest.h文件中添加代码 class CBoardTest : public CDialog { public:short m_saveData[32];unsigned short m_cardAddr;CBoardTest(CWnd* pParent NULL); // standard constructorCButtonST m_btnS…

【新时代概论】新时代概论书目的结构(LP)

文章目录 前言一、结构导论第一章、新时代坚持和发展中国特色社会主义第二章、以中国式现代化全面推进中华民族伟大复兴第三章、坚持党的全面领导第四章、坚持以人民为中心第五章、全面深化改革开放第六章、推动高质量发展第七章、社会主义现代化建设的教育、科技、人才战略第八…

海外云手机怎么实现TikTok多账号防关联?

TikTok多账号运营&#xff0c;作为众多用户选择的引流策略&#xff0c;旨在通过多账号的协同作用&#xff0c;更快速、高效地推动主账号的流量增长。然而&#xff0c;这一策略面临着一个关键难题——TikTok账号防关联。本文将简要介绍海外云手机如何解决这一问题。 在TikTok多账…

2023年408真题计算机网络篇

https://zhuanlan.zhihu.com/p/6954228062023年网络规划设计师上午真题解析TCP流量计算_哔哩哔哩_bilibili 1 1在下图所示的分组交换网络中&#xff0c;主机H1和H2通过路由器互联&#xff0c;2段链路的数据传输速率为100 Mb/s、时延带宽积 &#xff08;即单向传播时延带宽&am…

Solana核心漏洞技术详解

8月9日&#xff0c;Solana团队齐心协力解决了一个严重的安全漏洞。这次秘密修复详情可以在GitHub上查询到。CertiK团队对这一漏洞进行了深入分析。 1. Solana漏洞起因 8月9日&#xff0c;Solana验证者和客户端团队齐心协力解决了一个严重的安全漏洞。Solana验证者Laine表示&am…

redis底层—数据结构

1.动态字符串sds redis没有直接使用c语言的字符串&#xff0c;是因为c语言的字符串存在一下问题&#xff1a; 1.获取字符串长度的需要通过运算 2.非二进制安全 3.不可修改 优点&#xff1a; 1.获取字符串长度的时间复杂度为0&#xff08;1&#xff09; 2.支持动态扩容 3.减少内…

linux命令用于删除文本文件中的重复行的命令uniq详解

目录 一、概述 二、基本用法 1、uniq 命令的基本语法 2、常用选项 3、获取帮助 三、主要功能 1. 识别并删除相邻重复行 2. 保留重复行的第一个实例 3. 统计重复次数 4. 忽略指定列的比较 四、示例 1. 删除相邻重复行 2. 显示每一行及其重复次数 3. 只显示重复行 4. …

Vue | Vue深入浅出——Vue中的render函数详解

1.render函数 在编写vue单文件的大多数情况下&#xff0c;我们都是使用template模板来创建HTML。然而在一些条件判断比较复杂的场景下&#xff0c;使用JavaScript去描绘HTML的生成逻辑会显得更加的简洁直观。 使用Vue官网的例子来简单说明&#xff1a; 如果自己在开发的时候…

RabbitMQ(高阶使用)延时任务

文章内容是学习过程中的知识总结&#xff0c;如有纰漏&#xff0c;欢迎指正 文章目录 1. 什么是延时任务&#xff1f; 1.1 和定时任务区别 2. 延时队列使用场景 3. 常见方案 3.1 数据库轮询 优点 缺点 3.2 JDK的延迟队列 优点 缺点 3.3 netty时间轮算法 优点 缺点 3.4 使用消息…

2024非常全的接口测试面试题及参考答案

一、前言 接口测试最近几年被炒的火热了&#xff0c;越来越多的测试同行意识到接口测试的重要性。接口测试为什么会如此重要呢&#xff1f; 主要是平常的功能点点点&#xff0c;大家水平都一样&#xff0c;是个人都能点&#xff0c;面试时候如果问你平常在公司怎么测试的&…

【MPC】无人机模型预测控制复现Data-Driven MPC for Quadrotors项目(Part 1)

无人机模型预测控制复现Data-Driven MPC for Quadrotors项目 参考链接背景和问题方法与贡献实验结果安装ROS创建工作空间下载RotorS仿真器源码和依赖创建Python虚拟环境下载data_driven_mpc仓库代码下载并配置ACADO求解器下载并配置ACADO求解器的Python接口下载并配置rpg_quadr…

计算机网络八股总结

这里写目录标题 网络模型划分&#xff08;五层和七层&#xff09;及每一层的功能五层网络模型七层网络模型&#xff08;OSI模型&#xff09; 三次握手和四次挥手具体过程及原因三次握手四次挥手 TCP/IP协议组成UDP协议与TCP/IP协议的区别Http协议相关知识网络地址&#xff0c;子…

学习笔记 - 知识图谱的符号表示方法

学习笔记 - 知识图谱的符号表示方法 说明&#xff1a; 首次发表日期&#xff1a;2024-09-13个人阅读学习并摘录成笔记 知识表示的相关名词定义 以下内容摘录自 Knowledge Graphs Applied 2.3小节&#xff0c;然后AI翻译人工润色。 实体&#xff08;Entities&#xff09;—表…