利用LLM本身训练SoTA embedding模型

今天分享一篇Microsoft公司的一篇文章,Title: Improving Text Embeddings with Large Language Models:使用大语言模型改善文本嵌入。

这篇文章探索了直接利用LLM来做embedding模型,其只需要利用合成数据和少于1000次的训练步骤就能获得高质量文本表征。

该方法分为两步:

1)利用LLM生成文本embedding任务合成数据集: 利用专有的大语言模型(LLM)生成近100种语言的数十万个文本嵌入任务的多样化合成数据。

2)对比损失微调: 使用标准对比损失对开源的decoder-only LLM进行微调。

该方法特点总结如下:1)充分挖掘了大模型生成数据多样性还不错的特点,利用这个特点,可以利用LLM生成多样性比较好、类型丰富、以及多语言的文本表征模型数据集。2)相对于之前例如SimCSE等模型,需要在大量语料上继续做预训练以及微调,本文发现自回归的LLM只需少量监督数据就能获得一个非常不错的效果。3)多语言的检索能力也不错。

一、概述

Title:Improving Text Embeddings with Large Language Models
论文地址:https://arxiv.org/abs/2401.00368

1 Motivation

  • 现有的文本嵌入方法依赖于多阶段预训练和少量标注数据的微调【大量数据->弱监督预训练,少量标注数据->fine-tuning】,需要构建复杂的训练流程,且数据集通常受限于任务多样性和语言覆盖范围。
  • 本文提出了一种新的方法:利用大型语言模型生成多样化的合成数据,通过简单但有效的训练步骤改善文本嵌入的质量,特别在多种语言环境中效果非常不错。

2 Methods

省流版总结:

  1. 合成数据生成:分两步生成合成数据,第一步生成检索任务主题,第二步根据主题生成问题、正样本、负样本。其特点是生产的检索任务多样性不错、同时还可以生成多语言的数据集。
  2. 对比学习训练:利用常规的对比学习loss *InfoNCE函数训练模型,只是用合成数据,只需要1k步左右训练就能有一个不错的效果,叠加监督数据效果更佳*
2.1 利用LLM生成训练样本

通常训练embedding模型强烈依赖正负样本数据,标注成本比较高。这里本文尝试利用专有LLM(如GPT-4)生成近100种语言的多样化合成数据,用于训练embedding模型。

背景: 使用LLM合成数据,增强文本嵌入模型的多样性和鲁棒性。
方法: 设计了多种任务类型和语言的模板,通过LLM生成合成数据。
特点: 能够覆盖广泛的任务和语言类型,提高数据的多样性和质量。

1)利用LLM列举检索任务:

图片

2)针对每个任务,利用LLM按照要求生成训练样本:

图片

2.2 模型训练

图片

要点一: 需要指定任务task_definition,输入用户问题。其中合成的数据用2.1中第一步LLM生成的任务定义,其他数据集人工设置固定的模版。

要点二: 相似度计算方式为cos相似度,并结合温度系数超参数来调节具体值。

要点三: Loss函数为标准的InfoNCE函数,其惩罚了负样本,提升正样本的相似度分数。

3 Conclusion

结论1: 使用LLM生成的合成数据可以显著提升文本嵌入的性能。

结论2: 方法在多语言环境下表现良好,特别是在BEIR和MTEB基准上。

结论3: 本方法提供了一种更高效的文本嵌入训练策略,避免了复杂的多阶段训练。

4 Limitation

  1. 尽管在多种语言中表现良好,但对低资源语言的支持仍有待改进,利用LLM做文本embedding成本还比较高。
  2. 未来工作将探索使用开源LLM生成合成数据,并提高模型在长文本处理方面的效率。

二、详细内容

2.1 合成数据的统计分析

图片
结论1: 生成了500k个样例,涵盖了150k个独特指令。包括非对称任务(query和doc不对称):short-long代表query是短文本,doc为长文本,其他可以反推。另一类任务是对称任务(query和doc语义相近,但是不对等):sts代表单语言语义相似度计算、bitext代表双语言检索任务。
结论2: 生成数据中覆盖93种语言。语言多样性不错,英语占大多数,其他语言占比也不少。

2.2 模型微调与评估

图片

试验设置: 基座模型为Mistral-7b,微调方法为Lora,rank=16。

结论1: "E5mistral-7b + full data"模型在MTEB基准上超过先前最佳模型2.4分。
结论2: 使用混合数据微调的模型在MTEB基准上取得了最高平均得分。
结论3: w/synthetic data only代表仅使用合成数据训练的模型表现仍然竞争力十足。

