微软最新研究成果:使用GPT-4合成数据来训练AI模型,实现SOTA!

文本嵌入是各项NLP任务的基础,用于将自然语言转换为向量表示。现有的大部分方法通常采用复杂的多阶段训练流程,先在大规模数据上训练,再在小规模标注数据上微调。此过程依赖于手动收集数据制作正负样本对,缺乏任务的多样性和语言多样性。

此外,大部分方法采用BERT作为编码器,如非常经典的Sentence-BERT和SimCSE通过在推理数据集上对BERT进行微调学习文本嵌入。

但现在LLMs技术发展得如火如荼,能否用LLMs来克服现有方法的限制,升级文本嵌入方法呢?

当然可以!

最近,微软发布了一种新颖的文本嵌入方法,使用专有的LLMs为93种语言中各种文本嵌入任务生成合成数据,并且涉及了多个任务场景。

微软使用了Mistral-7B对合成数据和标记数据进行混合训练,**成功登顶Huggingface排行榜,比之前的方法高2%**。

图片

论文标题:
Improving Text Embeddings with Large Language Models

论文链接:
https://arxiv.org/pdf/2401.00368.pdf

模型:
https://huggingface.co/intfloat/e5-mistral-7b-instruct

数据
https://huggingface.co/datasets/andersonbcdefg/synthetic_retrieval_tasks

方法

合成数据生成

作者使用GPT-4集思广益产生一系列潜在的检索任务,然后为每个任务生成(查询,正例,困难反例)三元组,如下图所示。

图片

为了生成多样化的合成数据,作者提出了一个简单的分类法,将嵌入任务分为几个组,并针对每个组应用不同的提示模板:

非对称任务:包括查询和文档在语义上相关但并不是互相改写的任务。根据查询和文档的长度,进一步分为四个子组:短-长匹配、长-短匹配、短-短匹配和长-长匹配。短-长匹配任务涉及短查询和长文档,是商业搜索引擎中的典型情况。

对称任务:涉及具有相似语义但表面形式不同的查询和文档。包括单语语义文本相似性(STS)和双语检索。

训练

给定一个相关的查询-文档配对(,),将以下指令模板应用于原始查询,生成一个新的查询 :

其中,嵌入任务的一句话描述的占位符。

给定一个预训练的LLM,将[EOS]标记附加到查询和文档的末尾,然后将它们输入LLM,通过获取最后一层的[EOS]向量来获得查询和文档的嵌入()。

为了训练嵌入模型,采用了标准的InfoNCE损失函数L,使用批内负样本和困难负样本进行计算。

图片

其中计算查询q和文档d之间匹配分数的函数,本文采用温度缩放余弦相似度函数,是温度超参,在本实验中设为0.02。

图片

实验

合成数据统计

本文一共生成了500k个示例,其中包含150k个独特指令。25%由GPT-3.5-Turbo生成,其余由GPT-4生成。总的token消耗约为180M。主要语言为英语,覆盖了共计93种语言。对于75种低资源语言,平均每种语言约有1k个示例。

图片

模型微调与评估

模型选用Mistral-7b进行1个epoch微调,评估基准选用MTEB基准测试。

训练数据:利用生成的合成数据和包含13个公共数据集的集合, 在采样后得到约180万个样例。为了与一些先前的工作进行公平比较,还报告了仅有标签监督的MS-MARCO数据集的结果。

主要结果

图片

▲表1

如上表所示,本文提出的模型“E5mistral-7b + full data”在MTEB基准测试中获得了最高的平均得分,比之前的最先进模型高出2.4个点

在“仅使用合成数据”的设置中,没有使用标记数据进行训练,其性能仍然相当有竞争力。生成式语言建模和文本嵌入都需要模型对自然语言有深刻的理解,。基于嵌入任务定义,一种真正强大的轻量级模型应该能够自动生成训练数据,然后通过轻量级微调转换为嵌入模型。

图片

▲表2

在表2中,作者还对几个商业文本嵌入模型进行了比较。然而,由于这些模型缺乏透明度和文档说明,不可能做到完全公平的比较。作者主要关注BEIR基准测试的检索性能,因为RAG是未来LLMs应用的重要趋势之一。正如表2所示,本文的模型在性能上明显优于当前的商业模型。

多语言检索

为了评估模型的多语言能力,作者在包含18种语言的MIRACL数据集上进行了评估。该数据集包括人工注释的查询和相关性判断。

图片

▲表3

如表3所示,该模型在高资源语言特别是英语上超过mE5large。对于低资源语言,本文的模型仍然不够优秀。这是因为Mistral-7B主要预训练于英语数据,未来将可以使用多语言LLM弥合这一差距。

除此之外,作者还探讨分析了几个问题。

分析

1. 对比预训练真的重要吗?

弱监督对比性预训练是现有文本嵌入模型取得成功的关键因素之一。例如,将随机裁剪的片段作为预训练的正样本对待,或者从各种来源收集并筛选文本对。

那么对于LLMs而言,对比预训练还有用吗?

图片

如上图所示,对比预训练有益于XLM-Rlarge,在相同数据上微调时,其检索性能提高了8.2个点,与之前的研究结果一致。

然而,对于基于Mistral-7B的模型,对比预训练对模型质量几乎没有影响。这意味着广泛的自回归预训练使LLMs能够获取良好的文本表示,只需要进行最少限度的微调即可将其转化为有效的嵌入模型,而无需对比预训练。

个性化密码检索

为了评估模型的长上下文能力,作者引入了一项新的合成任务——个性化密码检索,如下图所示,包含多个文件,每个文件都有一个独特的人名和一个随机的密码,插入在随机的位置。任务是从100个候选项中找回包含给定个人密码的文件。通过这个过程测试模型将长上下文中的密码信息编码到嵌入中的能力。

图片

作者通过改变滑动窗口大小和RoPE旋转基,比较了不同变体的性能。

图片

  • 结果表明,默认配置下,使用4k滑动窗口在4k个token内达到了100%的准确率,但随着上下文长度的增加,准确率迅速下降。

  • 将滑动窗口大小天真地扩展到32k会导致更差的性能。

  • 通过将RoPE旋转基准更改为,模型可以在32k个标记内实现超过90%的准确率。但在短上下文不太适用。

结论

这篇工作证明了通过LLMs技术,文本嵌入的质量可以得到显著提升。 研究人员使用了专有的LLMs(如GPT-4),在多种语言环境下生成了多样化的合成数据,并结合Mistral模型强大的语言理解能力,在竞争激烈的MTEB基准测试中取得了SOTA。与现有的多阶段方法相比,既简单又高效,不再需要中间预训练的环节。

用网友的话说就是“Amazing Amazing Amazing!”,省去了人工采集数据的繁琐步骤,每个人都可以轻松地生成自己的数据集,并训练强大的嵌入模型。 语义检索模型不给力导致生成模型性能受影响的局面,总算有希望翻篇儿了!

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

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

相关文章

人逢三六九,运势低迷路难走

很多人都希望自己各方面的运势都能够朝着好的方向旺盛发展,我们的运势将会如何发展跟我们的出生时间是离不开关系的。我们的祖先为了后人着想,不犯他们犯过的错误,少走一些弯路,总结了多年来的生活经验,创造出了一句句…

拼多多API:从数据中挖掘商业价值的力量

随着大数据时代的来临,数据已经成为企业决策和创新的基石。拼多多API作为电商领域的重要接口,为企业提供了从数据中挖掘商业价值的机会。通过拼多多API,企业可以获取丰富的用户数据、商品数据和交易数据,从而深入了解市场需求、优…

C++11新特性(也称c++2.0)

目录 1.输出C版本&#xff1a;cout << __cplusplus << endl; 2.Uniform Initialization(一致性初始化) 3.initializer_list&#xff08;形参&#xff09; 4.explicit 5.for循环的新用法 6.default和delete 7.Alias Template&#xff08;模板化名&#xff09…

Volcano Scheduler调度器源码解析

Volcano Scheduler调度器源码解析 本文从源码的角度分析Volcano Scheduler相关功能的实现。 本篇Volcano版本为v1.8.0。 Volcano项目地址: https://github.com/volcano-sh/volcano controller命令main入口: cmd/scheduler/main.go controller相关代码目录: pkg/scheduler 关联…

Vue3.x+Echarts (可视化界面)

Vue3.0Echarts &#xff08;可视化界面&#xff09; 1. 简介1.1 技术选型1.2 ECharts支持的数据格式1.3 ECharts使用步骤 2. ECharts图形2.1 通用配置2.2 柱状图2.3 折线图2.4 散点图2.5 直角坐标系常用配置2.6 饼图2.7 地图2.8 雷达图2.9 仪表盘2.10 小结 3. Vue3.2ECharts5数…

RecombiMAb anti-mouse VEGFR-2

DC101-CP132单克隆抗体是原始DC101单克隆的重组嵌合型抗体。可变结构域序列与原始DC101相同&#xff0c;但是恒定区序列已经从大鼠IgG1变为小鼠IgG2a。DC101-CP132单克隆抗体像原始大鼠IgG1抗体一样&#xff0c;不包含Fc突变。 DC101-CP132单克隆抗体能与小鼠VEGFR-2(血管内皮生…

ZGC垃圾收集器介绍

