Skip to main content

3 posts tagged with "RAG"

View All Tags

在大型语言模型(LLM)时代,RAG 或检索增强生成是突出的 AI 框架,例如 ChatGPT。 它通过整合外部知识提升这些模型的能力,确保更准确和更及时的响应。 标准的 RAG 系统包括一个 LLM,一个类似 Milvus 的向量数据库,以及一些提示作为代码。

随着越来越多的开发人员和企业采用 RAG 构建 GenAI 应用程序,评估它们的有效性变得越来越重要。 在另一篇文章中,我们评估了使用 OpenAI 助手和 Milvus 向量数据库构建的两种不同 RAG 系统的性能, 这些系统为评估 RAG 系统提供了一些启示。

本文将深入探讨评估 RAG 应用程序所使用的方法。我们还将介绍一些强大的评估工具, 并突出标准的度量标准。

RAG 评估指标

评估 RAG 应用并不仅仅是简单地比较几个例子。 关键在于使用令人信服、定量且可复现的指标来评估这些应用。

在这个过程中,我们将介绍三类指标:

  • 基于真相的指标
  • 无基于真相的指标
  • 基于 LLM 响应的指标

基于真相(ground truth)的指标

真相指的是数据集中对应用户查询的知名答案或知识文档块。 当真相是答案时,我们可以直接将真相与 RAG 响应进行比较, 使用答案语义相似性和答案正确性等指标,促进端到端的测量。

以下是根据正确性评估答案的示例。

note

真相(ground truth):爱因斯坦于 1879 年在德国出生。 高答案正确性(high answer correctness):1879年,爱因斯坦在德国出生。 低答案正确性(low answer correctness):在西班牙,爱因斯坦于 1879 年出生。

如果真相是来自知识文档的块,我们可以使用传统指标, 如精确匹配(EM)、Rouge-L 和 F1,评估文档块与检索上下文之间的相关性。 本质上,我们正在评估 RAG 应用的检索效果。

  • 如何为您自己的数据集生成基本真相。

我们现在已经确定了使用带有基本真相的数据集来评估 RAG 应用程序的重要性。 然而,如果您想使用未标记基本真相的私有数据集来评估 RAG 应用程序该怎么办呢? 如何为您的数据集生成所需的基本真相?

最简单的方法是要求像 ChatGPT 这样的 LLM 根据您的专有数据集生成示例问题和答案。 像 Ragas 和 LlamaIndex 这样的工具也提供了根据您的知识文档定制生成测试数据的方法。

由Ragas评估工具生成的示例问题和答案

这些生成的测试数据集包括问题、上下文和相应答案,促进了定量评估,而无需依赖无关的外部基准数据集。 这种方法赋予用户使用其独特数据来评估 RAG 系统的能力,确保进行更加定制和有意义的评估过程。

没有基准的度量标准

即使在每个查询都没有基准真相的情况下,我们仍然可以评估 RAG 应用程序。 TruLens-Eval 是一种开源评估工具,它创新了 RAG 三元概念, 并侧重于评估查询、上下文和响应三元组中元素的相关性。

三个相应的度量标准是:

  • 上下文相关性:衡量检索到的上下文如何支持查询。
  • 稳固性:评估语言模型的响应与检索到的上下文的一致程度。
  • 答案相关性:衡量最终响应与查询的相关性。

以下是一个根据答案与问题相关性进行评估的示例

Question: Where is France and what is its capital?
Low relevance answer: France is in western Europe.
High relevance answer: France is in western Europe and Paris is its capital.

RAG 三合一

RAG三重组合由3个评估组成: 上下文相关性、稳固性和答案相关性。 对每个评估的满意度让我们确信我们的LLM应用程序不会出现幻觉。

  • 上下文相关性

任何RAG应用程序的第一步都是检索;为了验证我们检索的质量,我们希望确保每个上下文块与输入查询相关。 这一点至关重要,因为这个上下文将被LLM用来形成答案,所以上下文中的任何无关信息都可能被编织成幻觉。 TruLens通过使用序列化记录的结构来评估上下文相关性。

  • 负载性

