[论文笔记]SGPT: GPT Sentence Embeddings for Semantic Search

news2024/10/4 1:06:35

引言

解码器Transformer的规模不断壮大,轻松达到千亿级参数。同时由于该规模,基于提示或微调在各种NLP任务上达到SOTA结果。但目前为止解码器Transformer还无法应用在语义搜索或语句嵌入上。

为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。

作者提出了SGPT方法来解决这一问题,代码开源在 https://github.com/Muennighoff/sgpt 。

1. 总体介绍

现阶段主要依赖于类似BERT的仅编码器Transformer编码句嵌入以提供语义搜索。因为目前尚未清楚如何从解码器中提取语义嵌入。但这种做法的好处是明显的:

  • 性能 解码器的参数量巨大,这有可能产生SOTA结果;
  • 节省计算 只需要维护解码器架构,只训练一个大规模解码器并将其重用于搜索可以节省成本;

image-20241003093940066

图1: 给定一个查询 q q q,文档 d 1 − 3 d_{1-3} d13,SGPT通过分数 s 1 − 3 s_{1-3} s13对文档进行排序。(a)Cross-Encoder拼接查询和文档然后一起编码。分数是对数概率。(b)Bi-Encoder分别对查询和文档进行编码,生成的文档向量 v 1 − 3 v_{1-3} v13可以缓存起来然后可以在新查询进来的时刻 t c t_c tc被访问。分数是预先相似度。

在本篇工作中,我们提出SGPT将仅解码器应用于语义搜索并提取有语义的句子嵌入。区分四种设置:Cross-Encoder、Bi-Encoder、对称以及非对称。

2. 相关工作

Cross-Encoder同时对查询和文档进行编码。

Bi-Encoder分别对查询和文档进行编码。有研究者提出了一个基于GPT的Bi-Encoder cpt-text。

Cross-Encoder往往优于Bi-Encoder,但速度较慢。

非对称搜索意味着查询和文档不可互换。

对称搜索意味着查询和文档可以互换。

3. SGPT Cross-Encoder

3.1 非对称搜索

给定查询 q q q和文档语料库 D D D,对最有可能的文档 d ∗ d^* d感兴趣,使用贝叶斯理论可以表示为:
d ∗ = arg ⁡ max ⁡ d ∈ D P ( d ∣ q ) = arg ⁡ max ⁡ d ∈ D P ( q ∣ d ) P ( d ) P ( q ) = arg ⁡ max ⁡ d ∈ D P ( q ∣ d ) P ( d ) (1) d^* = \arg \max_{d \in D}P(d|q) = \arg \max_{d\in D} \frac{P(q|d)P(d)}{P(q)} = \arg \max _{d \in D} P(q|d)P(d) \tag 1 d=argdDmaxP(dq)=argdDmaxP(q)P(qd)P(d)=argdDmaxP(qd)P(d)(1)
由于文档的长度是可变的且计算 P ( q ∣ d ) P(q|d) P(qd) P ( d ∣ q ) P(d|q) P(dq)容易,因此我们给定嵌入提示 P P P的文档标记,计算查询标记 q i , ⋯   , n q_{i,\cdots,n} qi,,n的联合概率为 p ( q i , ⋯   , q n ∣ p 1 , ⋯   , p i − 1 ) p(q_{i},\cdots,q_n|p_1,\cdots,p_{i-1}) p(qi,,qnp1,,pi1)。因为 P ( d ) P(d) P(d)通常在语料库 D D D中不会变化,而忽略 P ( d ) P(d) P(d)

在实践中使用对数概率——模型输出的softmax的对数。

3.2 对称搜索

image-20241003203141697

表3: Quora上的SGPE-CE(Cross-Encoder)对称搜索结果。来自{query}的对数概率之和作为重排名分数。从{doc}左侧截断过长的标记。重排名前100的文档,分数为nDCG@10。

使用§3.1中相同的方法,但调整对称搜索的提示。如表3所示。

4. SGPT Bi-Encoder

4.1 对称搜索

由于自回归解码器Transformer的因果注意掩码,即每个位置的token只能感知到其之前的信息。因此,只有最后一个token关注了序列中的所有标记。SGPT提出使用位置加权池化方法为后面的标记赋予更高的权重:
v = ∑ i = 1 S w i h i where w i = i ∑ i = 1 S i (2) v = \sum_{i=1}^S w_ih_i \quad \text{where} \quad w_i = \frac{i}{\sum_{i=1}^S i} \tag 2 v=i=1Swihiwherewi=i=1Sii(2)
S S S是序列长度; h i h_i hi是第 i i i个隐藏状态; v v v是查询或文档嵌入。

我们将加权均值池化与最后一个标记池化进行比较,其中最后一个标记的隐藏状态是嵌入或常规的均值池化。

