个人技术分享

论文:Query Rewriting in Retrieval-Augmented Large Language Models
⭐⭐⭐⭐
EMNLP 2023
Code: github.com/xbmxb/RAG-query-rewriting

一、论文速读

如下是一个常见的 RAG pipeline:

RAG pipeline

但这存在一个缺点:input text 和需要 query 的 knowledge 之间不可避免地会存在一个 gap

本文提出:在将 query 输入给 retriever 之前,增加一个 query rewrite 步骤来弥补这个 gap

增加 query rewrite

这样,就把之前 RAG 的 retrieve-then-read 改为了 Rewrite-Retrieve-Read 的框架。

同时,根据 rewriter 的技术选型,这里又分成了两种:

  • 将 LLM 作为 query rewriter:由于 LLM 往往是不可训练的(比如 ChatGPT),所以 LLM 可以视作一个 black-box,由它来执行 query rewrite
  • 可训练的 rewrite-retrieve-read:将一个小的 LM 作为 query rewriter,同时根据 reader 的 output 是否 correct 或者 hit 来作为对 rewriter 的反馈,进而对 query rewriter 做强化学习来训练 rewriter

如下图所示:

三种pipeline

二、实验结果

实验结果

可以看到,无论将 frozen LLM 还是 trainable LM 作为 rewriter,都可以改进 RAG 的效果。

论文也给出了使用不同方法时的 prompt:

prompt

三、总结与分析

本文提出了使用 query rewrite 来改进 RAG 的 pipeline 来提高表现,同时给出了一个可训练的 rewriter 的训练思路。

同时,本文的研究还存在以下限制:

  • 在下游任务上,仍然需要一个 generalization 和 specialization 的 trade-off。因为目前额外增加了一个训练过程,让该方法相比于 in-context learning 的 scalability 降低了。
  • 在知识密集型的场景下,使用 web search engine 可能不如经过过滤的 knowledge base 更加专业好用。