Embedding模型在大语言模型中的重要性

news2024/11/28 5:28:27

引言

随着大型语言模型的发展,以ChatGPT为首,涌现了诸如ChatPDF、BingGPT、NotionAI等多种多样的应用。公众大量地将目光聚焦于生成模型的进展之快,却少有关注支撑许多大型语言模型应用落地的必不可少的Embedding模型。本文将主要介绍为什么Embedding模型在大语言模型中十分重要、当前主流的Embedding训练方法,以及我们关于Embedding模型初步探索的一些思考。

1 Embedding技术简介及历史概要

在机器学习和自然语言处理中,Embedding模型是指将高维度的数据(例如文字、图片、视频)映射到低维度空间的过程。简单来说,embedding向量就是一个N维的实值向量,它将输入的数据表示成一个连续的数值空间中的点。本文主要关注文本embedding。

Embedding重要的原因在于它可以表示单词或者语句的语义。实值向量的embedding可以表示单词的语义,主要是因为这些embedding向量是根据单词在语言上下文中的出现模式进行学习的。例如,如果一个单词在一些上下文中经常与另一个单词一起出现,那么这两个单词的嵌入向量在向量空间中就会有相似的位置。这意味着它们有相似的含义和语义。

Embedding的概念可以追溯到20世纪中叶,Harris提出了分布式语义理论。到20世纪80年代,人们开始尝试用神经网络来学习单词的embedding表示。自2010年以来,随着深度学习技术的发展,先后出现了以Word2Vec、GloVe、FastText为代表的静态向量Embedding和使用ELMo、GPT、BERT为代表生成上下文相关的动态向量embedding,后者可以更好地捕捉单词的语义和上下文信息。

2 Embedding在大模型中的价值

如前文所述,也是被我们熟知的,embedding向量包含语义信息,含义越相近的单词,embedding向量在空间中的位置也越相近。实值向量embedding可以通过从大量的数据中学习单词的语义和上下文信息,从而可以进行向量运算和在不同自然语言处理任务中共享和迁移。

然而,这是Embedding之前的价值。在大语言模型时代,Embedding又有什么新的价值呢?

这要从类ChatGPT模型的缺陷说起。尽管它们能力强大,但目前依然存在以下几点问题:

  • 训练数据不实时(如ChatGPT是基于2021年9月之前的数据训练),重新训练成本过高,不现实
  • 输入文本长度有限制,通常限制在几千到数万个tokens之间
  • 无法访问不能公开的文档

对此,OpenAI发布了一篇文档,说明如何基于embedding使用两步搜索的方式来解决GPT无法处理长文本和最新数据的问题。两步搜索,即先搜索文本库以查找相关的文本部分,再将检索到的文本部分添加到类ChatGPT模型的输入中,获取回复。

以一个代表性的应用来说明,当我们想让大模型根据我们给定的pdf文档进行问题回复时,就可以对超长pdf进行分块,获取每个分块内容的embedding,并使用向量数据库存储。接下来,当你提出问题“xxx在文档中是如何实现的?”时,就可以使用你的问题embedding,去数据库中检索得到与问题embedding相似度最高的pdf内容块embedding。最终把检索得到的pdf内容块和问题一起输入模型,来解决新知识和超长文本输入的问题。

因此,尽管当前的讨论热度不高,但embedding模型的探索对于大语言模型的落地是必不可少的。

3 主流Embedding训练方法

前面提到,OpenAI早已提出了基于Embedding的搜索方案来解决长文本输入和最新数据的问题。自然而然,OpenAI也有一套未公开训练细节的Embedding方案:text-embedding-ada-002。这是OpenAI的二代Embedding模型,仅使用了一个模型就能同时完成三种下游任务:文本搜索,文本相似度和代码搜索。相较于一代模型分成了五个模型来完成上述三种任务,二代模型简化为了单一模型,且在中文和英文任务上都表现出较好的性能。

在本章中,我们将梳理一些主流的Embedding训练方法。近年来,Sentence Embedding的相关工作大多基于BERT-like models。从基于Decoder结构的模型中获取Embedding,只有少数的研究和公开代码。OpenAI所发表的Embedding论文的训练细节也不甚清楚。因此,在本章中,我们主要梳理基于BERT-like models的Sentence Embedding的一些代表性方法。对于基于Decoder结构模型获取Embedding的探索的思考,我们将在第四章中进行讨论。

