最近在搭一个本地知识库问答,数据大概2万份PDF,主要是技术文档和操作手册。目前卡在Embedding和重排的选择上:试了纯用Qwen2.5-7B做生成,但检索回来的片段经常不相关,答非所问;后来改成BGE-large做向量,加上bge-reranker重排,效果明显好了,但感觉两套模型太占显存(单卡3090),而且部署起来好麻烦。
RAG用本地Qwen2.5还是混用BGE+rerank?求个实际落地方案
全部回复
共 110 条试试把rerank砍掉只留BGE,检索top20让Qwen自己筛,显存省一半效果也不差。
说实话BGE那套效果确实是实打实的,但3090跑双模型确实紧巴巴,我后来是把rerank砍了,直接上bge-m3或者gte-large,检索精度没降太多,显存反而省出一截。你2万PDF不算海量,试试用粗排加个关键词过滤,把候选集压到50条以内,rerank只跑一次,部署起来也简单。另外Qwen做生成其实够用,问题多半出在召回,别太迷信重排。
显存不够就上Qwen3-Embedding,单卡能跑,效果不比BGE差,rerank可以先用关键词粗筛顶一顶。
BGE加rerank这套确实稳,3090上量化跑勉强够用,要不试试把reranker换成小模型?
2万份PDF的体量下,纯生成模型做检索确实容易翻车,它本身不是拿来算相似度的。BGE+reranker这条路效果稳,但3090单卡同时扛两套确实吃紧。可以试试把reranker换成量化版或者只对top20重排,显存能省不少。另外Qwen2.5也有embedding版本,你要不试试统一用它,省得维护两套。
2万份PDF纯用生成模型做检索确实容易翻车,检索和生成本来就是两回事。我之前也纠结过显存问题,后来发现BGE-large加reranker其实不用都常驻,可以先把向量检索跑完,再按需加载reranker,3090完全扛得住。另外reranker建议只对top20左右做精排,别全量跑,不然延迟很难看。
纯BGE加reranker确实是目前最稳的搭配,但3090上跑两套模型确实有点紧。其实可以试试把BGE换成一个更小的embedding模型,比如bge-small或者gte-small,再配reranker,检索质量掉得不多,显存能省不少。另外Qwen2.5-7B做生成时最好把检索片段控制在3-4条,太多了反而干扰它。你这两万份PDF如果更新不频繁,也可以考虑离线建好索引,在线只跑生成和重排。
3090单卡跑BGE加rerank确实吃紧,试试bge-m3一个模型全包了,检索重排都省事。
两万份PDF这个量级,纯靠Qwen2.5-7B做检索确实不太行,它生成还行,但语义召回不是它的强项,答非所问很正常。BGE-large加reranker这套组合目前确实是本地部署里性价比比较高的方案,效果提升明显也是意料之中。显存这块我倒是觉得不用太纠结,3090单卡跑BGE-large加bge-reranker-base其实还好,关键是别把生成模型和它们同时常驻,可以用按需加载或者把生成丢到另一张卡/另一台机器上。部署麻烦的话可以看看Infinity或者Xinference这类框架,能把embedding和rerank统一管理,省不少事。另外你PDF技术文档多,切片策略和元数据过滤可能比换模型影响更大,先把这个调好再折腾模型也不迟。
2万份PDF这个量级,BGE加reranker确实是比较稳的搭法,纯靠Qwen2.5做检索它本来就不擅长这个。显存紧张的话可以试试把embedding和rerank都量化成FP16甚至INT8,3090跑bge-large加reranker应该还是撑得住的,或者rerank换成bge-reranker-base先顶着。另一个思路是embedding用bge-small,召回阶段粗一点,靠reranker把精度拉回来,这样省显存也快不少。