【IR 论文】Query2doc — 使用 LLM 做 Query Expansion 来提高信息检索能力

news2025/1/12 16:18:55

论文:Query2doc: Query Expansion with Large Language Models
⭐⭐⭐⭐⭐
Microsoft Research, EMNLP 2023

文章目录

    • 背景介绍
    • Query2doc 论文速读
    • 实现细节
    • 实验结果和分析
    • 总结分析

背景介绍

信息检索(Information Retrieval,IR)指的是,给定一个 user query,从一个 large corpus 中定位出相关的文档。

目前信息检索有两个主流的范式:

  1. Lexical-based sparse retrieval(基于词汇的稀疏检索):是一类经典的 IR 方法,它依赖于文本的词汇内容和它们的统计特性。这种方法的核心是将文档和查询表示为词汇的集合,然后通过计算这些集合之间的相似度来检索文档。其中最著名的稀疏检索模型是 BM25,它使用词频(term frequency, TF)和逆文档频率(inverse document frequency, IDF)来评估查询词与文档的匹配程度。这类方法简单高效且计算效率搞,但检索效果很大程度上依赖于 query 与 doc 中词汇的匹配程度。
  2. Embedding-based dense retrieval(基于 embedding 的稠密检索):是一种较为现代的信息检索方法。这种方法将文本转为 embedding 向量,这种 embedding 能够捕捉到词汇和短语的语义信息,并通过计算向量之间的距离(如余弦相似度)来检索相关文档。这类方法能够捕捉到词汇之间的语义关系,但更需要更多的计算资源。

尽管经典的 BM25 在很多场景下表现不如基于 embedding 的方法,但 BM25 在跨领域的场景下表现还是很不错的。

Query Expansion 是 IR 领域中的一项关键技术,旨在改善查询与文档之间的匹配度,从而提高检索系统的准确性和相关性。Query Expansion 的基本思想是,通过某些方法对用户原始查询进行扩展,添加额外的词汇或短语,以更好地捕捉用户的检索意图。Query Expansion 的挑战在于选择与用户意图高度相关的词汇,同时避免引入噪声或不相关的信息。有效的 Query Expansion 可以显著提高检索系统的性能,尤其是在处理短查询或模糊查询时。然而,不恰当的扩展可能会降低检索质量,因此 Query Expansion 策略的选择和优化是 IR 中的一个活跃研究方向。

Query2doc 论文速读

论文采用的思路很简单,但效果却很不错。

Query2doc 图示

思路:先把 user query 带上 prompt 问一下 LLM,让 LLM 先生成一个关于这个问题的回复,这里称这个回复为伪文档,然后把伪文档和 user query 拼接在一起,实现了 Query Expansion,将扩展后的 query 再送给 Retriever 实现检索。

这里的 Retriever 可以是之前的任何检索器,可以是 sparse retrieval,也可以是 dense retrieval。

实现细节

下图是一个根据 user query 让 LLM 生成一个伪文档的示例:

LLM 生成示例

其实就是先给一个指令 “Write a passage that answers the given query:”,然后再给他 k 个 few-shot 的 exemplars,从而让他根据 query 生成伪文档回复。

论文选用的 exemplars 的数量 k = 4

现在,我们有了原始 query q q q、LLM 生成的伪文档 d ′ d' d,现在我们需要把它们拼接成扩展后的 query q + q^+ q+,这里的拼接有点小技巧,对于 sparse retrieval 和 dense retrieval 有着不同的拼接方法:

  • 对于 sparse retrieval:由于 q q q 往往比伪文档更加简短,为了平衡两者的权重,这里故意将 q q q 重复几次之后再与 d ′ d' d 进行拼接:

sparse retrieval 的拼接

  • 对于 dense retrieval:这时 query 和 document 都被表示为 embedding vector,这种情况下,不需要通过重复查询词汇来增加其权重,因为检索系统已经能够通过向量表示来捕捉查询和文档之间的语义关系。所以在这里,就直接将两者中间加一个 SEP 直接拼接在一起就好了:

dense retrieval 的拼接

对于 dense retrieval 的场景,最大的困难并不在拼接,而在于训练,由于输入 query 和文档仍旧不是一个分布(两者语义并不相同甚至完全不相同,只是匹配),我们仍然需要针对特定的数据集或检索任务进行训练或微调模型。本论文工作对密集检索模型进行了训练,并展示了如何将新的查询扩展技术与这些模型结合,以提高信息检索系统的整体性能。具体的训练细节可以参考原论文。

实验结果和分析

实验结果数据如下,可以从中看到,使用了 query2doc 的 Query Expansion 技术后,效果都有了不错的提升。