使用批内负样本进行监督对比学习,给定查询-文档对 { q ( i ) , d ( i ) } i = 1 M \{q^{(i)},d^{(i)}\}_{i=1}^M {q(i),d(i)}i=1M,优化损失函数:
J CL ( θ ) = 1 M ∑ i = 1 M log ⁡ exp ⁡ ( τ ⋅ σ ( f θ ( q ( i ) ) , f θ ( d ( i ) ) ) ) ∑ j = 1 M exp ⁡ ( τ ⋅ σ ( f θ ( q ( i ) ) , f θ ( d ( j ) ) ) ) (3) J_\text{CL}(\theta) = \frac{1}{M} \sum_{i=1}^M \log \frac{\exp(\tau \cdot \sigma(f_\theta(q^{(i)}), f_\theta(d^{(i)})))}{\sum_{j=1}^M \exp(\tau \cdot \sigma(f_\theta(q^{(i)}), f_\theta(d^{(j)})))} \tag 3 JCL(θ)=M1i=1Mlogj=1Mexp(τσ(fθ(q(i)),fθ(d(j))))exp(τσ(fθ(q(i)),fθ(d(i))))(3)
f θ f_\theta fθ是SGPT模型,输出固定大小的向量; σ \sigma σ是余弦相似度; τ \tau τ是一个温度参数,设为 20 20 20,相当于除以 0.05 0.05 0.05。在训练和推理期间,将序列长度限制为75个标记。

4.2 非对称搜索

遵守§4.1中同样的设置。对于非对称搜索,将模型序列长度限制为300个标记。增加括号使模型区分查询和文档,将查询 q q q的标记增加两个中括号作为 [ q 0 − n ] [q_{0-n}] [q0n],文档使花括号 { d 0 − n } \{d_{0-n}\} {d0n}

5. 结论

这篇工作介绍了SGPT,提出对GPT模型进行修改,将它们用于语义搜索的Cross-或Bi-编码器。

SGPT-BE使用位置加权均值得到最先进的句子嵌入,可以用于语义搜索或其他嵌任务。

SGPT-CE提取预训练GPT模型的对数概率产生无监督的最先进的搜索结果,但只能用于语义搜索。

B任务和实验细节

B.1 提示

image-20241003211401103

image-20241003211415639

总结

⭐ 作者提出了利用仅编码器的类GPT架构来产生句子嵌入以支持语义检索和其他嵌入任务。在Bi-Encoder设置中,使用位置加权平均池化来得到具有语义信息的句子嵌入。在Cross-Encoder设置中,提取预训练GPT模型的对数概率产生无监督结果。

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

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

相关文章

平台数据分类与聚类实验报告

参考书籍:《数据流挖掘与在线学习算法》 李志杰 1.6.1 实验目的 本书内容以及课程实验主要涉及Java程序设计语言、数据挖掘工具Weka和数据流机器学习平台MOA,因此,需要安装、配置并熟悉实验环境。Java、Weka和MOA都是开源小软件&#xff0…

2024年10月2日历史上的今天大事件早读

1683年10月2日 清朝康熙帝统一台湾 1869年10月2日 印度民族解放运动领袖甘地诞辰 1890年10月2日 中共创始人之一李达诞生 1895年10月2日 天津中西学堂(天津大学前身)开学 1901年10月2日 郑士良等发起惠州起义 1909年10月2日 京张铁路正式通车 1920…

国外电商系统开发-运维系统功能清单开发

一、最终效果图 二、功能清单 功能 描述 自定义日志绘图 根据Nginx、Apache登录日志文件绘图,绘图数据包括:访问量走势,500错误,200正确百分比等 创建服务器 加入服务器 主机状态自动检查 加入主机到系统后,系统…

【STM32】TCP/IP通信协议(2)--LwIP内存管理

