掘金 人工智能 2024年07月08日
向量数据库选择浅谈
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文主要介绍了向量数据库的选择依据,并对比了Qdrant、Weaviate、Milvus、Faiss等主流向量数据库的优缺点,以及它们在检索方式上的区别,为新手选择合适的向量数据库提供参考。

🤔 **Qdrant** Qdrant是一个开源的向量数据库,它使用Rust语言开发,具有以下特点: * 允许在一个集合中存储多种类型的向量,例如图像、文本等。 * 资源占用少,API简单易懂,并提供可视化页面,适合初学者使用。 * 不支持混合检索,功能相对较弱。

🤔 **Weaviate** Weaviate也是一个开源的向量数据库,使用Go语言开发,拥有以下特点: * 性能相对较好,支持内置嵌入。 * 支持文本搜索和GraphQL API。 * 支持S3备份,功能强大。 * 不提供可视化页面,学习曲线较陡峭。

🤔 **Milvus** Milvus是一个开源的向量数据库,使用Go和C++语言开发,具有以下特点: * 提供官方支持的可视化操作界面。 * 拥有较高的搜索准确率和丰富的SDK。 * 支持GPU加速,对大数据量友好。 * 官网API稳定易懂,学习成本相对较低。

🤔 **Faiss** Faiss是一个由Facebook开源的向量数据库,使用C++语言开发,主要特点如下: * 使用GPU加速,擅长处理庞大数据集的快速最近邻搜索。 * 支持多种搜索技术,适应不同的技术风格。 * 不提供可视化界面和API,学习成本较高。

🤔 **检索方式对比** * **Milvus:** 多向量搜索,适合复杂的场景,例如一个实体可以通过多个不同的向量表示。 * **Weaviate:** 混合搜索,结合了向量检索和BM25关键词搜索,可以提供更精细化的匹配结果。 * **Qdrant:** 向量检索,支持关键字全文过滤。 * **Faiss:** 支持批量查询,利用GPU高效索引。

初见大模型

作为新手接触大模型后,LLM模型、Embedding模型、rank模型、vector模型等等选择上可谓是一步一个坑,迷茫的走在迷茫的大路上。总之各种途径去选择合适的模型,今天了解下向量数据库选择依据。

借鉴前人

学习之前先看看大家都在关注什么,主要看市面上那个火,大厂们关注那个、开源项目用的那个?为此看了dify、langchain、llama-index等框架里面默认用的那些。

选择合适的向量数据库

共性

现在聊聊他们各自的特点

数据库QdrantWeaviateMilvusFaiss
开源且可自托管
开源协议Apache-2.0BSDApache-2.0MIT
开发语言RustGoGo, C++C++
Github Stars (k)18.810.228.129.4
首次发布时间2021201920192017
SDK客户端Python, JS, Go, Java, .Net, RustPython, JS, Java, GoPython, Java, JS, GoPython,Java,JavaScript,C++
托管云服务
内置文本嵌入
混合检索✅表内多向量混合
元信息筛选
BM25支持倒排索引
文本搜索
Langchain集成
Llama-index集成
Geo地理信息搜索
多租户支持
最大维度无限制6553532768
索引种类HNSWHNSWANNOY, FAISS, HNSW, ScANNFAISS, HNSW
分片静态分片静态分片动态分片不支持提供
Facets(带有计数的聚合)
Rest API
调用内置LLM用于RAG-✅Generative Search-

总结个人观点

数据库说明个人观点
Qdrant1. 一个集合中可以存多种向量(图片、文字等)2. 资源占用相当少API简单易懂,有可视化页面,初学者友好,不支持混合检索,功能不够强大
Weaviate1. 性能相对不错2. 支持内置嵌入3. 支持文本搜索4. GraphQL API5. 支持S3备份功能强大,花活挺多,内置嵌入初学者没啥用,没有可视化页面也不友好
Milvus1. 官方支持的可视化操作界面2. 较高的搜索准确率3. 丰富的SDK4. GPU加速功能同样强大,支持GPU加速对大数据量友好,官网API稳定易懂,对比mysql学习
FaissGPU加速的高速检索,特别擅长处理庞大数据集的快速最近邻搜索;2.适应不同技术风格的搜索技术一直强调GPU加速,可能是真的强

检索方式对比

多向量检索:适合复杂的场景,例如当一个实体可以通过多个不同的向量表示时。这适用于同一数据(如一个句子)通过不同嵌入模型处理,或当多模态信息(如个人的图像、指纹和声纹)转换成各种向量格式的情况。通过表范围内的“多路召回”,并给这些向量分配权重,它们的综合作用可以明显增加召回能力,并提高搜索结果的有效性。

BM25和简单的关键词搜索有什么区别?

简单的关键词搜索通常基于词频:如果一个词在文档中出现,那么这个文档就被认为是相关的。这种方法可能只计算关键词的出现次数,并且所有关键词都被视为同等重要。

BM25则是基于IF-IDF(词频-逆文档率算法)采用更复杂的算法,不仅考虑词频,还考虑文档长度和词的逆文档频率(即在所有文档中的稀有程度)。这意味着BM25可以提供一个更为精细化的相关性评分,更好地反映查询与文档的匹配程度

综上所述

对于新人入门尝试可以使用drant,学习成本低。

具体还得看业务需求,是否有复杂的逻辑,比如多模态需求、前端开发能力等可以使用Milvus,社区也比较活跃。

个人对Weaviate接受程度不高,初学者学习有点费劲,但是网上weaviate的文章还是挺多的,于用生产。

参考文章https://blog.51cto.com/u_11908275/11170159

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

向量数据库 文本语义检索 Qdrant Weaviate Milvus Faiss
相关文章