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

用两成数据也能训练出十成功力的模型,Jina Embeddings 这么做

alt

句向量(Sentence Embeddings)模型在多模态人工智能领域起着至关重要的作用,它通过将句子编码为固定长度的向量表示,将语义信息转化为机器可以处理的形式,在 文本分类、信息检索和相似度计算 等多个方面有着广泛应用。

然而长期以来,句向量模型在训练过程中 一直面临两大挑战:对大量数据和计算资源的依赖。传统的句向量模型,比如 Sentence-BERT 和 Sentence-T5,通常需要数十亿级别的句子对进行训练。这不仅训练成本高,还有点不环保。

为了解决这些问题,本文将深入探讨一种全新的句向量模型—— Jina Embeddings。该模型采用创新性地数据预处理、加权采样和三元组训练策略,大幅减少了训练数据需求,同时达到了与当前顶尖模型相当的性能表现。

与之前的模型相比, Jina AI 新近发布的 Jina Embeddings 在训练数据减少 80% 的情况下,性能表现依然和当前顶尖模型肩并肩。无论是用于文本检索、排序、语义相似度,还是当下最热门的检索增强生成(Retrieval Augmented Generation,RAG),它的表现都让人印象深刻。

模型: https://huggingface.co/jinaai/jina-embedding-t-en-v1

本文,我们将详细介绍 Jina Embeddings 模型是如何解决这一困扰行业的训练问题的。

数据预处理

传统的大数据思维往往是“越多越好”,使得许多用于训练句向量模型的数据集会包含重复项、非英语样本和语义相似度最小的低质量对。

在 Jina Embeddings 的训练过程中,我们对原始数据集进行了严格地过滤和优化。

alt

具体来说,我们从原始的 16 亿个句子对中,筛选出了 3.85 亿个高质量样本。 并且实施了一个分阶段的数据清洗流程,包括去重处理、语言过滤和一致性过滤。

  1. 去重处理:移除了数据集中所有重复的句子对。

  2. 语言过滤:仅保留英语句子对,以便在特定文化和语言环境中达到更高的准确率。

  3. 一致性过滤:利用辅助模型,排除了向量相似度低的句子对,这一步骤排除了 84% 的低质量数据,如 Reddit 的评论数据。

模型预训练

挑选出了好的数据,接着还要巧妙地选择用哪些数据来训练我们的模型。因此,我们 采用了并行化方法在多个数据集上进行训练,但设计了一个约束条件:每个训练批次(batch)仅包含来自单一数据集的样本。这样做既可以加速训练,又确保每个数据集都能得到合适的关注。

因为不是所有数据集都一样重要或者一样大。所以,我们 根据数据集的大小和质量来进行了加权,以决定从中抽取多少数据用于训练。这避免了在小的数据集上过拟合,同时也确保了重要的、高质量的数据集能得到足够的关注。

通过这种精打细算的训练策略,我们 实际上只用了 3.8 亿对数据就达到了不错的训练效果,用相对低的计算成本下实现了非常高效的模型训练。

三元组训练

在句子对数据进行预训练后,我们进一步采用了一个三元组训练阶段。在这一阶段里,每个样本包括一个查询、一个正样本和一个负样本。

模型在这一阶段会学习:如何让查询语句在向量空间里更加靠近正样本,而远离负样本。此外,我们还引入了难负样本(Hard Negatives),来增强模型的判别能力。

同时,我们也观察到 很多句向量模型难以准确处理否定词。比如 “一对情侣手牵手地走在街上。”,“一对情侣正在一起走。” 和 “一对情侣没有一起走。” 前两个应该关系紧密,而第二个和第三个句子,由于含义相反,应该距离较远。

然而,使用 MiniLM-L6-v2 模型时, 前两个句子的余弦相似度 0.7,而后两个句子的相似度为 0.86,这是不应发生的现象。

因此,我们决定 构建自己的反义数据集,就像上面的例子那样,每组数据都有三个部分:一个“锚点”(主句子)、一个“隐含”(和主句子意思相似的句子)和一个“否定”(和主句子意思相反的句子),并将其纳入训练数据中,帮助模型识别和区分语义不一致的表达。

在三元组训练后,我们的 jina-large-v1 模型在 处理复杂否定语句的准确率从 16.6% 提高到了 65.4%。

性能评估

我们在 MTEB 和 BEIR 等权威的数据集上,将我们的 Jina Embeddings 与 Sentence-T5 等模型市面流行句向量模型进行了基准测试, Jina Embeddings 在不同任务和模型规模下都展示了强劲的竞争力。

alt

