当前位置: 首页 > news >正文

智联招聘×Milvus:向量召回技术提升招聘匹配效率

6076e7a9877e6c6d2cff6dcb448362b6.png

a9c969c486f13d8f0d7dee018d9bbb78.png

01.

业务背景

在智联招聘平台,求职者和招聘者之间的高效匹配至关重要。招聘者可以发布职位寻找合适的人才,求职者则通过上传简历寻找合适的工作。在这种复杂的场景中,我们的核心目标是为双方提供精准的匹配结果。在搜索推荐场景下,候选人或职位列表会经历召回、粗排、精排和重排等多个阶段,从亿级别的候选集中筛选出最匹配的简历或职位进行展示。在召回阶段我们除了使用传统的规则召回外,还引入了向量召回方式。本次我们主要介绍一种向量召回方式:通过职位召回简历(JD2CV)。为了便于讨论,文中将职位简写为JD,简历简写为CV。

02.

向量召回实现方式

1. 模型训练样本选择:

正样本来自系统日志中有正向交互的JD CV对。负样本由三部分组成:一部分是batch内负采样,第二部分来自全库的随机负采样,全库采样能够更好地模拟实际召回场景。第三部分,我们根据业务规则,选取了一些hard负样本,以提高模型的训练效果。

2. 模型结构:

我们采用了双塔模型结构,分别处理JD和CV的文本信息,将其映射为低维向量。通过计算向量间的相似度,并应用对比学习的损失函数进行优化,使得相关的JD和CV向量距离更近,而非相关的则距离更远。这种方式能有效提高匹配的精度。

3. 模型离线测评:

第一种评估方式是使用模型预测给定的正负样本对,进而计算AUC和JD维度的GAUC。然而,这种评估方式局限于有限样本集,难以全面反映召回模型的真实表现。为了获得更接近线上环境的评估结果,我们采用了一种新的评估方式,分为两个步骤:首先,进行实际的召回操作;其次,对召回结果进行详细评估。

为了支持这一流程,我们调研了多种向量数据库,最终选择了Milvus。主要原因有三点:

  • 易用性:Milvus提供了简洁的API接口,文档丰富,开发者可以快速上手并集成。同时,它支持标量过滤与向量相似性搜索的结合,实现更灵活的混合搜索。

  • 高性能:得益于优化的算法和索引结构,Milvus能够高效地处理大规模数据的向量检索任务,满足我们的性能需求。

  • 社区支持:Milvus拥有活跃的社区和丰富的生态系统,提供了多语言支持和工具链资源,帮助开发者快速解决问题。

在评估召回结果时,我们采用了两种主要方法:

  • 体感评估:对不同模型召回结果中各自独有的部分,使用大模型进行体感标注,统计标注结果看哪个模型体感表现更好。

  • 量化指标:通过统计召回率和精准率等关键指标,评估模型在实际召回任务中的表现。

03.

Milvus使用及具体评估过程

1. Milvus的部署:我们使用Milvus官方提供的docker-compose方式进行部署,使用的是2.4.5版本。评估过程中,采样了百万级别的CV数据,单节点部署完全可以满足这一规模需求。同时还部署了管控平台Attu,便于加载和删除数据集合,修改索引类型,以及进行向量搜索等操作。

2ab1b1cd4fa935f05bdf9c1bb437f8c0.png

为便于数据的导入和召回测试,我们还开发了相应的数据导入和召回接口,使评估流程更加自动化和便捷。

2. 数据准备:在Milvus和相关接口部署完成后,我们根据线上JD的流量分布情况,按照城市粒度采样了一些JD数据,并使用模型生成相应的JD向量。接着,我们对采样城市的全量CV进行向量生成,并通过写入接口将数据存储在Milvus中。为了确保评估的准确性,我们选择了FLAT类型索引,保证能够100%召回相关数据。

