当前位置: 首页 > 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;而不是对…...

Redis篇(应用案例 - UV统计)(持续更新迭代)

目录 一、HyperLogLog 二、测试百万数据的统计 一、HyperLogLog 首先我们搞懂两个概念&#xff1a; UV&#xff1a;全称Unique Visitor&#xff0c;也叫独立访客量&#xff0c;是指通过互联网访问、浏览这个网页的自然人。 1天内同一个用户多次访问该网站&#xff0c;只记录…...

解锁微信小程序新技能:ECharts动态折线图搭配WebSocket,数据刷新快人一步!

在微信小程序中&#xff0c;数据可视化展示越来越受到开发者的重视。本文将为您介绍如何在微信小程序中使用ECharts绘制折线图&#xff0c;并通过WebSocket实现实时更新图表数据。 一、准备工作 创建微信小程序项目 首先&#xff0c;我们需要创建一个微信小程序项目。如果您已…...

上交所服务器崩溃:金融交易背后的技术隐患暴露杭州BGP高防服务器43.228.71.X

一、上交所宕机事件始末 2024 年 9 月 27 日&#xff0c;上交所交易系统突发崩溃&#xff0c;这一事件犹如一颗巨石投入平静的湖面&#xff0c;引起了轩然大波。当天上午&#xff0c;众多投资者反馈券商交易出现延迟问题&#xff0c;随后上交所发布了《关于股票竞价交易出现异常…...

P4、P4D、HelixSwarm 各种技术问题咨询

多年大型项目P4仓库运维经验&#xff0c;为你解决各种部署以及标准工业化流程问题。 Perforce 官网SDPHelixCore GuideHelixSwarm GuideHelixSwarm Download...

Linux 应用层协议HTTP

文章目录 一、初始HTTP协议二、URL格式网络中怎么通过URL进行定位资源呢&#xff1f;编码和解码 三、HTTP的请求格式和响应格式HTTP的请求格式HTTP的响应格式HTTP的请求方法GET方法POST方法GET Vs PostHTTP的封装和分用文件流操作浏览器获得一个完整的网页流程 HTTP的状态码对3…...

Python和C++混淆矩阵地理学医学物理学视觉语言模型和算法模型评估工具

&#x1f3af;要点 优化损失函数评估指标海岸线检测算法评估遥感视觉表征和文本增强乳腺癌预测模型算法液体中闪烁光和切伦科夫光分离多标签分类任务性能评估有向无环图、多路径标记和非强制叶节点预测二元分类评估特征归因可信性评估马修斯相关系数对比其他准确度 Python桑…...

HTTP 协议的基本格式和 fiddler 的用法

HTTP协议格式 HTTP是⼀个⽂本格式的协议.可以通过Chrome开发者⼯具或者Fiddler抓包,分析HTTP请求/响应的细节. 抓包工具的使用 以Fiddler为例. • 左侧窗⼝显⽰了所有的HTTP请求/响应,可以选中某个请求查看详情. • 右侧上⽅显⽰了HTTP请求的报⽂内容.(切换到Raw标签⻚可以看…...

【计算机网络】详解UDP协议格式特点缓冲区

一、UDP 协议端格式 16 位 UDP 长度, 表示整个数据报(UDP 首部UDP 数据)的最大长度&#xff1b;如果16位UDP检验和出错&#xff0c;报文会被直接丢弃。 1.1、检验和出错的几种常见情况 数据传输过程中的比特翻转&#xff1a;在数据传输过程中&#xff0c;由于物理介质或网络设…...

网络安全cybersecurity的几个新领域

一、电力安全 同学们&#xff0c;今天我们来讨论一下为什么网络安全&#xff08;Cybersecurity&#xff09;和电力系统&#xff08;Power Systems&#xff09;这两个看似不同的领域会有交集。其实&#xff0c;这两个领域之间的联系非常紧密。以下我将从多个角度进行解释&#…...

android 原生加载pdf

implementation("androidx.pdf:pdf-viewer-fragment:1.0.0-alpha02") pdf加载链接...