在重新排序任务上, Jina Embeddings 系列模型,特别是“jina-large-v1”和“jina-base-v1”模型,表现出了抢眼的竞争力,超越或等于“gtr-t5-large”和“sentence-t5-xxl”等当前顶尖模型。

在检索任务表现上,专门为检索任务训练的 gtr-t5 模型成绩最好,但 Jina Embeddings 系列模型也很接近。

在文本相似度任务上,Jina-large-v1 的分数为 80.96,略低于专门用于句子相似度任务的 Sentence-t5-xxl 的 82.63。

这进一步证实了 Jina Embeddings 系列模型在多任务性能上的优越性,也突出了专门用于训练特定任务的模型,如 sentence-t5 和 gtr-t5 的局限性。

需要强调的是,Jina Embedding 系列模型在训练时对数据和计算资源的需求相对低许多,但仍能达到与顶级模型相当的性能。这一点对于那些资源有限,但又希望得到高性能模型的用户来说,是一个巨大的优势。

alt

其中最值得一提的是,参数量仅有 1.1 亿的 jina-base-v1 模型,在许多检索和排序任务中,性能甚至超越了拥有 3.3 亿参数的 Sentence-t5-large 模型,与 10 亿参数规模的模型旗鼓相当。 同时,即便只有 3500 万参数的 jina-small-v1 模型,也有非常出色的表现。这也印证了我们训练策略:高效的数据利用与训练方法能挖掘出更为精巧却强大的模型潜能。

展望未来

本文介绍了 Jina Embeddings 系列模型的训练过程,并通过 MTEB 基准的广泛评估证明了其在多任务性能上的优越性。即使只使用了两成数据,仍然达到满血的模型性能。 这一发现挑战了现有的范式,证明了用更少的数据就能有效地训练大型语言模型。

我们的研究也揭示了高效数据使用的多方面好处:

  • 资源节约:更少的数据需求,从而降低了训练所需的计算基础设施和资源压力。
  • 提高可访问性:更少的计算需求,使得资源受限的组织也能训练高性能模型。
  • 负责任 AI:更小但同样可靠的模型,意味着我们正在朝着更可持续、更负责任的 AI 发展。

目前,我们已经发布了多个预训练好的 Jina Embeddings 模型,包括 jina-embedding-t/s/b/l-en-v1 等。这些模型参数规模范围从 1400 万到 3.3 亿不等,大家可根据实际需求进行选择。其中 Tiny 的参数量是 1400 万,是目前全世界最小的向量模型。经实验评估,Jina Embedding 开源模型在关键的 9 个指标上超越了 OpenAI 的 text-embedding-ada-002,在 CPU 上的推理速度比之前最快的模型提高了一倍,每秒可以编码 1700 个句子,适合部署在边缘设备。

模型: https://huggingface.co/jinaai/jina-embedding-t-en-v1

技术报告: https://arxiv.org/abs/2307.11224

未来,我们还将推出 Jina Embeddings V2,把向量模型的序列长度拓展到 8 千,并进一步改善向量质量。在 v2 的基础上我们也会将模型拓展到多语言,包括但不限于中文、德文、西班牙文等。

本文由 mdnice 多平台发布

相关文章:

用两成数据也能训练出十成功力的模型,Jina Embeddings 这么做

句向量(Sentence Embeddings)模型在多模态人工智能领域起着至关重要的作用,它通过将句子编码为固定长度的向量表示,将语义信息转化为机器可以处理的形式,在 文本分类、信息检索和相似度计算 等多个方面有着广泛应用。 …...

SpringCloud Eureka搭建会员中心服务提供方-集群

😀前言 本篇博文是关于SpringCloud Eureka搭建会员中心服务提供方-集群,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您…...

详解TCP/IP协议第二篇:OSI参考模型详解

文章目录 写给自己的话 一:协议分层与OSI参考模型 二:通过对话理解分层 三:OSI参考模型 写给自己的话 不从恶人的计谋,不站罪人的道路,不坐亵慢人的座位,惟喜爱耶和华的律法,昼夜思想&#…...

OpenGL 函数列表

//纹理头文件加载 #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" //线框模式(Wireframe Mode) //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); //翻转y轴 stbi_set_flip_vertically_on_load(true); //声明鼠标滚轮回调函数 void scroll_call…...

【C语言】每日一题(半月斩)——day1

目录 😊前言 一.选择题 1.执行下面程序,正确的输出是(c) 2.以下不正确的定义语句是( ) 3.test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】&a…...

Spring MVC 七 - Locale 本地化

Spring各模块都支持国际化,SpringMVC也同样支持。DispatcherServlet通过Locale Resovler自动根据客户端的Locale支持国际化。 request请求上来后,DispatcherServlet查找并设置Locale Resovler,我们可以通过RequestContext.getLocale()获取到…...

