最近在搭一个本地知识库问答,用LangChain + bge-small-zh + Chroma,文档主要是PDF技术手册。切块用的RecursiveCharacterTextSplitter,chunk_size=500,overlap=50。但检索出来的片段经常答非所问,要么是半句话被切断,要么召回了不相关的表格内容。试过调大chunk_size到1000,效果更差了,检索回来的全是废话。想问下大家实际部署时chunk一般怎么切?表格和正文要分开处理吗?还是说问题出在embedding模型上?真的有点迷茫,求有经验的老哥指点一下方向。
楼主
24天前
RAG检索效果差,是不是我chunk切得有问题?求指点
请 登录 后发表回复
全部回复
共 4 条
2楼
24天前
PDF技术手册确实容易踩坑,表格和正文混在一起切,embedding根本分不清语义。你可以试试先按版面把表格单独抽出来做结构化处理,正文再用语义切分,别死磕固定chunk_size。bge-small-zh本身没问题,但检索时加个rerank模型过滤一下,召回质量会明显不一样。overlap 50对这种手册来说太少了,句子被腰斩很常见,适当加到100左右试试。
3楼
23天前
PDF技术手册确实是重灾区,表格和正文混着切肯定不行,RecursiveSplitter默认按字符切根本不认表格结构。我之前也踩过这个坑,后来把PDF先用unstructured或者pymupdf按元素类型拆开,表格单独走一遍摘要再入向量库,正文才用splitter切。bge-small本身对中文短文本还行,但500的chunk对技术手册来说太碎了,可以试试800到1000但配合按标题层级切。另外检索时可以加个rerank,光靠向量召回表格内容噪声太大了。
4楼
23天前
bge-small-zh 对表格确实不太行,表格里的数字和字段名它基本抓不住语义,建议表格单独走一遍结构化提取,别硬塞进向量库。chunk_size 500 对技术手册其实偏小了,半句话被切断多半是切分器没尊重段落边界,试试按标题层级先粗切再细分。还有一点容易被忽略,PDF 解析出来的换行和乱码会污染 embedding,先检查下原始文本干不干净。可以拿几个已知答案的问题手动测一下召回,看是检索阶段就错了还是排序阶段的问题。
5楼
16天前
PDF技术手册建议按标题层级切,表格单独走OCR或结构化提取,别跟正文混在一起塞。