问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

提升RAG系统效果:揭秘Rewrite技术及其关键优化策略,提高召回率与精确度

创作时间:
作者:
@小白创作中心

提升RAG系统效果:揭秘Rewrite技术及其关键优化策略,提高召回率与精确度

引用
1
来源
1.
https://53ai.com/news/RAG/2024081119702.html

在RAG(检索增强生成)系统中,查询重写(Rewrite)技术是提升系统效果的关键优化策略之一。通过自动转换查询问题,查询重写能够更好地表示搜索者的意图,从而提高召回率与精确度。本文将详细介绍五种常用的Rewrite方法,包括HyDE、Rewrite-Retrieve-Read、Step-Back Prompting、Query2Doc和ITER-RETGEN,并通过具体案例和代码示例展示这些方法的实际应用效果。

什么是查询重写?

查询重写是一种预检索方法,其主要目的是提高召回率和精确度。在RAG系统中,查询重写技术可以有效地解决用户原始查询中存在的措辞不准确或语义信息缺失等问题。通过使用户查询的语义空间与文档的语义空间保持一致,查询重写能够显著提升系统的整体性能。

常用的查询重写方法

1. HyDE(假设文档嵌入)

HyDE(Hypothetical Document Embedding)是一种通过生成假设性文档嵌入来优化检索准确性的方法。其主要步骤包括:

  1. 生成假设文档:使用大语言模型(如ChatGPT)生成一个与用户查询相关的假设文档。
  2. 嵌入假设文档:将生成的假设文档转化为嵌入向量,作为查询的表示。
  3. 与实际文档对比:使用HyDE生成的嵌入向量,与数据库中的文档嵌入向量进行对比和匹配,从而找到最相关的文档。

下面是一个HyDE的代码实现示例:

import pandas as pd
from tqdm import tqdm
import os
from gomate.modules.generator.llm import GLMChat
from gomate.modules.retrieval.dense_retriever import DenseRetriever, DenseRetrieverConfig
from gomate.modules.rewriter.base import BaseRewriter
from gomate.modules.rewriter.promptor import Promptor
from gomate.modules.document.common_parser import CommonParser

class HydeRewriter(BaseRewriter):
    def __init__(self, promptor, generator, retriever):
        self.promptor = promptor
        self.generator = generator
        self.retriever = retriever

    def prompt(self, query):
        return self.promptor.build_prompt(query)

    def rewrite(self, query):
        prompt = self.promptor.build_prompt(query)
        hypothesis_document, _ = self.generator.chat(prompt, llm_only=True)
        return hypothesis_document

    def retrieve(self, query, top_k=5):
        hypothesis_document = self.rewrite(query)
        hits = self.retriever.retrieve(hypothesis_document, top_k=top_k)
        return {'hypothesis_document': hypothesis_document, 'retrieve_result': hits}

使用HyDE的优势:

  • 提高召回率:通过生成假设文档并嵌入向量空间,可以更有效地覆盖查询可能相关的文档,从而提高召回率。
  • 增强匹配精度:HyDE利用生成的文本来精细化查询表达,能更准确地匹配数据库中的相关文档。

2. Rewrite-Retrieve-Read(重写-检索-读取)

Rewrite-Retrieve-Read是一种多阶段处理方法,通过重写查询、检索相关内容和读取分析结果三个步骤,提高搜索的精度和相关性。

Rewrite-Retrieve-Read 方法的优势:

  • 提高查询准确性:通过重写步骤,能够优化原始查询,使其更易于理解和检索。
  • 增强搜索相关性:检索过程基于重写后的更精准查询,提升了与用户意图匹配的相关性。
  • 深度信息提取:通过阅读和分析步骤,系统可以提供更详细和有用的回答,而不是简单地返回检索结果。

3. Step-Back Prompting(后退提示)

Step-Back Prompting是一种用于提高生成式模型回答质量的策略,尤其在面对复杂或多步骤问题时效果显著。其主要步骤包括:

  1. Initial Prompting(初步提示):直接回答用户的问题。
  2. Step-Back Review(后退审查):对当前生成结果进行审查或调整。
  3. Refine and Finalize(优化与定稿):根据审查反馈,对原回答进行优化。

Step-Back Prompting 方法的优势:

  • 提高回答的完整性:通过后退审查,确保回答覆盖所有重要方面。
  • 增强准确性:在生成后反思和调整,减少错误和遗漏。
  • 提升内容深度:使回答更为详尽和有针对性,特别适合复杂或多步骤的任务。

4. Query2Doc(查询2Doc)

Query2Doc是一种将用户的简短查询扩展为一个更详细的文档,以提高检索系统对复杂查询的理解和处理能力的技术方法。

Query2Doc 方法的优势:

  • 提高检索效果:通过将简单查询扩展为详细文档,系统能够识别并检索到更多相关信息,提升查询的召回率和精确度。
  • 丰富内容语境:扩展查询有助于涵盖更多相关主题和关键词,增加找到有用信息的几率。
  • 适用于复杂查询:尤其适用于那些需要综合多方面信息的复杂查询,帮助用户获取更全面的答案。

5. ITER-RETGEN(迭代生成器)

ITER-RETGEN是一种通过多次迭代和优化生成高质量内容的技术方法,特别适用于复杂的生成任务。

ITER-RETGEN 方法的优势:

  • 高质量输出:通过多次迭代和优化,最终生成的内容更为精确、全面。
  • 动态调整:能够根据每次迭代的反馈实时调整和优化生成策略,确保输出结果逐步接近理想状态。
  • 适用复杂任务:特别适用于那些需要深入分析、多角度探讨的复杂生成任务。

总结

查询重写技术在RAG系统中扮演着至关重要的角色。通过优化用户查询,以更好地与文档空间对接,这些技术能够显著提升信息检索的准确性和相关性,从而提高大语言模型(LLMs)生成响应的质量。通过更精准的查询重写,系统可以更有效地从大量数据中提取相关信息,生成更加准确和相关的答案,从而提升用户体验和系统性能。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号