在BERT前时代,一般采用word2vec训练出的word embedding结合pooling策略进行句向量表征。在BERT时代,人们借助预训练语言模型的固有优势,先是采用BERT模型的[CLS]向量作为句向量表征,而后Sentence-BERT又巧妙地使用孪生网络模型的框架来获取句向量,后续又相继出现BERT-Flow、BERT-Whitening、SimCSE、R-Drop、ESimCSE等工作。其中,被大家较为熟知的就是BERT-whitening和SimCSE,之后便有大量的工作以对比学习为主线思路,在构造正负样本对的数据层面和训练层面进行了改进。本章节主要对该类方法进行一个简要概括。

由于近期的Sentence Embedding工作多围绕对比学习展开,我们首先来回忆一下对比学习的基础。

3.1 对比学习背景

对比学习就是「以拉近相似数据,拉远不相似数据为目标,有效地学习数据表征」。给定一个pair对样本集合, 其中和为相似样本,优化目标一般采用通过in-batch negetives交叉熵损失函数,如下:

其中,和为和的句向量表示,N为训练过程中batch的大小,为向量和余弦相似度,为温度超参。

3.2 经典方法

近年来,自SimCSE横空出世后,句嵌入领域也引起了一小波研究热潮。在本小节,我们主要对SimCSE相近时期的三篇工作(SimCSE、ESimCSE、CoSENT)进行了相对详细的梳理,并简单总结了后续部分代表工作。

3.2.1 SimCSE

SimCSE算是句嵌入领域最出圈的工作之一了。

它分为两个版本:

  • 无监督版本SimCSE:正样本来自于对同一个句子应用不同的dropout mask所产生的两个相近的表示,负例则使用in-batch negatives;
  • 有监督版本的SimCSE,则基于NLI数据集构造正负样本,正例取蕴含关系的句子对,负例取矛盾关系的句子对(难负例)和in-batch negatives。

以上就是SimCSE的核心思想,简单有效,同时很有启发意义,引领了句嵌入技术后续一波研究热潮。

3.2.2 ESimCSE

ESimCSE分别从正负样本构建的角度对SimCSE进行了改进。

(1)正例对的构建方法:

由于SimCSE是通过调节dropout率构建的正例对,长度是一样大的,负例则长度不等,这会使得模型倾向于判断相同或相似长度的句子在表达上更相近。

为了缓解这个问题,ESimCSE选择在句子中随机重复一些单词,这可以在改变句子长度的同时,而不改变其语义。

(2)负例对的构建方法:

在对比学习中,理论上负对越多,对之间的比较就越好。ESimCSE也遵从了这一思想,但并没有直接强硬开大batch size,而是维护了一个队列,重用前面紧接的mini-batch的编码嵌入来扩展负对,并使用了动量编码器。具体做法是:由于排队句子嵌入来自前面的mini-batch,可以取其参数的移动平均来保持动量更新模型,并利用动量模型生成排队句子嵌入。当使用动量编码器时,关闭dropout,来缩小训练和预测之间的差距。 编码器的参数和动量更新编码器的参数进行更新,按以下公式计算:

为动量系数参数。注意,只有参数通过反向传播更新。这里我们引入来为队列生成句子嵌入,因为动量更新可以使比进化得更平稳。因此,尽管队列中的嵌入是由不同的编码器编码的(在训练期间的不同“步骤”中),但这些编码器之间的差异可以很小。

3.2.3 CoSENT

早期的Sentence-BERT存在训练、预测不一致和调优困难的问题。但如果直接优化预测目标cos值,效果往往又特别差。难道直接优化cos值的方案就没有出头之日了吗?

有幸的是,答案是不会。苏剑林老师提出了一种CoSENT方案,一个优化cos值的损失函数:

记为所有正样本对集合,为所有负样本对集合,那么我们希望对于任意的正样本对和负样本对,都有

其中,是它们各自的句向量。说白了,我们只希望正样本对的相似度大于负样本对的相似度,至于大多少,模型自己决定就好。事实上语义相似度常见的评价指标spearman也是一样,它只依赖于预测结果的相对顺序,而不依赖于具体的值。

针对这类需求,可以用到Circle Loss理论里边的公式作为解决方案:

简单来说,就是如果最终希望实现,那么就往log里边加入一项。对应我们这里的场景,我们可以得到损失函数:

其中是一个超参数。上述公式本质上是一个为排序设计的损失函数,同样适用于多分类的数据,写成更通用的形式:

也就是说,只要我们认为样本对(i,j)的真实相似度应该大于(k,l)的真实相似度,就可以往log里边加入;换句话说,只要我们能够为样本对设计顺序,就可以使用CoSENT方案。

对于NLI数据而言,它有“蕴含”、“中立”、“矛盾”三种标签,我们自然可以认为两个“蕴含”的句子相似度大于两个“中立”的句子,而两个“中立”的句子相似度大于两个“矛盾”的句子,这样基于这三种标签就可以为NLI的句子对排序了。而有了这个排序后,NLI数据也可以用CoSENT来训练了。类似地,对于STS-B这种本身就是打分的数据,就更适用于CoSENT了,因为打分标签本身就是排序信息。

3.2.4 后续部分工作概括

  • SNCSE: Contrastive Learning for Unsupervised Sentence Embedding with Soft Negative Samples
    • 针对模型「无法区分文本相似度和语义相似度,更偏向具有相似文本,而不考虑实际语义差异」的问题,提出了一种「显式添加否定词从而生成软负样本」结合「双向边际损失」的方案。

  • EASE: Entity-Aware Contrastive Learning of Sentence Embedding
    • 强调实体在句向量表征中的重要性。在数据层面,使用正、负实体代替正负样本。
  • CLAIF:Improving Contrastive Learning of Sentence Embeddings from AI Feedback
    • 针对训练过程中缺乏细粒度的监督信号, 即没有考虑到正样本对之间的相似性差异,引入来自LLM的AI反馈,构造具有不同相似度的样本对,并对这些样本对给出细粒度的相似度分数作为监督信号,帮助文本表示的学习。

3.3 PromptBERT

PromptBERT是句嵌入领域继SimCSE又一篇经典之作。

这篇工作的核心就是想用Prompt来产生句子表示。作者认为,原生BERT表现不好主要是因为词语频率、大小写、subword等token导致的bias,而BERT本身各层Transformer都没有纠正这个问题。通过利用prompt,可以更有效地使用BERT各层中的知识,并且用[MASK]来表示embedding的话,可以避免像以前一样做各种token的平均,从而避免了token引入的偏差。

这篇工作方法的核心思路也比较简单,分为两步:

  1. 用Prompt的方式生成句子表示,比如[X] means [MASK],[X]是输入句子,[MASK]是输出的表示,用这个当句子表示
  2. 用不同的Prompt模版来生成对比学习的角度,继续采用自监督的方式训练

3.4 Instrcutor Embedding

根据OpenAI的论文《Text and Code Embeddings by Contrastive Pre-Training》的说法,文本相似度和语义检索是两个不同的任务,训练目标可能存在一定冲突。随着训练进行,如果模型可能在语义搜索任务上的表现越好,在句子相似度任务上的表现可能就越差。同时,现有的Embedding模型面对新任务和新领域时,性能通常表现不佳。

而我们理想的Embedding显然应该同时具备多种能力。怎么能让Embedding模型同时适应多个任务,并且在新领域上有泛化性呢?

Instrcutor Embedding设计了一种基于指令微调的文本嵌入新方法:在文本输入之前拼接解释用例的指令(包含任务和领域信息)。Instrctor Embedding在训练期间为330个文本嵌入数据集手工编写了任务指令,并在 70 个嵌入评估任务(其中 64 个任务在训练过程中未见)上评估了 INSTRUCTOR,范围从分类和信息检索到语义文本相似性和文本生成评估,整体达到了一个较好的性能。

4 Embedding相关探索与思考

上一章节梳理了基于BERT-like models的Sentence Embedding的代表工作。其实,对于使用双向注意力机制的BERT-like models擅长做内容理解类的任务似乎是很合理的。但OpenAI Embedding模型较好的效果和OpenAI 对于Decoder-Only架构模型的坚持程度,以及近半年大模型的迅速发展,让我们不禁好奇,Decoder-only的大模型有没有可能在Embedding任务上也给我们一次惊喜?

