首页
/ 3步构建高质量RAG测试数据集:从知识图谱到场景化评估

3步构建高质量RAG测试数据集:从知识图谱到场景化评估

2026-02-05 04:02:42作者:余洋婵Anita

你是否还在为RAG(检索增强生成)系统的测试数据发愁?手动编写的测试用例要么覆盖不全,要么无法反映真实用户查询模式?本文将带你通过Ragas的知识图谱技术,3步构建高质量测试数据集,解决RAG系统评估难题。读完你将掌握:知识图谱自动构建方法、多类型查询生成技巧、以及场景化测试集应用策略。

为什么需要专门的RAG测试数据集?

RAG系统的性能高度依赖查询类型与文档内容的匹配度。用户查询可分为四大类,每种类型对检索精度和生成质量有不同要求:

RAG查询类型分类

  • 单跳特定查询:如"爱因斯坦何时发表相对论?",需精确匹配单一事实
  • 单跳抽象查询:如"相对论如何改变时空观?",需综合解释性内容
  • 多跳特定查询:如"哪些科学家影响了爱因斯坦的相对论研究?",需跨文档关联
  • 多跳抽象查询:如"相对论自发表以来有哪些理论发展?",需时空维度的知识整合

传统随机采样或人工编写的测试集难以覆盖这些复杂场景。Ragas采用知识图谱驱动的测试数据生成方法,能系统性覆盖各类查询模式。

第一步:构建领域知识图谱

知识图谱是Ragas测试数据生成的核心。它将非结构化文档转化为结构化的实体关系网络,为智能查询生成提供基础。构建流程包含三个关键步骤:

文档分块与节点创建

首先将原始文档拆分为语义连贯的片段(chunk),每个片段作为知识图谱的基础节点。Ragas支持自定义分块策略,例如金融文档可按"资产负债表"、"现金流量表"等业务模块拆分:

from ragas.testset.graph import Node

# 创建文档节点示例
sample_nodes = [Node(
    properties={"page_content": "爱因斯坦的相对论彻底改变了我们对时空的理解..."}
), Node(
    properties={"page_content": "时间膨胀现象发生在物体接近光速运动时..."}
)]

实体与关系提取

使用抽取器从节点中提取关键信息,包括命名实体、关键短语和语义关系。Ragas提供预置的LLM-based抽取器和规则抽取器:

from ragas.testset.transforms.extractors import NERExtractor

# 实体提取示例
extractor = NERExtractor()
output = [await extractor.extract(node) for node in sample_nodes]
# 输出: [('entities', ['爱因斯坦', '相对论', '时空']), ...]

提取结果会作为属性添加到节点,形成富含语义信息的知识单元:

实体提取后的知识节点

关系构建与图谱优化

通过关系构建器计算节点间的关联强度,自动建立语义连接。Ragas提供多种关系算法,如基于实体重叠的Jaccard相似度:

from ragas.testset.transforms.relationship_builders.traditional import JaccardSimilarityBuilder

# 基于实体相似度构建关系
rel_builder = JaccardSimilarityBuilder(
    property_name="entities", 
    new_property_name="entity_jaccard_similarity"
)
relationships = await rel_builder.transform(kg)

最终形成的知识图谱可保存复用,包含节点48个、关系605个的典型图谱示例:

kg.save("knowledge_graph.json")
loaded_kg = KnowledgeGraph.load("knowledge_graph.json")
# 输出: KnowledgeGraph(nodes: 48, relationships: 605)

第二步:多场景查询自动生成

基于知识图谱,Ragas可按自定义比例生成各类查询。核心组件是TestsetGenerator,它协调知识图谱遍历和查询合成过程。

配置生成参数

首先初始化生成器,指定LLM和嵌入模型:

from ragas.testset import TestsetGenerator

generator = TestsetGenerator(
    llm=generator_llm, 
    embedding_model=embedding_model,
    knowledge_graph=loaded_kg  # 加载第一步构建的知识图谱
)

定义查询分布策略

通过query_distribution参数控制各类查询的比例。默认配置为:

from ragas.testset.synthesizers import default_query_distribution

query_distribution = default_query_distribution(generator_llm)
# 输出: [(SingleHopSpecificQuerySynthesizer, 0.5), 
#        (MultiHopAbstractQuerySynthesizer, 0.25),
#        (MultiHopSpecificQuerySynthesizer, 0.25)]

执行测试集生成

调用generate方法生成指定数量的测试样本:

testset = generator.generate(
    testset_size=10,  # 生成10条测试数据
    query_distribution=query_distribution
)
testset.to_pandas()  # 转换为DataFrame查看

生成结果包含查询、参考上下文和理想答案三部分,形成完整的评估单元:

测试集输出样例

第三步:测试集质量优化与应用

生成的原始测试集需要进一步优化,才能作为可靠的评估基准。Ragas提供多种工具提升测试集质量。

测试集质量分析

通过内置分析工具检查测试集覆盖度和多样性:

# 分析测试集属性分布
analysis = testset.analyze()
print(analysis)
# 输出包含查询类型分布、实体覆盖率、平均长度等指标

人工筛选与增强

结合领域专家知识,对自动生成的测试样本进行筛选和调整。重点关注:

  • 删除歧义或无法回答的查询
  • 补充边缘场景的测试用例
  • 调整参考答案使其更符合实际应用需求

集成到CI/CD流程

高质量测试集可作为RAG系统迭代的评估基准,通过Ragas的评估API集成到开发流程:

from ragas import evaluate
from datasets import Dataset

# 使用生成的测试集评估RAG系统
test_df = testset.to_pandas()
dataset = Dataset.from_pandas(test_df)
results = evaluate(
    dataset=dataset,
    metrics=["faithfulness", "answer_relevancy"],
)

评估结果可通过可视化工具展示,直观比较不同版本RAG系统的性能:

RAG评估结果对比

总结与最佳实践

通过Ragas构建高质量RAG测试数据集的核心要点:

  1. 知识图谱是基础:投入时间优化实体提取和关系构建,这直接影响查询生成质量
  2. 多样化查询分布:根据实际应用场景调整查询类型比例,避免过度拟合单一模式
  3. 人机结合验证:自动生成+人工筛选是平衡效率和质量的最佳实践
  4. 持续迭代优化:将测试集作为活体资产,随文档库更新和用户反馈不断进化

Ragas的测试数据生成能力源自KnowledgeGraph类和QuerySynthesizer接口的灵活设计。通过自定义这些组件,可满足特定领域的测试需求。

完整实现细节可参考:

登录后查看全文
热门项目推荐
相关项目推荐