ZGC&#xff08;The Z Garbage Collector&#xff09;是JDK 11中推出的一款低延迟垃圾回收器&#xff0c;它的设计目标包括&#xff1a; 停顿时间不超过10ms&#xff1b;停顿时间不会随着堆的大小&#xff0c;或者活跃对象的大小而增加&#xff1b;支持8MB~4TB级别的堆&#x…

微信小程序 获取地址信息(uniapp)

参考API地址&#xff1a;微信小程序JavaScript SDK | 腾讯位置服务 <script> // 引入SDK核心类&#xff0c;js文件根据自己业务&#xff0c;位置可自行放置var QQMapWX require(../../js/uploadImg/qqmap-wx-jssdk.js);export default {data(){return{qqmapsdk:}},onL…

【HarmonyOS4.0】第四篇-ArkUI基础实战

一、ArkUI框架简介 ArkUI开发框架是方舟开发框架的简称&#xff0c;它是一套构建 HarmonyOS / OpenHarmony 应用界面的声明式UI开发框架&#xff0c;它使用极简的UI信息语法、丰富的UI组件以及实时界面语言工具&#xff0c;帮助开发者提升应用界面开发效率 30%&#xff0c;开发…

Swift单元测试Quick+Nimble

文章目录 使用QuickNimble1、苹果官方测试框架XCTest的优缺点2、选择QuickNimble的原因&#xff1a;3、QuickNimble使用介绍集成&#xff1a;Quick关键字说明&#xff1a;Nimble中的匹配函数等值判断&#xff1a;使用equal函数是否是同一个对象&#xff1a;使用beIdenticalTo函…

Android14之刷机模式总结(一百七十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

电脑文件mfc100u.dll丢失的解决方法分析,怎么修复mfc100u.dll靠谱

mfc100u.dll丢失了要怎么办&#xff1f;其实很多人都遇到过这样的电脑故障吧&#xff0c;说这个mfc100u.dll文件已经不见了&#xff0c;然后一些程序打不开了&#xff0c;那么这种情况我们要怎么解决呢&#xff1f;今天我们就来给大家详细的说说mfc100u.dll丢失的解决方法。 一…

【unity小技巧】实现没有动画的FPS武器摇摆和摆动效果

文章目录 前言开始完结 前言 添加程序摇摆和摆动是为任何FPS游戏添加一些细节的非常简单的方法。但是并不是所以的模型动画都会配有武器摆动动画效果&#xff0c;在本文中&#xff0c;将实现如何使用一些简单的代码实现武器摇摆和摆动效果&#xff0c;这比设置动画来尝试实现类…

Golang中for和for range语句的使用技巧、对比及常见的避坑

前言 基础语法不再赘述&#xff0c;写这个原因是之前的某次面试被问道了&#xff0c;我知道会导致问题但具体答下来不是很通顺。再回想自己开发过程中&#xff0c;很多地方都是使用到了for/for range&#xff0c;但是却从没注意过一些细节&#xff0c;因此专门学习一下进行记录…

K8S中SC、PV、PVC的理解

存储类&#xff08;StorageClass&#xff09;定义了持久卷声明&#xff08;PersistentVolumeClaim&#xff09;所需的属性和行为&#xff0c;而持久卷&#xff08;PersistentVolume&#xff09;是实际的存储资源&#xff0c;持久卷声明&#xff08;PersistentVolumeClaim&#…

平衡搜索二叉树(AVL树)

前言 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查 找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis在1962年 发明了一种解决上述…

vue中鼠标拖动触发滚动条的移动

前言 在做后端管理系统中&#xff0c;像弹窗或大的表单时&#xff0c;经常会有滚动条的出现&#xff0c;但有些时候如流程、图片等操作时&#xff0c;仅仅使用鼠标拖动滚动条操作不太方便&#xff0c;如果使用鼠标拖拽图片或容器来触发滚动条的移动就比较方便了 功能设计 如…

LeetCode(454)四数相加 II⭐⭐

给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) &#xff0c;使得 A[i] B[j] C[k] D[l] 0。 为了使问题简单化&#xff0c;所有的 A, B, C, D 具有相同的长度 N&#xff0c;且 0 ≤ N ≤ 500 。所有整数的范围在 -2^28 到 2^28 - 1 之间&#…

Pinia处学习

修改数据的三种方式: mutate本次变化的数据,state时store中的数据

大模型训练营Day2 homework

1.使用 InternLM-Chat-7B 模型生成 300 字的小故事 2.熟悉 hugging face 下载功能&#xff0c;使用 huggingface_hub python 包&#xff0c;下载 InternLM-20B 的 config.json 文件到本地&#xff1a; 下面开始下载和推广大模型的相关的包&#xff1a; 这里需要在本地上&…