当前位置: 首页 > news >正文

RAG文档切分

1、为什么切分

  • 避免无关内容对结果影响,提升检索精度
  • 突破Token数量限制,控制经济成本
  • 提升信噪比,减少信息干扰,物理抑制大模型“幻觉
  • 元数据挂载,数据治理与溯源
  • 混合架构中提升多路召回精确度

2、切分策略

具体切分时,可以采用如下策略,具体采用哪种,主要取决于在实际使用场景当中,对于语义连贯性,完整性的要求:

  1. 按照固定字符数或 Token 数来切分,但可能会在不适当的位置切断句子,导致语义不连贯
  2. 语义切分:根据文本的语义内容切分,旨在保持相关信息的集中和完整,适用于需要高度语义保持的场景。
    1. 处理速度较慢,且可能出现不同块之间长度极不均衡的情况。
    2. 具体切分过程为:将相邻的几个句子拼成一个句组。对所有句组进行嵌入,并比较嵌入向量的距离,找到语义变化大的位置,根据阈值确定切分点(比如计算相邻句子嵌入向量的余弦距离,取距离分布的第 N 百分位值作为阈值,高于此值则切分)。按照切分点切分出若干个语义段,并合并某些长度很短的语义段。
  3. 递归使用多个分隔符切分,同时尽量保证字符数或 Token 数不超出限制。能保证不切断完整的句子。

3、RecursiveCharacterTextSplitter

RecursiveCharacterTextSplitter(递归字符文本切分器)是最常用的切分器,它由一个字符列表作为参数,默认列表为["\n\n", "\n", " ", ""],并且会尝试按顺序使用这些字符进行切分,直到块足够小。由此尽可能地将所有段落(然后是句子,最后是词)保持在一起,因为这些段落通常看起来是语义上最相关的文本片段。

同时为了保证段之间语义完整,可以设置每个块之间有一部分重叠

举例:

以下是一个完整的 Python 代码示例,演示如何使用 RecursiveCharacterTextSplitter 进行文本切分:

# 安装必要的库 # pip install langchain-text-splitters # 导入所需模块 from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_community.document_loaders import UnstructuredWordDocumentLoader #加载文档 docs = UnstructuredWordDocumentLoader( file_path="assets/sample.docx", mode="single" ).load() #切分为文本块 chunks = RecursiveCharacterTextSplitter( separators=["\n\n", "\n", "。", "!", "?", "……", ",", ""], # 分隔符列表 chunk_size=400, # 每个块的最大长度 chunk_overlap=50, # 每个块重叠的长度 length_function=len, # 可选:计算文本长度的函数,默认为字符串长度,可自定义函数来实现按 token 数切分 add_start_index=True # 可选:块的元数据中添加此块起始索引 ).split_documents(docs) #输出切分结果 print(chunks)

这段代码展示了 RecursiveCharacterTextSplitter 的基本用法:首先加载文档,然后配置切分器的参数,最后执行切分操作并输出结果。

整个切分过程可以通过如下流程图所示:

http://www.jsqmd.com/news/1284295/

相关文章:

  • Halcon与WPF融合的机器视觉开发框架解析
  • 基于Arduino与3D打印的低成本四轴机械臂DIY全攻略
  • AI智能体时代已经到来 普通开发者如何抓住下一波技术红利
  • LTE Cat 1bis模块与ARM Cortex-M4的物联网通信方案
  • 国产高精度标定设备新选择:弘澧科技联合标定系统全解析(附性能对比与实测数据)
  • 2026 上半年论文降重行业全景盘点:主流 AIGC 检测平台算法迭代亮点与对应避坑方案
  • 技术选型年度复盘:2026年最值得投资的5个技术基础设施
  • 航空航天、低空与工业控制场景:泽天智航全域算力应用与市场观察
  • 麦小昆小车视觉巡线走方阵:从PID控制到状态机的完整实现
  • PyTorch 张量基础(一)
  • 微电网两阶段鲁棒优化调度与Matlab实现
  • 高效智能英雄联盟工具深度解析:League Akari完整实战指南
  • 网络上今年刚刚出现的新事物
  • (2026最新)芜湖本地人必选的靠谱漏水检测维修推荐:正规防水补漏防水-卫生间/厨房/屋顶/阳台/外墙渗漏水精准测漏,本地人的信赖之选 - 安佳防水
  • 会计专业学生找工作,怎么提升简历竞争力?
  • MiniSpring框架学习笔记-Pointcut:如何批量匹配代理方法?
  • SmartStor如何备份和恢复操作系统文件
  • 区块链服务商排名调整,场景深度绑定成关键变量
  • AI 写歌 App 推荐:2026中文商用写歌工具横向对比
  • (2026最新)苏州本地人必选的靠谱漏水检测维修推荐:正规防水补漏防水-卫生间/厨房/屋顶/阳台/外墙渗漏水精准测漏,本地人的信赖之选 - 安佳防水
  • Python作业实战:函数封装与文件操作技巧
  • 【泄底】Spring Has Come - 梓崎优
  • DIY焊接健身一体架:硬件工程师的硬核桌面改造方案
  • 一文吃透 GB/T 4208-2017 IP 防护标准|代码释义、测试流程、国标与 IEC 差异、工程避坑指南
  • SLO2016与PIC18F97J60在工业物联网中的组合应用
  • C++组合关系:从类包含到现代软件设计实践
  • Postman实战:从零构建GraphQL API测试全流程指南
  • InnoDB 行级锁与意向锁
  • LTE Cat 1bis与PIC18微控制器在美洲物联网中的应用
  • 3D打印与激光切割融合制造:从设计到实战的混合制造指南