PromptReps: 解锁LLM的检索力量

当前大型语言模型用于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. 排名和合并

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

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

相关推荐
AngelPP20 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年20 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼20 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS20 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区1 天前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈1 天前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang1 天前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx
shengjk11 天前
NanoClaw 深度剖析:一个"AI 原生"架构的个人助手是如何运转的?
人工智能
西门老铁1 天前
🦞OpenClaw 让 MacMini 脱销了,而我拿出了6年陈的安卓机
人工智能