引言
在自然语言处理 (NLP) 飞速发展的今天,像 GPT-4 和 Llama-3 这样的大型语言模型 (LLM) 已成为生成文本、编写代码和回答问题的事实标准。它们理解上下文的能力无与伦比。然而,一个巨大的挑战依然存在: 我们如何在不耗尽预算的情况下,利用这些生成式巨头在海量数据集中有效地查找信息?
传统上,利用 LLM 进行信息检索 (IR) 主要分为两个截然不同但都不完美的阵营。第一种是基于提示词的重排序方法 (Prompt-based re-ranking) 。 在这种场景下,你先通过简单的关键词搜索检索出一小部分文档,然后询问 LLM: “这篇文档与用户的查询相关吗?”虽然这种方法准确率很高,但计算成本极高。想象一下,对于每一个搜索查询,都要运行像 GPT-4 这样的庞大模型数百次;对于实时应用来说,这太慢也太贵了。
第二种阵营涉及密集检索方法 (Dense retrieval methods) 。 在这里,模型被训练成将文本转换为数字向量 (嵌入) 。相似的文本在向量空间中会彼此靠近。虽然效率很高,但训练这些模型需要大量的配对数据 (查询和相关文档) 以及巨大的计算资源进行对比训练。例如,训练最先进的“E5-mistral”模型在 32 个高端 GPU 上大约耗时 18 小时——对于许多研究人员和初创公司来说,这一成本令人望而却步。
但是,如果还有第三种方法呢?如果我们能说服一个标准的、现成的 LLM 在没有任何训练、微调或昂贵数据收集的情况下充当检索系统,那会怎样?
这正是论文 《PromptReps: Prompting Large Language Models to Generate Dense and Sparse Representations for Zero-Shot Document Retrieval》 所解决的问题。研究人员提出了一种新颖的方法,利用 LLM 的内部机制——特别是它们的隐藏状态和下一个 token 的预测——仅通过提示 (Prompting) 来生成强大的检索表示。
背景: 检索领域的格局
要理解 PromptReps 的重要性,我们首先必须建立现代信息检索的背景。
密集检索 vs. 稀疏检索
从高层次来看,搜索技术依赖于将文本表示为数字。
- 稀疏检索 (词袋模型/Bag-of-Words) : 像 BM25 这样的经典算法基于精确的关键词匹配来表示文本。如果你的查询包含“apple”,它会查找包含“apple”的文档。向量是“稀疏”的,因为大多数维度 (词汇表中的词) 都是零。这些方法速度快且精确,但在理解同义词或上下文方面表现不佳 (例如,将“apple”与“fruit”匹配) 。
- 密集检索 (嵌入/Embeddings) : 神经网络 (如 BERT) 将文本编码为短而密集的数字向量。这些向量捕捉语义。密集检索器知道“canine” (犬科动物) 和“dog” (狗) 是相关的。然而,它们需要大量的训练才能正确对齐向量空间。
零样本挑战
“零样本” (Zero-shot) 指的是模型在没有针对特定任务进行显式训练的情况下执行该任务的能力。LLM 以其在生成方面的零样本能力而闻名。你可以要求 LLM 写一首关于量子物理的诗,它无需专门在“量子物理诗歌”数据集上进行训练就能做到。
然而,LLM 被训练用来预测下一个词,而不是将句子映射到向量空间。以前尝试使用 LLM 进行检索通常涉及生成合成数据来训练其他较小的模型,或者使用 LLM 臆造一个假设性文档并对其进行搜索。PromptReps 试图绕过这些中间步骤,直接从 LLM 的推理过程中提取检索表示。
核心方法: PromptReps
PromptReps 的精妙之处在于其简洁性。作者没有修改模型权重,而是修改输入以迫使模型进入特定状态。
提示策略
核心思想是要求 LLM 将文档的语义压缩成一个单词。使用的提示词如下:
<System> You are an AI assistant that can understand human language. <User> Passage: "[text]". Use one word to represent the passage in a retrieval task. Make sure your word is in lowercase. <Assistant> The word is: "
当 LLM 处理这个提示时,它会阅读文档并试图预测最能概括它的那个单词。在它生成那个单词之前的确切时刻 (在提示词的最后一个 token 处) ,模型的内部状态极其丰富。它包含了决定文档内容所需的所有信息。
PromptReps 在这个特定时刻提取两类数据来构建混合检索系统 (Hybrid Retrieval System) :

