微信扫码
与创始人交个朋友
我要投稿
关于RAG的优化,前面我们讲过一篇是Rerank的优化,《揭开RAG重排序(Rerankers)和两阶段检索(Two-Stage Retrieval)的神秘面纱》,Rerank优化的目的是通过向量检索返回更多的top K结果,以提高召回率和精确度。
今天这篇文章采用另一种优化策略Rewrite,在RAG的链路中,关注点向上移动到重点关注问题本身,查询重写会自动转换查询问题,以便更好地表示搜索者的意图。
查询Rewrite重写策略通常有两个目的:提高召回率和提高精确度。
在检索增强生成(RAG)中,我们经常会遇到用户原始查询的问题,例如措辞不准确或语义信息缺失。例如,像“2020 年的 NBA 冠军是洛杉矶湖人队!告诉我什么是langchain框架?“可能会从直接搜索的知识库中产生错误或无法回答的响应。
因此,必须使用户查询的语义空间与文档的语义空间保持一致。查询重写技术可以有效地解决这个问题。它在 RAG 中的作用如下图所示。
从位置角度来看,查询重写是一种预检索方法。请注意,此图大致说明了查询重写在 RAG 中的位置。
要对问题进行Rewrite,最简单的方法是利用大语言模型,如ChatGPT。通过生成式AI技术,模型可以重新组织和表达问题,从而使其更容易被理解和处理。
Prompt示例:
“请将以下问题进行Rewrite,使其更加简洁明了:‘在产品促销期间,如何最大化用户参与度?’”
ChatGPT可能返回的Rewrite结果:
“如何在促销期间最大化用户参与?”
这种重写不仅让问题更简洁,还可能提高模型对问题的理解能力,进而产生更为精准的回答。
Rewrite重写是对齐查询和文档语义的关键技术。有以下几种方法:
1. HyDE(假设文档嵌入)
HyDE(假设文档嵌入,Hypothetical Document Embedding)是一种方法,用于生成一个假设性的文档嵌入,这个嵌入基于用户查询所生成的假设回答。这个方法通过生成与用户查询相关的文本,再将其嵌入到向量空间中,以便更好地匹配查询和文档,从而提高检索的准确性。
论文:https://arxiv.org/pdf/2212.10496
项目:https://github.com/texttron/hyde
首先生成一个问题的答案对于给定一个query,将由InstructGPT生成一个能回答该query的假设文档,即a hypothetical document。
使用生成的答案进行检索:使用无监督的稠密检索模型(Contriever)把该文档表示为稠密向量。
最后基于最近邻从语料库中找到相似的文档,作为支撑信息然后进行问答。
假设我们有一个用户查询:“如何提高电商直播的观众参与度?” 我们可以利用HyDE方法进行以下步骤:
生成假设文档:使用大语言模型,如ChatGPT,生成一个与该查询相关的假设文档。
Prompt示例:“生成一个简短的文本,描述几种提高电商直播观众参与度的方法。”
模型生成的假设文档:“要提高电商直播的观众参与度,可以通过互动问答、限时优惠和实时抽奖等方式。互动问答可以让观众感觉到参与感,限时优惠则能激发他们的购买欲望,而实时抽奖可以增加直播的趣味性。”
嵌入假设文档:将生成的假设文档转化为嵌入向量,作为查询的表示。
与实际文档对比:使用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(重写-检索-读取)是一种用于增强问答系统或搜索引擎的多阶段处理方法。该方法通过首先重写查询,再根据重写后的查询进行检索,最后对检索到的结果进行深入分析和呈现,从而提高搜索的精度和相关性。
论文:https://aclanthology.org/2023.emnlp-main.322.pdf
项目:https://github.com/xbmxb/RAG-query-rewriting
上图,从左到右,我们展示了(a)标准的retrieve-then-read方法,(b)LLM 作为我们的 rewrite-retrieve-read管道的查询重写器,以及(c)带有可训练重写器的管道。
假设用户查询:“如何提高电商直播的观看人数?”
首先,利用大语言模型对用户的查询进行重写,以便使查询更加清晰、简洁或更具可搜索性。
Prompt示例:“请将以下问题重写为更具针对性的问题:‘如何提高电商直播的观看人数?’”
模型生成的重写查询:“有哪些有效的策略可以增加电商直播的观众数量?”
通过这种重写,模型可能更好地理解用户的意图,从而提升检索的准确性。
使用重写后的查询在数据库或搜索引擎中进行检索,以找到与问题最相关的文档或信息。
检索结果示例:
文档1:文章标题“通过社交媒体推广提升直播观众数量的五种方法”文档2:指南“如何优化电商直播时间表以吸引更多观众”文档3:研究报告“影响电商直播观看人数的关键因素”
这些文档都是根据重写后的查询精确匹配的内容。
对检索到的文档进行读取和分析,提取出最有价值的信息,以便生成最终的回答或呈现给用户的结果。
阅读和分析结果示例:
方法1:利用社交媒体平台提前预告直播活动,吸引粉丝关注。方法2:选择黄金时段进行直播,以最大化潜在观众的覆盖面。方法3:在直播中引入互动环节,如限时优惠和抽奖,提升参与度。
提高查询准确性:通过重写步骤,能够优化原始查询,使其更易于理解和检索。
增强搜索相关性:检索过程基于重写后的更精准查询,提升了与用户意图匹配的相关性。
深度信息提取:通过阅读和分析步骤,系统可以提供更详细和有用的回答,而不是简单地返回检索结果。
Rewrite-Retrieve-Read 方法通过多阶段处理,使得搜索引擎和问答系统能够更加智能和灵活地应对复杂查询。这种方法在需要高精准度和深入理解的搜索场景中尤为有效,特别适用于电商、客户支持和知识管理等领域。
3. Step-Back Prompting(后退提示)
Step-Back Prompting(后退提示)是一种用于提高生成式模型回答质量的策略,尤其在面对复杂或多步骤问题时效果显著。与常规的生成流程不同,Step-Back Prompting 会在每一步生成后“后退”一步,对当前生成结果进行审查或调整,以确保最终输出的准确性和相关性。
论文:https://arxiv.org/abs/2310.06117
假设用户查询:“如何设计一个有效的电商直播营销策略?”
首先,生成初步回答,直接回答用户的问题。
初始Prompt:“请提供一个设计电商直播营销策略的详细步骤。”
初步生成的回答:
a. 目标设定:明确直播的主要目标,例如提高销售量、增加品牌曝光度。b. 受众分析:了解目标观众的需求和偏好。c. 内容策划:规划直播内容,包含产品展示、互动环节和优惠活动。d. 平台选择:选择合适的直播平台,如淘宝直播、抖音等。e. 推广策略:制定社交媒体推广计划,以吸引更多观众。f. 后期分析:在直播结束后,分析数据并优化策略。
Step-Back Review(后退审查)
生成初步答案后,利用Step-Back Prompting 技术,进行反思或进一步审查。
后退Prompt:“请检查以上步骤是否完整,并说明是否有遗漏或可以优化的部分。”
审查后的反馈:“步骤总体上是完整的,但可以加强推广策略部分。例如,考虑使用个性化推送通知,提前告知粉丝直播的详细信息。此外,受众分析可以更深入,通过数据分析工具获取更精确的用户画像。”
根据审查反馈,对原回答进行优化,确保内容更为全面和实用。
优化后的最终回答:
a. 目标设定:明确直播的目标,包括销售增长、品牌曝光、粉丝增长等。b. 深入受众分析:利用数据分析工具获取目标观众的详细画像,以定制化内容吸引他们。c. 内容策划:制定包含产品展示、互动问答、限时优惠等的直播内容计划。d. 平台选择:根据目标观众的行为习惯,选择最合适的直播平台。e. 推广策略:增加个性化推送通知,提前告知粉丝直播时间和内容,扩大覆盖面。f. 后期分析:直播后进行详细的数据分析,识别成功与不足之处,为下次直播优化策略。
提高回答的完整性:通过后退审查,确保回答覆盖所有重要方面。
增强准确性:在生成后反思和调整,减少错误和遗漏。
提升内容深度:使回答更为详尽和有针对性,特别适合复杂或多步骤的任务。
Step-Back Prompting 是一种有效的提示策略,通过在生成过程中插入反思和调整步骤,可以显著提高回答的质量和实用性。它尤其适用于复杂查询和需要多步骤分析的场景,如策略设计、问题解决和详细指南的生成。
4. Query2Doc(查询2Doc)
Query2Doc(查询2Doc)是一种用于增强信息检索效果的技术方法,尤其适用于从大规模文档库中找到与用户查询最相关的文档。这个方法通过将用户的查询“扩展”成一个更详细的文档,从而提高检索系统对复杂查询的理解和处理能力。
论文:https://arxiv.org/abs/2303.07678
假设用户的查询是:“如何提高电商直播的转化率?”
首先,将用户的简短查询扩展为一个更详细的描述性文档,以包含更多潜在相关的关键词和概念。
原始查询:“如何提高电商直播的转化率?”
扩展后的文档(Query2Doc):
“电商直播是目前非常流行的在线销售方式,提高直播转化率是许多商家的核心目标。转化率的提升可以通过多种策略来实现,包括优化直播内容、增强用户互动、提供吸引力更强的促销活动,以及使用数据驱动的分析工具来优化用户体验。此外,选择适合的直播平台和时间、精心设计的产品展示、精准的用户定位等因素也对转化率有显著影响。本文将深入探讨这些策略的应用及其对直播转化率的具体影响。”
利用扩展后的文档作为查询输入,系统将检索到一组更为相关的文档,这些文档包含用户问题的多方面信息。
检索步骤:将扩展后的Query2Doc输入到检索系统中,搜索与其最相关的文档,系统返回一系列包含详细信息和解决方案的文档。
系统根据扩展查询找到的文档,可以进一步过滤或排序,确保返回的内容更加贴合用户原始需求。
优化后的结果:通过Query2Doc扩展,检索系统不仅返回直接与“转化率提升”相关的文档,还包含有关电商直播策略、用户互动方法、促销设计等方面的深入分析文章,帮助用户全面了解并实施有效的转化率提升措施。
提高检索效果:通过将简单查询扩展为详细文档,系统能够识别并检索到更多相关信息,提升查询的召回率和精确度。
丰富内容语境:扩展查询有助于涵盖更多相关主题和关键词,增加找到有用信息的几率。
适用于复杂查询:尤其适用于那些需要综合多方面信息的复杂查询,帮助用户获取更全面的答案。
Query2Doc 是一种有效的查询扩展方法,通过将用户的简单查询转化为更具语境和内容丰富的“文档”,可以显著提升信息检索系统的效果。这种方法特别适用于需要从海量数据中筛选出与复杂问题相关的内容,从而帮助用户找到更有价值和深度的信息。
5. ITER-RETGEN(国际热核聚变实验堆 - 迭代生成器)
ITER-RETGEN(国际热核聚变实验堆 - 迭代生成器)是一种从研究项目的启发中借鉴的技术方法,应用于机器学习和自然语言处理领域。这个方法利用类似于聚变反应的“迭代生成”过程,通过不断生成、评估和优化,最终产生高质量的输出。该方法在复杂的生成任务中表现尤为出色,特别是在需要多次迭代以达到最优结果的情况下。
论文:https://arxiv.org/pdf/2305.15294
假设我们在进行一个复杂的内容生成任务,如生成一篇关于“未来能源解决方案”的详细报告。
初始生成:首先,使用模型生成一个初步的草稿。这一草稿包含了基本的结构和主要观点,但可能在内容深度和准确性上还不够完善。
初始草稿:“未来的能源解决方案可能会包括可再生能源如太阳能、风能,以及正在研究的核聚变技术。这些技术有望在未来几十年内替代传统的化石燃料,成为主要的能源来源。”
评估:对初步生成的草稿进行评估,找出不足之处。例如,草稿中的核聚变部分内容过于简略,没有提到当前研究的进展。
反馈:将这些不足之处反馈给生成模型,指导模型进行进一步的内容扩展和修正。
优化生成:基于反馈信息,模型重新生成内容,补充之前的不足。例如,加入关于国际热核聚变实验堆(ITER)的最新研究进展及其对未来能源的潜在影响。
优化后的草稿:“未来的能源解决方案将主要依赖于可再生能源如太阳能和风能的广泛应用。然而,核聚变技术也正在逐步进入实用化阶段,国际热核聚变实验堆(ITER)作为目前世界上最大规模的核聚变研究项目,正在探索如何通过聚变反应实现稳定的能源输出。ITER的成功将标志着人类能源发展史上的一次重大突破,有望彻底改变全球能源格局。”
持续优化:这个过程可以进行多次迭代,每次生成新的版本并评估其质量,直到生成的内容达到预期的质量标准。
最终稿件:经过多次迭代,生成了一篇详细且准确的报告,涵盖了未来能源技术的各个方面,并特别强调了核聚变技术的重要性。
高质量输出:通过多次迭代和优化,最终生成的内容更为精确、全面。
动态调整:能够根据每次迭代的反馈实时调整和优化生成策略,确保输出结果逐步接近理想状态。
适用复杂任务:特别适用于那些需要深入分析、多角度探讨的复杂生成任务。
ITER-RETGEN 是一种基于迭代生成的技术方法,通过模拟核聚变反应的持续优化过程,帮助生成高质量、精细化的内容。这种方法特别适用于复杂生成任务,能够有效地在多次迭代中不断提高生成内容的质量,最终达到最优结果。
总结
总体而言,该文档探讨了多种查询重写技术,这些技术旨在提升 RAG(检索增强生成)系统的整体效果。
通过优化用户查询,以更好地与文档空间对接,这些技术能够显著提升信息检索的准确性和相关性,从而提高大语言模型(LLMs)生成响应的质量。
通过更精准的查询重写,系统可以更有效地从大量数据中提取相关信息,生成更加准确和相关的答案,从而提升用户体验和系统性能。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-11-08
AI改变工作:一天内打造专属于你自己的RAG
2024-11-08
打造自己的RAG解析大模型:(新技能)企业垂类数据标注(一)
2024-11-08
一篇大模型RAG最新综述
2024-11-08
微软GraphRAG 0.4.0&DRIFT图推理搜索更新
2024-11-08
小模型在RAG(Retrieval-Augmented Generation)系统中的应用:提升效率与可扩展性的新路径
2024-11-08
RAG评估:RAGChecker重磅发布!精准诊断RAG系统的全新细粒度框架!
2024-11-07
蚂蚁KAG框架核心功能研读
2024-11-07
为什么它是从PDF中解析数据的最佳工具?PDF文件解析新选择,构建LLM 大模型数据基础
2024-07-18
2024-07-09
2024-07-09
2024-05-05
2024-05-19
2024-07-07
2024-06-20
2024-07-07
2024-07-08
2024-07-09
2024-11-06
2024-11-06
2024-11-05
2024-11-04
2024-10-27
2024-10-25
2024-10-21
2024-10-21