跳到主要内容

切分策略选择与效果评估

选择合适的切分策略并对其进行优化,是构建高效 RAG 系统的关键步骤。

切分工具选择

根据不同应用场景,推荐使用以下切分工具:

场景推荐工具原因
普通文本 / 报告 / 网页SentenceSplitter简单快速,保持句子完整性
长文本 / Embedding 限制场景TokenTextSplitter精确控制 token 数量
精确语义块 / 摘要场景SemanticSplitterNodeParser基于语义的智能切分
技术文档、NotebookCodeSplitter保持代码结构完整性
教程、技术博客MarkdownNodeParser识别 Markdown 层级结构
教材、论文类文档HierarchicalNodeParser分层切分,保持文档结构

切分策略选择

针对不同文档类型,推荐的切分策略和关键参数如下:

文档类型推荐策略关键参数
结构化文档(Markdown、PDF、Word)HierarchicalNodeParserchunk_sizes=[2048, 512, 128]
纯文本(小说、新闻、邮件)SentenceSplitterchunk_size=500, chunk_overlap=50
代码文件CodeSplitterlanguage="python", max_chars=1000
混合文档(文本 + 表格 + 图像)Unstructured + SentenceSplitterchunk_size=500, chunk_overlap=50
长文档(书籍、报告)SemanticSplitterbuffer_size=1, breakpoint_percentile_threshold=90

通用建议:

  • 通用场景(如博客、新闻):优先使用 SentenceSplitter,兼顾速度与可用性
  • 高精度需求(如法律合同、医疗报告):使用 SemanticSplitterNodeParser,牺牲部分效率换取检索准确率提升
  • 结构化文档(如技术手册、学术论文):指定 HierarchicalNodeParser,利用文档自身层级优化分块

参数调优指南

块大小(chunk_size)

  • 小块(< 300 tokens):高精度,低上下文,适用于精确匹配场景
  • 中等块(300-800 tokens):平衡精度与上下文,适用于大多数场景
  • 大块(> 800 tokens):高上下文,低精度,适用于长文档理解场景

重叠区域(chunk_overlap)

  • 小重叠(< 50 tokens):减少冗余,提高检索效率
  • 中等重叠(50-150 tokens):平衡上下文连续性与效率
  • 大重叠(> 150 tokens):确保上下文连续性,但增加冗余

语义断点阈值(breakpoint_percentile_threshold)

  • 低阈值(< 80):产生更多小块,提高检索精度
  • 中等阈值(80-90):平衡块大小与语义连贯性
  • 高阈值(> 90):产生更大块,保持语义连贯性
参数调优总结
参数推荐范围效果
chunk_size300-800 tokens越小精度越高,越大上下文越丰富
chunk_overlap50-150 tokens越大连续性越好,但冗余也越多
breakpoint_percentile_threshold80-90越高块越大且语义越完整

切分效果评估

评估指标体系

切分效果的评估可以从三个维度进行:

  1. 检索指标

    • 召回率(Recall):检索到的相关文档占所有相关文档的比例
    • 精确率(Precision):检索到的文档中相关文档的比例
    • F1 分数:召回率和精确率的调和平均
  2. 生成质量指标

    • 相关性:生成内容与查询的相关程度
    • 完整性:生成内容是否包含完整信息
    • 准确性:生成内容是否准确无误
  3. 效率指标

    • 检索时间:从查询到返回结果的时间
    • 资源消耗:计算资源(CPU、GPU、内存)使用情况

LlamaIndex 评估器实战

LlamaIndex 提供了三个核心评估器,可以量化评估切分效果:

  • SemanticSimilarityEvaluator:通过比较生成答案与参考答案的语义相似度来评估质量
  • FaithfulnessEvaluator:检测幻觉,确保生成的答案忠实于给定的上下文
  • RelevancyEvaluator:评估答案与问题的匹配度以及上下文的辅助作用
from llama_index.core.evaluation import (
SemanticSimilarityEvaluator,
FaithfulnessEvaluator,
RelevancyEvaluator
)
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core import Settings


def quick_evaluation_demo():
"""快速评估演示:使用三种评估器对切分结果进行质量评估"""

# 1. 初始化三种评估器
# 语义相似度评估器:比较答案与参考答案的语义接近程度
semantic_evaluator = SemanticSimilarityEvaluator(
embed_model=Settings.embed_model,
similarity_threshold=0.8
)
# 忠实度评估器:检测幻觉,确保答案源于上下文
faithfulness_evaluator = FaithfulnessEvaluator(llm=Settings.llm)
# 相关性评估器:评估答案与问题及上下文的匹配度
relevancy_evaluator = RelevancyEvaluator(llm=Settings.llm)

# 2. 准备测试数据并切分
sample_document = """
人工智能(Artificial Intelligence,AI)是计算机科学的一个分支,
它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。
机器学习是人工智能的一个核心研究领域,它使计算机有能力在不被明确编程的情况下进行学习。
深度学习是机器学习的子集,它基于人工神经网络的表征学习方法。
"""

splitter = SentenceSplitter(chunk_size=200, chunk_overlap=30)
chunks = splitter.split_text(sample_document)
print(f"文档已切分为 {len(chunks)} 个片段")

# 3. 定义测试数据
test_query = "什么是人工智能?"
test_response = "人工智能是计算机科学的一个分支,研究如何让机器表现出智能行为。"
test_reference = "人工智能是计算机科学的一个分支,企图了解智能的实质"

# 4. 执行三项评估
semantic_result = semantic_evaluator.evaluate(
query=test_query, response=test_response,
reference=test_reference, contexts=[chunks[0]]
)
faithfulness_result = faithfulness_evaluator.evaluate(
query=test_query, response=test_response, contexts=[chunks[0]]
)
relevancy_result = relevancy_evaluator.evaluate(
query=test_query, response=test_response, contexts=[chunks[0]]
)

# 5. 输出综合评估结果
metrics = {
"语义相似度": semantic_result.score,
"忠实度": faithfulness_result.score,
"相关性": relevancy_result.score
}
for metric, score in metrics.items():
status = "通过" if score >= 0.7 else "未通过"
print(f"{metric}: {score:.3f} [{status}]")

avg_score = sum(metrics.values()) / len(metrics)
print(f"平均分数: {avg_score:.3f}")
注意事项

上述代码假设已通过 Settings 全局配置好 LLM 和 Embedding 模型。运行前请确保已设置 OPENAI_API_KEY 环境变量或替换为其他模型配置。

最佳实践总结

通用最佳实践
  1. 了解你的数据:在切分之前,充分了解文档的结构、内容和特点
  2. 选择合适的策略:根据文档类型和应用场景选择最适合的切分策略
  3. 调整参数:根据实际效果调整切分参数,如块大小、重叠区域等
  4. 评估效果:建立评估体系,定期评估切分效果并优化策略
  5. 混合使用:结合多种切分策略,发挥各自优势

参考文献

  1. LlamaIndex 官方文档 - Node Parsers
  2. LlamaIndex 官方文档 - Evaluating
  3. 5 Chunking Strategies for RAG