在检索到上下文之后,它然后由LLM形成答案。 LLM经常倾向于偏离所提供的事实,夸大或扩展以获得听起来正确的答案。 为了验证我们应用程序的牢固性,我们可以将响应分成独立的声明, 并在检索到的上下文中独立搜索支持每个声明的证据。

  • 答案相关性

最后,我们的回答仍然需要有助于回答最初的问题。 我们可以通过评估最终回应与用户输入的相关性来验证这一点。

此外,这些三重度量标准可以进一步细分,增强评估的细粒度。 例如,Ragas(一个致力于评估RAG系统性能的开源框架) 已将上下文相关性细分为三个进一步详细的度量标准:上下文精度、上下文相关性和上下文召回。

基于LLM响应的指标

这类指标评估LLM的响应,考虑了友好性、有害性和简洁性等因素。 例如,LangChain提出了简洁性、相关性、正确性、连贯性、 有害性、恶意、帮助性、争议性、厌恶性、犯罪性和不敏感性等指标。

以下是一个基于简洁性评估答案的示例。

Question: What's 2+2?
Low conciseness answer: What's 2+2? That's an elementary question. The answer you're looking for is that two and two is four.
High conciseness answer: 4

使用语言模型(CLM)来评分指标

之前提到的大多数指标需要输入文本以获得分数,这需要工作。 好消息是,随着像GPT-4这样的LLMs的出现,这个过程变得更加容易管理, 您只需要设计一个合适的提示即可。

论文用MT-Bench和Chatbot Arena评估LLM作为评委 提出了一个为GPT-4设计提示的方案,以评价AI助手对用户问题回答质量的方法。 以下是一个快速示例:

[System]

Please act as an impartial judge and evaluate the quality of the response provided by an AI assistant to the user question displayed below. Your evaluation should consider factors such as the helpfulness, relevance, accuracy, depth, creativity, and level of detail of the response. Begin your evaluation by providing a short explanation. Be as objective as possible. After providing your explanation, please rate the response on a scale of 1 to 10 by strictly following this format: "[[rating]]", for example: "Rating: [[5]]".

[Question]

{question}

