【AI大模型学习路线】第二阶段之RAG基础与架构——第八章(文档切分常见算法)根据每个Sentence切分?

【AI大模型学习路线】第二阶段之RAG基础与架构——第八章(文档切分常见算法)根据每个Sentence切分?

【AI大模型学习路线】第二阶段之RAG基础与架构——第八章(文档切分常见算法)根据每个Sentence切分?



欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://fighting.blog.csdn.net/article/details/147360609


前言

在面向 RAG 的文档预处理管道中,基于“句子(Sentence)”进行切分(chunking)是最直观且广泛应用的策略:它先借助 NLP 的句子分割算法将全文拆为若干独立句子,再按照固定句数、滑动窗口或语义断点将若干句子组合成块,以兼顾检索粒度与上下文连续性。下面我们从原理、常见算法、Python 实现和未来趋势四个方面详述“按句子切分”方法。

原理与优势

  • 句子完整性:直接以句子为最小单元可确保不破坏语义边界,避免模型接收到不完整的语义片段。
  • 可控粒度:通过调整“每块包含句子数”或“滑动窗口步长”,可灵活控制每个 chunk 的长度,兼顾上下文范围与检索效率。
  • 简单易实现:主流 NLP 库(NLTK、spaCy、Stanza)都提供高质量句子分割工具,开箱即用。

常见算法

在这里插入图片描述

Python 端到端示例

以下示例展示三种基于句子的切分策略:

import nltk
from sentence_transformers import SentenceTransformer
import numpy as np

# 确保已下载 punkt
nltk.download('punkt')
from nltk.tokenize import sent_tokenize

text = """人工智能(AI)大模型在自然语言处理领域取得了突破性进展。\
然而,仅依赖模型参数记忆的知识存在过时风险。RAG 通过检索外部文档,动态注入最新信息。\
基于句子的切分算法能有效保障检索粒度与上下文完整性,是 RAG 预处理的核心环节之一。"""

# 1. 句子分割
sentences = sent_tokenize(text)                                       # :contentReference[oaicite:3]{index=3}
print("切分得到句子:", sentences)

# 2. 固定句数切分:每块 2 句
fixed_chunks = [ sentences[i:i+2] for i in range(0, len(sentences), 2) ]
print("固定句数切分(2句/块):", fixed_chunks)

# 3. 滑动窗口切分:窗口 2 句,步长 1 句
sliding_chunks = [ sentences[i:i+2] for i in range(0, len(sentences)-1, 1) ]
print("滑动窗口切分(窗口=2, 步长=1):", sliding_chunks)

# 4. 语义断点切分:基于句向量余弦相似度,分割相似度骤降处
model = SentenceTransformer('all-MiniLM-L6-v2')                       # :contentReference[oaicite:4]{index=4}
embs = model.encode(sentences)
sims = [ np.dot(embs[i], embs[i+1])/(np.linalg.norm(embs[i])*np.linalg.norm(embs[i+1])) 
         for i in range(len(embs)-1) ]
# 找到最低相似度位置作为断点
split_idx = np.argmin(sims) + 1
semantic_chunks = [ sentences[:split_idx], sentences[split_idx:] ]
print("语义断点切分:", semantic_chunks)

代码解析

  • 句子分割nltk.sent_tokenize 基于 Punkt 模型进行语言无关的句边界检测,准确率高。
  • 固定句数切分:简单按索引分组,实现最低切分逻辑。
  • 滑动窗口:通过可调窗口大小与步长,生成具有重叠的上下文块,减少信息丢失。
  • 语义断点检测:利用 Sentence‑Transformers 生成句向量,计算相邻句相似度,选择最小相似度处作为主题转折点。

未来趋势

  • 自适应混合切分:结合固定、滑动与语义方法,根据文档类型和实时反馈动态选择最优策略。
  • 层次化分割与聚合:引入层次聚类或图分割(如 GRAPHSEG)算法,实现多粒度的块级与段落级协同检索。
  • 端到端学习切分:通过带标签的下游任务(QA、摘要)联合微调,将切分规则内置于模型,形成“学习切分”能力。

以上内容系统地介绍了基于句子的文档切分算法及其在 RAG 预处理中的实践,并配以 Python 代码示例,帮助您在大模型项目中灵活应用与优化句子级切分策略。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

985小水博一枚呀

祝各位老板前程似锦!财源滚滚!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值