对此我们进行了一些探索类的尝试。在摸索的过程中,我们最希望能搞清两个问题:

  • BERT-like models真的比Decoder-Only架构的模型天然更适合做Embedding任务吗?
  • 对于Embedding任务而言,模型也是越大越好吗?

最终,经过我们对于Decoder-only模型padding方式、pooling方式、不同层各向异性程度的探究,最终得到的结论和当前部分公开结论相对一致。

针对第一个问题,《How Contextual are Contextualized Word Representations? Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings》论文进行了BERT和GPT不同层效果对比的探究实验,实验效果如下表:

根据上表,可以发现:

  • 在不同层上,BERT的效果整体要显著优于GPT
  • GPT-2 last layer的各向异性比较严重,中间层或低层比顶层更适合做similarity任务

针对第二个问题,Instructor Embedding论文也给出了不同参数量模型的效果对比实验,如下表:

根据上表,可以发现:

  • 相比335M的GTR_LARGE模型,参数量数十倍的4.8B的GTR-XXL模型性能并无显著上升。
  • Decoder-Only架构的5.8B的SGPT-NLI模型不敌相近参数量的Encoder-Only架构的4.8B的GTR-XXL模型。

综上,结合我们的实验,初步结论是:

  • 模型参数量角度:在Embedding任务上,模型参数量提升并不一定能带来效果的提升。
  • 模型结构角度:根据当前的实验结果,双向注意力的BERT-like models确实效果比单向注意力的Decoder-only结构更佳。

当然,由于OpenAI并未公布他们Embedding方案的技术细节,或许我们还没有获取使用GPT来做Embedding的正确打开方式。

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

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

相关文章

【SpringCloud Alibaba笔记】(2)Nacos服务注册与配置中心

Nacos Nacos简介与下载 是什么? 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos(Dynamic Naming and Configuration Service)就是注册中心+配置中心的组合 Nacos Eureka Config Bus 替代Eureka…

初识HTTP协议