力扣(LeetCode)算法_C++——替换后的最长重复字符

给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。 在执行上述操作后,返回包含相同字母的最长子字符串的长度。 示例 1: 输入:s “ABAB”, k 2 输出…...

unity 编辑器时读取FairyGUI图集单个图像

原因 想要在编辑器扩展也能访问FairyGUI图集里面的小图,随便找了一下没有找到接口自己做一个 方法 使用UIPackage.GetItemByURL获得小图信息。从图集中复制出小图,如果有旋转就逆旋转90度即可 图集里面的小图是有可能旋转的,可以通过访问 …...

下载配置 maven并在 idea 上应用

目录 一 maven 定义 二 Maven特点 三 Maven仓库 四 安装配置maven 步骤一:准备安装包,解压 步骤二:配置maven的环境变量 步骤三:测试maven的环境变量是否配置成功 步骤四:配置maven本地仓库 步骤五:阿里云、腾讯镜像配置 步骤六:全局配置idea的maven路径 步骤七:创建…...

网站搭建从零开始(0)--域名的选择与解析

目录 确定用途 购买域名 使用可靠的注册商购买域名 想好域名关键词 检查域名是否可用 添加域名到购物车并完成购买 域名的解析 登录注册商账户 选择要配置的域名 进入DNS解析设置 添加DNS记录 保存配置 检查解析是否生效 提示 确定用途 在购买域名之前&#xf…...

数分面试题2-牛客

1、面对大方差如何解决 1,AB实验场景下,如果一个指标的方差较大表示它的波动较大,那么实验组和对照组的显著差异可能是因为方差较大即随机波动较大。解决方法有:PSM方法、CUPED(方差缩减) PSM代表"Propensity Score Matchin…...

Android codec2 编码 -- 基于录屏

文章目录 前言android 原生的应用srcreenrecordMediaCodec获取编码数据流程 前言 本篇文章主要是理解Android 12编码的流程, 首先从上层的应用出发理解mediacodec提供给外部API的用法。然后针对每个api 分析编码各个流程中框架中的流程。 熟悉一个框架的流程 可以…...

【Java基础篇 | 面向对象】--- 聊聊什么是多态(上篇)

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习JavaSE的一点学习心得,欢迎大家在评论区讨论💌 目录 一、什么是多态二、多…...

如何使用 Node.js和Express搭建服务器?

如何使用NodeJs搭建服务器 1. 准备工作1.1 安装Node.js 2. 安装express2.1 初始化package.json2.2 安装express2.3 Express 应用程序生成器 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段…...

帮公司面试了个要25K的测试,我问了他这些问题...

深耕IT行业多年,我们发现,对于一个程序员而言,能去到一线互联网公司,会给我们以后的发展带来多大的影响。 很多人想说,这个我也知道,但是进大厂实在是太难了,简历投出去基本石沉大海&#xff0…...

Matlab之创建空数组的多种方法汇总

一、matlab空数组是什么? 在MATLAB中,空数组是指没有元素的数组对象。它可以用于占位或者作为容器,等待后续添加元素。 二、创建空数组的多种方法 1、使用空方括号 [] 创建空矩阵 A []; % 创建一个空双精度矩阵 B logical([]); % 创建一…...

HTML实现移动端布局与页面自适应

我们所说的布局方式,这里我们通常指的是width和height在不同页面情况下面的改变。 常见页面的布局方式有 静态布局 (px布局,就是固定其高宽,不论页面怎样放大缩小,其占领的依旧是,使用px固定了的高宽&…...

CSS3技巧36:backdrop-filter 背景滤镜

CSS3 有 filter 滤镜属性,能给内容,尤其是图片,添加各种滤镜效果。 filter 滤镜详见博文:CSS3中强大的filter(滤镜)属性_css3滤镜_stones4zd的博客-CSDN博客 后续,CSS3 又新增了 backdrop-filter 背景滤镜。 backdr…...

【计算机网络】传输层协议——TCP(上)

文章目录 TCPTCP协议段格式报头和有效载荷如何分离?4位首部长度 TCP可靠性确认应答机制的提出序号和确认序号为什么序号和确认序号在不同的字段? 16位窗口大小 6个标志位标志位本质具体标志位PSHRSTURG 超时重传机制 文章目录 TCPTCP协议段格式报头和有效…...

GO语言网络编程(并发编程)Goroutine池

GO语言网络编程(并发编程)Goroutine池 1. Goroutine池 1.1.1. worker pool(goroutine池) 本质上是生产者消费者模型可以有效控制goroutine数量,防止暴涨需求: 计算一个数字的各个位数之和,例…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Java 加密常用的各种算法及其选择

在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...