实验结果
除此之外,作者还做出了以下分析:

  • 模型大小的提升对最终的召回效果是有收益的,随着模型变大,生成的文本对预测效果有提升
  • 该方案本身对向量表征模型的训练,也是有明显收益的。
  • 对字面检索而言,原始 query 和大模型生成的回复之间,是互补关系,两者组合才能真正达到提升

作者还使用案例来分析了该方案生效的可能原因:大模型直接生成一个答案,很大程度拉近了检索词和文档之间在语义空间上的相似,因为本质上两者都是回复问题

但是,由于 LLM 存在幻觉问题,其生成的答案可能并不准确,如果 LLM 生成的关键信息出现错误的话,那么这个错误很可能会导致最终检索结果的错误。

总之,该方案简单易行,有好处也有坏处,还是需要根据具体的场景来使用。

总结分析

这里参考 微软新文query2doc:用大模型做query检索拓展 的总结

Query2doc 的思路很简单,但其背后做的实验和分析很有价值,在现实应用中也很有意义,所以单独把这篇文章进行了分享。然而在现实中,仍旧有很多细节问题还需要进一步考虑,我还没完全想好,不过应该是逃不开的:

  • 现实场景下的召回相似度应该如何计算,尤其是向量相似度,这里需要很多的数据支撑。
  • 召回后的下一步,仍旧依赖相对完善的精排模块,也需要考虑类似的匹配机制,否则即使召回层有了召回,排序层面也会被排到后面去。
  • 大模型本身的幻觉问题,会对召回带来很大的影响,该问题对召回还是有影响的,需要考虑如何尽可能剔除或者缓解。
  • 性能问题,依赖大模型是能够有所提升,但是多一次的大模型的请求,无疑让整体耗时有了很大的影响。(这点在论文中也有提及)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1618521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(5)步态识别论文研读——GaitDAN:基于对抗域适应的跨视角步态识别

GaitDAN: Cross-view Gait Recognition via Adversarial Domain Adaptation | IEEE Journals & Magazine | IEEE Xplore GaitDAN: Cross-view Gait Recognition via Adversarial Domain Adaptation 基于对抗与适应 摘要:视角变化导致步态外观存在显着差异。因…

虚假新闻检测——Adapting Fake News Detection to the Era of Large Language Models

论文地址:https://arxiv.org/abs/2311.04917 1.概论 尽管大量的研究致力于虚假新闻检测,这些研究普遍存在两大局限性:其一,它们往往默认所有新闻文本均出自人类之手,忽略了机器深度改写乃至生成的真实新闻日益增长的现…

stabel-TTS

文章目录 model arch model arch github测试网页 text encoder 换成DiT结构;decoder 用flow结构,text 到mel的时长对齐,使用MAS,和Glow-TTS的结构很像【encoder从transformer变成了diffusion】

初识C++ · 类和对象(中)(2)

前言:上篇文章已经介绍了6个默认成员函数中的3个函数,分别是构造函数,析构函数,拷贝构造函数,本文介绍的是后三个,赋值运算符重载,const成员函数,取地址操纵符重载。 目录​​​​​…

【Mysql】用frm和ibd文件恢复mysql表数据

问题 总是遇到mysql服务意外断开之后导致mysql服务无法正常运行的情况,使用Navicat工具查看能够看到里面的库和表,但是无法获取数据记录,提示数据表不存在。 这里记录一下用frm文件和ibd文件手动恢复数据表的过程。 思路 1、frm文件&…

371D - Vessels

思路&#xff1a;用并查集维护&#xff0c;如果当前容器没有满&#xff0c;就指向自己&#xff0c;否则指向下一个容器。 这样就可以快速 find 到下一个没有满的容器&#xff0c;从而模拟询问 1。 代码&#xff1a; void solve(){int n;cin >> n;vector<int>p(n …

刷题之Leetcode242题(超级详细)

242.有效的字母异位词 力扣题目链接(opens new window)https://leetcode.cn/problems/valid-anagram/ 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true 示例 2…

运维想要不背锅,职责与注意事项,你得仔细看看!

在IT领域&#xff0c;运维人员常常面临着“背锅”的情况。当系统出现故障、服务中断或性能下降时&#xff0c;运维人员往往成为首要责任人。然而&#xff0c;真正的问题并不仅仅是“背锅”&#xff0c;而是在问题发生后如何合理应对和解决。在进行IT运维管理时&#xff0c;我们…

(七)小案例银行家应用程序-申请贷款-some方法和every方法

