分块
大模型分块之后,需要emdedding成高维度向量存储,用于后期的向量搜索。
分的太大有什么问题:
分词之后,块太大导致向量维度会丢失,损失精度
分的太小有什么问题:
太小导致块太多,干扰搜索
分块方式
简单指定长度
CharacterTextSplitter
设置固定大小,设置重叠度
递归分块
RecursiveCharacterTextSplitter
设置分隔符,设置分隔符的优先级
设置重叠度
语义分块
SemanticSplitterNodeParser
缓冲区大小:buffer_size
设置断点百分位:breakpoint_percentile_threshold
结构化分块
Unstructured基于文档结构分块
Basic策略
ByTitle策略
优化技巧
带滑动窗口的句子切分
选择核心句子,设置窗口大小,获取全面上下文,切块时需要设计
分块时混合生成父子文本块
切分阶段进行父子文档切分,为检索而做
存储阶段子文档进行向量数据库存储,便于解锁
父文档进行关系型数据库存储,便于追踪详细数据
分块时为文本块创建元数据
分块阶段针对文本进行元数据生成,比如年份,作者,文件名,类型,页码等
在分块时形成有级别的索引
可以将多个文档分别生成摘要,形成了不同的层次,检索的时候可以分层次进行检测,先检测年份,再到作者再到细节等