智联招聘×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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode-75-颜色分类

题解(方案二): 1、初始化变量n0,代表数组nums中0的个数; 2、初始化变量n1,代表数组nums中0和1的个数; 3、遍历数组nums,首先将每个元素赋值为2,然后对该元素进行判断统…

druid 连接池监控报错 Sorry, you are not permitted to view this page.本地可以,发布正式出错

简介: druid 连接池监控报错 Sorry, you are not permitted to view this page. 使用Druid连接池的时候,遇到一个奇怪的问题,在本地(localhost)可以直接打开Druid连接池监控,在其他机器上打开会报错&#…

计数问题[NOIP2013]

题目描述 试计算在区间 1 到 n 的所有整数中,数字 x(0≤x≤9)共出现了多少次?例如,在 1 到 11 中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 4 次。 输入格式 2 个整数 n,x,之…

【开源项目】经典开源项目数字孪生工地——开源工程及源码

飞渡科技数字孪生工地管理平台,以物联网、移动互联网技术为基础,充分应用人工智能等信息技术,通过AI赋能建筑行业,对住建项目内人员、车辆、安全、设备、材料等进行智能化管理,实现工地现场生产作业协调、智能处理和科…

sortablejs(前端拖拽排序的实现)

源文档&#xff1a;sortablejs - npm 安装 npm install sortablejs --save 引入项目 import Sortable from sortablejs; 使用示例 <template><ul id"items"><li>item 1</li><li>item 2</li><li>item 3</li>&l…

【JavaEE】【多线程】单例模式

目录 一、设计模式1.1 单例模式1.1.1 饿汉模式1.1.2 懒汉模式 1.2 线程安全问题1.3 懒汉模式线程安全问题的解决方法1.3.1 原子性问题解决1.3.2 解决效率问题1.3.3 解决内存可见性问题和指令重排序问题 一、设计模式 在讲解案例前&#xff0c;先介绍一个概念设计模式&#xff…

stm32入门教程--ADC模拟-数字转换器

ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转你换位内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁。 12位逐次逼近型ADC&#xff0c;1us转换时间 输入电压范围&#xff1a;0-3.3V转换结果范围…

Pyramidal Flow使用指南:快手、北大、北邮,开源可免费商用视频生成模型,快速上手教程

什么是 Pyramidal Flow&#xff1f; Pyramidal Flow 是由快手科技、北京大学和北京邮电大学联合推出的开源视频生成模型&#xff0c;它是完全开源的&#xff0c;发布在 MIT 许可证下&#xff0c;允许商业使用、修改和再分发。该模型能够通过文本描述生成最高10秒、分辨率为128…

Docker搭建开源Web云桌面操作系统Puter和DaedalOS

文章目录 Puter 操作系统说明基于 Docker 启动 Puter 操作系统拉取镜像运行容器基于 Docker-Compose 启动 Puter操作系统创建目录编写docker-compose.yml运行在本地直接运行puter操作系统puter界面截图puter个人使用总结构建自己的Puter镜像daedalos基于web的操作系统说明技术特…

Embedding 模型和Model 批量推理和多卡部署

批量推理 多卡部署 使用huggingface 【AI大模型】Transformers大模型库&#xff08;七&#xff09;&#xff1a;单机多卡推理之device_map_transformers多卡推理-CSDN博客 首先用 CUDA_VISIBLE_DEVICES1,2,3 python 或者os.environ["CUDA_VISIBLE_DEVICES"] &q…

风力发电场的“守护神”

摘要&#xff1a;作为清洁能源之一&#xff0c;风力发电场近几年装机容量快速增长。8月17日&#xff0c;国家能源局发布1-7月份全国电力工业统计数据。截至7月底&#xff0c;全国累计发电装机容量约27.4亿千瓦&#xff0c;同比增长11.5%。其中&#xff0c;太阳能发电装机容量约…

【Flutter】基础入门:Widgets

在 Flutter 中&#xff0c;Widget 是应用程序构建块的基础。几乎所有的对象都是一个 Widget&#xff0c;不论是显示在屏幕上的 UI 元素&#xff0c;还是一些功能性组件&#xff08;例如用于手势检测的 GestureDetector&#xff0c;或用于传递应用主题数据的 Theme&#xff09;&…

TCP simultaneous open测试

源代码 /*************************************************************************> File Name: common.h> Author: hsz> Brief:> Created Time: 2024年10月23日 星期三 09时47分51秒**********************************************************************…

转录组上游分析流程(三)

环境部署——数据下载——查看数据(非质控)——数据质控——数据过滤(过滤低质量数据) 测序得到的原始序列含有接头序列和低质量序列&#xff0c;为了保证信息分析的准确性&#xff0c;需要对原始数据进行质量控制&#xff0c;得到高质量序列(Clean Reads)&#xff0c;原始序列…

Linux系统块存储子系统分析记录

1 Linux存储栈 通过网址Linux Storage Stack Diagram - Thomas-Krenn-Wiki-en&#xff0c;可以获取多个linux内核版本下的存储栈概略图&#xff0c;下面是kernel-4.0的存储栈概略图&#xff1a; 2 存储接口、传输速度 和 协议 2.1 硬盘 《深入浅出SSD&#xff1a;固态存储核心…

(二十三)Java反射

1.反射概念 反射允许对成员变量&#xff0c;成员方法和构造方法的信息进行编程访问&#xff0c;通俗理解就是允许从类里面拿东西&#xff0c;用途有提示词等&#xff0c;如下所示都是通过反射实现的 所以&#xff0c;学习反射就是学习从字节码class文件中获取成员信息并且对其…

AndroidAppWidget相关

特殊情况记录 OPPO FIND N Android14 当桌面已经存在AppWidget实例&#xff0c;如果应用处于杀死状态下&#xff0c;此时再创建相同的AppWidget实例不会触发AppWidget的更新。 创建不同的AppWidget对应的实例时才会一下子触发多个AppWidget示例的更新。

stable diffusion WEBUI Brief summary

1&#xff0c;rembg(去除背景-》蒙版) import rembg from PIL import Image, ImageOps import numpy as np# 打开图像 input_path "./p_6258838.jpg" input_image Image.open(input_path)# 移除背景&#xff0c;得到带有透明背景的图像 output_image rembg.remove…

Markdown语法详解及常见的使用场景

Markdown语法详解 Markdown概念一、标题二、段落三、字体样式四、列表五、链接和图片六、代码八、分隔线九、引用十、删除线和下划线十一、脚注十二、任务列表十三、高级技巧十四、目录生成 Markdown的应用场景 Markdown概念 Markdown是一种轻量级标记语言&#xff0c;以其简洁…

利用大模型进行复杂决策制定:PlanRAG技术的研究

人工智能咨询培训老师叶梓 转载标明出处 有效的决策制定对于组织的成功至关重要。传统的决策支持系统虽然在数据分析和决策辅助方面取得了一定的进展&#xff0c;但在处理需要复杂数据分析的决策问题时仍显不足。为了解决这一问题&#xff0c;来自韩国高等科学技术院&#xff…