最近在搭一个本地知识库问答,用的bge-large-zh-v1.5做embedding,chunk大小设了512,topk取5。但实际检索出来的片段经常语义对不上,比如问“合同违约金怎么算”,召回的却是“违约责任条款”那部分,感觉模型没理解同义改写。也试过m3e-base,效果更飘。看网上说要微调或换bge-m3,但显存只有8G,怕带不动。想问问各位老哥,你们在中文场景下都怎么选embedding模型?检索前要不要做query改写?或者是不是我的分块策略有问题?求个靠谱的调参方向。
楼主
2026-08-03
RAG用开源模型做embedding,中文效果总差口气,大家怎么解决的?
请 登录 后发表回复
全部回复
共 103 条
2楼
24天前
chunk设512对中文来说有点大了,一个块里塞了好几个语义点,检索时向量被平均掉,问违约金召回违约责任条款太正常了。试试砍到256甚至128,配合overlap 20%,召回精度会好不少。bge-m3其实8G能跑,用fp16加batch调小点就行,它多语言和长文本确实比large-zh稳。query改写这块可以先加个简单的同义词扩展或者用qwen小模型做一下,成本不高但提升挺明显的。
3楼
24天前
512的chunk对合同这种条款密集的文本可能偏大了,试试切成256甚至更小,再带点重叠,召回精度会好不少。query改写确实有用,我一般先用小模型把问题扩成两三个同义句再分别检索,命中率能提一截。bge-m3其实8G能跑,用fp16或者量化版,别一次塞太多就行。另外你topk=5可以配合rerank,bge-reranker-base不占多少显存,效果比单纯换embedding明显。
4楼
22天前
分块512太大了吧,试试256带重叠,bge-m3其实8G能跑量化版。