3. 召回过程:通过JD编号,我们从JD集合中查询出相应的JD向量,然后根据该向量从CV集合中召回最相似的topK CV。相似度计算采用内积作为度量标准,最终得到一组JD与CV的匹配对。

4. 召回结果评估:我们采用了两种方式对召回结果进行评估。首先,对不同模型各自召回集中独有的部分进行大模型的体感标注。其次,根据正向行为记录的JD-CV对构建正例集,并通过该正例集评估召回率和精准率等指标,最终对模型进行综合评估。

df43b951ecc67027a601a6d07ce911b3.png

使用Milvus过程中遇到的一些问题:

1. 索引类型选择问题:在分析召回结果时,我们发现一些模型预测分数较高的记录并未被成功召回,而一些分数较低的记录却被召回了。经过排查,问题出在索引类型上。我们最初使用的是IVF_FLAT索引,该类型能够提高查询速度,但无法保证100%的召回率。通过查询官网文档,我们将索引类型更改为FLAT,成功解决了这一问题。

2. 条件查询问题:我们在使用Python SDK进行条件查询时,发现传入的filter参数无法生效。经过与社区的沟通和排查,最终将filter参数改为expr参数后,问题得以解决。

04.

总结

Milvus作为一款功能强大且易于部署的向量数据库,极大地帮助我们优化了召回评估流程,显著节省了时间成本,并为模型上线前提供了更加充分的评估依据。在未来,我们计划继续探索更多的应用场景,进一步发掘Milvus的潜力,并通过其丰富的功能进一步提升业务的召回效率和准确性。

本文作者:

张晓 算法工程师

李伟鹏 资深算法工程师

推荐阅读

746de4177856730537b017982bb8ca7f.png

8d2b8e96112185a563d36d90cfb3fbd6.png

9a7c2c5f9ff67f5b882414cac48ce724.png

e7e9f7eb1ab67ccd23989c794b0983fe.png

相关文章:

智联招聘×Milvus:向量召回技术提升招聘匹配效率

01. 业务背景 在智联招聘平台,求职者和招聘者之间的高效匹配至关重要。招聘者可以发布职位寻找合适的人才,求职者则通过上传简历寻找合适的工作。在这种复杂的场景中,我们的核心目标是为双方提供精准的匹配结果。在搜索推荐场景下&#xff0c…...

unplugin-auto-import 库作用

unplugin-auto-import是一个 Vite、Webpack 和 Rollup 的插件。 一、自动导入模块 1. 减少手动导入 在 JavaScript 和 TypeScript 项目中,它可以自动检测并导入常用的模块和函数,无需手动在每个文件中进行导入操作。这大大减少了代码中的重复性导入语…...

【Multisim14.0正弦波>方波>三角波】2022-6-8

缘由有没有人会做啊Multisim14.0-其他-CSDN问答参考方波、三角波、正弦波信号产生 - 豆丁网...

vue3纯前端验证码示例

前言 验证码的用途:通过要求用户输入一串难以被机器自动识别的字符或图像,有效阻止恶意用户或脚本通过暴力破解方式尝试登录账户。验证码的分类:常见的验证码有短信、文本、图形等,安全度越高,依赖的插件或服务也越多…...

招聘程序员

全栈总监❤️golang❤️UI设计师 ☀️前端☀️Nodejs工☀️平面设计☀️PHP工 ☀️安卓❤️Flutter❤️运维☀️爬虫 公司福利: ☃️ 带薪年假、年终奖、13k-18k薪 🏩 内宿 2人/间或外宿可补助 💵 转正绩效 ✨节日礼金:生日礼金…...

Android 判断手机放置的方向

#1024程序员节|征文# 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 需求 老板:我有个手持终端,不能让他倒了,当他倒或者倾斜的时候要发出报警; 程序猿:我这..... 老板…...

Telegram机器人的手机部署

目的 一直有读 epub 电子书的习惯,摘录段落复制下来段落很难看,把自己写的排版器的逻辑复制下来,写成了一个排版机器人所有发给机器人的文字,都会经过排版,后转发到读书频道 前提 本来最好方法是直接把机器人架在服…...

