福布斯AI50榜单中唯一开源向量数据库:Weaviate

它在数据持久化和容错性上表现非常好、支持混合搜索、支持水平扩展,同时又保持了轻量化。官方主打做AI时代的原生数据库,减少幻觉、数据泄漏和厂商绑定。

第一家,是一直以来在北美市场生态建设做的非常好的“松果”(Pinecone),产品做的非常好,拥有目前最强的产品生态和文档建设,CEO为前AWS&Yahoo的研发总监,年初刚刚发布了Serverless版本的新产品。你所知道的:Notion、微软、Shopify、Klarna(欧洲“支付宝”)、ClickUp、HubSpot、HelpScout、TaskUS、Disco、Frontier、GONG、Sixfold、Godaddy、InpharmD、YCombinator等等都是他们的客户。他们在去年“寒冬”中就募集了1亿美元,目前公司估值7.5亿美元。

另外一家,是和Pinecone同年建立公司,但是选择了开源商业化路线的Weaviate,在2023年公司人数只有65人(Pinecone一半)的情况下,保持非常高的发布和产品迭代频率,B轮融资5000万美元,目前估值2亿美元。Pinecone支持的ServerlessSaaS服务,Weaviate同样也是支持的。

不论是从以下哪个角度来看,它都值得我们来试着使用,尤其是你需要稳定不出错的私有化部署,并且不希望进行复杂的运维时:

好了,接下来,让我们来快速上手非常简单,数据相对安全可靠,并且程序本身不失轻量的向量数据库吧。

当然,如果你只想验证下向量数据库,了解下GTE模型的,也可以选择更小尺寸的GTESmall,相比较上面的大尺寸模型,精度并未下降太多(当然,有资源的情况下,还是建议跑大一些的模型,效果会更棒)。

但是,考虑到很多同学并不会使用向量化模型(EmbeddingModel),所以这里我们增加一个简单的验证环境,来展示下如何使用向量化模型。

当然,即使不使用Docker作为Python运行环境,我们也可以使用诸如Conda等支持环境隔离的方案,来运行我们的程序代码。

当Conda就绪后,只需要执行下面的代码,就能够获得一个完全干净的环境啦:

importtorch.nn.functionalasFfromtransformersimportAutoTokenizer,AutoModel#定义输入内容input_texts=["天气好热,哪里有卖冰棍的","今天好冷,该多穿两件","夏天","冬天"]#指定预训练模型,在线模型"thenlper/gte-base-zh",此处使用本地目录中的模型model_id="./thenlper/gte-small"#加载分词器和模型tokenizer=AutoTokenizer.from_pretrained(model_id)model=AutoModel.from_pretrained(model_id)#对输入内容进行分词、编码batch_dict=tokenizer(input_texts,max_length=512,padding=True,truncation=True,return_tensors='pt')#获取Embeddingsoutputs=model(**batch_dict)embeddings=outputs.last_hidden_state[:,0]#标准化embeddings,使用L2归一化,使其长度为1embeddings=F.normalize(embeddings,p=2,dim=1)#计算相似度,选择第一个元素,和除了第一个元素进行比较scores=(embeddings[:1]@embeddings[1:].T)*100#打印结果分数print(scores.tolist())将上面的代码保存为usage1.py,我们就可以准备运行模型啦。想要通过上面的代码运行模型,我们还需要安装两个基础的Python依赖:

pipinstalltorchtransformers当依赖安装完毕,我们可以执行pythonusage1.py,执行结果类似下面:

#pythonusage1.py[[80.17919921875,82.7370376586914,84.4228286743164]]如果你觉得上面的代码比较冗长,我们还可以使用SentenceTransformer的方式来运行模型:

fromsentence_transformersimportSentenceTransformerfromsentence_transformers.utilimportcos_sim#定义输入内容sentences=["天气好热,哪里有卖冰棍的","今天好冷,该多穿两件","夏天","冬天"]#指定预训练模型,在线模型"thenlper/gte-base-zh",此处使用本地目录中的模型model_id="./thenlper/gte-small"#加载SentenceTransformer模型model=SentenceTransformer(model_id)#获取向量embeddings=model.encode(sentences)#计算第一个句子(index0)和第二个句子(index1)的嵌入向量之间的余弦相似度,并打印结果print(cos_sim(embeddings[0],embeddings[1]))将上面的代码保存为usage2.py,然后我们完成必要的依赖安装:

pipinstallsentence_transformers然后,执行pythonusage2.py,我们就能够得到相似度结果了:

了解了通常情况下,我们如何使用向量模型,那么接下来,我们来看看如何使用Weaviate。