如图 1 所示,该系统通过 LLM 执行一次前向传递,并分为两条路径:
- 密集表示 (“核心语义”) : 系统提取最后一个 token 的最后隐藏状态 (last hidden state) 。 这是一个向量 (数字列表) ,代表了模型在“开口说话”之前的“思维过程”。这个向量捕捉了文本的深层语义,可用于密集检索 (近似最近邻搜索) 。
- 稀疏表示 (“关键词”) : 系统提取下一个 token 的 Logits 。 Logits 代表词汇表中每一个词成为下一个词的概率。
深度解析: 构建稀疏向量
稀疏表示的提取特别巧妙。“Logits”本质上是模型所知道的每个词 (通常 30,000+ 个词) 的得分列表。如果文档是关于“dogs” (狗) 的,那么像“puppy” (小狗) 、“canine” (犬科) 、“bark” (吠叫) 和“pet” (宠物) 这些词的 Logits 值都会很高,即使这些具体的词并没有出现在文本中。
这创建了一个包含文档扩展 (document expansion) 的“词袋”表示。模型隐式地将相关的同义词和关联术语添加到了索引中。
为了使这在搜索引擎 (倒排索引) 中实用,作者应用了几个处理步骤来稀疏化这些 Logits:
- 过滤: 他们只保留对应于文档中实际存在的单词的值 (以确保精确匹配的精度) 或高概率的扩展术语。
- 修正: 他们应用 ReLU 函数 (移除负值) 和对数饱和 (抑制极高值以防它们占主导地位) 。
- 量化: 浮点数值被转换为整数以节省空间并加速搜索。
混合方法
通过结合这两种表示,PromptReps 兼得两家之长:
- 密集向量提供语义理解 (概念匹配) 。
- 稀疏向量提供词汇精度 (关键词匹配) 和扩展能力。
在检索过程中,查询 (Query) 使用完全相同的提示进行处理 (将“Passage”替换为“Query”) 。系统使用密集向量 (点积) 和稀疏向量 (术语匹配) 计算得分,然后使用加权和将它们结合起来。
实验与结果
为了验证这种方法,研究人员在 BEIR 基准上测试了 PromptReps,这是一个包含 13 个不同数据集的严格集合,涵盖了从生物医学查询 (NFCorpus) 到金融问题 (FiQA) 的各种主题。
用于比较的基线包括:
- BM25: 关键词搜索的行业标准。
- E5-PT: 在 13 亿个文本对上训练的最先进的密集检索器。
- LLM2Vec: 一种使用掩码训练使 Llama-3 适应检索的方法。
零样本效果
结果如下表 1 所示,令人震惊。

BEIR 评估的关键结论是:
- BM25 很难被击败: 注意标准的 BM25 (第一列) 经常优于像 LLM2Vec 这样复杂的训练模型。这说明了零样本检索有多么困难。
- PromptReps (混合模式) 大放异彩: 看一下“Llama3-70B-I Hybrid”这一列。它的平均分达到了 45.97 , 显著优于 BM25 (43.70),并且非常接近经过大量训练的 E5-PT (46.06)。
- 无需训练: 必须记住 E5-PT 是在数十亿个对数据上训练出来的。PromptReps 仅通过提示标准的 Llama-3 模型就达到了类似的性能。
混合方法的威力
数据表明,无论是密集表示还是稀疏表示,单独使用都不完美。例如,在 arguana 数据集上,“Llama3-8B-I” 列中,密集得分为 29.70,稀疏得分为 22.85。然而,当结合起来 (混合) 时,得分跃升至 33.32。
图 6 进一步分析了这种协同作用,展示了密集与稀疏组件权重的影晌。

