最近在做RAG项目,用的Milvus + bge-large-zh,文本分块固定512字符,overlap设了64。检索出来的top5结果总感觉相关度不够,比如问“合同违约金的计算方式”,召回的片段却是合同里其他条款的内容。手动看了一些chunk,发现很多语义完整的段落被切碎了,尤其是有小标题和列表的地方。想问问大家,这种情况一般是分块策略的问题,还是embedding模型本身对长文本的语义捕捉能力有限?有没有比较系统的调优路径可以参考?先谢过各位了。
最近在做RAG项目,用的Milvus + bge-large-zh,文本分块固定512字符,overlap设了64。检索出来的top5结果总感觉相关度不够,比如问“合同违约金的计算方式”,召回的片段却是合同里其他条款的内容。手动看了一些chunk,发现很多语义完整的段落被切碎了,尤其是有小标题和列表的地方。想问问大家,这种情况一般是分块策略的问题,还是embedding模型本身对长文本的语义捕捉能力有限?有没有比较系统的调优路径可以参考?先谢过各位了。
512字符固定切确实太粗暴了,碰到小标题和列表基本必碎。我之前也遇到过类似情况,后来改成按标题层级+语义段落切,召回明显好转。你的case感觉更像是分块把“违约金计算方式”这个完整语义单元切散了,embedding再好也救不回来。建议先别急着换模型,拿几个bad case手动重切一下,对比召回效果,能快速定位是切分还是模型的问题。