RAG评估:如何在缺乏地面实况数据的情况下进行?

2024年09月26日 由 alex 发表 113 0

如果有地面实况数据作为对比,评估检索增强生成(RAG)模型就容易多了。但如果没有呢?这时事情就变得有点棘手了。不过,即使没有地面实况,仍有一些方法可以评估 RAG 系统的性能。下面,我们将介绍三种有效策略、从零开始创建地面实况数据集的方法、当你拥有数据集时可以用来评估的指标,以及可以帮助你完成这一过程的现有框架。


如果你正在使用像 Pinecone 这样的矢量数据库,那么你可能对矢量相似性的概念并不陌生。从本质上讲,数据库检索信息的依据是你的查询向量与潜在结果向量的接近程度。即使没有 “正确 ”的答案作为衡量标准,你仍然可以利用余弦相似度等指标来衡量检索文档的质量。


6


例如,Pinecone 会返回余弦相似度值,显示每个结果与你的查询有多接近。


# Create a pinecone (vector database) index that uses cosine similarity
pc.create_index(
    name=index_name,
    dimension=2,
    metric="cosine",
    spec=ServerlessSpec(
        cloud='aws', 
        region='us-east-1'
    ) 

# Retrieving top 3 closest vectors
query_results = index.query(
    namespace="example-namespace1",
    vector=[1.0, 1.5],
    top_k=3,
    include_values=True
)
# query_results
# The "score" here is the cosine similarity value
# {'matches': [{'id': 'vec1', 'score': 1.0, 'values': [1.0, 1.5]},
# {'id': 'vec2', 'score': 0.868243158, 'values': [2.0, 1.0]},
# {'id': 'vec3', 'score': 0.850068152, 'values': [0.1, 3.0]}],


通过公开相似度得分,你可以对检索到的文档设置合格或不合格的等级。较高的阈值(如 0.8 或以上)意味着有更严格的要求,而较低的阈值则会带来更多数据,这些数据可能是有用的,也可能只是嘈杂的。


这个过程并不是要马上找到一个完美的数字,而是需要不断尝试和犯错。当结果始终对我们的特定应用有用时,我们就会知道自己是否找到了最佳点。


使用多个 LLM 判断响应


类型: 检索 + 生成评估

评估 RAG 系统的另一种创新方法是利用多个 LLM 来判断响应。尽管在缺少地面实况数据的情况下,LLM 无法提供完美的答案,但你仍然可以利用他们的反馈来比较响应的质量。


通过比较不同 LLM 的回复并查看他们的排名,你可以衡量检索和生成的整体质量。这种方法并不完美,但却是一种从多个角度了解系统输出质量的创新方法。


人际反馈: 专家参与


类型:检索 + 生成评估

有时,评估系统的最佳方式是采用老式方法--询问人类的判断。从领域专家那里获得反馈可以提供最好的模型也无法比拟的洞察力。


设置评级标准

为了使人工反馈更加可靠,制定明确一致的评分标准很有帮助。你可以要求评论者对以下方面进行评分:

  • 相关性: 检索到的信息是否与查询相关?(检索评价)
  • 正确性: 内容是否符合事实?(检索评估)
  • 流畅性: 读起来是否流畅,是否感觉突兀或勉强?
  • 完整性: 是否完全涵盖问题,还是留有空白(检索 + 生成评估)


有了这些标准,你就可以更有条理地了解系统的性能如何。


获取基线

评估人工反馈质量的一个明智方法是检查不同审阅者之间的一致程度。你可以使用皮尔逊相关性等指标来了解他们的判断有多一致。如果你的审核员意见分歧很大,这可能意味着你的标准不够明确。这也可能表明任务的主观性超出了你的预期。


7


减少噪音

人的反馈可能会产生噪音,尤其是在标准不明确或任务主观的情况下。这里有几种方法可以解决这个问题:

  • 平均分数: 通过平均多个人工审核者的评分,可以消除任何个人偏见或不一致。
  • 关注一致性: 另一种方法是只考虑审核员意见一致的情况。这将为你提供一套更清晰的评价,并有助于确保反馈的质量。


从零开始创建地面实况数据集

在没有地面实况数据的情况下评估 RAG 系统,另一种方法是创建自己的数据集。这听起来令人生畏,但有几种策略可以让这一过程变得更容易,包括寻找类似的数据集、利用人类反馈,甚至是合成生成数据。


在线查找类似数据集

这一点看似显而易见,而且大多数得出结论认为自己没有地面实况数据集的人已经用尽了这一方法。但值得一提的是,可能有一些数据集与你需要的数据集类似。也许它的业务领域与你的用例不同,但它的问答格式与你的工作相同。像 Kaggle 这样的网站拥有种类繁多的公共数据集,你可能会惊讶地发现有多少数据集与你的问题领域相吻合。


手动创建地面实况数据

如果在网上找不到所需的数据,可以手动创建地面实况数据。这时,人工反馈就派上用场了。还记得我们之前谈到的领域专家反馈吗?你可以利用这些反馈建立自己的小型数据集。


通过整理经过人工审核的示例集,其中结果的相关性、正确性和完整性均已得到验证,从而为扩展评估数据集奠定了基础。


将 LLM 训练成法官

有了最小真实数据集后,你可以进一步训练 LLM,让它充当评委,评估模型的输出结果。


但是,在依靠 LLM 充当评委之前,我们首先需要确保它能对我们的模型输出进行准确的评级,或者至少是可靠的评级。以下是你可以采用的方法:

  1. 建立经过人工审核的示例: 根据你的使用情况,20 到 30 个示例应该足以让你很好地了解 LLM 的比较可靠性。
  2. 创建你的法律硕士评委: 提示 LLM 根据你交给领域专家的相同标准给出评级。获取评级并比较 LLM 评级与人工评级的一致性。同样,你可以使用皮尔逊度量等指标来帮助评估。高相关性得分将表明 LLM 的表现与评委不相上下。
  3. 应用及时工程最佳实践: 及时工程可以决定这一流程的成败。用上下文预热 LLM 或提供少量示例(少量学习)等技术可以显著提高模型在评判时的准确性。


创建特定数据集

提高基本事实数据集质量和数量的另一种方法是将文档划分为主题或语义分组。与其将整个文档作为一个整体来看待,不如将它们分解成更小、更集中的部分。


例如,假设你有一份文档(documentId: 123),其中提到


“推出 ABC 产品后,XYZ 公司 2024 年第一季度的收入增长了 10%"。


这句话包含两个不同的信息:

  1. 推出产品 ABC
  2. 2024 年第一季度收入增长 10


现在,你可以将每个主题添加到自己的查询和上下文中。例如:

  • 问题 1:"XYZ 公司推出了什么产品?
  • 语境 1:"推出产品 ABC”
  • 问题 2:"2024 年第一季度的收入变化情况如何?
  • 语境 2:“XYZ 公司 2024 年第一季度的收入增长了 10%”。


通过将数据分成这样的特定主题,你不仅可以创建更多的数据点用于训练,还可以使你的数据集更加精确和集中。此外,如果你想将每个查询追溯到原始文档以确保可靠性,你可以轻松地为每个上下文段添加元数据。例如:

  • 问题 1:"XYZ 公司推出了什么产品?
  • 语境 1:"推出产品 ABC(文档 ID:123)”
  • 问题 2:"2024 年第一季度的收入变化情况如何?
  • 语境 2:"XYZ 公司 2024 年第一季度的收入增长了 10%(文档 ID:123)”


这样,每个分段都与其来源相关联,从而使数据集更有助于评估和培训。


合成创建数据集

如果其他方法都不奏效,或者你需要的数据多到无法手动收集,那么合成数据生成可以改变游戏规则。利用数据增强或 GPT 模型等技术,你可以在现有示例的基础上创建新的数据点。例如,你可以使用一组基本查询和上下文,并对其稍作调整,以创建各种变化。


有了数据集之后,评估时间

现在,你已经收集或创建了数据集,是时候进入评估阶段了。RAG 模型涉及两个关键领域:检索和生成。这两个方面都很重要,了解如何评估这两个方面将有助于你对模型进行微调,以更好地满足你的需求。


评估检索:检索数据的相关性如何?

RAG 中的检索步骤至关重要--如果你的模型无法检索到正确的信息,那么它将很难生成准确的响应。以下是你需要关注的两个关键指标:

  • 上下文相关性: 衡量检索的上下文与查询的吻合程度。从根本上说,你要问 这些信息是否真的与所提问题相关?你可以使用数据集来计算相关性分数,方法可以是人工判断,也可以是比较查询与检索文档之间的相似度指标(如余弦相似度)。
  • 上下文召回率: 上下文召回率侧重于检索到多少相关信息。有可能检索到了正确的文档,但只包含了部分必要信息。为了评估召回率,你需要检查你的模型提取的上下文是否包含了完全回答查询的所有关键信息。理想情况下,你需要的是高召回率:你的检索应该抓住你所需要的信息,而不应该遗漏任何关键信息。


评估生成: 响应是否既准确又有用?

一旦检索到正确的信息,下一步就是生成一个不仅能回答查询,而且能忠实、清晰地回答查询的响应。以下是需要评估的两个关键方面:

  • 忠实性: 衡量生成的响应是否准确反映了检索到的上下文。从本质上讲,你希望避免幻觉--即模型编造了检索数据中没有的信息。忠实性就是要确保答案是以模型检索到的文档所呈现的事实为基础的。
  • 答案相关性: 这是指生成的答案与查询的匹配程度。即使信息忠实于检索到的上下文,它仍然需要与所提问题相关。你不会希望你的模型获取的正确信息并不能完全回答用户的问题。


进行加权评估

在对检索和生成进行评估后,你可以进一步将这些评估以加权的方式结合起来。也许你更关心相关性而非召回率,也许忠实性是你的首要考虑因素。你可以根据具体的使用情况为每个指标分配不同的权重。


例如:

  • 检索:60% 上下文相关性 + 40% 上下文召回率
  • 生成: 70% 忠实 + 30% 答案相关性


通过这种加权评估,你可以灵活地优先考虑对应用而言最重要的因素。如果你的模型需要 100% 的事实准确性(如在法律或医疗环境中),你可以将更多的权重放在忠实性上。另一方面,如果完整性更为重要,你可以将重点放在召回率上。


简化评估流程的现有框架

如果你觉得创建自己的评估系统过于繁琐,不用担心,现有的一些优秀框架已经为你完成了许多繁重的工作。这些框架带有专为评估 RAG 系统而设计的内置指标,使评估检索和生成性能变得更加容易。让我们来看看其中最有帮助的几个。


RAGAS(检索增强生成评估)

RAGAS 是一个专门用于评估 RAG 模型性能的框架。它包括评估检索和生成的指标,提供了一种全面的方法来衡量系统在每个步骤中的表现。它还采用进化生成范式生成合成测试数据。


ARES: 使用合成数据和 LLM 判断的开源框架

ARES 是另一个将合成数据生成与基于 LLM 的评估相结合的强大工具。ARES 使用合成数据(由人工智能模型生成的数据,而不是从真实世界的交互中收集的数据)来构建一个数据集,用于测试和完善你的 RAG 系统。


该框架还包括一个 LLM 判断器,正如我们前面所讨论的,它可以通过将模型输出与人类注释或其他参考数据进行比较来帮助评估模型输出。


结论

即使没有地面实况数据,这些策略也能帮助你有效评估 RAG 系统。无论你使用的是矢量相似性阈值、多个 LLM、LLM 即判断、检索度量或框架,每种方法都能为你提供一种衡量性能和改进模型结果的方法。关键在于找到最适合你特定需求的方法,并且在过程中不要害怕调整。

文章来源:https://medium.com/towards-data-science/how-to-evaluate-rag-if-you-dont-have-ground-truth-data-590697061d89
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消