新闻详情

新闻详情

首页 / 资讯中心 / 详情

RAG原理-文档分割

发布时间:2026/9/27 21:52:34来源:尧图网络
RAG原理-文档分割
文档分割位于“文档解析”和“向量化”之间。它决定知识以什么粒度进入向量数据库也直接影响检索召回率、上下文完整性和最终回答质量。一、为什么需要文档分割原始文档通常篇幅较长直接将整篇文档向量化会带来几个问题单个向量包含多个主题语义表达不够聚焦检索命中后会携带大量无关内容文本可能超过 Embedding 模型或大模型的上下文限制无法精确定位答案所在的段落、页码或章节。因此需要把文档拆成若干较小且语义相对完整的Chunk原始文档 ↓ 清洗与解析 结构化文本 ↓ 文档分割 Chunk 1 / Chunk 2 / Chunk 3 / ... ↓ Embedding 向量 原文 元数据二、五类分割方式对比分割方式核心做法优点局限按句子分割一个或多个完整句子组成一个 Chunk边界自然、实现简单句子过短时上下文不足按字符数切分达到固定长度后直接切开Chunk 大小稳定容易从句子或词语中间截断语义不连贯固定分隔符 重叠按换行、段落等边界切分并保留相邻重叠内容能缓解边界信息丢失分隔符不稳定时效果有限递归分割依次尝试段落、换行、句子、空格等分隔符兼顾长度控制与语义完整性需要根据语言和文档结构配置分隔符语义分割根据 Embedding 相似度或语义变化点确定边界更贴近真实主题计算成本更高阈值和模型会影响结果实际 RAG 项目中递归分割通常是更稳妥的默认方案固定字符切分更适合格式简单、结构稳定的文本。三、三个关键参数1.chunk_size表示单个 Chunk 的目标最大长度。设置过大会让一个 Chunk 混入多个主题设置过小则会丢失上下文。2.chunk_overlap表示相邻 Chunk 之间重复保留的内容用于避免答案恰好落在切分边界上。Chunk 1ABCDEFGHIJ Chunk 2 GHIJKLMNOP └─ overlap ─┘重叠并非越大越好。重叠过大会增加向量数量、存储成本并让检索结果出现大量重复内容。3.separators递归分割会按照分隔符优先级逐级尝试。中文文本可优先保留段落和完整句子separators[\n\n,\n,。,,,,, ,]最后的空字符串是兜底分隔符确保超长文本最终仍能被切开。四、固定字符分割示例CharacterTextSplitter适用于分隔规则比较明确的文本fromlangchain_text_splittersimportCharacterTextSplitter textRAG 包含检索和生成两个阶段。文档需要先完成清洗、分割和向量化。用户提问后系统会召回相关片段并交给大模型生成答案。splitterCharacterTextSplitter(separator\n\n,chunk_size50,chunk_overlap10,length_functionlen,)documentssplitter.create_documents([text])forindex,documentinenumerate(documents,start1):print(fChunk{index}:{document.page_content!r})参数含义separator优先使用的切分边界chunk_size目标块大小chunk_overlap相邻块的重叠长度length_function长度计算方式这里使用 Python 的len。五、递归分割示例RecursiveCharacterTextSplitter会从前到后尝试多个分隔符只有文本仍然过长时才继续使用更细粒度的分隔符。fromlangchain_text_splittersimportRecursiveCharacterTextSplitter text第一章 RAG 的基本流程 RAG 会先从知识库检索与问题相关的内容再让大模型基于检索结果生成答案。 第二章 文档分割 合理的 Chunk 应尽量表达一个完整主题同时满足 Embedding 模型的长度限制。splitterRecursiveCharacterTextSplitter(separators[\n\n,\n,。,,,,, ,],chunk_size80,chunk_overlap15,length_functionlen,is_separator_regexFalse,)documentssplitter.create_documents(texts[text],metadatas[{source:rag_notes.md,chapter:文档分割}],)forindex,documentinenumerate(documents,start1):print(fChunk{index})print(document.page_content)print(document.metadata)print(-*40)这段代码还展示了一个重要实践切分时同步保留source、章节、页码等元数据方便后续引用和溯源。六、递归分割的工作过程假设分隔符优先级如下[段落边界, 换行, 句号, 逗号, 空格, 字符]处理流程为先尝试按段落切分如果某个段落仍超过chunk_size继续按换行切分仍然过长时再依次尝试句号、逗号和空格最后才按字符强制切开合并较短片段并保留设定的chunk_overlap。这样既能限制 Chunk 长度又能尽可能保留自然语言结构。七、场景选择建议没有适用于所有项目的固定数值应根据数据和问题类型进行评估场景推荐策略FAQ、短问答较小 Chunk突出单一问题与答案产品手册、技术文档按标题和段落递归切分保留适度重叠合同、制度文件优先按条款切分并保留条款编号代码文档按类、函数或代码块切分不要从函数中间截断扫描 PDF先进行 OCR 和版面恢复再按章节或段落切分调参时重点观察检索结果是否包含完整答案Top-K 结果中是否出现大量重复 Chunk一个 Chunk 内是否混入多个无关主题标题、页码和来源信息是否正确保留召回内容拼接后是否超过模型上下文限制。八、常见问题与优化方向问题 1答案被切在两个 Chunk 中适当增加chunk_overlap或优先使用句子、段落等自然边界。问题 2检索结果重复度高减小重叠比例并在检索后增加去重或重排步骤。问题 3表格和代码被切碎先识别内容类型再使用表格、Markdown 标题、函数或代码块专用的切分规则。问题 4Chunk 语义仍然混乱采用“结构化切分 递归切分”的组合策略对复杂文档可进一步使用语义分割。九、核心结论文档分割的目标不是机械地把文本切短而是生成大小可控、语义完整、能够追溯的知识单元。chunk_size决定信息粒度chunk_overlap用于补偿边界信息丢失。固定长度切分简单但容易破坏语义递归切分更适合作为通用默认方案。中文文本应补充中文标点分隔符避免只配置英文句号和空格。最终参数必须结合真实问题集通过召回结果和回答质量持续评估。一句话总结好的文档分割要在“长度可控”和“语义完整”之间取得平衡。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Xcelium混合仿真避坑指南:Verilog/VHDL/SystemC协同实战 2026/9/27 23:31:20

Xcelium混合仿真避坑指南:Verilog/VHDL/SystemC协同实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
5分钟搞定ESP32/ESP8266开发环境:Arduino IDE 2.0国内镜像配置指南 2026/9/27 23:31:13

5分钟搞定ESP32/ESP8266开发环境:Arduino IDE 2.0国内镜像配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
华为NE05E/NE08E物理层时钟同步配置与故障排查实战 2026/9/27 23:31:13

华为NE05E/NE08E物理层时钟同步配置与故障排查实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
自动语音识别(ASR)技术全解析:从原理到工程实践 2026/9/27 23:31:13

自动语音识别(ASR)技术全解析:从原理到工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
VSCODE加ESP-IDF配置指南:ESP32开发环境搭建与调试 2026/9/27 23:31:06

VSCODE加ESP-IDF配置指南:ESP32开发环境搭建与调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Linux 上 WFDB 心电信号分析实战:从 wfdb.tar.gz 到 HRV 频域分析 2026/9/27 23:31:06

Linux 上 WFDB 心电信号分析实战:从 wfdb.tar.gz 到 HRV 频域分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