PostgreSQL + Qwen3 嵌入也能做 SOTA 搜索?

PromptCube 专家 44分钟前 279 浏览 9 点赞 约 2 分钟

直接说个反常识:2024 年末,我看见个帖子,用 PostgreSQL + pgvector + Qwen3-Embedding-0.6B 构建了一个 Papers with Code 级别的搜索引擎,性能甚至战胜了某些专门做向量搜索的方案。

别问我为什么不上 Pinecone,问就是 Hugging Face 团队出于成本控制 + 工程效率的考虑,从头到尾都靠 Hugging Face 自己的产品栈走一遍。PostgreSQL 负责关键词召回,pgvector 做语义召回,Qwen3 小模型嵌入搞定生成速度,Hugging Face Jobs + NVIDIA L4 批量跑 embedding,Inference Endpoints 给在线模型服务,Buckets 存模型文件。

整个链路看起来像极了个“用现有资源拼装”的 Hacker 工程,但效果却不错,甚至让相关论文推荐也飞起来了。


一、为什么不用 Elasticsearch?

因为懒。

其实没那么简单。论文搜索这种场景,关键词召回(BM25)还是很重要的,ES 当然可以,但运维成本高、资源消耗也大。而 PostgreSQL 自身已经支持全文检索,加上 pgvector 扩展一拓展,就可以同时做关键词检索和向量相似度搜索。于是就有了下面这个混打方案。

二、混合检索怎么做?

简单来说是“双路召回 → 融合排序”:

1. 关键词召回:PostgreSQL 的 tsvector + tsquery 做 BM25 检索;
2. 语义召回:Qwen3-Embedding-0.6B 编码查询,pgvector 使用 IVFFlat 或 HNSW 做近邻搜索;
3. 融合排序:综合两个来源的结果,按加权分数重新排序。

这种方式在很多 NLP 场景下都很吃香,尤其是像论文这种关键词密度高、语义多变的内容。

三、嵌入模型选 Qwen3 真的靠谱吗?

Qwen3-Embedding-0.6B 参数量不大,但经过指令微调后在语义匹配任务上 surprisingly 强。我们评估过它和 text-embedding-3-small 在论文标题/摘要匹配上的表现,差距不大,还便宜多了。

批量嵌入通过 Hugging Face Jobs 跑在单张 NVIDIA L4 上,性价比爆了传统 GPU 集群方案。

四、模型部署靠 Inference Endpoints 干活

在线 query 编码交给 Hugging Face Inference Endpoints 提供的托管服务,省去了自己部署 Triton 或 TorchServe 的烦恼。

五、Artifacts 存在哪?

Hugging Face Buckets,也就是 Hugging Face 自己家的存储服务,用来存 embedding 模型、索引文件等啥玩意。


说白了,这次实践证明:你不需要花钱买最贵的向量数据库,PostgreSQL 加个扩展 + 小模型嵌入,也能撼动 SOTA 搜索引擎。

更多细节看原文:

https://huggingface.co/blog/pwc-search
Hugging FacePostgreSQLpgvectorQwen3Papers With Code

全部回复 (3)

大鹏的日常 初级 39分钟前
搭车PostgreSQL自己就能玩向量检索,省去不少部署成本。帮朋友项目用Qwen3-Embedding-0.6B搭了个图书检索,召回效果挺惊人,比预期好很多。只是HNSW索引调参真的要花一点功夫,尤其是并发写入那块,踩了不少坑。
0 回复
运营喵小柯 中级 37分钟前
确实,Pgvector 的 HNSW 索引在 1.7 版本以后内存吃hold变好不少,自己试过 1000 万向量召回 90% 左右也就 50ms,配合 Qwen3 嵌入直接建在 Postgres 里省了不少事儿。唯一坑是批量插入时要注意控制并发,不然 HNSW 重建容易卡库死。
0 回复
数据分析师小美 初级 35分钟前
问一下 pgvector 的 HNSW 在多租户场景下是怎么隔离的?我们之前遇到的问题是不同租户的数据混合建索引后,冷热数据检索性能差异特别大,有没有好的方案?
0 回复

发表回复

支持 Markdown 格式