【LLM 论文】OpenAI 基于对比学习微调 LLM 得到嵌入模型

论文:Text and Code Embeddings by Contrastive Pre-Training
⭐⭐⭐⭐
OpenAI

一、论文速读

这篇论文基于大型生成式 LLM 通过对比学习来微调得到一个高质量的 text 和 code 的 embedding 模型。

训练数据的格式:是一堆 ( x i , y i ) (x_i, y_i) (xi,yi) 形式的 positive pairs,这些 pairs 的 x i x_i xi y i y_i yi 存在着语义相似性或者上下文相关性。在具体训练时,使用 in-batch negatives 的方法来构造出 negative pairs。

在训练 text embedding model 和训练 code embedding model 时,所使用的数据不一样:

  • 训练 text embedding model 时,互联网上相邻 piece 的文本就作为 positive pair
  • 训练 code embedding model 时,function 上方的 docstring 与其实现作为 positive pair ( t e x t , c o d e ) (text, code) (text,code)

Embedding Model:这个 encoder 将一个 sentence 转为一个 vector representation:

具体做法是:对于输入 sentence input x x x,将其前后拼接上 [SOS] 和 [EOS] 两个特殊 token,之后输入给 LLM,然后将 [EOS] token 的 hidden state 作为编码后的 embedding 结果。

相似度计算方式:将 x 和 y 分别输入给 encoder 得到 representation,然后计算 cosine 相似度即可:

该工作训练得到的模型,可以为 text 和 code 编码出高质量的 representation,其 embedding 效果在文本 classification、sentence similarity、semantic search 等实验中都表现出不错的效果。

二、模型的训练

模型的推理过程较为简单直接,这里重点详细介绍一下他的训练过程。

前面说了训练数据的格式,按照上面所述,我们可以得到一批用于训练模型的数据,然后将其划分为多个 mini-batch 对模型迭代训练微调。

每一个 mini-batch 由 M M M 个 positive pairs,在使用它们的训练过程中,首先使用 in-batch negatives 的方法可以得到这个 batch 的 negative pairs,然后针对每一个 pair,将 x 与 y 输入给 encoder 得到其向量表示,然后计算这个 pair 的 logit 值:

其中 τ \tau τ 是一个可训练的温度参数,用于调整相似度的缩放。

这样,可以计算出 M × M M \times M M×M 个 logits 组成一个 logit matrix,其中对角线上的元素是 positive pairs 的 logits,其余是负样本的 logits,然后针对 matrix 的每一行每一列计算 cross-entropy 损失,这样的损失是希望模型让正样本的 logit 最大化,让负样本的 logit 最小化,这里计算损失的伪代码如下:

可以看到, l r l_r lr l c l_c lc 分别是行方向和列方向上计算的交叉熵损失,然后取它们的平均值作为最终的损失函数值,它衡量了区分 positive pairs 和 negative pairs 方面的表现

通过最小化这个损失函数,模型学习到的嵌入表示能够捕捉输入样本之间的语义相似性,从而在不同的下游任务中发挥作用。

关于 cross entropy 损失,如果忘了可以参考相关资料,从而理解这里为什么用这个函数。

三、实验

论文使用 GPT-3 来初始化 text embedding model 的基座模型,使用 Codex 来初始化 code embedding model 的基座模型,分别对两个模型进行了训练。

论文做了很多实验,这里选取了在文本检索任务上做的实验结果:

其中,cpt-text 就是本论文基于 GPT-3 微调得到的 text embedding model,可以看到:

  • 模型越大(参数越多),其效果可以越好
  • 该模型的效果远远超过了无监督的检索模型,其中 cpt-text XL 版本的表现已经可以与微调的 SOTA 模型相比较了

四、分析

4.1 Batch Size 的影响

论文的消融实验研究了 batch size 对模型训练的影响。

已经公认的是,由于对比学习的机制,当 batch size 越大时,学习难度就越高,使得模型可以学得更好。论文的实验也证明了这一点:

4.2 训练时长的影响