[The Start of Assistant's Answer]

{answer}

[The End of Assistant's Answer]

This prompt asks GPT-4 to evaluate the response quality and rate them on a scale of 1 to 10.

值得注意的是,类似于任何法官,GPT-4 也并非无懈可击,可能存在偏见和潜在错误。 因此,提示设计至关重要。高级提示工程技术,如多轮或思维链(CoT),可能是必需的。 幸运的是,我们不必担心这个问题,因为许多用于 RAG 应用程序的评估工具已经集成了设计良好的提示。

RAG 评估工具

现在我们已经介绍了对 RAG 应用程序进行评估,让我们探讨一些用于评估 RAG 应用程序的工具, 深入了解它们的工作方式以及哪种用例最适合这些工具。

Ragas:简化的RAG评估

Ragas是一个用于评估RAG应用的开源评估工具。 通过简单的界面,Ragas简化了评估流程。 通过以所需格式创建数据集实例, 用户可以快速启动评估并获得 ragas_scorecontext_precisionfaithfulnessanswer_relevancy等指标。

from ragas import evaluate
from datasets import Dataset

dataset: Dataset
results = evaluate(dataset)

# {'ragas_score': 0.860, 'context_precision': 0.817,
# 'faithfulness': 0.892, 'answer_relevancy': 0.874}

Ragas支持多种指标,并不要求特定的框架要求,为评估不同的RAG应用程序提供了灵活性。 Ragas通过LangSmith实现实时监控评估,为每个评估提供原因和API密钥消耗的见解。

LlamaIndex:轻松构建和评估

LlamaIndex 是一个强大的人工智能框架, 用于构建 RAG 应用程序,包括一个 RAG 评估工具。 它非常适合评估在其框架内构建的应用程序。

from llama_index.evaluation import BatchEvalRunner
from llama_index.evaluation import FaithfulnessEvaluator, RelevancyEvaluator

service_context_gpt4 = ...
vector_index = ...
question_list = ...

faithfulness_gpt4 = FaithfulnessEvaluator(service_context=service_context_gpt4)
relevancy_gpt4 = RelevancyEvaluator(service_context=service_context_gpt4)

runner = BatchEvalRunner(
{"faithfulness": faithfulness_gpt4, "relevancy": relevancy_gpt4},
workers=8,
)

eval_results = runner.evaluate_queries(
vector_index.as_query_engine(), queries=question_list
)

TruLens-Eval:多样框架综合评估

TruLens Eval 提供了一种简单的方法,用于评估使用LangChain和LlamaIndex构建的RAG应用程序。 以下代码片段显示了如何为基于LangChain的RAG应用程序进行评估设置。

from trulens_eval import TruChain, Feedback, Tru, Select
from trulens_eval.feedbackimport Groundedness
from trulens_eval.feedback.provider import OpenAI
import numpy as np

tru = Tru()
rag_chain = ...

# Initialization and feedback setup...
tru_recorder = TruChain(rag_chain,

app_id='Chain1_ChatApplication',
feedbacks=[f_qa_relevance, f_groundedness])
tru.run_dashboard()

Trulens-Eval 可以评估使用其他框架构建的 RAG 应用程序,但在代码中实现可能会比较复杂。 有关更多详细信息,请参考 官方文档

此外,Trulens-Eval 还提供浏览器中的可视化监控,用于分析评估原因并观察 API 密钥的使用。

凤凰:评估具有灵活性的LLM

Phoenix 提供了一套完整的指标来评估 LLMs,包括生成的嵌入质量和 LLM 的响应。 它也可以评估 RAG 应用程序,但包含的指标比其他提到的评估工具要少。 下面的代码片段展示了如何使用 Phoenix 来评估由 LlamaIndex 构建的 RAG 应用程序。

import phoenix as px
from llama_index import set_global_handler
from phoenix.experimental.evals import llm_classify, OpenAIModel, RAG_RELEVANCY_PROMPT_TEMPLATE, \
RAG_RELEVANCY_PROMPT_RAILS_MAP
from phoenix.session.evaluation import get_retrieved_documents

px.launch_app()
set_global_handler("arize_phoenix")

print("phoenix URL", px.active_session().url)

query_engine = ...
question_list = ...

for question in question_list:
response_vector = query_engine.query(question)
retrieved_documents = get_retrieved_documents(px.active_session())

retrieved_documents_relevance = llm_classify(
dataframe=retrieved_documents,
model=OpenAIModel(model_name="gpt-4-1106-preview"),
template=RAG_RELEVANCY_PROMPT_TEMPLATE,
rails=list(RAG_RELEVANCY_PROMPT_RAILS_MAP.values()),
provide_explanation=True,
)

其他工具

除了上述提到的工具之外,像 DeepEvalLangSmithOpenAI Evals 等其他平台也提供评估 RAG 应用程序的功能。 它们的方法类似,但提示设计和实现细节有所不同,所以一定要选择最适合您的工具。

总结

最后,我们回顾了一些方法、指标和RAG应用评估工具。特别地,我们探索了三类指标:

  1. 基于真相的指标,
  2. 没有基础真相的指标,
  3. 基于大型语言模型(LLMs)响应的指标。

基于真相的指标涉及将RAG的响应与已确定的答案进行比较。 相反,没有基础真相的指标,例如RAG三重性,侧重于评估查询、背景和响应之间的相关性。 基于LLM响应的指标考虑到友好度、有害性和简洁性。

我们还探讨了通过精心设计的提示使用LLM进行评分指标,并介绍了一套RAG评估工具, 包括RagasLlamaIndexTruLens-EvalPhoenix,以帮助完成此任务。

在快速发展的人工智能世界中,定期评估和增强RAG应用对其可靠性至关重要。 利用这里讨论的方法、指标和工具,开发人员和企业可以做出明智的关于其RAG系统性能和能力的决策, 推动人工智能应用的进步。

鱼雪

近年来,检索增强生成(RAG)作为一种利用外部知识增强大型语言模型(LLM)的方法变得越来越流行。

原始RAG及其工作过程

RAG使得LLM可以在以前未见过的数据上使用,而无需进行微调。 此外,通过利用外部语料库的独立检索组件,自然语言形式的知识可以完全卸载LLM的参数化内存。

RAG 工作过程:

  • 查询编码器:将用户查询编码成适合搜索文本段落或文档数据库的数值表示。
  • 检索器:使用查询编码器生成的向量搜索索引文档的外部数据库。检索单据中基于所选搜索算法的前 K 个最相关文档。
  • 生成器:大型语言模型根据检索器选择的文档和输入查询生成输出。

LongRAG背后的直觉

在《LongRAG: Enhancing Retrieval-Augmented Generation with Long-context LLMs》一文中, 滑铁卢大学的研究人员通过对检索过程进行修改提出了以下建议:

  • 将每个文档的标记大小从原始RAG中的100个标记扩展到LongRAG中的4,000个标记。
  • 将焦点从在原始RAG中准确定位与用户查询相关的精确信息转移到在LongRAG中选择包含相关但未必精确信息的文档。

传统RAG�与LongRAG

这样做的原因是从检索精确、小片段信息过渡到选择更大、上下文更丰富且语义完整的片段。 这种调整减轻了检索员的负担,并更均匀地分配了检索员和生成器之间的任务。 因此,LongRAG充分利用了最新LLM的扩展上下文能力,它们作为生成器, 从最近对处理长上下文的显著增强中受益。

LongRAG如何运作:架构

LongRAG 对原始 RAG 进行了三项架构更新:

  • 长检索单元LongRAG 使用了检索单元,其范围包括整个文档或一组文档, 而不是从大型文档中截取 100 个标记,这遵循了论文中提出的Group Documents Algorithm。 此次单元大小增加到 4K,将维基百科语料库从 22M 减少到 600K 的检索单元。
  • 长检索器:为进一步处理识别长检索单元。
  • 长读者(生成器):从长检索单元中提取答案。这是一个以用户查询及长检索单元为提示的 LLM。

LongRAG示例

这是 LongRAG 逐步运作的方式

  1. Retrieval(在原始论文中命名为Long Retriever):

    • 编码: 两个编码器将输入问题和检索单元分别映射到一个d维向量。
    • 形成长的检索单元: 分组文档算法涉及创建相关文档的组。每个文档基于连接性与相关文档分组,不超过指定的最大组大小。这种分组能够更有效地检索相关信息,因为相关文档一起处理。
    • 相似性搜索: 编码步骤中的向量用于计算问题和检索单元之间的相似性,当选择相关的长检索单元时。
    • 结果汇总: 最相关的顶部组被汇总,形成对查询的全面响应,根据其大小调整包括的组数量。
  2. 生成(原始论文中称为 Long Reader):LLM(长期记忆模型)使用用户查询和来自检索步骤的聚合结果生成最终输出。 长文阅读器中使用的LLM应能处理长文本,并且不展现出过度的位置偏见。

LongRAG的优势

LongRAG 通过将维基百科处理成 4,000 个令牌单位来优化检索,将数量从 2,200 万减少到 60 万。 单位大小的增加意味着减少了许多单位的召回需求,避免了截断,并保留了更多上下文。 更长的单位有助于通过整合全面信息直接回答复杂问题。

LongRAG 框架实现了令人印象深刻的提取分数,并且与最先进模型具有可比的结果, 无需额外训练,展示了将 RAG 与长上下文 LLMs 结合的效率和潜力。

以下是对LongRAG实施的一些关键结果:

  • Recall@1:在自然问题(NQ)数据集上提高至71%,而之前为52%
  • Recall@2:在HotpotQA数据集(完全维基)上提高至72%,而之前为47%
  • Exact Match(EM):在NQ上取得62.7%的EM得分,在HotpotQA(完全维基)上为64.3%, 表现与最先进模型不相上下。

资源

鱼雪

我们讨论RAG的局限性,并探讨图RAG方法的优势,同时澄清术语并提供资源列表。

当AI悲观主义者谈论末日和AI接管时,他们常常忽略即使是最先进的语言模型也难以基于复杂的连接进行推理和得出结论。 另一个问题是训练或微调(适应您的数据)大型语言模型(LLMs)的成本极高。

图RAG检索增强生成)方法解决了这两个问题,并且是我们之前讨论的原始RAG技术的升级版。让我们来探索这些图表!

在今天的讨论中,我们将涵盖:

  1. 回顾原始RAG的基础知识
  2. 原始RAG的局限性
  3. 图RAG方法登场
  4. 图RAG特别擅长什么?
  5. 术语澄清:“图RAG”与“知识图谱RAG”
  6. 额外资源

回顾原始RAG

让我们简要回顾一下RAG背后的关键概念。

此方法允许在不需要微调的情况下使用LLM处理之前未见过的数据

在RAG设置中,数据以向量形式存储在外部数据库中

使用RAG,LLM从中检索必要的信息,并根据检索到的事实回答用户查询

来源于RAG原始论文

RAG通过避免数据更新时的持续微调节省资源,同时也使外部数据库的动态数据控制变得容易

原始RAG的局限性

原始RAG方法使用向量相似性作为搜索技术

这被认为是一项强大的技术,改变了我们访问信息的方式,并且是传统搜索引擎的宝贵更新。

然而,它也有局限性,尤其是在理解向量相似性的本质时

Pinecone的向量嵌入

您可能还记得我们之前探讨过变压器时提到的向量或词嵌入。

这些嵌入是单词的密集向量表示,捕捉了语义和句法关系

它们使语言模型能够通过将单词表示为向量空间中的点来量化语义相似性,从而学习单词之间的关系

向量相似性是一种用于衡量关系的指标,计算方法包括欧几里得距离、余弦相似性和点积相似性,每种方法都有其优缺点。

然而,向量相似性仅根据其与用户查询的相似性找到答案。

在需要结合各种信息或答案不明确存在于单个文档中的情况下, 这种方法在更复杂的系统中表现出局限性,导致原始RAG模型的限制。

图RAG方法的作者写道: “RAG在针对整个文本语料库的全局问题(如‘数据集的主要主题是什么?’)上失败, 因为这本质上是一个面向查询的摘要任务,而不是明确的检索任务。”

同时,先前的QFS方法无法扩展到典型RAG系统索引的大量文本。

图RAG方法有效解决了更复杂的查询问题。

图RAG方法登场

图RAG方法由微软研究人员于2024年4月提出。

原始RAG不同,此方法将数据组织成图结构,表示文本数据及其相互关系

图RAG演示图片

图RAG的工作原理如下:

  1. 源文档 → 文本块:首先将外部数据库中的原始文本分割成较小的、可管理的块。
  2. 文本块 → 元素实例:使用LLM和针对数据库领域量身定制的提示,图RAG从每个文本块中识别并提取实体(如人、地点、组织)及其关系。
  3. 元素实例 → 元素摘要:使用另一组LLM提示生成每个实体和关系的简短描述,以总结初始原始文本数据。
  4. 元素摘要 → 图社区:使用总结的实体和关系构建知识图谱,其中节点表示实体,边表示关系。然后对该图应用社区检测算法(如Leiden算法),以识别紧密相关节点的社区。
  5. 图社区 → 社区摘要:然后独立总结每个检测到的社区,生成其代表的主题和信息的综合概述。
  6. 社区摘要 → 社区答案 → 全局答案当用户提交查询时
  • 首先根据内容和与查询的关系识别相关的社区摘要。
  • 使用LLM为每个相关社区摘要独立生成中间答案。
  • 然后汇编这些中间答案,评估其相关性和帮助性(有时由LLM评分),并综合成最终的全局答案返回给用户。

通过基于图的索引和社区聚焦的摘要,图RAG是RAG系统中处理面向查询的摘要的宝贵补充

图RAG特别擅长什么?

使用图RAG的主要优势包括:

  1. 增强的相关性图RAG通过将数据结构化为知识图谱,识别与用户查询最相关的信息簇。
  2. 高效性:图RAG根据图结构搜索相关数据部分,相比于每次查询都处理整个数据集,减少了计算工作量
  3. 全面的响应系统可以综合来自多个文档的信息,创建比单一文档响应更全面且上下文丰富的答案。
  4. 可扩展性:通过利用基于图的结构,图RAG能够高效处理大规模数据集,使其在大信息库中既可扩展又有效。
  5. 动态学习:随着更多数据添加或更新到图中,图RAG可以适应和改进其响应,适用于动态和不断演变的数据集

术语澄清:“图RAG”与“知识图谱RAG”

“图RAG”和“知识图谱RAG”这两个术语经常互换使用,

因为它们都指利用知识图谱增强AI响应准确性和相关性的检索增强生成(RAG)方法。

实际上,大多数利用图结构进行检索的RAG系统本质上都在使用某种形式的知识图谱,即使它没有明确标示为知识图谱

关键区别在于所使用的图表示的复杂性和正式程度

额外资源

原始资源

图RAG于2024年4月发布,并承诺很快将在官方网站和GitHub上作为开源项目发布。

实现

虽然原始实现尚未可用,但有一些关于如何使用知识图谱与LLM结合的教程:

要点总结

1. 原始RAG方法

  • 定义: RAG(检索增强生成)方法允许在不进行微调的情况下使用LLM处理新数据。数据以向量形式存储在外部数据库中,LLM根据检索到的信息回答用户查询。
  • 优点: 避免持续微调,便于动态数据控制。

2. 原始RAG的局限性

  • 向量相似性: 使用向量相似性进行搜索,但只能根据与用户查询的相似性找到答案,难以处理需要综合多种信息的复杂系统。
  • 全局问题: 无法处理针对整个文本语料库的全局问题,例如数据集的主要主题。

3. 图RAG方法

  • 提出者: 微软研究人员,2024年4月。
  • 工作原理:
    1. 文本分块: 将原始文本分割为较小的块。
    2. 元素实例: 识别并提取每个文本块中的实体及其关系。
    3. 元素摘要: 生成实体和关系的简短描述。
    4. 图社区: 构建知识图谱,应用社区检测算法识别社区。
    5. 社区摘要: 独立总结每个社区,生成综合概述。
    6. 查询响应: 根据用户查询识别相关社区摘要,生成中间答案并综合成全局答案。

4. 图RAG的优势

  • 增强的相关性: 通过知识图谱识别与用户查询最相关的信息簇。
  • 高效性: 根据图结构搜索相关数据部分,减少计算工作量。
  • 全面的响应: 综合来自多个文档的信息,创建全面且上下文丰富的答案。
  • 可扩展性: 处理大规模数据集,适用于大型信息库。
  • 动态学习: 适应和改进响应,适用于动态和不断演变的数据集。

5. 术语澄清

  • 图RAG与知识图谱RAG: 这两个术语常常互换使用,都指利用知识图谱增强AI响应准确性和相关性的RAG方法。关键区别在于所使用的图表示的复杂性和正式程度。

图RAG方法通过基于图的索引和社区聚焦的摘要,

解决了原始RAG方法的局限性,为处理面向查询的复杂摘要提供了高效、可扩展和动态的解决方案。

图RAG总结脑图

鱼雪