简介
转载于:如何利用查询改写技术改善RAG效果。
在检索增强型生成(RAG)应用的背景下,检索器可能使用单一的嵌入模型来同时编码查询和文档,或者为每个部分采用不同的模型。此外,用户的原始查询可能存在措辞不准确和缺乏语义信息的问题。因此,将用户查询的语义空间与文档的语义空间对齐至关重要,主要有两种基本的技术(包括查询改写和嵌入转换)可以实现这种对齐,本文主要介绍查询改写技术。
查询改写是一种用于对齐查询和文档的语义的基本方法。例如Query2Doc和ITER-RETGEN等方法利用大语言模型(LLM)将原始查询与额外指导信息相结合,创建一个伪文档。HyDE使用文本提示构造查询向量,生成捕获关键模式的“假设”文档。RRR提出了一个框架,颠倒了传统的检索和阅读顺序,专注于查询改写。STEP-BACKPROMPTING使LLM能够基于高层次概念进行抽象推理和检索。此外,多查询检索方法利用LLM同时生成和执行多个搜索查询,这对于解决具有多个子问题的复杂问题特别有利。
以下是对这些方法的详细介绍。
Query2Doc
直接用大语言模型结合few-shot,生成伪文本进行检索。

ITER-RETGEN
先走正常流程进行检索增强生成,然后将前一次生成的结果+问题拼接,再去检索相关文档,继续生成新的结果;这个过程重复多次之后得到最终结果。

HyDE
该方法通过使用大型语言模型来创建假设性答案,并将这些答案嵌入空间以检索类似的真实文档。这种方法更注重答案之间而非查询与答案间的嵌入相似性。尽管这种方法有其创新之处,但在处理不熟悉的主题时,可能会产生不准确的结果。
llamaindex案例

Rewrite-Retrieve-Read
该文章首先使用LLM对query进行改写,再进行检索和回答生成,而不是直接对原始的query进行内容检索和答案生成。

直接使用prompt对原始的问题进行改写:
1 | """Provide a better search query for \ |
Step-Back Prompt
该方法使用LLM生成一个“回退”的更加抽象的问题,它既可以与检索一起使用,也可以独立使用。在进行检索时,同时使用“回退”的抽象问题和原始问题进行检索,然后使用两者的结果来确定语言模型的响应。

采用简单的prompt+in-context learning来实现抽象问题提炼:
1 | You are an expert at world knowledge. |
参考资料
- Ma, Xinbei, et al. “Query Rewriting for Retrieval-Augmented Large Language Models.” arXiv preprint arXiv:2305.14283 (2023).
- Zheng, Huaixiu Steven, et al. “Take a step back: evoking reasoning via abstraction in large language models.” arXiv preprint arXiv:2310.06117 (2023).
- Wang, Liang, Nan Yang, and Furu Wei. “Query2doc: Query Expansion with Large Language Models.” arXiv preprint arXiv:2303.07678 (2023).
- Langchain Blog: query transformations
- Shao, Zhihong, et al. “Enhancing Retrieval-Augmented Large Language Models with Iterative Retrieval-Generation Synergy.” arXiv preprint arXiv:2305.15294 (2023).
- Gao, Luyu, et al. “Precise zero-shot dense retrieval without relevance labels.” arXiv preprint arXiv:2212.10496 (2022).
- Advanced RAG — Improving retrieval using Hypothetical Document Embeddings(HyDE)