当前位置: 首页 > 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.cnnetsun.cn/news/3719423.html

相关文章:

  • 电子创客工作台搭建指南:从工具选型到专业配置
  • 基于Arduino的调酒机器人:从机电一体化到自动化液体处理系统
  • GetQzonehistory:轻松找回QQ空间所有历史说说的终极指南
  • BBDown完整指南:5个步骤轻松下载B站高清视频
  • 从矢量场变成强度以后,还能再变回来吗?光学仿真中最容易被忽视的信息不可逆性
  • NBM5100A与PIC18LF47K42在低功耗物联网设计中的协同应用
  • 设计模式中的原则
  • 如何通过智能直链解析工具提升网盘文件下载效率
  • 基于YOLOv8行人车辆检测系统
  • 接 AI API 别只问支不支持新模型,也要看倍率和日志
  • 数字人短视频矩阵方案落地:4个工程级踩坑分析与解决思路
  • 2026一站式AI电商创作平台推荐 全链路能力测评指南
  • Unity UI进阶:UI布局组件(Horizontal/Vertical Layout Group)使用
  • 4大核心技术揭秘:打造英雄联盟终极效率工具League Akari
  • 大模型Demo遍地跑,为什么简历上没权限和日志就挂?
  • 向量数据库实战:选型、调优与落地~系列文章23:向量数据库的成本控制:内存优化、量化压缩、冷热分层策略
  • G-Helper深度解析:华硕笔记本性能调校的进阶实战指南
  • 123、K210的神经网络加速器KPU详解
  • 手把手教你用 Milvus + LangChain 搭建《天龙八部》RAG 知识库
  • 物联网设备硬件级安全防护与SE050安全元件实战
  • html二级下拉菜单代码?别傻了,这代码分分钟让小白原地起飞
  • LangChain 项目复盘:权限和日志才是 Demo 到生产的生死线
  • ExifToolGUI图片元数据管理终极指南:免费开源工具让你的照片管理效率翻倍
  • 航空发动机燃油喷嘴焊完就裂?精密激光焊接三道防线
  • 有哪些主流的研发管理工具
  • 震惊。抓紧学习
  • 实时语音驱动NPC+AI剧情分支引擎:Epic官方认证的AI辅助开发框架首次开源解析
  • 计算机毕业设计之基于Springboot的大学生就业招聘系统
  • MySQL从入门到实战:环境搭建、SQL核心与性能优化指南
  • Orchestra API完全指南:轻松集成项目管理与自动化任务的实用教程