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

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

引言

解码器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模型的对数概率产生无监督结果。

相关文章:

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

引言 解码器Transformer的规模不断壮大,轻松达到千亿级参数。同时由于该规模,基于提示或微调在各种NLP任务上达到SOTA结果。但目前为止解码器Transformer还无法应用在语义搜索或语句嵌入上。 为了简单,下文中以翻译的口吻记录,比…...

基于微信小程序的旅游拼团系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

富格林:警悟可信经验安全投资

富格林指出,黄金具有不错的投资价值,一直以来备受投资者的喜爱,近年来大家也纷纷加入现货黄金市场为己增值财富。但是要为投资安全护航的前提,是需要投资者使用合适可信的方法以及掌握相对应的投资技巧。下面富格林将总结以下可信…...

【Linux】使Ubuntu自适应窗口大小并与主机共享文件

LInux虚拟机版本ubuntu-20.04.6,VM版本VMware Workstation 17 Pro VMware Tools™ 是一组服务和模块,是VMware公司在其虚拟化平台中提供的一套工具集,旨在提高虚拟机的性能和稳定性。它们支持 VMware 产品中的多种功能特性,有助于…...

C++ 语言特性18 - static_assert 介绍

一:概述 在 C 中,static_assert 是一种用于在编译时进行断言的机制,确保某些编译时条件成立。如果条件不成立,则编译器会生成错误,阻止代码的编译。static_assert 在 C11 中引入,目的是帮助程序员在编译时捕…...

centos 7.9系统redis6.2.6哨兵模式部署

由于系统需要处理大量的数据并发请求,所以借助于Redis的高性能,可以有效提升整个系统的处理效率。这里采用redis6.2版本源码编译部署哨兵模式,提高整个系统的可用性,避免单点故障。 1. Redis基本环境安装 centos7安装redis 6.2.6 采用源码编译方式安装。 服务器主机名:…...

编程基础:详解 C++ 中的 `std::sort` 函数

编程基础:详解 C 中的 std::sort 函数 在C编程中,排序是非常常见的操作,而std::sort是C标准库中用于排序的一个高效函数。它提供了灵活的排序功能,可以使用默认排序规则或自定义的比较函数。本文将深入探讨std::sort的用法、参数要…...

51单片机的宠物自动投喂系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温湿度传感器DS1302时钟模块蓝牙步进电机按键、蜂鸣器等模块构成。适用于猫猫/狗狗宠物自动喂食器等相似项目。 可实现基本功能: 1、LCD1602实时显示北京时间和温湿度 2、温湿度传感器DHT11采集环境温湿度 3、时…...

MongoDB快速实战与基本原理

目录 链接:https://note.youdao.com/ynoteshare/index.html?id=5e038498891617c552667b853742fdc1&type=note&_time=1727935558812 Mongo数据库的特点: mongo数据库和关系型数据库的区别: ​编辑 关系型数据库和文档型数据库的主要概念对比: 下载和启动(具体…...

编程技巧:优化

第一种:构造回文串---构造法 题目描述 [NOIP2016 普及组] 回文日期 - 洛谷 那么这道题我们总结一些题目要求: 1.输入两个字符串,为起始和终止日期 2.年份不会出现前导0 3.如果是回文日期,答案1 4.如果月份是2,要…...

pycharm中使用anaconda创建多环境,无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

问题描述 用的IDE是: 使用anaconda创建了一个Python 3.9的环境 结果使用pip命令的时候,报错 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案 为了不再增加系统变量,我们直接将变量添加在当前项目中你的Ter…...

【Linux】进程周边之优先级

目录 一、优先级 1.为什么要有进程优先级? 2.什么是进程优先级? 3.优先级的初始设定 3.1 PRI 和 NI 3.2如何修改优先级?(sudo/root) 3.2.1 概念: 3.2.2 如何查看进程的优先级? 3.3.3 或…...

Linux高级编程_29_信号

文章目录 进程间通讯 - 信号信号完整的信号周期信号的编号信号的产生发送信号1 kill 函数(他杀)作用:语法:示例: 2 raise函数(自杀)作用:示例: 3 abort函数(自杀)作用:语法:示例: 4 …...

uniapp修改uni-ui组件样式(对微信小程序/H5有效,vue3)

寻找要修改的样式 使用开发者工具找到具体要修改的class类名 修改 <style lang"scss">//.nav为上一级的class.nav::v-deep .uni-navbar--border {border-bottom-style: none !important;} </style>完整代码 <template><view><uni-na…...

Python 封装 socket 为 [TCP/UDP/MULTICAST] 服务端

在新线程中创建 TCP/UDP/MULTICAST 协议的服务端套接字&#xff0c;接收客户端的连接请求或数据&#xff0c;并调用 on_recv 回调函数处理数据。 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import threading import multiprocessingclass ServerSocket:de…...

c++ STL库 unordered_map

#include <iostream #include <string #include <unordered_map int main() { // 创建一个 unordered_map std::unordered_map<std::string, int> wordCount; // 插入元素 wordCount["apple"] 1; wordCount["banana"] 2;// 使用 insert…...

【接口测试】任务1:登录接口

需要技能竞赛软件测试资料的同学们可s聊我&#xff0c;详细了解 任务实现要求 根据系统管理员—登录—接口API文档&#xff0c;编写接口测试用例&#xff0c;分别使用PostMan及JMeter进行接口测试&#xff0c;需要检查系统接口是否能正常工作&#xff0c;返回值是否正确&#…...