Weaviate和其他向量数据库产品或者用户量更大的支持向量功能的数据库不同的是,它的原生向量模块。

我们可以使用下面的配置,一键启动一个能够将我们输入的普通文本内容,自动转换为向量检索、相似度计算的向量数据库服务。

你可以选择Python、JavaScript(TS)、Java、Go、PHP、Ruby、C#等方式来完成Weaviate的调用。

#cdweaviate-quickstart#gomodtidygo:downloadinggopkg.in/check.v1v1.0.0-20201130134442-10cb98267c6cgo:downloadinggithub.com/kr/prettyv0.3.1go:downloadinggithub.com/rogpeppe/go-internalv1.11.0go:downloadinggithub.com/kr/textv0.2.0接着,执行gorunmain.go运行程序,程序将自动创建向量数据的索引,并查询我们输入的内容,获取最相近的计算结果,最终的输出类似下面这样:

在这里,再和大家展开聊几个技术细节吧。

在上面的Docker配置中,我们能够看到一个我定义的向量转换服务。

...t2v-transformers:image:soulteary/t2v-transformers:2024.06.27environment:#setto1toenableENABLE_CUDA:0ports:-9090:8080这个Docker服务中的soulteary/t2v-transformers:2024.06.27,包含了我们上文中提到的通义实验室团队的GTE模型。将GTE模型转换为一个可以被向量数据库调用的服务,其实也很简单。

Dockerfile中的内容是这样的,我们只需要将HuggingFace或ModelScope中下载的模型,在构建服务的时候,扔到/app/models/model中即可:

FROMsemitechnologies/transformers-inference:customCOPY./thenlper/gte-small/app/models/model然后,执行命令完成镜像的构建:

dockerbuild-tsoulteary/t2v-transformers:2024.06.27.最后,将服务的访问地址和启用模块名称,配置在weaviate容器服务的环境变量中即可。

在上面的代码中,有一段代码是关键:

objects:=make([]*models.Object,len(items))fori:=rangeitems{objects[i]=&models.Object{Class:"TraditionalFestival",Properties:map[string]any{"SolarTerms":items[i]["SolarTerms"],"Title":items[i]["Title"],"Author":items[i]["Author"],"Poem":items[i]["Poem"],"Description":items[i]["Description"],},}}batchRes,err:=client.Batch().ObjectsBatcher().WithObjects(objects...).Do(context.Background())在上面的代码中,我们将下面的数据按照“字段”进行了数据入库:

where:=filters.Where().WithPath([]string{"author"}).WithOperator(filters.Equal).WithValueString("陆游")result,err:=client.GraphQL().Get().WithClassName("TraditionalFestival").WithFields(fields...).WithNearText(nearText).WithLimit(2).WithWhere(where).Do(context.Background())再次执行代码,我们就可以得到过滤后的结果啦:

#gorunmain.goQueries[夏天吃瓜,冰棍也行吧]Time:16.928206ms{"data":{"Get":{"TraditionalFestival":[{"author":"陆游","description":"《月令七十二候集解》有载:“立,始建也。春气始而建立也。”在生生不息的春风中,一年的序幕由此开启。我们用一颗丰盈而善良的心,向着春意盎然的天地间走去。立春丨一候东风解冻,二候蜇虫始振,三候鱼陟负冰。","poem":"春盘春酒年年好,试戴银旛判醉倒。今朝一岁大家添,不是人间偏我老。","solarTerms":"立春","title":"木兰花·立春日作"}]}}}%向量数据落地存储的膨胀问题默认情况下,我们启动weaviate数据库后,一个空的数据库目录大概是112KB左右。

du-hsweaviate_data112Kweaviate_data而本文中,我们使用和建立向量索引的数据是12KB。

du-hstraditional-festival.json12Ktraditional-festival.json如果我们完成向量数据的索引,之前的数据库目录将膨胀至556KB:

du-hsweaviate_data556Kweaviate_data增长的数据量相比原始数据,膨胀了37倍之多,在做内容的向量索引的时候,我们需要进行数据的容量预估。(目前Weaviate使用的量化方案是PQ、BQ)

当然,解决这个问题的方法有很多,包括使用低维度一些的模型(本文使用的是512维的模型),或者不要对所有的内容都建立索引(本文对五个字段都进行了索引)。

--EOF

我们有一个小小的折腾群,里面聚集了一些喜欢折腾、彼此坦诚相待的小伙伴。