图表显示了一个清晰的“甜点区” (大约在 0.4 到 0.5 之间) ,在此处结合两个信号产生的准确率 (MRR@10) 明显高于单独使用任何一种方法。这证实了语义“意境”和关键词“精度”是互补的。
规模法则: 越大越好
PromptReps 最有前途的方面之一是它直接受益于 LLM 的“规模法则”。随着基础语言模型变得更聪明,检索性能也会提高。

图 2 表明,从 7B 参数的模型 (Mistral) 转向 Llama-3-8B,最后转向 Llama-3-70B,会导致性能的持续提升。右侧的“Hybrid” (混合) 柱状图显示,Llama-3-70B 模型 (紫色柱) 将性能推高至远超 BM25 基线 (虚线) 的水平。这意味着随着未来 LLM (如 GPT-5 或 Llama-4) 的发布,PromptReps 将自然而然地变得更加有效,而无需更改算法。
对提示词的敏感性
提示词“Use one word…” (使用一个词……) 真的是最佳选择吗?作者进行了一项消融研究来测试不同的指令。

表 4 显示措辞很重要。提示词 #6 (主要方法中使用的那个) 表现最好。有趣的是,去掉“Make sure your word is in lowercase” (确保你的单词是小写) 这一指令 (提示词 #1) 会略微损害性能。这很可能是因为稀疏检索机制依赖于精确的 Token 匹配,确保存输为小写能更好地与预处理步骤对齐。至关重要的是,提示词 #4 去掉了“The word is:” (这个词是: ) 这一线索,结果完全失败 (得分为 0.00) 。这证实了迫使模型进入生成状态对于正确引导隐藏状态和 Logits 是必不可少的。
替代架构
研究人员还质疑仅仅生成“一个词”是否足够。他们尝试了要求生成多个词或使用多向量表示 (类似于 ColBERT) 的提示。

如图 3 所示,他们尝试让模型生成更多的 Token 并汇集结果。然而,他们的结果 (见论文图 5) 表明,最简单的方法——使用第一个 Token 的表示——通常与更复杂的多 Token 策略一样有效,甚至更好。这是效率上的胜利,因为生成更少的 Token 意味着更低的延迟。
PromptReps 作为训练初始化
虽然 PromptReps 旨在作为一种零样本方法,但作者也探索了它是否可以作为监督训练的“快速启动 (jump start) ”。
标准的密集检索器通常使用没有检索概念的基础语言模型进行初始化。作者假设使用 PromptReps 初始化模型 (使用提示词引导初始状态) 将使微调更快、更有效。

表 5 证实了这一假设。仅使用 1,000 个 训练数据样本 (标准数据集的一小部分) ,标准的 Llama-3 模型 (RepLlama3) 得分为 27.88。然而,PromptReps (仅密集模式) 起步即达到 28.48。当在完整数据集上训练时,PromptReps 依然保持竞争力。这表明提示词从一开始就将模型置于了更适合检索任务的“特征空间”中。
结论与启示
PromptReps 论文提出了一个令人信服的论点: 大型语言模型其实已经是强大的检索系统;它们只需要被问对问题。
通过提示 LLM 将文档概括为一个单词,我们可以利用其内部神经状态来创建高质量的密集和稀疏向量表示。这种方法,即 PromptReps , 提供了几个明显的优势:
- 零训练成本: 它不需要昂贵的对比学习或用于预训练的 GPU 集群。
- 全语料库检索: 与仅查看前 10 个结果的重排序方法不同,PromptReps 生成的向量可以被索引,从而允许在数百万个文档中进行搜索。
- 面向未来: 它随模型规模扩展。随着开源模型的改进,PromptReps 也会随之改进。
虽然由于 Llama-3 等 LLM 的体量,目前它的查询延迟比小型的专用 BERT 模型要高,但模型压缩和推理加速方面的快速进步可以缓解这一问题。PromptReps 架起了 LLM 的生成能力与搜索引擎的结构化需求之间的桥梁,证明了有时候,找到你想要的东西的最佳方式,就是简单地让模型描述它。
](https://deep-paper.org/en/paper/2404.18424/images/cover.png)