二、Spring Boot集成Spring Security之实现原理

Spring Boot集成Spring Security之实现原理 一、Spring Security实现原理概要介绍二、使用WebSecurityConfiguration向Spring容器中注册FilterChainProxy类型的对象springSecurityFilterChain1、未配置securityFilterChain过滤器链时使用默认配置用于生成默认securityFilterCha…...

基于深度学习的点云处理模型PointNet++学习记录

前面我们已经学习了Open3D&#xff0c;并掌握了其相关应用&#xff0c;但我们也发现对于一些点云分割任务&#xff0c;我们采用聚类等方法的效果似乎并不理想&#xff0c;这时&#xff0c;我们可以想到在深度学习领域是否有相关的算法呢&#xff0c;今天&#xff0c;我们便来学…...

Javascript Object.assgin()详解以及深浅拷贝

Object.assign() 方法是 JavaScript 中用于将所有可枚举属性的值从一个或多个源对象复制到目标对象的方法。它将返回目标对象。这是一种浅拷贝&#xff0c;也就是说&#xff0c;如果源对象中的属性是一个对象或数组&#xff0c;那么这个属性的引用将被复制&#xff0c;而不是对…...

炉石传说HsMod插件终极指南:55项免费功能解锁全新游戏体验

炉石传说HsMod插件终极指南&#xff1a;55项免费功能解锁全新游戏体验 【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 你是否厌倦了炉石传说中冗长的动画等待&#xff1f;是否想要更流畅的游戏体…...

智慧园区能源管理系统解决方案

某园区集成生产、办公、生活三大功能&#xff0c;建设有生产厂房、化学品库、辅助用房、气罐站、研发楼、综合楼及其他配套设施&#xff0c;涉及到多种用能&#xff0c;包含电能、天然气、压缩空气、冷热能等&#xff0c;带来日益高昂的能耗成本与能源浪费隐患。 1、制冷空调监…...

VSCode里装个Cline,真能让写代码快10倍?我的真实体验和避坑指南

VSCode里装个Cline&#xff0c;真能让写代码快10倍&#xff1f;我的真实体验和避坑指南 第一次听说Cline这个VSCode插件时&#xff0c;我内心是充满怀疑的。作为一个在代码堆里摸爬滚打多年的开发者&#xff0c;早已对各种"革命性"工具免疫。但当我看到同行在短短十分…...

GraphSAGE实战:用PyTorch Geometric实现工业级节点分类(含邻居采样优化技巧)

GraphSAGE工业级实战&#xff1a;PyTorch Geometric实现与亿级节点优化指南 当电商平台的日活用户突破千万量级时&#xff0c;传统的用户行为预测模型开始显露出明显的局限性。静态的特征工程无法捕捉用户间复杂的交互关系&#xff0c;而基于全图计算的GNN方法又难以应对实时更…...

保姆级教程:用ColabFold在线版AlphaFold2,5分钟搞定你的第一个蛋白质结构预测

零门槛玩转蛋白质结构预测&#xff1a;ColabFold极简指南 蛋白质结构预测曾是生物信息学领域的"圣杯"&#xff0c;直到AlphaFold2的出现彻底改变了游戏规则。但传统方法需要复杂的本地环境配置和命令行操作&#xff0c;让许多感兴趣的非专业人士望而却步。现在&…...

ModelScope环境安装避坑指南:从NLP到语音,不同领域模型依赖到底怎么装?

ModelScope环境安装避坑指南&#xff1a;从NLP到语音&#xff0c;不同领域模型依赖到底怎么装&#xff1f; 当你第一次尝试在ModelScope上运行一个语音识别模型时&#xff0c;系统突然报错提示缺少libsndfile库&#xff1b;当你满怀期待地安装CV模型时&#xff0c;却因为mmcv版…...

猫抓插件深度解析:浏览器资源嗅探的终极实战指南

猫抓插件深度解析&#xff1a;浏览器资源嗅探的终极实战指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓插件是一款功能强大的开源浏览器扩…...

新手避坑指南:PX4飞控连接TFmini、LIDAR Lite V3等定高雷达的完整接线与参数配置(QGC实操)

PX4飞控与定高雷达实战&#xff1a;从接线到参数配置的避坑指南 刚拿到PX4飞控和一堆传感器的新手们&#xff0c;面对密密麻麻的接口和参数设置&#xff0c;是不是有种无从下手的感觉&#xff1f;特别是当你需要连接定高雷达时&#xff0c;不同品牌&#xff08;北醒TFmini、LID…...

从激光雷达到AI服务器:实战解析PCIe高速走线在车载与数据中心的不同设计策略

从激光雷达到AI服务器&#xff1a;实战解析PCIe高速走线在车载与数据中心的不同设计策略 在硬件设计领域&#xff0c;PCIe总线技术已经成为了高速数据传输的事实标准。从自动驾驶汽车的激光雷达到数据中心的AI加速卡&#xff0c;PCIe的身影无处不在。然而&#xff0c;看似相同的…...

OpenCV实战:3种图像降噪滤波器的Python代码对比(附效果图)

OpenCV实战&#xff1a;3种图像降噪滤波器的Python代码对比&#xff08;附效果图&#xff09; 在数字图像处理中&#xff0c;噪声是影响图像质量的主要因素之一。无论是来自传感器的不完美&#xff0c;还是传输过程中的干扰&#xff0c;噪声都会降低图像的清晰度和可用性。对于…...