ffmpeg视频滤镜: 色温- colortemperature

滤镜简述 colortemperature 官网链接 》 FFmpeg Filters Documentation 这个滤镜可以调节图片的色温,色温值越大显得越冷,可以参考一下下图: 咱们装修的时候可能会用到,比如选择灯还有地板的颜色的时候,选暖色调还是…...

Django+Vue全栈开发项目入门(二)

Vue是一款用于构建用户界面的JavaScript渐进式框架,它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、响应式的、组件化的编程模型,有助于高效地开发用户界面。 环境准备 安装Node.js:Vue项目的构建和运行依赖于Node…...

【ubuntu改源】

ubuntu改源 备份原始源查看ubuntu发行版本arm64 noble版本的源vim修改源更新系统软件源 备份原始源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.disabled查看ubuntu发行版本 lsb_release -aarm64 noble版本的源 清华源 vim修改源 esc :1,$d # 删除所有# 默认注…...

SQLI LABS | Less-9 GET-Blind-Time based-Single Quotes

关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客 0x01:过关流程 输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来): http://localhost/sqli-labs/Less-9/ 靶场提示 …...

【小白学机器学习24】 用例子来比较:无偏估计和有偏估计

目录 1 关于无偏估计 1.1 无偏估计的定义 2 原始数据 2.1 假设我们是上帝,我们能创造一个总体/母体 population 2.2 按尽量随机取样的原则去取1个随机样本 sample1 3 一个关于无偏估计的理解 3.1 接着上面的总体和样本 sample1 3.2 左边的计算,期…...

C++在实际项目中的应用第二节:C++与网络编程

第五章:C在实际项目中的应用 第二节:C与网络编程 1. TCP/IP协议详解与C实现 TCP/IP(传输控制协议/互联网协议)是现代互联网通信的基础协议。理解 TCP/IP 协议对于开发网络应用至关重要。本节将详细介绍 TCP/IP 协议的工作原理以…...

依赖关系是危险的

依赖, 我们需要它们,但如何有效安全地使用它们?在本周的节目中,Kris 与 Ian 和 Johnny 一起讨论了 polyfill.io 供应链攻击、Go 中依赖管理和使用的历史,以及 Go 谚语“一点复制胜过一点依赖”。当然,我们用一些不受欢…...

ipguard与Ping32如何加密数据防止泄露?让企业信息更安全

在信息化时代,数据安全已成为企业运营的重中之重。数据泄露不仅会导致经济损失,还可能损害企业声誉。因此,选择合适的数据加密工具是保护企业敏感信息的关键。本文将对IPGuard与Ping32这两款加密软件进行探讨,了解它们如何有效加密…...

gitlab 的备份与回复

一、gitlab备份 1.确定备份目录 gitlab 默认的备份目录为/var/opt/gitlab/backups,可通过配置gitlab.rb配置文件进行修改,如: [rootlocalhost ~]# vim /etc/gitlab/gitlab.rb #若要修改备份文件的存储目录话,打开下面选项的注释…...

创建型模式-----建造者模式

目录 背景: 构建模式UML 代码示例 房子成品: 构建器抽象: 具体构建器: 建筑师: 测试部…...

威胁 Windows 和 Linux 系统的新型跨平台勒索软件:Cicada3301

近年来,网络犯罪世界出现了新的、日益复杂的威胁,能够影响广泛的目标。 这一领域最令人担忧的新功能之一是Cicada3301勒索软件,最近由几位网络安全专家进行了分析。他们有机会采访了这一危险威胁背后的勒索软件团伙的成员。 Cicada3301的崛…...

Go 语言基础教程:7.Switch 语句

