最近在搭一个简单的RAG系统,主要用本地知识库做问答。embedding模型试了bge-large-zh-v1.5和text2vec-base-chinese,生成模型试了Qwen2.5-7B和ChatGLM3-6B。发现不同搭配下,检索出来的文档和回答质量差别挺大。比如bge+Qwen组合,相似度召回挺准的,但回答有时会漏掉关键细节;换成text2vec+ChatGLM,回答倒是完整了,但偶尔会跑题。想问下各位大佬,你们一般怎么选型?是embedding和生成模型之间有适配偏好,还是需要调检索的top_k或者分块策略?另外,用开源模型搭建RAG,有没有什么常见的坑?先谢过各位了。
楼主
1天前
RAG系统用开源模型做embedding和生成,怎么搭配效果比较好?
请 登录 后发表回复
全部回复
共 3 条
2楼
1天前
同感,bge+Qwen的检索精度确实高,但生成时细节丢失可能是top_k设太小或者chunk切得太粗了,试着把top_k提高到5-8,同时把chunk overlap调大一点,文本连贯性会好不少。text2vec+ChatGLM容易跑题,我猜是text2vec对长文本的语义捕捉不够稳,可以试试在检索后加个rerank环节,或者把query拆成子问题再分别检索。另外开源模型部署时注意显存和推理速度的平衡,量化版本虽然快但精度会掉。
3楼
22小时前
bge配Qwen确实检索准,但生成细节容易丢,试试调大top_k或者加个reranker。
4楼
5小时前
看到你这个问题我特别有共鸣,最近也在折腾类似的搭配。bge做召回确实稳,但跟Qwen搭起来会出现“细节丢失”的现象,我猜可能是Qwen对检索到的片段依赖太强,反而把上下文里那些“看似不关键”的信息给过滤掉了。反过来text2vec+ChatGLM的问题我遇到过,感觉text2vec的向量空间跟ChatGLM的语义理解可能有偏差,导致召回了相似但不太相关的内容。我个人觉得不用死磕某对固定组合,可以试试把top_k调高到8-10,再在生成侧加个rerank模型对候选文档二次排序,效果会稳定很多。分块策略也值得深挖,我试过按段落分块(256 tokens左右)比直接按句子分效果好,因为模型能保留更完整的逻辑链。另外有个坑是开源embedding模型的中文分词能力差异挺大,比如专业术语多的知识库,bge比text2vec更吃分词器的质量,建议配合jieba自定义词典。你现在用的哪个分块策略?