结论4: 该方法的实验结果显示了生成语言建模和文本嵌入之间的潜在联系。

2.3 与商业闭源模型对比

图片

**结论:**在BEIR Retrieval数据集和MTEB数据集都取得了SoTa。

2.4 LLM只需要少量数据做微调即可取得比较好的效果

图片

结论一: 传统数据利用大量数据结合对比学习做无监督训练可以带来不错的提升。

结论二: 经过大量语料训练的自回归LLM模型已经不需要继续做预训练了,只需要少量的数据微调即可取得比较好的效果。

2.5 多语言任务上也非常有竞争力

图片

结论一: 高资源(数据量多)任务例如英语,效果比之前的mE5模型效果好,低资源任务效果相对mE5也非常有竞争力。

2.6 消融实验:instruction设置比较关键

图片

结论一: 基座模型选择也比较重要,选择LLaMA-2的基座模型比Mistral-7b作为基座模型差。

结论二: instruction的设置也非常重要,对最终结果的影响可能差4个点以上。

2.7 context长度对检索质量的影响:4k左右上下文文本表征都还不错,随后效果急剧下降。

图片

结论:引入了一项名为个性化密码检索的新型合成任务,此任务需要在长上下文中将密钥信息编码到嵌入中。通过更改图5中的滑动窗口大小和RoPE旋转底座来比较不同变体的性能。结果显示,带有4k滑动窗口的默认配置在4k token数达到100%的准确性,但随着上下文长度的增长,准确性会迅速下降。

三、总结

结论1:利用LLM生成的合成数据可以显著提升文本嵌入的性能。 这种方法在处理多种语言时尤其有效,能够生成高质量、多样化的合成数据。

图片
结论2:利用LLM训练Embedding模型可以非常高效。 与现有多阶段方法相比,其只需要少于1000次的训练步骤就可以拿到比较好的效果,而现有方法可能要先利用大量数据做自监督训练,然后再使用有监督数据训练,效率不高。
结论3:本文利用LLM做embedding是一个突破,但产业界还不太适用。 本文首次探索LLM做embedding,效果还不错,但模型大,推理成本也高,产业界实用性不高(bge相关模型只有400M左右,本文方法模型达到7B以上),后续可以探索LLM生成和挖掘正负样本数据,利用传统方法例如双塔+SimCSE系列等模型进行训练,然后再应用到产业界。

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

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

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

相关文章

语言模型:文本表征词嵌入技术调研

1 文本表征 文本表征是自然语言处理中的关键部分,尤其在当前大模型快速发展的背景下。由于大模型存在知识有限、处理文本长度有限、保密要求和大模型幻觉等问题,结合外部数据显得尤为重要。 为了便于存储和检索,除了保存纯文本外&#xff0…

Debug 调试代码

我们使用 debug 的目的, 认为就是查看代码的执行过程的。 步骤: 1. 打断点 断点的意义是, debug 运⾏的时候, 代码会在断点处停下来不执行如果是想要查看代码的执行过程, 建议将断点放在第⼀行在代码 和 行号之间 点击,出现的红色圆点 就是断点, 再次点击可以取消 …

Webpack: 构建微前端应用

