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

微软最新研究成果:使用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!”,省去了人工采集数据的繁琐步骤,每个人都可以轻松地生成自己的数据集,并训练强大的嵌入模型。 语义检索模型不给力导致生成模型性能受影响的局面,总算有希望翻篇儿了!

相关文章:

  • 如何在 Photoshop 中制作 3D 文本效果
  • 【Python】科研代码学习:一
  • python爬取彼岸图网图片,涉及知识点:requests,xpath,urllib,文件下载后保存,if__name__的用法
  • 支持向量机(SVM)进行文本分类的Python简单示例实现
  • 设计模式之单例模式的懒饿汉
  • 【JAVA GUI+MYSQL]社团信息管理系统
  • Vue-cli
  • UV贴图和展开初学者指南
  • x-cmd pkg | usql - SQL 数据库的通用交互界面
  • Zookeeper+Kafka概述
  • 构建中国人自己的私人GPT
  • RT-Thread入门笔记2-动态内存堆的使用
  • Docker安装Nacos2.2.3并鉴权、Prometheus监听Nacos、Grafana监控Nacos【亲测可用】
  • Redis 7.0性能大揭秘:如何优化缓存命中率?
  • react+AntDesign 之 pc端项目案例
  • SegmentFault for Android 3.0 发布
  • 《剑指offer》分解让复杂问题更简单
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • bearychat的java client
  • CAP理论的例子讲解
  • ESLint简单操作
  • Gradle 5.0 正式版发布
  • Linux gpio口使用方法
  • Netty 4.1 源代码学习:线程模型
  • Wamp集成环境 添加PHP的新版本
  • XForms - 更强大的Form
  • 基于游标的分页接口实现
  • 看域名解析域名安全对SEO的影响
  • 离散点最小(凸)包围边界查找
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 仓管云——企业云erp功能有哪些?
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (三)elasticsearch 源码之启动流程分析
  • (十三)Maven插件解析运行机制
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .Net IE10 _doPostBack 未定义
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .net快速开发框架源码分享
  • .NET运行机制
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @html.ActionLink的几种参数格式
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • []我的函数库
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [Android]常见的数据传递方式
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理
  • [Deep Learning] 神经网络基础