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

本文主要是介绍【IR 论文】Query2doc — 使用 LLM 做 Query Expansion 来提高信息检索能力,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

这篇关于【IR 论文】Query2doc — 使用 LLM 做 Query Expansion 来提高信息检索能力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

java中XML的使用全过程

《java中XML的使用全过程》:本文主要介绍java中XML的使用全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录什么是XML特点XML作用XML的编写语法基本语法特殊字符编写约束XML的书写格式DTD文档schema文档解析XML的方法​​DOM解析XM

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

使用Nginx配置文件服务器方式

《使用Nginx配置文件服务器方式》:本文主要介绍使用Nginx配置文件服务器方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 为什么选择 Nginx 作为文件服务器?2. 环境准备3. 配置 Nginx 文件服务器4. 将文件放入服务器目录5. 启动 N

使用nohup和--remove-source-files在后台运行rsync并记录日志方式

《使用nohup和--remove-source-files在后台运行rsync并记录日志方式》:本文主要介绍使用nohup和--remove-source-files在后台运行rsync并记录日... 目录一、什么是 --remove-source-files?二、示例命令三、命令详解1. nohup2.

Qt之QMessageBox的具体使用

《Qt之QMessageBox的具体使用》本文介绍Qt中QMessageBox类的使用,用于弹出提示、警告、错误等模态对话框,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.简单介绍3.常见函数4.按钮类型(QMessage::StandardButton)5.分步骤实现弹窗6.总结1.引言

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Qt中Qfile类的使用

《Qt中Qfile类的使用》很多应用程序都具备操作文件的能力,包括对文件进行写入和读取,创建和删除文件,本文主要介绍了Qt中Qfile类的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.QFile文件操作3.演示示例3.1实验一3.2实验二【演示 QFile 读写二进制文件的过程】4.

spring security 超详细使用教程及如何接入springboot、前后端分离

《springsecurity超详细使用教程及如何接入springboot、前后端分离》SpringSecurity是一个强大且可扩展的框架,用于保护Java应用程序,尤其是基于Spring的应用... 目录1、准备工作1.1 引入依赖1.2 用户认证的配置1.3 基本的配置1.4 常用配置2、加密1. 密

WinForms中主要控件的详细使用教程

《WinForms中主要控件的详细使用教程》WinForms(WindowsForms)是Microsoft提供的用于构建Windows桌面应用程序的框架,它提供了丰富的控件集合,可以满足各种UI设计... 目录一、基础控件1. Button (按钮)2. Label (标签)3. TextBox (文本框

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue