PromptReps: 解锁LLM的检索力量

  • 论文:https://arxiv.org/pdf/2404.18424
  • 代码:https://github.com/ielab/PromptReps
  • 机构:CSIRO、昆士兰大学、滑铁卢大学
  • 领域:retrieval、embedding model
  • 发表:arXiv

        当前大型语言模型用于zero-shot文档排序的方法主要有两种:

        1)基于提示的重新排序方法,这种方法不需要进一步的训练,但由于相关的计算成本而仅适用于对少量候选文档进行重新排序;

        2)无监督对比训练的密集检索方法,它可以从整个语料库中检索相关文档,但需要大量配对文本数据进行对比训练。

        本文提出了PromptReps,它结合了两种方法的优点:无需训练和能够从整个语料库中检索。该方法只需使用提示来引导LLM生成查询和文档表示以实现有效的文档检索。具体来说,提示LLMs使用单个单词来表示给定的文本,然后使用最后一个标记的隐藏状态和与下一个标记的预测相关的对数来构建混合文档检索系统。该检索系统利用LLM提供的密集文本嵌入和稀疏词袋表示。对BEIR进行zero-shot文档检索数据集的实验评估表明,这种简单的基于提示的LLM检索方法在使用较大的LLM时可以实现与最先进的LLM嵌入方法相似或更高的检索效果,而这些方法需要使用大量无监督数据进行训练。

摘要(Abstract)

 文章提出了一种新的方法PromptReps,它结合了基于提示的重排序方法和无监督对比训练的密集检索方法的优点。PromptReps不需要额外的训练,能够从整个语料库中检索文档。该方法通过提示大型语言模型(LLMs)生成查询和文档的表示,用于有效的文档检索。具体来说,它通过提示LLMs用单个词来表示给定文本,然后使用最后一个词的隐藏状态和预测下一个词的logits来构建混合文档检索系统。该系统利用LLMs提供的密集文本嵌入和稀疏词袋表示。实验评估表明,PromptReps在多个数据集上与训练有素的LLM嵌入方法相比,具有相似或更高的检索效果,尤其是当使用更大的LLM时。

引言(Introduction)

介绍了大型语言模型(LLMs)如GPT4和LLaMA在遵循用户指令方面的强大能力,以及它们在自然语言理解任务上的成功。文章探讨了使用LLMs进行无监督文档排名的潜力。

相关工作(Related Work)

  • 监督神经检索器(Supervised Neural Retrievers):介绍了基于bi-encoder架构的神经检索器,如DPR、ANCE、ColBERT等,它们将文本编码为低维密集向量。还有基于encoder-only语言模型的稀疏神经检索器,如DeepImpact、uniCOIL、TILDE和SPLADE,它们将文本编码为高维稀疏向量。
  • 无监督神经检索器(Unsupervised Neural Retrievers):讨论了不依赖人类相关性判断的训练有效神经检索器的方法。
  • 提示LLMs进行文档排名(Prompting LLMs for document ranking):探讨了使用提示让LLMs进行文档重排序的研究。
  • 提示LLM生成句子嵌入(Prompting LLM for sentence embeddings):介绍了使用提示让LLMs生成句子嵌入的方法。

PromptReps方法

 PromptReps通过设计提示,让LLMs生成文档的密集和稀疏表示。在文档索引阶段,将所有文档通过提示输入LLMs以获得输出隐藏状态和logits。对于稀疏检索,通过一系列步骤将logits表示稀疏化,以便进行有效的稀疏检索。对于密集检索,直接使用隐藏状态作为文档的嵌入。

使用的prompt为:

实验设置(Experimental setup)

 使用MSMARCO、TREC深度学习和BEIR数据集评估了PromptReps的文档排名效果。与BM25、E5-PTlarge和LLM2Vec等基线方法进行了比较。

结果(Results)

在BEIR数据集上,PromptReps在不使用任何额外训练的情况下,通过提示生成的密集和稀疏表示,取得了与训练有素的LLM嵌入方法相似或更高的检索效果。特别是在使用更大的LLM时,效果更佳。

局限性(Limitations)

PromptReps的查询延迟高于其他基于LLM的密集检索器,尤其是在没有进一步优化的情况下。而且只有使用较大的LLM的情况下,效果才可以和较小的经过训练的方法相比较,比较鸡肋。

稀疏检索流程:

