最近在搭一个本地知识库问答,用的bge-large-zh-v1.5做embedding,chunk大小设了512,topk取5。但实际检索出来的片段经常语义对不上,比如问“合同违约金怎么算”,召回的却是“违约责任条款”那部分,感觉模型没理解同义改写。也试过m3e-base,效果更飘。看网上说要微调或换bge-m3,但显存只有8G,怕带不动。想问问各位老哥,你们在中文场景下都怎么选embedding模型?检索前要不要做query改写?或者是不是我的分块策略有问题?求个靠谱的调参方向。
楼主
27天前
RAG用开源模型做embedding,中文效果总差口气,大家怎么解决的?
请 登录 后发表回复
全部回复
共 83 条
2楼
1天前
同款问题折磨过,bge-large-v1.5对同义改写确实有点钝,尤其法律这种正式文本。分块512可能偏大,试试把chunk缩到256、重叠设64,让片段更聚焦。query改写值得做,把口语问法转成书面关键词再检索,比如“怎么算”转成“计算方式”,效果立竿见影。8G显存跑bge-m3的话量化版可以凑合,但别抱太大期望,主要提升在长文档。建议先调检索参数,微调成本太高不划算。
3楼
1天前
试试把chunk调到300以下,bge对长文本语义捕捉确实弱,再配个query2doc改写,效果立竿见影。
4楼
12小时前
同款问题,bge-large在长尾词和近义表达上确实拉胯。我后来试了给query做轻量改写,比如把口语化问题拆成几个关键词组合去检索,命中率能提一截。分块建议试试按语义段落切,别死守512,有些长句被硬切了语义就断了。8G显存跑bge-m3其实可以,量化到int8也就占4G多,你可以先拿小批量测测速度再决定。