THE END
1.一文带你读懂向量数据库(上)澎湃号·湃客澎湃新闻什么是向量数据库? 向量数据库的概述:向量数据库是一种数据库,专门设计用于存储和查询向量数据,常用于机器学习和数据科学领域。向量数据库可以高效地存储大规模的向量 什么是向量数据库? 向量数据库的概述:向量数据库是一种数据库,专门设计用于存储和查询向量数据,常用于机器学习和数据科学领域。向量数据库可以高效地存https://m.thepaper.cn/kuaibao_detail.jsp?contid=27773552
2.什么是向量数据库向量数据库简介向量数据库是一种专门用于存储和查询向量数据的数据库。向量数据的典型结构是一个一维数组,其中的元素是数值(通常是浮点数)。这些数值表示对象或数据点在多维空间中的位置、特征或属性。例如: 在自然语言处理中,一篇文章可以用一个词向量表示,每个词可以用一个数字表示其在词向量空间中的位置。 在图像处理中,一张图https://cloud.tencent.com/developer/techpedia/1953
3.2024年精选推荐的16个向量数据库:提升你的AI应用性能在人工智能时代,向量数据库已成为数据管理和AI模型不可或缺的一部分。向量数据库是一种专门设计用来存储和查询向量嵌入数据的数据库。这些向量嵌入是AI模型用于识别模式、关联和潜在结构的关键数据表示。随着AI和机器学习应用的普及,这些模型生成的嵌入包含大量属性或特征,使得它们的表示难以管理。这就是为什么数据从业者https://juejin.cn/post/7368419638987161600
4.向量数据库一文全面了解向量数据库的基本概念原理算法选型向量数据库的原理和实现,包括向量数据库的基本概念、相似性搜索算法、相似性测量算法、过滤算法和向量数据库的选型等等。向量数据库是崭新的领域,目前大部分向量数据库公司的估值乘着 AI 和 GPT 的东风从而飞速的增长,但是在实际的业务场景中,目前向量数据库的应用场景还比较少,抛开浮躁的外衣,向量数据库的应用场景还https://blog.csdn.net/a2875254060/article/details/139222079
5.列式数据库和向量化语言&开发SiddharthTeotia列式数据库有助于减少联机分析处理 (OLAP) 的负载,因为查询会涉及到列的一个子集,但这些列都有大量的行数。 列式存储格式使我们可以采用一些基于每列的轻量级压缩算法(lightweight compression algorithms) 。 向量化的数据处理通过有效使用 CPU 缓冲机制的方法,来开发更快速的分析查询引擎。 https://www.infoq.cn/article/columnar-databases-and-vectorization
6.向量数据库简介其它特征向量检索工具SPTAG 是由 Microsoft 于2019年5月发布的,基于最近邻搜索的向量检索算法库。 SPTAG 的优点是搜索速度快,毫秒内智能搜索数十亿条向量,并且在查询精确度和内存占用上表现佳。但缺点也很明显,其建图时间长,而且每次添加新向量进数据库,必须重新建图。 综上所述,当前工业界针对向量检索的实现中,并没有一个能擅长所有https://www.bookstack.cn/read/milvus-0.6-zh/aboutmilvus-vector_db.md
7.三大开源向量数据库大比拼向量数据库具有一系列广泛的好处,特别是在生成式人工智能方面,更具体地说,是在大语言模型(LLM)方面。这些好处包括先进的索引和精确的相似度搜索,有助于交付强大的先进项目。本文将对三种开源向量数据库:Chroma、Milvus和Weaviate进行如实的比较。我们将探讨它们的用例、关键特性、性能指标及支持的编程语言等,以便https://baijiahao.baidu.com/s?id=1782548694686573731&wfr=spider&for=pc
8.向量数据库Rapids VectorDB 是柏睿数据在RapidsDB(柏睿分布式全内存数据库)之上研发的一款轻量化、可扩展、高性能的向量数据库。 Rapids VectorDB 和现在的LLM以及大数据结合形成“飞轮效应”,助力企业迈向AI Native时代,为企业提供更全面的AI基础设施。企业可以借助柏睿柏睿数据的Rapids VectorDB为公司的数字化转型搭上智能的翅https://boraydata.cn/Vector_database.html
9.ZillizCloud向量数据库由Milvus 提供支持的 Zilliz 向量数据库管理系统支持亿级矢量搜索,并受到超过 1,000 家企业用户的信赖。https://zilliz.com.cn/
10.向量数据库灵活性:向量数据库提供高度的灵活性、允许容纳不同类型的数据和结构。 性能:它们提供高性能数据管理和检索、对于提高AI和ML操作的速度和效率至关重要。 可自定义索引编制:向量数据库提供可自定义的索引编制选项、可根据特定需求优化数据组织和检索。 向量数据库和用例。 http://docs.netapp.com/zh-cn/netapp-solutions/ai/vector-database-vector-database.html
11.向量数据库开源软件OSCHINA向量数据库(1) PostgresML- 基于 PostgreSQL 的 AI 应用数据库 荐 PostgresML是PostgreSQL的机器学习扩展,能让你使用SQL查询对文本和表格数据进行训练和推理。有了PostgresML,你可以将机器学习模型无缝集成到PostgreSQL数据库中 收藏32 评论1 更新于 2023/12/07 https://www.oschina.net/project/tag/505/vector-dbms
12.向量数据库向量数据库 出处:mp.weixin.qq.com 摘要随着各种大型语言模型 (LLM)的开源, 开发人员也意识到向量数据库越来越重要,因为它可以进一步增强这些模型。阅读原文 xiaozi 于2024-06-06 分享1377 海报分享 关联话题: #360 欢迎在评论区写下你对这篇文章的看法。评论https://tool.lu/index.php/article/6f5/detail
13.向量数据库大模型知识库向量数据存储向量数据检索腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,单索引支持千亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。腾讯云向量数据库不仅能为大模型提供外部知识库,提高大模型回答的准确性,还可广泛应用https://cloud.tencent.cn/product/vdb
14.向量数据图数据库火山引擎是字节跳动旗下的云服务平台,将字节跳动快速发展过程中积累的增长方法、技术能力和应用工具开放给外部企业,提供云基础、视频与内容分发、数智平台VeDI、人工智能、开发与运维等服务,帮助企业在数字化升级中实现持续增长。本页核心内容:向量数据图数据库https://www.volcengine.com/theme/869645-X-7-1
15.向量数据库和普通数据库的区别星环科技为您提供向量数据库和普通数据库的区别相关内容,帮助您快速了解向量数据库和普通数据库的区别。如果想了解更多向量数据库和普通数据库的区别资讯,请访问星环科技官网(www.transwarp.cn)查看更多丰富向量数据库和普通数据库的区别内容。https://www.transwarp.cn/keyword-detail/34397-1
16.什么是向量数据库,其工作原理是什么?InterSystems向量数据库(vector database)是一种数据库,用于存储、管理和查询代表图像、文本或其他信息等复杂数据的高维向量。 向量数据库是专为存储、管理和查询图像、文本甚至抽象概念等复杂数据而设计的强大工具。但是,向量数据库真正的超强之处在于能够以闪电般的速度进行相似性搜索,眨眼间就能在数字草堆中找到针。 https://www.intersystems.cn/cn/resources/what-are-vector-databases-and-how-do-they-work/
17.向量数据库Milvus向量数据库Milvus是专门设计用于处理输入向量查询的数据库,它能够处理百亿级别的向量索引。与现有的关系型数据库主要处理遵循预定义模式的结构化数据不同,Milvus从底层设计用于处理从非结构化数据转换而来的嵌入向量。 立即购买 使用限制 学习路径 了解 产品简介 简介 产品优势 应用场景 概念解释 上手 快速入门 购买向https://docs.ksyun.com/products/231
18.向量数据库技术全景本文深入探讨了向量数据库的基础概念、架构设计及实现技术,详细介绍了HNSW、FAISS和Milvus等关键算法和工具,旨在为高效管理和检索高维向量数据提供全面的技术指南。 关注TechLead,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,复旦机器人智能实验室成员,国家级大学生赛事https://www.jianshu.com/p/07f021480744
19.国内首个向量数据库标准发布科技日报北京11月15日电 (记者都芃)15日,中国信通院联合腾讯云计算(北京)有限责任公司、中移(苏州)软件技术有限公司等多家企业共同编制的、国内首个向量数据库标准正式发布,将为我国向量数据库研发、测试及选型提供重要参考,推动我国人工智能产业高质量发展。 https://kjt.hebei.gov.cn/www/kxpj22/kjqy89/293766/index.html
20.向量数据库—大模型时代的存储新基座人人都是产品经理今年,黄仁勋的一次演讲让众多人的目光聚焦到向量数据库上,作者也介绍,如果大模型是肉体,那向量数据库则是灵魂。那么,向量数据库到底存在哪些我们不知道的潜在能力呢?让我们看看作者的分析吧~ AI大模型基座在以【日更】进展的同时,也给资本市场带来了焦虑的情绪价值:估值 130 亿美元的 AI 写作工具 Grammarly 在 Chahttps://www.woshipm.com/ai/5848163.html