在PromptReps方法中,混合检索系统结合了密集和稀疏两种表示来提升文档检索的效果。稀疏表示通常指的是文档中的词袋模型,它记录了文档中每个词的存在与否(或者出现的频率)。构建稀疏检索系统的过程涉及以下几个步骤:

  1. 生成Logits

    • 当LLM接收到提示和文档文本后,它会预测下一个可能的词,并为每个可能的词生成一个概率分布,这些概率分布称为logits。
  2. Logits 稀疏化

    • 由于LLMs的词汇表可能包含数十万个词,直接使用这些logits进行检索会非常低效。因此,需要将logits转换为稀疏表示。
    • 首先,将文档中的所有词从logits中提取出来,并将它们对应的logit值保留,其他值设为零。这样,每个文档就由一个与词汇表大小相同但大部分元素为零的向量表示。
  3. 应用非线性变换

    • 为了进一步增强稀疏表示的区分度,通常会应用非线性变换,如ReLU(Rectified Linear Unit),将负值置为零。这有助于消除不重要的信息,并保留有助于检索的信号。
  4. 量化和归一化

    • 接下来,对稀疏向量进行量化,比如通过乘以一个常数(如100)并四舍五入,将实数转换为整数,这些整数表示词在文档中的重要性或权重。
    • 可以使用不同的归一化技术来调整权重的大小,确保它们在合理的范围内。
  5. 构建倒排索引

    • 利用上述量化后的稀疏向量构建倒排索引(Inverted Index)。倒排索引是一个数据结构,它记录了每个词在哪些文档中出现,以及相应的权重。
    • 倒排索引允许系统在接收到查询时,快速检索出包含特定词的文档,并根据词的权重对文档进行排序。
  6. 检索和评分

    • 在接收到查询时,系统同样会生成查询的稀疏表示,并使用倒排索引快速找到包含这些词的文档。
    • 然后,系统会计算查询表示与文档表示之间的匹配程度,通常是通过计算交集、并集或其他相似度度量来完成。
  7. 排名和合并

    • 根据匹配程度,系统会为每个文档计算一个分数,并根据分数对文档进行排名。
    • 在混合检索系统中,稀疏检索得到的分数会与密集检索得到的分数结合起来,通常是通过线性插值或其他合并策略,以产生最终的文档排名。

通过这种方式,稀疏检索利用文档中词的精确匹配来快速定位相关文档,而密集检索则利用语义相似度来找到可能不完全匹配但内容相关的文档。两者的结合使得检索系统在精确度和召回率上都能取得较好的平衡。


http://www.ppmy.cn/news/1522448.html

相关文章

文件名管理器,一款免费的文件名管理工具,支持文件整理功能

文件名管理器是一款可以批量修改文件名的工具,但是相较于其他工具又有不同。除了批量重命名功能外,软件同时提供一些特色功能:把文件名插入到文本文件中、根据文件名写入音乐ID3信息,整理下载的视频资源、音乐分类整理等。软件提供…

java当中什么是NIO

Java中的NIO(Non-blocking I/O)即非阻塞I/O,是Java 1.4中引入的一种新的I/O API,用于替代传统的I/O(即BIO, Blocking I/O)。与传统的阻塞式I/O相比,NIO提供了更高效的I/O操作,特别是…

深度学习速通系列:如何计算文本相似度

