杠精派
派聪明
0/512

热门评论

开普勒的小星星 2026年05月05日 13:36
引用原文:我说:「这个问题我们也想过。后来发现 overlap 在中文场景下效果一般,反而会让相同内容在 ES 里出现两次,召回的时候排在前面的几条都是同一段落的不同切片,相当于浪费 topK 名额。我们的做法是,分片之外维护一个 1MB 的父块,流式读进来防止 OOM,分片只承担向量召回,命中之后回溯到父块给大模型作为上下文。」
命中一个分片之后返回的是整个父块
点赞
回复2 取消回复
Namikaze minato 2026年05月07日 11:35
这部分的代码在哪,好像没有回溯父块的逻辑,因为压根就没存父块,只在切片读取的时候有父块,向量召回的时候,似乎拿不到父块
1
回复 取消回复
展开剩余 1 条回复

8 条评论

嘿嘿 2026年08月29日 20:14
引用原文:不用 overlap 不怕语义割裂吗?
@派聪明 项目的源码不是进行了语义的重父吗
点赞
回复1 取消回复
派聪明 2026年08月29日 20:14
你的理解是对的,这正是项目里不用 overlap 的关键原因——**父子分块(Parent-Child Chunking)机制本质上替代了 overlap 的作用**。 ##具体逻辑**overlap 要解决的问题**:句子被切在两个分片边界处时,语义不完整,单看哪个分片都答不准。 **项目的替代方案**: 1. **分片本身只承担向量召回**——它只需要“语义足够被检索命中”即可,不需要承载完整上下文; 2. **命中后回溯到1MB 的父块**——真正喂给大模型的是父块内容,父块天然包含了分片前后的完整语境,语义割裂问题在“给模型的上下文”这一层已经被消解了; 3. **多层级语义分片**(段落 →句子 → 词 → 字符递进切分)本身就在语义边界处切开,进一步降低了割裂概率。 ## 为什么 overlap 反而是负优化在中文场景 + ES召回的组合下: - overlap会让**同一段内容出现在多个分片里**; - KNN召回时,排在前面的几条可能是同一段落的不同切片; - **topK 名额被浪费**,真正多样化的有效结果被挤掉,召回多样性下降。 ## 总结| 方案 | 解决语义割裂的方式 |副作用 | |---|---|---| | overlap | 分片间重复内容 | topK 名额浪费、重复召回 | |父子分块 |命中分片→回溯父块提供上下文 |需流式读取父块(防 OOM),实现稍复杂 | 所以面试时的回答逻辑是:**不是不怕割裂,而是用“父块兜底上下文”这种更优的方式解决了割裂问题,同时避免了 overlap带来的召回重复问题。**
点赞
回复 取消回复
嘿嘿 2026年08月29日 20:11
引用原文:不用 overlap 不怕语义割裂吗?
@派聪明 项目中好像添加了吧
点赞
回复1 取消回复
派聪明 2026年08月29日 20:11
关于这个问题,资料中的原文表述是:**没有用 overlap**。 面试者的回答理由是: - overlap 在中文场景下效果一般; - 相同内容会在 ES 里出现两次,召回时排在前面的几条可能是同一段落的不同切片,浪费 topK 名额; -他们的替代做法是:分片之外维护一个 **1MB 的父块**,流式读入防止 OOM,分片只承担向量召回,命中后**回溯到父块**给大模型作为上下文。 也就是说,该项目是用「父子块机制」来缓解语义割裂问题,而不是通过 overlap。如果你印象中项目加了 overlap,可能是和其他方案(常见的 RAG实践确实多用 chunk + overlap)混淆了——按这份资料,该项目的选择是不用 overlap、改用父块回溯。
点赞
回复 取消回复
开普勒的小星星 2026年05月05日 13:36
引用原文:我说:「这个问题我们也想过。后来发现 overlap 在中文场景下效果一般,反而会让相同内容在 ES 里出现两次,召回的时候排在前面的几条都是同一段落的不同切片,相当于浪费 topK 名额。我们的做法是,分片之外维护一个 1MB 的父块,流式读进来防止 OOM,分片只承担向量召回,命中之后回溯到父块给大模型作为上下文。」
命中一个分片之后返回的是整个父块
点赞
回复2 取消回复
Namikaze minato 2026年05月07日 11:35
这部分的代码在哪,好像没有回溯父块的逻辑,因为压根就没存父块,只在切片读取的时候有父块,向量召回的时候,似乎拿不到父块
1
回复 取消回复
展开剩余 1 条回复
d4d 2026年04月23日 23:38
引用原文:分片大小默认设的是 512 字节,没有用 overlap
@派聪明 之前写的是用了overlap,到底有没有用
1
回复 取消回复

目录