如果有地面实况数据作为对比,评估检索增强生成(RAG)模型就容易多了。但如果没有呢?这时事情就变得有点棘手了。不过,即使没有地面实况,仍有一些方法可以评估 RAG 系统的性能。下面,我们将介绍三种有效策略、从零开始创建地面实况数据集的方法、当你拥有数据集时可以用来评估的指标,以及可以帮助你完成这一过程的现有框架。
如果你正在使用像 Pinecone 这样的矢量数据库,那么你可能对矢量相似性的概念并不陌生。从本质上讲,数据库检索信息的依据是你的查询向量与潜在结果向量的接近程度。即使没有 “正确 ”的答案作为衡量标准,你仍然可以利用余弦相似度等指标来衡量检索文档的质量。
例如,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 的回复并查看他们的排名,你可以衡量检索和生成的整体质量。这种方法并不完美,但却是一种从多个角度了解系统输出质量的创新方法。
人际反馈: 专家参与
类型:检索 + 生成评估
有时,评估系统的最佳方式是采用老式方法--询问人类的判断。从领域专家那里获得反馈可以提供最好的模型也无法比拟的洞察力。
设置评级标准
为了使人工反馈更加可靠,制定明确一致的评分标准很有帮助。你可以要求评论者对以下方面进行评分:
有了这些标准,你就可以更有条理地了解系统的性能如何。
获取基线
评估人工反馈质量的一个明智方法是检查不同审阅者之间的一致程度。你可以使用皮尔逊相关性等指标来了解他们的判断有多一致。如果你的审核员意见分歧很大,这可能意味着你的标准不够明确。这也可能表明任务的主观性超出了你的预期。
减少噪音
人的反馈可能会产生噪音,尤其是在标准不明确或任务主观的情况下。这里有几种方法可以解决这个问题:
从零开始创建地面实况数据集
在没有地面实况数据的情况下评估 RAG 系统,另一种方法是创建自己的数据集。这听起来令人生畏,但有几种策略可以让这一过程变得更容易,包括寻找类似的数据集、利用人类反馈,甚至是合成生成数据。
在线查找类似数据集
这一点看似显而易见,而且大多数得出结论认为自己没有地面实况数据集的人已经用尽了这一方法。但值得一提的是,可能有一些数据集与你需要的数据集类似。也许它的业务领域与你的用例不同,但它的问答格式与你的工作相同。像 Kaggle 这样的网站拥有种类繁多的公共数据集,你可能会惊讶地发现有多少数据集与你的问题领域相吻合。
手动创建地面实况数据
如果在网上找不到所需的数据,可以手动创建地面实况数据。这时,人工反馈就派上用场了。还记得我们之前谈到的领域专家反馈吗?你可以利用这些反馈建立自己的小型数据集。
通过整理经过人工审核的示例集,其中结果的相关性、正确性和完整性均已得到验证,从而为扩展评估数据集奠定了基础。
将 LLM 训练成法官
有了最小真实数据集后,你可以进一步训练 LLM,让它充当评委,评估模型的输出结果。
但是,在依靠 LLM 充当评委之前,我们首先需要确保它能对我们的模型输出进行准确的评级,或者至少是可靠的评级。以下是你可以采用的方法:
创建特定数据集
提高基本事实数据集质量和数量的另一种方法是将文档划分为主题或语义分组。与其将整个文档作为一个整体来看待,不如将它们分解成更小、更集中的部分。
例如,假设你有一份文档(documentId: 123),其中提到
“推出 ABC 产品后,XYZ 公司 2024 年第一季度的收入增长了 10%"。
这句话包含两个不同的信息:
现在,你可以将每个主题添加到自己的查询和上下文中。例如:
通过将数据分成这样的特定主题,你不仅可以创建更多的数据点用于训练,还可以使你的数据集更加精确和集中。此外,如果你想将每个查询追溯到原始文档以确保可靠性,你可以轻松地为每个上下文段添加元数据。例如:
这样,每个分段都与其来源相关联,从而使数据集更有助于评估和培训。
合成创建数据集
如果其他方法都不奏效,或者你需要的数据多到无法手动收集,那么合成数据生成可以改变游戏规则。利用数据增强或 GPT 模型等技术,你可以在现有示例的基础上创建新的数据点。例如,你可以使用一组基本查询和上下文,并对其稍作调整,以创建各种变化。
有了数据集之后,评估时间
现在,你已经收集或创建了数据集,是时候进入评估阶段了。RAG 模型涉及两个关键领域:检索和生成。这两个方面都很重要,了解如何评估这两个方面将有助于你对模型进行微调,以更好地满足你的需求。
评估检索:检索数据的相关性如何?
RAG 中的检索步骤至关重要--如果你的模型无法检索到正确的信息,那么它将很难生成准确的响应。以下是你需要关注的两个关键指标:
评估生成: 响应是否既准确又有用?
一旦检索到正确的信息,下一步就是生成一个不仅能回答查询,而且能忠实、清晰地回答查询的响应。以下是需要评估的两个关键方面:
进行加权评估
在对检索和生成进行评估后,你可以进一步将这些评估以加权的方式结合起来。也许你更关心相关性而非召回率,也许忠实性是你的首要考虑因素。你可以根据具体的使用情况为每个指标分配不同的权重。
例如:
通过这种加权评估,你可以灵活地优先考虑对应用而言最重要的因素。如果你的模型需要 100% 的事实准确性(如在法律或医疗环境中),你可以将更多的权重放在忠实性上。另一方面,如果完整性更为重要,你可以将重点放在召回率上。
简化评估流程的现有框架
如果你觉得创建自己的评估系统过于繁琐,不用担心,现有的一些优秀框架已经为你完成了许多繁重的工作。这些框架带有专为评估 RAG 系统而设计的内置指标,使评估检索和生成性能变得更加容易。让我们来看看其中最有帮助的几个。
RAGAS(检索增强生成评估)
RAGAS 是一个专门用于评估 RAG 模型性能的框架。它包括评估检索和生成的指标,提供了一种全面的方法来衡量系统在每个步骤中的表现。它还采用进化生成范式生成合成测试数据。
ARES: 使用合成数据和 LLM 判断的开源框架
ARES 是另一个将合成数据生成与基于 LLM 的评估相结合的强大工具。ARES 使用合成数据(由人工智能模型生成的数据,而不是从真实世界的交互中收集的数据)来构建一个数据集,用于测试和完善你的 RAG 系统。
该框架还包括一个 LLM 判断器,正如我们前面所讨论的,它可以通过将模型输出与人类注释或其他参考数据进行比较来帮助评估模型输出。
结论
即使没有地面实况数据,这些策略也能帮助你有效评估 RAG 系统。无论你使用的是矢量相似性阈值、多个 LLM、LLM 即判断、检索度量或框架,每种方法都能为你提供一种衡量性能和改进模型结果的方法。关键在于找到最适合你特定需求的方法,并且在过程中不要害怕调整。