计算文本相似度是自然语言处理(NLP)中的一个常见任务,用于衡量两个文本片段在语义上的相似性或相关性。以下是一些常用的方法: 余弦相似度: 将文本转换为向量(例如,使用词袋模型或TF-IDF&#x…

SpringBoot开启多端口探究--基于多ApplicationContext

文章目录 前情提要一、思路概要二、具体实现三、其他问题父子关系部分依赖 总结 前情提要 前面探讨了management端口开启,grpc端口开启,本文继续探讨在SpringApplication中开启多个端口的方式之多ApplicationContext, 相比management端口基于多WebServe…

内卷时代无人机培训机构如何做大做强

在当今社会,随着科技的飞速发展,“内卷”一词频繁被提及,反映了各行业竞争日益激烈的现象。对于无人机培训行业而言,如何在这样的时代背景下脱颖而出,实现做大做强的目标,成为每个培训机构必须深思的问题。…

unity 实现吸血鬼幸存者的随机奖励

设置奖励的数据类型 // // Auto Generated Code By excel2json // https://neil3d.gitee.io/coding/excel2json.html // 1. 每个 Sheet 形成一个 Struct 定义, Sheet 的名称作为 Struct 的名称 // 2. 表格约定:第一行是变量名称,第二行是变量类型// Gen…

【Webpack】基本使用方法

📢博客主页:逆旅行天涯-CSDN博客 📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正! 参考视频: 30 分钟掌握 Webpack_哔哩哔哩_bilibili 什么是webpack 简单来说就是一个 打包工具, 可…

在Ubuntu 18.04上安装Nginx的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 Nginx 是世界上最流行的 Web 服务器之一,负责托管互联网上一些最大和最高流量的网站。在大多数情况下,它比…

OpenHarmony鸿蒙开发( Beta5.0)智能手表应用开发实践

样例简介 本项目是基于BearPi套件开发的智能儿童手表系统,该系统通过与GSM模块(型号:SIM808)的通信来实现通话和定位功能。 智能儿童手表系统可以通过云和手机建立连接,同步时间和获取天气信息,通过手机下…

Redis缓存预热方案详解:提升应用性能与用户体验

文章目录 引言1. 为什么需要缓存预热?2. 缓存预热的基本原理2.1 数据选择2.2 加载策略 3. Redis缓存预热方案设计3.1 方案概述3.2 数据选择3.3 加载策略3.4 实现方式 4. 测试与监控4.1 单元测试4.2 监控 5. 总结 引言 在现代Web应用中,缓存技术已经成为…

云原生之WEB应用服务器Tomcat(持续更新中)

WEB应用服务器Tomcat 1.Tomcat功能介绍1.1 安装Tomcat1.2 生成启动文件 2.结合反向代理实现Tomcat部署2.1 利用nginx反向代理实现 3.Memcached(解决sion丢失问题)3.1 简介3.2 安装与启动 4.session 共享服务器 1.Tomcat功能介绍 Tomcat 服务器是一个免费…

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes 优势 1、构建了一个用于监督原始视频去噪的基准数据集。为了多次捕捉瞬间,我们手动为对象s创建运动。在高ISO模式下捕获每一时刻的噪声帧,并通过对多个噪声帧进行…

[数据集][目标检测]井盖丢失未盖破损检测数据集VOC+YOLO格式2890张5类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2890 标注数量(xml文件个数):2890 标注数量(txt文件个数):2890 标注…

使用Nginx获取客户端真实IP(real_ip_header)

使用 Nginx 获取客户端真实 IP 在使用 Nginx 作为反向代理或负载均衡器时,我们常常需要获取客户端的真实 IP 地址。然而,默认情况下,Nginx 的 $remote_addr 变量记录的 IP 地址可能是上游代理或负载均衡器的 IP,而非实际客户端的…

MySQL · 性能优化 · 提高查询效率的实用指南(上)

前言 在过去的几年里,MySQL作为一款开源数据库,因其稳定性和性能得到了广泛的应用。始终保持着强劲的增长趋势,越来越多的企业和开发者将其作为首选数据库,甚至有部分企业从Oracle迁移至MySQL。然而,随着使用的普及&a…

Django中的第一个自动化测试编写

跟着Django官网中的投票应用学习,其中有官方说明的一个bug:如果 Question 是在一天之内发布的,那么这个Question 应该显示“published_recently”,返回值为True ,然而现在如果问题发布时间为30天之后(未来时间),也会返…

防封!数字人直播防封!铭顺科技AI数智人抖音直播防封落地方案!!

数字人直播防不防封? 数字人直播有没有流量? 数字人直播能不能落地? 这是目前所有想入局AI数字人赛道、想用数字人直播、想做数字人项目的老板们最担心、最关心的问题!但是,同行友商对此都噤若寒蝉,不敢跟…

手机同时传输USB功能与充电的实现及LDR6500的作用

在智能设备日益普及的今天,用户对于手机的功能需求愈发多样化,其中同时实现USB数据传输与充电功能成为了许多用户的迫切需求。这一功能的实现离不开先进的硬件技术和创新的芯片解决方案,而LDR6500正是这样一款能够满足这一需求的USB PD&#…

Spark与Kafka进行连接

在Java中使用Spark与Kafka进行连接,你可以使用Spark Streaming来处理实时流数据。以下是一个简单的示例,展示了如何使用Spark Streaming从Kafka读取数据并进行处理。 1. 引入依赖 首先,在你的pom.xml文件中添加必要的依赖项(假设…

nginx配置负载均衡的几种方式

1,轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down掉,能自动剔除。 # 反向代理配置upstream server_list{# 这个是tomcat的访问路径server localhost:8080;server localhost:9999;}serv…