在这篇教程中,我们将学习 Go 语言中的 switch 语句,它是条件分支的重要结构。我们将通过一个示例程序逐步解析 switch 的不同用法。 package mainimport ("fmt""time" )func main() {i : 2fmt.Print("Write ", i, " …...

mysql原理、部署mysql主从+读写分离、监控mysql主从脚本

mysql:工作原理 从库生成两个线程,一个I/O线程,一个SQL线程; i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中; 主库会生成一个 log dump 线程&…...

IDEA里配置Druid连接池,别再手动导Jar包了!试试Maven/Gradle一键搞定

IDEA中配置Druid连接池:Maven/Gradle现代化依赖管理实战 在Java开发领域,依赖管理一直是项目构建的重要环节。记得刚入行时,我也曾手动下载各种Jar包,然后在IDE中逐个添加依赖。直到有一天,项目引用的Jar包版本冲突导致…...

国产多模态新星:mPLUG-Owl全解析,从原理到落地

国产多模态新星:mPLUG-Owl全解析,从原理到落地 引言 在ChatGPT引爆文本大模型之后,多模态大模型正成为AI领域的下一个主战场。在这场全球竞赛中,国产模型的表现尤为引人注目。由阿里通义实验室推出的 mPLUG-Owl,凭借…...

不使用void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle)增强代码的层级结构注意事项

这是正常用cube Max生成的代码,这里以设置编码器为例。 GPIO初始化函数放在HAL_TIM_Encoder_MspInit这个回调函数中。代码正常运行/* TIM3 init function */ void MX_TIM3_Init(void) {TIM_Encoder_InitTypeDef sConfig {0};TIM_MasterConfigTypeDef sMasterConfig…...

2026届必备的六大降重复率工具实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要落实信息输出的精简规范,就得设定维度清晰的降效调整规则,核心规则…...

HsMod终极指南:50+功能全面解锁炉石传说模改插件

HsMod终极指南:50功能全面解锁炉石传说模改插件 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx框架开发的炉石传说模改插件,通过50多项实用…...

别再死记硬背GPIO寄存器了!用STM32 HAL库和CubeMX快速实现LED流水灯与按键控制

解放双手:用STM32CubeMX和HAL库玩转GPIO控制 在嵌入式开发的世界里,GPIO控制就像学习编程时的"Hello World"一样基础而重要。但有多少开发者还在为记忆繁琐的寄存器配置而头疼?当项目周期压缩到以天为单位计算时,我们是…...

Prisma AI插件OpenClaw:用自然语言智能查询数据库

1. 项目概述:一个为Prisma生态注入AI能力的开源插件如果你正在使用Prisma作为你的Node.js或TypeScript项目的ORM(对象关系映射)工具,并且对如何将生成式AI的能力无缝集成到数据库操作中感到好奇,那么你很可能已经听说过…...

【信息科学与工程学】【制造工程】【通信工程】第一百零一篇 2nm 200Tbps+核心交换机全尺度参数宇宙构建框架02

编号 尺度/层级 参数类型 参数名称 数学表达式/物理模型/关联描述 典型值/范围 (目标) 单位 核心关联参数 依赖关系 互斥/协同/传递关系 设计/制造/应用要求 测试/验证方法 关联学科/领域 Switch-692​ 整机/电磁兼容 独立参数 整机对浪涌(冲击)抗扰度的线-线…...

037、LVGL动画类型与参数配置

LVGL动画类型与参数配置 上周帮一个做智能家居面板的客户调试,遇到个挺典型的坑:他用了lv_anim_set_path_cb()自定义了一个缓动曲线,结果动画跑起来像抽风一样忽快忽慢。我让他把回调函数贴出来一看——好家伙,路径函数里直接调了lv_anim_set_time()改时长。这种在动画执行…...

两轮车租赁数字化升级:从物联网架构到运营效率提升

1. 两轮车租赁模式升级:从传统痛点看数字化解决方案最近和几个在欧洲做短途出行和即时配送的朋友聊天,大家不约而同地提到了一个趋势:两轮车,特别是电动两轮车的租赁市场,正在经历一场静悄悄但深刻的模式升级。这背后&…...