从 RAG 到 Self-RAG —— LLM 的知识增强

Self-RAG讲解 首先,定义图的状态结构,包含问题、生成的回答、是否进行网络搜索以及相关文档列表。表示图的状态。属性:question: 用户问题generation: LLM生成的回答web_search: 是否进行网络搜索documents: 文档列表解释:GraphState:定义了图的状态结构,包括用户问题(question)、生成的回答(generation)、是否进行网络搜索(web_search)和相关文档列表(documents构建图的逻辑流程,包括检索、生成、评分和重写等节点。""" 阅读详情

一、 RAG 及其必要性

1.1 初识 RAG

RAG(Retrieval Augmented Generation, 检索增强生成),即 LLM 在回答问题或生成文本时,先会从大量文档中检索出相关的信息,然后基于这些信息生成回答或文本,从而提高预测质量。RAG 方法使得开发者不必为每一个特定的任务重新训练整个大模型,只需要外挂上知识库,即可为模型提供额外的信息输入,提高其回答的准确性。RAG模型尤其适合知识密集型的任务。

图片

LLM V.S. RAG LLM

在 LLM 已经具备了较强能力的基础上,仍然需要 RAG ,主要有以下几点原因:

幻觉问题:LLM 文本生成的底层原理是基于概率的 token by token 的形式,因此会不可避免地产生“一本正经的胡说八道”的情况。

时效性问题:LLM 的规模越大,大模型训练的成本越高,周期也就越长。那么具有时效性的数据也就无法参与训练,所以也就无法直接回答时效性相关的问题,例如“帮我推荐几部热映的电影?”。

数据安全问题:通用的 LLM 没有企业内部数据和用户数据,那么企业想要在保证安全的前提下使用 LLM,最好的方式就是把数据全部放在本地,企业数据的业务计算全部在本地完成。而在线的大模型仅仅完成一个归纳的功能。

1.2 RAG V.S. SFT

实际上,对于 LLM 存在的上述问题,SFT 是一个最常见最基本的解决办法,也是 LLM 实现应用的基础步骤。那么有必要在多个维度上比较一下两种方法:

RAGSFT
Data动态数据。RAG 不断查询外部源,确保信息保持最新,而无需频繁的模型重新训练。(相对)静态数据,并且在动态数据场景中可能很快就会过时。SFT 也不能保证记住这些知识。
External KnowledgeRAG 擅长利用外部资源。通过在生成响应之前从知识源检索相关信息来增强 LLM 能力。它非常适合文档或其他结构化/非结构化数据库。SFT 可以对 LLM 进行微调以对齐预训练学到的外部知识,但对于频繁更改的数据源来说可能不太实用。
Model CustomizationRAG 主要关注信息检索,擅长整合外部知识,但可能无法完全定制模型的行为或写作风格。SFT 允许根据特定的语气或术语调整LLM 的行为、写作风格或特定领域的知识。
Reducing HallucinationsRAG 本质上不太容易产生幻觉,因为每个回答都建立在检索到的证据上。SFT 可以通过将模型基于特定领域的训练数据来帮助减少幻觉。但当面对不熟悉的输入时,它仍然可能产生幻觉。
TransparencyRAG 系统通过将响应生成分解为不同的阶段来提供透明度,提供对数据检索的匹配度以提高对输出的信任。SFT 就像一个黑匣子,使得响应背后的推理更加不透明。
Technical ExpertiseRAG 需要高效的检索策略和大型数据库相关技术。另外还需要保持外部数据源集成以及数据更新。SFT 需要准备和整理高质量的训练数据集、定义微调目标以及相应的计算资源。

当然这两种方法并非非此即彼的,合理且必要的方式是结合业务需要与两种方法的优点,合理使用两种方法。

图片

LLM, SFT, RAG 之间的关系

通过以上讨论,也能总结出 RAG 具有一下优点:

可扩展性 (Scalability):减少模型大小和训练成本,并允许轻松扩展知识

准确性 (Accuracy):模型基于事实并减少幻觉

可控性 (Controllability):允许更新或定制知识

可解释性 (Interpretability):检索到的项目作为模型预测中来源的参考

多功能性 (Versatility):RAG 可以针对多种任务进行微调和定制,包括QA、文本摘要、对话系统等。

二、RAG 典型方法及案例

上节简要介绍了 RAG 及其基本特点,本节将详细介绍 RAG 的实现及其应用。

2.1 RAG 典型实现方法

概括来说,RAG 的实现主要包括三个主要步骤:数据索引、检索和生成。如下图所示:

图片

2.1.1 数据索引的构建

该部分主要功能是将原始数据处理成为便于检索的格式(通常为embedding),该过程又可以进一步分为:

Step1: 数据提取

即从原始数据到便于处理的格式化数据的过程,具体工程包括:

数据获取:获得作为知识库的多种格式的数据,包括PDF、word、markdown以及数据库和API等;

数据清洗:对源数据进行去重、过滤、压缩和格式化等处理;

信息提取:提取重要信息,包括文件名、时间、章节title、图片等信息。

Step 2: 分块(Chunking)

由于文本可能较长,或者仅有部分内容相关的情况下,需要对文本进行分块切分,分块的方式有:

固定大小的分块方式:一般是256/512个tokens,取决于embedding模型的情况,弊端是会损失很多语义。

基于意图的分块方式:

句分割:最简单的是通过句号和换行来做切分,常用的意图包有基于NLP的NLTK和spaCy;

递归分割:通过分而治之的思想,用递归切分到最小单元的一种方式;

特殊分割:用于特殊场景。

常用的工具如 langchain.text_splitter 库中的类CharacterTextSplitter,可以指定分隔符、块大小、重叠和长度函数来拆分文本。

  • 图片

  • Step 3: 向量化(embedding)及创建索引

  • 即将文本、图像、音频和视频等转化为向量矩阵的过程,也就是变成计算机可以理解的格式。常用的工具如 langchain.embeddings.openai.OpenAIEmbeddings 和 langchain.embeddings.huggingface.HuggingFaceEmbeddings 等。

  • 生成 embedding 之后就是创建索引。最常见的即使用 FAISS 库创建向量搜索索引。使用langchain.vectorstores库中的 FAISS 类的from_texts方法,使用文本块和生成的嵌入来构建搜索索引。

  • docsearch = FAISS.from_texts(texts, embeddings)
    
  • 2.1.2 检索(Retrieval)

  • 检索环节是获取有效信息的关键环节。检索优化一般分为下面五部分工作:

  • 元数据过滤:当我们把索引分成许多chunks的时候,检索效率会成为问题。这时候,如果可以通过元数据先进行过滤,就会大大提升效率和相关度。

  • 图关系检索:即引入知识图谱,将实体变成node,把它们之间的关系变成relation,就可以利用知识之间的关系做更准确的回答。特别是针对一些多跳问题,利用图数据索引会让检索的相关度变得更高;

  • 检索技术:检索的主要方式还是这几种:

  • 相似度检索:包括欧氏距离、曼哈顿距离、余弦等;

  • 关键词检索:这是很传统的检索方式,元数据过滤也是一种,还有一种就是先把chunk做摘要,再通过关键词检索找到可能相关的chunk,增加检索效率。

  • SQL检索:更加传统的检索算法。

    • 重排序(Rerank):相关度、匹配度等因素做一些重新调整,得到更符合业务场景的排序。

    • 查询轮换:这是查询检索的一种方式,一般会有几种方式:

    • 子查询:可以在不同的场景中使用各种查询策略,比如可以使用LlamaIndex等框架提供的查询器,采用树查询(从叶子结点,一步步查询,合并),采用向量查询,或者最原始的顺序查询chunks等;

    • HyDE:这是一种抄作业的方式,生成相似的或者更标准的 prompt 模板。

  • 2.1.3 文本生成

  • 文本生成就是将原始 query 和检索得到的文本组合起来输入模型得到结果的过程,本质上就是个 prompt engineer ing 过程,可参考笔者之前的文章

  • NLP(十三):Prompt Engineering 面面观

    https://zhuanlan.zhihu.com/p/632369186

  • 此外还有全流程的框架,如 Langchain 和 LlamaIndex ,都非常简单易用,如:

 from langchain.chat_models import ChatOpenAI
 from langchain.schema.runnable import RunnablePassthrough

 llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
 rag_chain = {"context": retriever, "question": RunnablePassthrough()} | rag_prompt | llm
 rag_chain.invoke("What is Task Decomposition?")
  • 2.2 RAG 典型案例

  • 2.2.1 ChatPDF 及其 复刻版

  • ChatPDF的实现流程如下:

    1. ChatPDF首先读取PDF文件,将其转换为可处理的文本格式,例如txt格式。
    2. 接着,ChatPDF会对提取出来的文本进行清理和标准化,例如去除特殊字符、分段、分句等,以便于后续处理。这一步可以使用自然语言处理技术,如正则表达式等。
    3. ChatPDF使用OpenAI的Embeddings API将每个分段转换为向量,这个向量将对文本中的语义进行编码,以便于与问题的向量进行比较。
    4. 当用户提出问题时,ChatPDF使用OpenAI的Embeddings API将问题转换为一个向量,并与每个分段的向量进行比较,以找到最相似的分段。这个相似度计算可以使用余弦相似度等常见的方法进行。
    5. ChatPDF将找到的最相似的分段与问题作为prompt,调用OpenAI的Completion API,让ChatGPT学习分段内容后,再回答对应的问题。
    6. 最后,ChatPDF会将ChatGPT生成的答案返回给用户,完成一次查询。
  • 图片

  • 另外笔者之前也实现并开源过一个类似的案例,具体可参考

  • NLP(十六):LangChain —— 自由搭建 LLM 的应用程序

    https://zhuanlan.zhihu.com/p/636741983

  • 2.2.2 Baichuan

  • 百川大模型的搜索增强系统融合了多个模块,包括指令意图理解、智能搜索和结果增强等组件。该体系通过深入理解用户指令,精确驱动查询词的搜索,并结合大语言模型技术来优化模型结果生成的可靠性。通过这一系列协同作用,大模型实现了更精确、智能的模型结果回答,通过这种方式减少了模型的幻觉。

  • 图片

  • 2.2.3 Multi-modal retrieval-based LMs

  • RA-CM3 是一个检索增强的多模态模型,其包含了一个信息检索框架来从外部存储库中获取知识,具体来说,作者首先使用预训练的 CLIP 模型来实现一个检索器(retriever),然后使用 CM3 Transformer 架构来构成一个生成器(generator),其中检索器用来辅助模型从外部存储库中搜索有关于当前提示文本中的精确信息,然后将该信息连同文本送入到生成器中进行图像合成,这样设计的模型的准确性就会大大提高。

  • 图片

  • 2.2.4 LeanDojo

  • 这是一个通过检索增强进行数学证明的案例,其中 Lean 是公式数学的编码语言。下图描述了实现过程:

  • 图片

  • 图片

  • 2.3 RAG 的挑战及部分改进方法

  • 尽管 RAG 在很多例子中取得了很好的效果,仍然面临着不少挑战,主要体现在以下方面:

  • 检索效果依赖 embedding 和检索算法,目前可能检索到无关信息,反而对输出有负面影响;

  • 大模型如何利用检索到的信息仍是黑盒的,可能仍存在不准确(甚至生成的文本与检索信息相冲突);

  • 对所有任务都无差别检索 k 个文本片段,效率不高,同时会大大增加模型输入的长度;

  • 无法引用来源,也因此无法精准地查证事实,检索的真实性取决于数据源及检索算法。

  • 针对上述的问题,也逐步发展出一些改进的方法,下面仅举几例:

  • 2.3.1 RAG 结合 SFT:RA-DIT

  • 简单来说,RA-DIT 方法分别对 LLM 和检索器进行微调。更新 LLM 以最大限度地提高在给定检索增强指令的情况下正确答案的概率,同时更新检索器以最大限度地减少文档与查询在语义上相似(相关)的程度。通过这种方式,使 LLM 更好地利用相关背景知识,并训练 LLM 即使在检索错误块的情况下也能产生准确的预测,从而使模型能够依赖自己的知识。

  • 图片

  • 2.3.2 多向量检索器(Multi-Vector Retriever)

  • 多向量检索器 (Multi-Vector Retriever) 是 LangChain 推出的一个关键工具,用于优化 RAG 的过程。多向量检索器的核心想法是将我们想要用于答案合成的文档与我们想要用于检索的参考文献分开。这允许系统为搜索优化文档的版本而不失去答案合成时的上下文。

  • 图片

  • 简单来说就是将一个文档分解为较长的几个逻辑较为完整和独立的部分,例如包括不同的文本、表格甚至是图片都可以,然后分解后的文档使用摘要的方式进行总结,这个摘要需要可以明确覆盖相关内容。然后摘要进行向量化,检索的时候直接检索摘要,一旦匹配,即可将摘要背后的完整文档作为上下文输入给大模型。

  • 2.3.3 查询转换(Query Transformations)

  • 在某些情况下,用户的 query 可能出现表述不清、需求复杂、内容无关等问题,为了解决这些问题,查询转换(Query Transformations)的方案利用了大型语言模型(LLM)的强大能力,通过某种提示或方法将原始的用户问题转换或重写为更合适的、能够更准确地返回所需结果的查询。LLM的能力确保了转换后的查询更有可能从文档或数据中获取相关和准确的答案。

  • 图片

  • 查询转换的核心思想是,用户的原始查询可能不总是最适合检索的,所以我们需要某种方式来改进或扩展它。

  • 三、Self-RAG 及其实现

  • 前文所述的 RAG 方法都遵循着共同的范式,即query+context→LLM

  • 其中 query 表示用户的输入,context 表示检索获得的补充信息,然后共同输入到 LLM 中,可以认为这是一种检索前置的被动的增强方式。

  • 相比而言,Self-RAG 则是更加主动和智能的实现方式,主要步骤概括如下:

    1. 判断是否需要额外检索事实性信息(retrieve on demand),仅当有需要时才召回
    2. 平行处理每个片段:生产prompt+一个片段的生成结果
    3. 使用反思字段,检查输出是否相关,选择最符合需要的片段;
    4. 再重复检索
    5. 生成结果会引用相关片段,以及输出结果是否符合该片段,便于查证事实。
  • 二者过程的比较如下图所示:

  • 图片

  • Self-RAG 的一个重要创新是 Reflection tokens (反思字符):通过生成反思字符这一特殊标记来检查输出。这些字符会分为 Retrieve 和 Critique 两种类型,会标示:检查是否有检索的必要,完成检索后检查输出的相关性、完整性、检索片段是否支持输出的观点。模型会基于原有词库和反思字段来生成下一个 token。

  • 图片

  • 3.1 Self-RAG 训练过程

  • 对于训练,模型通过将反思字符集成到其词汇表中来学习生成带有反思字符的文本。它是在一个语料库上进行训练的,其中包含由 Critic 模型预测的检索到的段落和反思字符。该 Critic 模型评估检索到的段落和任务输出的质量。使用反思字符更新训练语料库,并训练最终模型以在推理过程中独立生成这些字符。

  • 图片

  • 为了训练 Critic 模型,手动标记反思字符的成本很高,于是作者使用 GPT-4 生成反思字符,然后将这些知识提炼到内部 Critic 模型中。不同的反思字符会通过少量演示来提示具体说明。例如,检索令牌会被提示判断外部文档是否会改善结果。

  • 为了训练生成模型,使用检索和 Critic 模型来增强原始输出以模拟推理过程。对于每个片段,Critic 模型都会确定额外的段落是否会改善生成。如果是,则添加 Retrieve=Yes 标记,并检索前 K 个段落。然后 Critic 评估每段文章的相关性和支持性,并相应地附加标记。最终通过输出反思字符进行增强。

  • 然后使用标准的 next token 目标在此增强语料库上训练生成模型,预测目标输出和反思字符。在训练期间,检索到的文本块被屏蔽,并通过反思字符 Critique 和 Retrieve 扩展词汇量。这种方法比 PPO 等依赖单独奖励模型的其他方法更具成本效益。Self-RAG 模型还包含特殊令牌来控制和评估其自身的预测,从而实现更精细的输出生成。

  • 3.2 Self-RAG 推理过程

  • Self-RAG 使用反思字符来自我评估输出,使其在推理过程中具有适应性。根据任务的不同,可以定制模型,通过检索更多段落来优先考虑事实准确性,或强调开放式任务的创造力。该模型可以决定何时检索段落或使用设定的阈值来触发检索。

  • 当需要检索时,生成器同时处理多个段落,产生不同的候选。进行片段级 beam search 以获得最佳序列。每个细分的分数使用 Critic 分数进行更新,该分数是每个批评标记类型的归一化概率的加权和。可以在推理过程中调整这些权重以定制模型的行为。与其他需要额外训练才能改变行为的方法不同,Self-RAG 无需额外训练即可适应。

  • 下面对开源的 Self-RAG 进行推理测试,可在这里下载模型 selfrag_llama2_13b ,按照官方指导使用 vllm 进行推理服务

  from vllm import LLM, SamplingParams
  
  model = LLM("selfrag/selfrag_llama2_7b", download_dir="/gscratch/h2lab/akari/model_cache", dtype="half")
  sampling_params = SamplingParams(temperature=0.0, top_p=1.0, max_tokens=100, skip_special_tokens=False)
  
  def format_prompt(input, paragraph=None):
    prompt = "### Instruction:\n{0}\n\n### Response:\n".format(input)  
    if paragraph is not None:  
      prompt += "[Retrieval]<paragraph>{0}</paragraph>".format(paragraph)  
  return prompt
  
  query_1 = "Leave odd one out: twitter, instagram, whatsapp."
  query_2 = "What is China?"
  queries = [query_1, query_2]
  
  # for a query that doesn't require retrieval
  preds = model.generate([format_prompt(query) 
  for query in queries], sampling_params)for pred in preds: 
    print("Model prediction: {0}".format(pred.outputs[0].text))
  • 输出结果如下,其中第一段结果不需要检索,第二段结果出现[Retrieval] 字段,因为这个问题需要更细粒度的事实依据。

  • Model prediction: Twitter:[Utility:5]</s>
    Model prediction: China is a country located in East Asia.[Retrieval]<paragraph>It is the most populous country in the world, with a population of over 1.4 billion people.[Retrieval]<paragraph>China is a diverse country with a rich history and culture.[Retrieval]<paragraph>It is home to many different ethnic groups and languages, and its cuisine, art, and architecture reflect this diversity.[Retrieval]<paragraph>China is also a major economic power, with a rapidly growing economy and a large manufacturing sector.[Utility:5]</s>
    
  • 我们还可以在输入中增加补充信息:

 # for a query that needs factual grounding
 prompt = format_prompt("Can you tell me the difference between llamas and alpacas?", "The alpaca (Lama pacos) is a species of South American camelid mammal. It is similar to, and often confused with, the llama. Alpacas are considerably smaller than llamas, and unlike llamas, they were not bred to be working animals, but were bred specifically for their fiber.")
 preds = model.generate([prompt], sampling_params)
 print([pred.outputs[0].text for pred in preds])
  • 输出结果如下,Self-RAG 找到相关的插入文档并生成有证据支持的答案。

  • ['<paragraph>The main difference between llamas and alpacas is their size and fiber.[Continue to Use Evidence]Llamas are much larger than alpacas, and they have a much coarser fiber.[Utility:5]</s>']
    
  • 3.3 写在最后:再谈 agent

  • 事实上这种 LLM 主动使用工具并进行判断的方式并非 Self-RAG 首创,在此之前的 AutoGPT, Toolformer 和 Graph-Toolformer 中早已有之,而且支持多种 API 调用。

  • 以 Graph-Toolformer 为例,其过程大致可分为以下几步:

    1. 针对 graph reasoning 任务设计少量 API Call 样本
    2. 基于 ChatGPT 对 prompt 进行 augmentation
    3. 使用现有 pre-train LLM 进行模型 fine-tuning
    4. 基于 external graph toolkits 的 graph reasoning
  • 图片

  • Graph-ToolFormer Framework

  • 更近一步地,这些方式实际上都是以 LLM 为核心的,多 agent 协同模式下的具体呈现形式,在此范式下,LLM 充当思考和决策的中心,通过合理的 API 及工具的调用,完成各种复杂的任务和指令。

  • 图片

  • 关于 (Multi) Agent 及其协同的内容本篇点到为止,后续将通过专门的文章进行讨论,敬请期待。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • …

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • …

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • …

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案
  • …

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】
Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection 整个训练和推理过程都不算复杂,借助了 LLM 本身的能力对外挂的知识库进行评估和反思,数据的准备也不算困难,有不错的借鉴意义,可以考虑内嵌进一些常见的 RAG 框架进行尝试。这种分阶段的训练和 PPO 类似,应该比较考验 Critic 模型的能力,可能有一些训练的坑需要发掘。比较注重推理的质量,没有考虑推理的时间成本,单个请求可能需要多次检索知识库。并行生成结果时看不到其他召回结果,也可能导致回答不全面,反而降低质量。期待后续的优化。 阅读详情

相关推荐

《Advanced RAG》-08-探索RAG之Self-RAG

本文介绍了自我增强生成(Self-RAG)技术,它是传统的检索增强生成(RAG)的改进,能够更精确地控制文本生成过程。

静愚AGI 3330

一文彻底搞懂Self-RAG【上】:自省式RAG的原理与应用

之前我们探讨过RAG Flow,其实很难有完美的RAG范式匹配所有需求,毕竟业务需求是复杂的:有的需要绝对的准确性,有的则更看重灵活性;有的用来搜索,有的用来聊天,也有的用来服务其他Agent。后续我们会选择一些典型的RAG研究项目做深入实践,希望对大家在应用时提供更多的参考价值。,很多朋友或许听过,即自省式RAG。其原始Paper与开源项目很容易看的云里雾里,被一些数学符号与公式吓到,且其中有大量内容是关于算法与模型微调,而应用层面介绍较少。

2401_84204413的博客 4784

Langgraph实战-自省式RAG: Self-RAG

传统 LLM 仅依赖内部参数化知识生成回答,容易产生事实性错误(hallucination)。即使结合检索增强生成(RAG),也存在两个问题:(1)盲目检索:无论是否需要检索,都固定检索一定数量的文档,可能引入无关信息。(2)机械整合:直接拼接检索到的内容,可能降低生成结果的流畅性或实用性。 现有 RAG 也存在很多的不足,例如:无法动态判断何时需要检索、检索内容是否相关,导致生成质量不稳定。

zg_hover的专栏 1757

Self-RAG:通过自我反思学习检索、生成和批判

Self-RAG学习检索、生成和批评,以提高 LM 的输出质量和真实性,在六项任务上优于 ChatGPT 和检索增强的 LLama2 Chat。

安静的软件工程师 2701

SELF-RAG: LEARNING TO RETRIEVE, GENERATE, AND CRITIQUE THROUGH SELF-REFLECTION----自我反思:学会通过自我反思来检索

尽管大型语言模型(LLM)具有非凡的能力,但由于它们完全依赖于它们封装的参数知识,因此通常会产生包含事实不准确的响应。检索增强生成(RAG)是一种通过检索相关知识来增强语言模型的临时方法,可以减少此类问题。然而,不加区别地检索和合并固定数量的检索到的段落,无论检索是否必要,或者段落是否相关,都会降低 LM 的多功能性或可能导致生成无用的响应。我们引入了一个名为自反射检索增强生成(SELF-RAG)的新框架,它通过检索和自反射来提高 LM 的质量和事实性。

Mars_prime的博客 1957

SELF-RAG: LEARNING TO RETRIEVE, GENERATE, AND CRITIQUE THROUGH SELF-REFLECTION

尽管大型语言模型(LLM)具有非凡的能力,但由于它们仅依赖于所封装的参数知识,因此它们通常会产生包含事实不准确的响应。检索增强生成(RAG)是一种通过检索相关知识来增强LM的特别方法,减少了此类问题。然而,不分青红皂白地检索和合并固定数量的检索段落,无论检索是否必要,或者段落是否相关,都会削弱LM的通用性,或者可能导致无益的响应生成。我们引入了一个新的框架,称为自反射检索增强生成(Self-RAG),通过检索和自反射来提高LM的质量和真实性。

c_cpp_csharp的专栏 1319

【幻觉缓解算法 - 减少大模型错误生成】第二章 知识增强架构与推理时干预策略

Chain-of-RAG采用顺序分解策略,将复杂查询拆解为子问题链,每个子问题的答案作为下一轮检索的查询条件,逐步收敛至目标信息。多源策略确保覆盖单源检索的盲区,解释生成增强了系统的可审计性。更关键的是,基础RAG缺乏动态知识更新机制,无法识别检索结果中的时效性信息,导致模型在回答涉及近期事件或快速演变领域的问题时产生事实性幻觉。模型在生成过程中实时评估 token 级或片段级的置信度,当概率分布的方差超过阈值或语义熵指示高不确定性时,系统暂停自主生成,转而调用外部工具获取权威信息或明确告知用户知识边界。

u012133341的博客 172

从零开始做题:big_zip

内容为:You_know_the_bed_feels_warmer_Sleeping_here_alone_You_know_I_dream_in_color_And_do_the_things_I_want_You_think_you_got_the_best_of_me_Think_you_had_the_last_laugh_Bet_you_think_that_everything_good_is_gone。查看压缩包内容,发现有五字节长度的文件,用crc碰撞攻击破解明文。

weixin_44626085的博客 1242

LLM之RAG实战:Self-RAG如何革命工业LLM

SELF-RAG 的设计使得任意的语言模型(LM)可以生成包含“反思tokens”(reflection tokens) 的文本。这些token来自于扩展的模型词汇(即,原始词汇加上反思tokens)。

lvaolan的博客 1106

Win10 有线网卡配置静态IP后,出现两个IPv4地址的解决方法

在我使用有线网络连接局域网时,配置了静态IP之后,发现网络并没有通,检查之后发现“以太网状态”-“网络连接详细信息”中,出现了2个IPv4的地址(一个是DHCP分配的169.254.xx.xx的IP,另一个是我配置的静态地址),但是网络是没有正常与我所配置的静态地址正常通信的。这个是我执行后的截图,重启电脑后以太网配置静态IP,恢复正常。最终我查了好多网络上的解决办法,有些办法并没有解决我的问题。这个是网上别人的问题截图,我的也是类似这种。第一种(没有解决我的问题)第二种(没有解决我的问题)

Zlz_Nike的博客 2万+

电信光猫隐藏的VOIP功能揭秘:不用座机也能打电话(EasySip实战)

本文揭秘了电信光猫隐藏的VOIP功能,通过EasySip实战演示如何无需座机实现高清通话。详细解析了光猫的SIP协议支持、语音VLAN配置及网络架构优化,帮助用户利用现有设备提升通话质量并扩展设备兼容性,特别适合智能家居和企业级应用场景。

weixin_29268385的博客 760

SELF-RAG: 让LLM集检索,生成跟评判等多种能力于一身

尽管基础能力出众,但是大模型只能依赖于被压缩到模型参数中的知识,所以经常会生成不符合事实的回复。针对这种事实性错误,目前主流的解决方案是知识增强,引入外部的知识源来引导模型生成。但是不考虑具体情形,一味地去检索外部文档可能会损害语言模型的多样性,生成不合适的回复。基于此,有研究人员提出了Self-Reflective Retrieval-Augmented Generation(SELF-RAG),一种新的大模型知识增强框架,可以通过检索跟自我反思提升大模型生成的质量跟事实可靠性。

WitsMakeMen的专栏 1365

华为防火墙USG6000V---内网访问外网---外网访问内网服务器(NAT服务器)示例配置

华为防火墙USG6000V示例配置,展示了访问防火墙、内网服务器、外网和外网访问内网服务器(NAT服务器)的配置。

lehe99的专栏 2万+

LLM之RAG实战(四):Self-RAG如何革命工业LLM

self-RAG会训练一个任意的LM(比如Llama2–7B和13B),使其能够反思自己的生成过程,并生成任务输出和中间的特殊tokens(reflection tokens)(比如[Retrieval], [No Retrieval], [Relevant], [Irrelevant], [No support / Contradictory], [Partially supported], [Utility]等)。例如,一份包含X公司过去15年的年收入的文件,但分为不同的部分。然而,这可能有几个问题。

wshzd的博客 2024

ANSYS拓扑优化基础实例

唐深51CAE 2018/6/10 拓扑优化在工程设计中,常用于机械结构概念设计和轻量化设计,ANSYS通用有限元分析软件提供了强大的拓扑优化功能,本文将通过一个简单实例进行展示。 一、赵州桥 赵州桥又称安济桥,坐落在河北省赵县洨河上,建于隋朝年间公元595年~605年,由著名匠师李春设计建造,距今已有约1500年的历史,是当今世界上现存最早、保存最完整的古代敞...

TQT_CAE的博客 6027

开关电源和线性电源Multisim电路仿真实验汇总——硬件工程师笔记

本文系统介绍了稳压电源的基础知识与应用实验。首先阐述了稳压电源的定义与类型,包括线性稳压电源(如LM7805/7905)和开关稳压电源(降压/升压/升降压式)的工作原理、参数特点及优劣势。随后详细讲解了各类稳压电源的实验设计,如线性稳压电源的电路实现、开关稳压电源的PWM控制方法等。最后汇总了硬件工程师相关的笔试面试资源,涵盖器件知识、电路仿真、企业真题等内容。全文结合理论分析与Multisim仿真,为电子工程学习者提供了稳压电源的实用技术参考。

XU157303764的博客 1640

【RAG 论文】Self-RAG:引入自我反思的大模型 RAG 框架

Self-RAG:在 RAG 框架中引入自我反思机制,提高检索增强的效果

VLyb 9391

50、压电微泵与技术设备驱动的研究分析

本文研究了压电微泵在弹性微通道中的流体流动特性及技术设备驱动的振动行为。通过建立轴对称流固耦合模型,利用FreeFem++进行数值模拟,分析了不同数量压电致动器和频率对微泵流量的影响,发现多个致动器按特定时序压缩可产生净正向流量,并提出了稳态流量的近似解析公式。同时,针对技术设备驱动系统,探讨了周期性负载引起的强迫振动特性,明确了共振条件及影响因素,并比较了主动、被动和优化设计等振动控制策略。最后展望了实验验证、多物理场耦合与智能控制等未来研究方向,为相关设备的优化设计与高效运行提供了理论支持。

convnet3designer的博客 148

RAG实战4 - Self-RAG 如何革命工业LLM

(1) SELF-RAG 的目标SELF-RAG 的设计使得任意的语言模型(LM)可以生成包含“反思tokens”(reflection tokens) 的文本。这些token来自于扩展的模型词汇(即,原始词汇加上反思tokens)。(2) 训练细节生成模型M是在一个经过筛选的语料库上进行训练的,该语料库包含由检索器R检索到的段落和由评判模型C预测的反思tokens。(3) 评判模型C它被训练用于生成反思tokens,这些tokens用于评估检索到的段落和给定任务的输出质量。

小然的百宝盒 686

【HAL库】STM32CubeMX开发----STM32F407----ETH+LAN8720A+LWIP----ping通

本次实验以芯片为MCU,使用25MHz外部时钟源。以太网PHY层芯片为LAN8720A,由MCU引脚PA8提供时钟。

MQ0522的博客 4843

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【LLM之RAG】Self-RAG论文阅读笔记

尽管大型语言模型(LLM)展示出了显著的能力,但它们在生成回答时经常包含事实错误,因为它们仅依赖于封装在模型中的参数知识。增强型检索生成(Retrieval-Augmented Generation, RAG)是一种方法,通过检索相关知识来减少此类问题。然而,无论是否需要检索,或检索的段落是否相关,不加选择地检索和整合固定数量的检索段落会降低语言模型的多功能性,或可能导致生成无用的回答。​

<p>专注挖坑</p> 1379

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

RAG 进阶地图:Self-RAG、CRAG、GraphRAG、Agentic RAG 到底有何不同?

回到最初的问题:Self-RAG、CRAG、GraphRAG、Agentic RAG 到底有什么区别?一句话概括——它们不是竞争关系,而是分别补上了朴素 RAG 的一块短板:Self-RAG 管"要不要检索",CRAG 管"检索不好怎么兜底",GraphRAG 管"局部检索搞不定的全局理解",Agentic RAG 管"复杂问题的一次检索不够用"。理解了每个范式背后的痛点,就不会再被这些名词绕晕了。

一个coder的博客 4708

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【论文速读】Self-Rag框架,《Self-Rag: Self-reflective Retrieval augmented Generation》

Self-Rag框架训练一个任意的LLM,使其能够根据需求按需检索段落,并使用特殊的反思token来生成和反思检索到的段落以及自身的生成内容。反思token在推理阶段使LLM可控,使其能够根据不同任务需求调整行为

bylander的博客 2071

逐步实践复现 SELF-RAG

逐步编码实践复现SELF-RAG

安静的软件工程师 1980
上一篇: 粉笔大事件!首个职教行业垂域大模型问世
下一篇: 终于有人总结了大模型技术!
冻感糕人~
博客等级 码龄3年 8926粉丝 2384原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值