一般认为,训练越久,效果越好,后面会趋于稳定。但是该论文的实验显示,训练越久,在检索和分类任务上效果越好,但是对于句子相似度任务来说,却恰好相反

这其实涉及到一个很重要的讨论点:训练 embedding 时,检索任务和句子相似度任务是存在冲突的

这两个任务看似类似,都可以基于 sentence embedding 完成,但两种却是属于两个研究方向,各有自己侧重的研究 topic。从本质上,这两个任务就是存在冲突的,比如一个句子及其否定可以被相似度任务认为是相关的,但在句子相似度任务中则却应该被认为是“相似-相似”的。

在本论文的 model checkpoint 评估时,也是给检索任务和分类任务赋予了更高的重要性,因为它们往往与现实世界的应用相关联,而句子相似度任务则没那么重要。

总结

这篇论文表明,基于 GPT 系列的 LLM,在足够大的批处理的无监督数据上进行对比预训练,可以获得高质量的文本和代码的 embedding 表示,并可以应用于其他的下游任务中得到不错的表现。

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

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

相关文章

上传文件至linux服务器失败

目录 前言异常排查使用df -h命令查看磁盘使用情况使用du -h --max-depth1命令查找占用空间最大的文件夹 原因解决补充:删除文件后,磁盘空间无法得到释放 前言 使用XFTP工具上传文件至CentOS服务器失败 异常 排查 使用df -h命令查看磁盘使用情况 发现磁盘…

怎么ai解答问题?这三个方法都可以

怎么ai解答问题?在数字化飞速发展的今天,人工智能(AI)技术已经渗透到我们生活的方方面面,尤其是在解答问题方面,AI展现出了令人瞩目的能力。那么,哪些软件可以利用AI技术解答问题呢?…

使用curl命令查看服务器端口开放情况

目录 1.ssh端口 22 2.mysql数据库端口 3306 3.web应用端口 (Jellyfin 8082) (wordpress 8088) (tomcat 8080) 4.不存在的端口 5.被防火墙阻挡的端口 1.ssh端口 22 curl -v 10.10.10.205:22 curl…

leetcode_47.全排列 II

47. 全排列 II 题目描述:给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1]]示例 2: 输入:nums [1,2,3] …

了解你的构建:发布经理构建难点应对指南

在如今的计算机行业,发布经理的工作任重而道远。一方面他们必须紧跟日益攀升的行业标准,发布速度的极限不断突破,现在要求的速度在过去是远远无法想象的。另一方面,质量的门槛也在不断抬高。 我并非诟病软件更新换代过于迅速频繁…

揭秘数据可视化:五款利器助力决策

在当今这个数据驱动的时代,数据可视化已成为企业决策、数据分析不可或缺的一部分。通过直观、生动的图形、图像,数据可视化能够更快速、更准确地传达信息,帮助企业洞察数据背后的价值。本文将为您介绍几款优秀的数据可视化工具。 一、山海鲸…

Backblaze发布2024 Q1硬盘故障质量报告-1

作为一家在2021年在美国纳斯达克上市的云端备份公司,Backblaze一直保持着对外定期发布HDD和SSD的故障率稳定性质量报告,给大家提供了一份真实应用场景下的稳定性分析参考数据。 截至2024年第一季度末,Backblaze在其全球数据中心的云存储服务器…

弹性云服务器是什么,为何如此受欢迎

云计算作为当下炙手可热的技术领域,已然成为现代企业不可或缺的核心能力。云服务器作为云计算的基石之一,在这个数字化时代发挥着至关重要的作用。而弹性云服务器,作为云服务器的一种演进形式,更是备受瞩目。 弹性云服务器&#…

[笔记] Win11 Microsoft Store App 离线下载

微软应用商店无法下载或下载缓慢解决方法 在一些环境下 Microsoft Store 下载速度缓慢,或者需要账号登录才能安装的场景,可以通过找到对应的离线安装包的形式进行安装。 Micorsoft Store 中的离线安装包一般后缀为 AppxBundle 和 Appx。以 Ubuntu 为例…