Module Federation 通常译作“模块联邦”,是 Webpack 5 新引入的一种远程模块动态加载、运行技术。MF 允许我们将原本单个巨大应用按我们理想的方式拆分成多个体积更小、职责更内聚的小应用形式,理想情况下各个应用能够实现独立部署、独立开发(不同应用甚…

高项-信息系统工程知识要点

1、五大软件架构风格 数据流风格:批处理序列、管道/过滤器 ◆调用/返回风格:主程序X 子程序、数据抽象、面向对象、层次结构 ◆独立构件风格:进程通信、事件驱动 虚拟机风格:解释器、基于规则的系统 仓库风格:数据库系…

apipost的安装和测试添加接口能否正常使用

1.进入官网,点击免费使用(我是windows 64位,选合适自己的配置) 2.开始安装 选仅为我安装——下一步 选择自己的安装目录——点安装 等待 运行——完成 3.apipost一些基本操作——实现添加内容 (1)新建接口…

《人人都是产品经理》:项目一图流

《人人都是产品经理》:项目一图流 项目一图流 项目一图流

【Spring】springSecurity

1、概述 1.1定义和用途 Spring Security为基于Spring的企业应用系统提供声明式的安全访问控制解决方案。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC、DI(控制反转和依赖注入)和AOP(面向切面编程&…

FreeSWITCH 1.10.10 简单图形化界面22-JsSIP的demo测试并记录坑

FreeSWITCH 1.10.10 简单图形化界面22-JsSIP的demo测试 00 FreeSWITCH GUI界面预览01、安装FreeSWITCH GUI先看使用手册02. 使用手册在这里0、设置FreeSWITCH账号1、jssip的demo网站2、设置jssip账号并登录3、整理坑3.1 掉线问题3.11 解决3.2 呼叫问题13.21 解决13.3 呼叫问题2…

PAE:从潮流报告中提炼有效产品属性

本文将介绍PAE,一种用于包含 PDF格式的文本和图像的产品属性提取算法。目前大部分的方法侧重于从标题或产品描述中提取属性,或利用现有产品图像中的视觉信息。与之前的工作相比,PAE从潮流趋势报告的PDF文件中提取属性,提取的属性包…

ML307R OpenCPU HTTP使用

一、函数介绍 二、示例代码 三、代码下载地址 一、函数介绍 具体函数可以参考cm_http.h文件,这里给出几个我用到的函数 1、创建客户端实例 /*** @brief 创建客户端实例** @param [in] url 服务器地址(服务器地址url需要填写完整,例如(服务器url仅为格式示…

spl实现循环计算

需求 需要对一批数据进行价格计算 这里面的一部分单价来自于历史记录,但是另外一部分的单价,需要边计算边存储 数据库结构 CREATE TABLE tbl_mix_trace_price (lot_id_out varchar(255) DEFAULT NULL COMMENT 产出,lot_id_in varchar(255) DEFAULT NULL…

谈一下MySQL的两阶段提交机制

文章目录 为什么需要两阶段提交?两阶段提交流程?两阶段提交缺点? 为什么需要两阶段提交? 为了保证事务的持久性和一致性,MySQL需要确保redo log和binlog的同步持久化。MySQL通过“两阶段提交”的机制来实现在事务提交…

洛谷U420301题解

题解 方法一枚举 时间复杂度 O ( n 2 ) O(n^2) O(n2) 主要代码 int main() {int n,t;cin >> n;for(int i 1;i < n;i) cin >> a[i];cin >> t;for(int i 1;i < n;i){for(int j i 1;j < n;j){if(a[i] a[j] t){cout << "Yes"…

定个小目标之刷LeetCode热题(34)

15. 三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三…

小迪安全v2023 javaWeb项目

小迪安全v2023 javaWeb项目 文章目录 小迪安全v2023 javaWeb项目1. webgoat靶场1. 环境配置与docker操作 2. jwt令牌1. jwt 第四关 签名没验证空加密2. jwt 第五关 爆破签名密钥3. jwt 第八关 kid参数可控 1. webgoat靶场 1. 环境配置与docker操作 自行下载配置vmware的kali-…

《mysql篇》--查询(进阶)

目录 将查询结果作为插入数据 聚合查询 聚合函数 count sum group by子句 having 联合查询 笛卡尔积 多表查询 join..on实现多表查询 内连接 外连接 自连接 子查询 合并查询 将查询结果作为插入数据 Insert into 表2 select * from 表1//将表1的查询数据插入…

Linux开发讲课20--- QSPI

SPI 是英语 Serial Peripheral interface 的缩写&#xff0c;顾名思义就是串行外围设备接口&#xff0c;一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;为 PCB 的布局上节省空间…

SpringMVC常用功能实现

1. 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> 2. 端口配置 server:port: 8080 3. 统一功能处理 3.1 拦截器 3.1.1 生成 package com.exa…

PHP和phpSpider:如何应对反爬虫机制的封锁?

php和phpspider&#xff1a;如何应对反爬虫机制的封锁&#xff1f; 引言&#xff1a; 随着互联网的快速发展&#xff0c;对于大数据的需求也越来越大。爬虫作为一种抓取数据的工具&#xff0c;可以自动化地从网页中提取所需的信息。然而&#xff0c;由于爬虫的存在&#xff0c…

Springcloud-消息总线-Bus

1.消息总线在微服务中的应用 BUS- 消息总线-将消息变更发送给所有的服务节点。 在微服务架构的系统中&#xff0c;通常我们会使用消息代理来构建一个Topic&#xff0c;让所有 服务节点监听这个主题&#xff0c;当生产者向topic中发送变更时&#xff0c;这个主题产生的消息会被…