some方法 ● 我们先回顾一下includes方法 console.log(movements.includes(-130));只要数组中存在-130这个值&#xff0c;就会返回true&#xff0c;否则就会返回flase ● 而some方法只要达成某一个条件就会返回true&#xff0c;否则就返回flase const someMethod movement…

4.23学习总结

一.NIO(一) (一).简介: NIO 是 Java SE 1.4 引入的一组新的 I/O 相关的 API&#xff0c;它提供了非阻塞式 I/O、选择器、通道、缓冲区等新的概念和机制。相比与传统的 I/O 多出的 N 不是单纯的 New&#xff0c;更多的是代表了 Non-blocking 非阻塞&#xff0c;NIO具有更高的并…

ABeam×StartUp丨蓝因机器人访问ABeam旗下德硕管理咨询(深圳)新创部门,展开合作交流

近日&#xff0c;深圳蓝因机器人科技有限公司&#xff08;以下简称“蓝因机器人”&#xff09;创始人陈卜铭先生来访ABeam旗下德硕管理咨询&#xff08;深圳&#xff09;有限公司&#xff08;以下简称“ABeam-SZ”&#xff09;&#xff0c;与新创部门展开合作交流。 交流中&am…

测试 mybatis 是否生效【具有增删改查的功能】

一、 1.1按 anl enter 1.2 注意点&#xff1a; test 下 与 上面的名字需保持一致 测试上面的&#xff0c;路径需保持一致&#xff0c;不一致&#xff0c;后期可能会报错。不是相同目录可能会找不到启动类 1.3 写测试 1.4.1 【先】 添加插件 【一键调用一个对象的所有的se…

C++类和对象:赋值重载,const成员,取地址及const取地址操作符重载

文章目录 1.赋值运算符重载1.1运算符重载1.2 赋值运算符重载1.3 前置和后置重载 2.日期类的实现3. const成员函数4 取地址及const取地址操作符重载 上文介绍了前三个默认成员函数&#xff0c;本文会介绍剩下三个&#xff0c; 赋值重载会重点展开。 1.赋值运算符重载 1.1运算符…

双非一战逆天改命,上岸Top3!

这个系列会邀请上岸学长学姐进行经验分享~今天经验分享的同学同样是小马哥上海交大819的全程班学员&#xff0c;双非逆袭上岸&#xff0c;非常厉害&#xff01; 01-前言 个人介绍&#xff1a;本人就读于江苏某双非&#xff0c;绩点3.2&#xff0c;本科期间仅校赛级别奖项。四…

JavaSE内部类

内部类概述 1.内部类的基础 内部类的分类&#xff1a;实例化内部类&#xff0c;静态内部类&#xff0c;局部内部类和匿名内部类 public class OutClass {// 成员位置定义&#xff1a;未被static修饰 --->实例内部类public class InnerClass1{}// 成员位置定义&#xff1a;被…

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南 由北京海特伟业任洪卓发布于2024年4月23日 随着“互联网”被提升为国家战略&#xff0c;传统行业与互联网的深度融合正在如火如荼地展开。在这一大背景下&#xff0c;海特伟业紧跟时代步伐&#xff0c;凭借其深厚…

如何在PostgreSQL中跟踪和分析查询日志,以便于排查性能瓶颈?

文章目录 启用查询日志分析查询日志1. 查找执行时间长的查询2. 分析资源消耗3. 使用pgBadger分析4. 优化查询 示例代码结论 在PostgreSQL中&#xff0c;跟踪和分析查询日志是排查性能瓶颈的重要步骤。通过查看和分析查询日志&#xff0c;我们可以了解哪些查询在执行时遇到了问题…

17.Nacos与Eureka区别

Nacos会将服务的提供者分为临时实例和非临时实例。默认为临时实例。 临时实例跟eureka一样&#xff0c;会向注册中心报告心跳监测自己是否还活着。如果不正常了nacos会剔除临时实例。&#xff08;捡来的孩子&#xff09; 非临时实例&#xff0c;nacos会主动询问服务提供者是否…

232 基于matlab的MIMO雷达模型下一种子空间谱估计方法

基于matlab的MIMO雷达模型下一种子空间谱估计方法&#xff0c;采用过估计的方法&#xff0c;避免了信源数估计的问题&#xff0c;对数据协方差矩阵进行变换&#xff0c;构造信号子空间投影矩阵和噪声子空间投影矩阵&#xff0c;不需要像经典的MUSIC一样对其进行特征分解&#x…

BBS前后端混合项目--03

展示 static/bootstrp # bootstrap.min.css /*!* Bootstrap v3.4.1 (https://getbootstrap.com/)* Copyright 2011-2019 Twitter, Inc.* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)*//*! normalize.css v3.0.3 | MIT License | github.com/n…