五、LWIP内存管理 1.什么是内存管理? (1)内存管理,是指软件运行时对计算机内存资源的分配的使用的技术,其主要目的是如何高效、快速的分配,并且在适当的时候释放和回收内存资源(就比如C语言当…

前端规范工程-5:Git提交信息规范(commitlint + czg)

前面讲的都是在git提交之前的一些检查流程,然而我们git提交信息的时候,也应该是需要规范的。直接进入主题: 目录 需安装插件清单commitlint 介绍安装配置配置commit-msg钩子提交填写commit信息czg后续方式一:push触动build并上传…

行为设计模式 -观察者模式- JAVA

观察者模式 一.简介二. 案例2.1 抽象主题(Subject)2.2 具体主题(Concrete Subject)2.3 抽象观察者(Observer)2.4 具体观察者(Concrete Observer)2.5 测试 三. 结论3.1 优缺点3.2 使用…

从零开始讲PCIe(0)——外设与外设总线

一、外设 计算机外设(Peripheral)是指连接到计算机主机以扩展其功能的外部设备。这些设备可以是输入设备、输出设备、存储设备或通信设备等,外设(外围设备)通过输入、输出、存储和通信等方式帮助计算机与用户和其他设备…

用Arduino单片机读取PCF8591模数转换器的模拟量并转化为数字输出

PCF8591是一款单芯片,单电源和低功耗8位CMOS数据采集设备。博文[1]对该产品已有介绍,此处不再赘述。但该博文是使用NVIDIA Jetson nano运行python读取输入PCF8591的模拟量的,读取的结果显示在屏幕上,或输出模拟量点亮灯。NVIDIA J…

可解释聚类又“炸出圈”啦!把准3个切入点一路开挂!创新思路一学就会~

可解释聚类是机器学习领域一个非常重要的研究方向,它通过引入解释性强的特征和模型,让我们更直观地理解聚类结果,从而提升聚类分析的准确性和可靠性。 这种方法在一些敏感领域如医疗、金融等非常适用,因为它与传统方法不同&#…

工具模块及项目整体模块框架

文章目录 工具模块logger.hpphelper.hppthreadpool.hpp 核心概念核心API交换机类型持久化⽹络通信消息应答持久化数据管理中心模块虚拟机管理模块交换路由模块消费者管理模块信道管理模块连接管理模块Broker服务器模块消费者管理信道请求模块通信连接模块项⽬模块关系图 工具模…

Oracle SQL语句没有过滤条件,究竟是否会走索引??

答案是:可能走索引也可能不走索引,具体要看列的值可不可为null,Oracle不会为所有列的nullable属性都为Y的sql语句走索引。 例子: create table t as select * from dba_objects; CREATE INDEX ix_t_name ON t(object_id, objec…

MySQL 中的 GTID 复制详解

MySQL 中的 GTID 复制详解 在 MySQL 的复制架构中,GTID(Global Transaction Identifier)复制是一种重要的技术,它为数据库的复制提供了更强大的功能和更高的可靠性。本文将深入探讨 MySQL 中的 GTID 复制是什么,以及它…

OpenCV计算机视觉库

计算机视觉和图像处理 Tensorflow入门深度神经网络图像分类目标检测图像分割OpenCVPytorchNLP自然语言处理 OpenCV 一、OpenCV简介1.1 简介1.2 OpenCV部署1.3 OpenCV模块 二、OpenCV基本操作2.1 图像的基本操作2.1.1 图像的IO操作2.1.2 绘制几何图像2.1.3 获取并修改图像的像素…

时间相关数据的统计分析(笔记更新中)

对事件相关数据的统计思路做一个笔记 可以用作肿瘤生长曲线(Tumor Growth Curve)/某一个药物处理后不同时间点表型的获取类型的数据。 总体来说合适的有两类,一类是以ANOVA为基础的方差分析,重复测量资料的方差分析;…

D - Connect the Dots Codeforces Round 976 (Div. 2)

原题 D - Connect the Dots 思路 直接去做的话会超时, 因此用差分去优化 代码 #include <bits/stdc.h> using namespace std;int f[200020]; int z; int b[11][200020];// 并查集的 find 函数 int find(int x) {return f[x] ! x ? f[x] find(f[x]) : x; }// 检查是…

食品饮料小程序搭建私域会员管理

食品饮料是商超主要经营类目之一&#xff0c;多样化的品牌/厂商/渠道/经销商&#xff0c;客户在消费方面购物渠道和选择范围广&#xff0c;无论厂商还是线下门店/线上电商都需要围绕流量/会员开展生意获得更多营收。 小程序开店基于微信平台生态分享宣传、用户店铺方便购物及提…

Flutter与原生代码通信

文章目录 1. 知识回顾2. 示例代码3. 经验总结我们在上一章回中介绍了通道相关的内容,本章回中将介绍其中的一种通道:MethodChannnel.闲话休提,让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中介绍了通道的概念和作用,并且提到了通道有不同的类型,本章回将其中一…

【C++】类与对象基础概念解析

恭喜你学习完C语言与数据结构的有关内容&#xff0c;现在让我们开始进行对C的学习吧~ &#x1f49d;&#x1f49d;&#x1f49d;如果你对C语言或数据结构还存在疑惑&#xff0c;欢迎观看我之前的作品 &#x1f449;【数据结构】 &#x1f449;【C语言】 目录 一、引言 二、类…

【2024年最新】基于springboot+mysql就业信息管理系统

技术摘要 技术框架&#xff1a;以springboot作为框架&#xff0c;业务模式&#xff1a;B/S模式数据库&#xff1a;MySql作为后台运行的数据库服务器&#xff1a;使用Tomcat用为系统的服务器 系统展示 系统实现功能 本次实现一个就业信息管理系统&#xff0c;通过这个系统能够…

vscode安装及c++配置编译

1、VScode下载 VS Code官网下载地址&#xff1a;Visual Studio Code - Code Editing. Redefined。 2、安装中文插件 搜索chinese&#xff0c;点击install下载安装中文插件。 3、VS Code配置C/C开发环境 3.1、MinGW-w64下载 VS Code是一个高级的编辑器&#xff0c;只能用来写代…