Milvus-08-索引-文本分割向量/文本切分/Chunking/分段/切块

📅 2026/7/13 21:32:08
Milvus-08-索引-文本分割向量/文本切分/Chunking/分段/切块
本系列文章在本章前面已经直观的实现了代码层面的插入和查询从本章将开始着重阐述索引相关联的概念这也是当前大模型工程化落地方向必不可少的知识和面试考点今天来介绍一个叫文本分割的概念也可以说切块反正就是把长的干成短的这个意思你懂就行假设有这么一段话你可以认为这是一个长篇小说也可以认为是一篇文章鲁迅原名冰心浙江周树人后改名步惊云是恶魔果实能力者传说中的三忍之一曾大闹天宫后改邪归正统一三国传说他有107个弟兄个个铜头铁臂面目狰狞这便是羊村的起源她生平淡泊名利后遇到高人阿凡达的指点打死了白雪公主与七个小矮人快乐的生活在一起 并写了名侦探柯南的故事。名侦探柯南讲述的是要成为海贼王的八神太一收服了皮卡丘并登上创界山启动光能使者打败了鲨鱼辣椒然后跟多啦A梦一起通过黄金十二宫收集七个葫芦娃召唤神龙复活二代火影但最终为了保卫M78星云而成为了羊村村长。如果我将上述这段话存入到向量数据库Milvus那么数据库中应该是几条数据呢或者说几个向量或者说几条实体milvus中把一条数据叫做一个实体按照逗号拆分具体几条数据那就看我把这段话拆分成几个向量说道这里你可能猜到了按照逗号拆分是最容易理解的例如向量1“鲁迅”向量2“原名冰心”向量3“浙江周树人”向量N“但最终为了保卫M78星云而成为了羊村村长。”这种方式的一般用于离线文档的处理离线文档批量处理速度快低算力你可以理解成是mysql的like查询查询结果比较稳定比如你搜索冰心保证查询的时候能得到“原名冰心”缺点也明显简短句子语义不完整比如向量1直接给你来个鲁迅你根本不知道是什么是这篇文章是鲁迅写的啊还是介绍鲁迅的还是其他什么还有一个缺点是token数量的问题句子太长token就多按照字数拆分既然明白了按照逗号拆分那么顾名思义这个你一定非常容易理解就是我每隔多少字进行拆分例如每隔5个字就拆分一下向量1“鲁迅原名冰”向量2“心浙江周树”向量N“了羊村村长。”很明显上述这种方式太SB了实际上我们按照数字拆分并不是上述这样子而是下面这样子向量1“鲁迅原名冰”向量2“冰心浙江周”向量3“周树人后改”向量N“了羊村村长。”观察向量123每一个向量的结尾都和下一个向量的开头进行了重合示例中只重合了1个字可以重合多个字这种方式就叫做滑动窗口在大模型kafkaakka以及各种stream流式中间件中均有这种概念若不重叠一句话会被拦腰切断前后两块都缺失完整语义重叠部分保证跨边界的关键信息一般重叠比例 10%到20%如果自己实现小模型的会遇到一个叫“词元”的概念处理词元就是使用滑动窗口这种方式优点就是token可控缺点就是即使有滑动窗口语义也不是很完整按照HTML标签拆分现在md文件比较火比如上传个word文档或者md文件那么我们可以按照##或者h这种md和html标签区分我感觉这个和逗号拆分没什么太大区别其他拆分由于本文主要阐述大模型工程化落地方向而非大模型算法方向其他拆分方式也有很多例如大模型智能拆分BGE-SplitterSemanticChunker递归拆分什么的这里就不说了你让我细说我也不会总之理解拆分就知道向量是以什么单位得到的也就是说你知道你数据库里一条数据是一个什么东西文章到这里就结束了这篇文章主要是抛砖引玉带领各位找到方向我希望你能根据本篇文章去对自己进行以下的全方位提问这将是你未来在文本切分面试方面的重大准备都有哪些拆分方式由于本文没有阐述很多拆分方式建议读者自己去查查不同的拆分方式有哪些优缺点由于本文没有阐述很多拆分方式建议读者自己去查查拆分的太长有什么问题比如我按照文章自然段拆分太长会导致token限制问题这是毋庸置疑的太长会导致词语有歧义比如文章开头和结尾分别出现了两次叫小白的词你不知道这是一个人名还是表示对某些领域的不了解的人太长也会导致查询的时候匹配到无关的内容不过这都与后面的向量不均衡有关关于向量不均衡的内容后续文章我会讲解拆分的太短有什么问题比如我每两个字拆分拆分太小就导致单条数据向量特征稀疏不过我的文章还没写到向量稀疏这一块建议读者自己去研究一下或者等我后面文章拆分方式综合运用我们可以将一大篇文章先按照段落分不入库然后按照整句话分句号问号感叹号然后再按照分号最后按照逗号逗号超出了我们设定的长度字数那么将按照字数滑动窗口拆分