Web服务器可以接收浏览器的请求,并将服务器中的web项目资源响应给浏览器,浏览器与服务器之间进行网络通信遵循HTTP协议。 一、什么是HTTP协议 超文本传输协议(HTTP,HyperText Transfer Protocol)(浏览器---->web服务…

27 UVM queue

uvm_queue类构建一个动态队列,该队列将按需分配并通过引用传递。 uvm_queue类声明: class uvm_queue #( type T int ) extends uvm_object 1 uvm_queue class hierarchy 2 uvm_queue class Methods 3 UVM Queue Example 在下面的示例中,…

基于深度卷积神经网络的垃圾分类识别系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细介绍了一基于深度卷积神经网络的垃圾分类识别系统。采用TensorFlow和Keras框架,通过卷积神经网络(CNN)进行模型训练和预测。引入迁移学习中的VGG16模型…

Linux:apache优化(7)—— 日志分割|日志合并

作用:随着网站访问量的增加,访问日志中的信息会越来越多, Apache 默认访问日志access_log单个文件会越来越大,日志文件体积越大,信息都在一个文件中,查看及分析信息会及不方便。 分割 实现方式&#xff1a…

『JavaScript』JavaScript事件类型详解:全面解析各类用户交互行为

📣读完这篇文章里你能收获到 理解事件驱动编程的基本概念和工作原理掌握JavaScript中常见的事件类型及其应用场合学习如何使用DOM API添加和移除事件监听器探讨事件冒泡、事件捕获和事件委托等高级事件处理技术 文章目录 一、事件处理程序1. HTML事件处理HTML事件处…

单片机键盘程序设计举例

1、键盘与的连接 图3键盘连接 图4单片机与键盘接口图 2、通过1/0口连接。将每个按钮的一端接到单片机的I/O口,另一端接地,这是最简单的办法,如图3所示是实验板上按钮的接法,四个按钮分别接到P3.2 、P3.3、P3.4和P3.5。对于这种键…

HttpClient入门

HttpClient入门 简介 HttpClient 是 Apache HttpComponents 项目中的一个开源的 Java HTTP 客户端库,用于发送 HTTP 请求和处理 HTTP 响应。它提供了一组强大而灵活的 API,使得在 Java 程序中执行 HTTP 请求变得相对简单 maven依赖 org.apache.httpco…

72内网安全-域横向CSMSF联动及应急响应知识

拿到才行,拿不到就是多余的 案例一MSF&CobaltStrike 联动 Shell 有一些功能可能cs或者msf强大一些,他们两个可以相互调用,在真实情况下也是可以cs和msf同时启动的, cs移交给msf .创建Foreign监听器 “Listeners”“Add”…

[NAND Flash 4.2] Flash 原理 | NOR Flash 和 NAND Flash 闪存详解

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< 前言 智能手机有一个可用的存储空间(如苹果128G),电脑里有一个固态硬盘空间(如联想512G), 这个空间是啥呢? 这个存储空间就是闪存设备,我们都统称为…

ILI9481 TFT3.5寸屏STM32F446ZEXX FMC驱动方式详解

图片来源于网络&#xff0c;如若侵权请联系博主删除 文章目录 1. 背景2. 基础知识2.1 TFT-LCD2.2 硬件接线2.3 FMC2.4 ILI9481 3. 软件抽象 1. 背景 最近做项目需要&#xff0c;博主在某宝上买了一块3.5寸的TFT屏&#xff0c;店家虽然发了资料&#xff0c;但是往产品上移植驱动…

动画墙纸:将视频、网页、游戏、模拟器变成windows墙纸——Lively Wallpaper

文章目录 前言下载github地址&#xff1a;网盘 关于VideoWebpagesYoutube和流媒体ShadersGIFs游戏和应用程序& more:Performance:多监视器支持&#xff1a;完结 前言 Lively Wallpaper是一款开源的视频壁纸桌面软件&#xff0c;类似 Wallpaper Engine&#xff0c;兼容 Wal…

PiflowX组件-JDBCRead

JDBCRead组件 组件说明 使用JDBC驱动向任意类型的关系型数据库读取数据。 计算引擎 flink 有界性 Scan Source: Bounded Lookup Source: Sync Mode 组件分组 Jdbc 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许…

Vue(一):Vue 入门与 Vue 指令

Vue 01. Vue 快速上手 1.1 Vue 的基本概念 用于 构建用户界面 的 渐进性 框架 构建用户界面&#xff1a;基于数据去渲染用户看到的界面渐进式&#xff1a;不需要学习全部的语法就能完成一些功能&#xff0c;学习是循序渐进的框架&#xff1a;一套完整的项目解决方案&#x…

数据结构与算法——符号表API设计及有序符号表设计

Java学习手册面试指南&#xff1a;https://javaxiaobear.cn 符号表最主要的目的就是将一个键和一个值联系起来&#xff0c;符号表能够将存储的数据元素是一个键和一个值共同组成的键值对数据&#xff0c;我们可以根据键来查找对应的值。 符号表中&#xff0c;键具有唯一性。 符…

PiflowX组件-WriteToUpsertKafka

WriteToUpsertKafka组件 组件说明 以upsert方式往Kafka topic中写数据。 计算引擎 flink 有界性 Streaming Upsert Mode 组件分组 kafka 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子kafka_h…

QT音频编程实战项目(一)ui搭建和槽函数的完成

第一个类实现播放音乐&#xff0c;第二个类实现歌曲列表&#xff0c;第三个类是播放本地歌曲 上边是歌曲的总时长&#xff0c;下边是当前播放的时长。 所需要的槽函数如上图。 这个是构造函数&#xff1a; …

基于JavaWeb实验室预约管理系统(源码+数据库+文档)

一、项目简介 本项目是一套基于JavaWeb实验室预约管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;e…

OFDM——PAPR减小

文章目录 前言一、PAPR 减小二、MATLAB 仿真1、OFDM 信号的 CCDF①、MATLAB 源码②、仿真结果 2、单载波基带/通频带信号的 PAPR①、MATLAB 源码②、仿真结果 3、时域 OFDM 信号和幅度分布①、MATLAB 源码②、仿真结果 4、Chu 序列和 IEEE802.16e 前导的 PAPR①、MATLAB 源码②…

ToDesk Linux 客户端安装(欧拉系统)

下载链接 下载链接 https://newdl.todesk.com/linux/todesk-v4.3.1.0-x86_64.rpm &#xff08;使用4.3.1.0覆盖安装后&#xff0c;临时密码将会变更&#xff09; 安装命令&#xff1a; sudo rpm -Uvh todesk-v4.3.1.0-x86_64.rpm启动命令&#xff1a; todesk启动命令只能在桌…