如何根据IP获取国家省份城市名称PHP免费版

最近项目遇到需要根据IP获取用户国家功能需求,网上找了一下,很多API接口都需要付费,考虑为公司节约成本,就取找找有没有开源的 github 上面那个包含多种语言,下面这个只有php,用法很简单 $ip 114.114.114…

[蓝桥杯]真题讲解:班级活动(贪心)

[蓝桥杯]真题讲解&#xff1a;班级活动&#xff08;贪心&#xff09; 一、视频讲解二、正解代码1、C2、python33、Java 一、视频讲解 [蓝桥杯]真题讲解&#xff1a;班级活动&#xff08;贪心&#xff09; 二、正解代码 1、C #include<bits/stdc.h> using namespace st…

【NodeMCU实时天气时钟温湿度项目 4】通过NTPClient库获取实时网络时间并显示在TFT屏幕上

今天是【实时天气时钟温湿度项目】第四专题&#xff0c;主要内容是&#xff1a;学习导入NTPClient库&#xff0c;通过这个库获取实时网络时间&#xff0c;显示在1.3寸TFT液晶屏幕上。此前三个专题&#xff0c;请选择查看以下链接。 第一专题内容&#xff0c;请参考 【N…

使用wxPython和pandas模块生成Excel文件

介绍&#xff1a; 在Python编程中&#xff0c;有时我们需要根据特定的数据生成Excel文件。本文将介绍如何使用wxPython和pandas模块来实现这个目标。我们将创建一个简单的GUI应用程序&#xff0c;允许用户选择输出文件夹和输入的Excel文件&#xff0c;并根据Excel文件中每个单…

docker jenkins 部署springboot项目

1、创建jenkins容器 1&#xff0c;首先&#xff0c;我们需要创建一个 Jenkins 数据卷&#xff0c;用于存储 Jenkins 的配置信息。可以通过以下命令创建一个数据卷&#xff1a; docker volume create jenkins_data启动 Jenkins 容器并挂载数据卷&#xff1a; docker run -dit…

算法-并查集

目录 什么是并查集 并查集基础 &#xff08;1&#xff09;原理 &#xff08;2&#xff09;初始化 &#xff08;3&#xff09;查询 &#xff08;4&#xff09;合并 &#xff08;5&#xff09;判断是否同一集合 并查集优化 路径压缩 启发式合并 并查集模板 模板 例题…

C#修改默认参数settings文件

右击项目在设置中进行修改&#xff1a; 千万不要在这里改。 如果要在自己的项目里添加这个文件&#xff0c;首先新建个文件夹&#xff0c;然后添加.setting文件&#xff0c;然后再像上面说的那样添加属性。

4.请求体

什么是请求体(Request Body) 请求体是客户端发送到API的数据。 响应体是API发送给客户端的数据 API几乎总是必须发送一个响应体&#xff0c;但是客户端并不需要一直发送请求体 定义请求体&#xff0c;需要使用 Pydantic 模型 不能通过GET请求发送请求体发送请求体数据&…

常见的容器技术有哪些

容器技术是一种轻量级的软件封装方式&#xff0c;它将软件代码及其依赖项打包在一起&#xff0c;这样应用可以在任何支持容器的系统上无缝运行。它允许应用程序及其依赖项在一个隔离的环境中运行&#xff0c;这个环境被称为容器。容器技术有助于提高应用程序的可移植性、一致性…

深度学习之基于Tensorflow卷积神经网络智能体操健身系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着人们健康意识的提高和数字化技术的快速发展&#xff0c;智能健身系统逐渐成为健身领域的新趋势。…

Redis之Linux下的安装配置

Redis之Linux下的安装配置 Redis下载 Linux下下载源码安装配置 方式一 官网下载&#xff1a;https://redis.io/download ​ 其他版本下载&#xff1a;https://download.redis.io/releases/ 方式二&#xff08;推荐&#xff09; GitHub下载&#xff1a;https://github.com/r…