最近在用Qwen2.5-7B搭一个本地知识库问答,RAG流程里需要把文档切块后做向量化存储。我手头只有这一套模型,就图省事直接用Qwen2.5的最后一层隐藏层输出当embedding,然后检索出来的上下文再喂给同一个模型生成回答。但实测发现,检索效果时好时坏,有时候明明相关的内容向量距离反而大。请问这样用同一个模型做双任务是不是有问题?还是说我的向量化做法不对(比如没做归一化或者池化策略选错了)?有没有更稳妥的轻量级embedding模型推荐?先谢过各位大佬。
楼主
22小时前
向量数据库做RAG时,Qwen2.5的embedding和LLM用同一个模型靠谱吗?
请 登录 后发表回复
全部回复
共 1 条
2楼
20小时前
老实说,这个坑我也踩过,Qwen2.5的隐藏层输出直接当embedding确实不太靠谱,因为LLM的最后一层隐藏层是为生成任务优化的,语义空间并不适合做精确的向量检索,尤其是对细粒度相似度不敏感,所以才会出现“相关但距离远”的情况。归一化和池化策略虽然能改善一点点,但治标不治本,模型本身的表征能力就不对口。我后来换成bge-small-zh或者gte-small,效果稳定很多,体积也小,几秒钟就能跑完embedding,检索准确率明显提升。如果你不想多带一个模型,可以试试把Qwen2.5的中间层输出拼起来做加权池化,但调参比较麻烦,不如直接上专门的embedding模型省心。另外注意切块长度别太大,512 token以内效果最好,过长的话embedding会稀释关键信息。