前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AI跑车引擎之向量数据库一览

AI跑车引擎之向量数据库一览

作者头像
山行AI
发布2023-06-14 15:22:56
2.1K0
发布2023-06-14 15:22:56
举报
文章被收录于专栏:山行AI

市面上常用的向量数据库有哪些

1.Milvus:一个开源的向量相似性搜索引擎,专为人工智能和机器学习应用程序设计。它支持多种相似性度量标准,并且具有很高的可扩展性,使其成为大规模部署的热门选择。2.Pinecone:一个关注简单易用的托管向量数据库服务。它提供了一个完全托管的、无服务器的环境,用于实时向量相似性搜索和推荐系统,减轻了运维负担。3.Vespa:一个实时大数据处理和搜索引擎,适用于各种应用场景,包括搜索、推荐和广告。Vespa 具有灵活的数据模型和内置的机器学习功能,可以处理大规模数据集。4.Weaviate:一个开源的知识图谱向量搜索引擎,它使用神经网络将实体和关系映射到高维空间,以实现高效的相似性搜索。Weaviate 支持自然语言处理、图查询和模型训练等功能。5.Vald:一个高度可扩展的、云原生的分布式向量搜索引擎,旨在处理大规模的向量数据。Vald 支持多种搜索算法,并通过 Kubernetes 部署和管理,提供高可用性和弹性。6.GSI:Global State Index (GSI) 是一个分布式、可扩展的向量搜索引擎,用于全球状态估计。GSI 利用不同节点间的局部信息,通过一致性哈希和向量近似搜索来实现高效的全球状态查询。7.Qdrant:一个开源的、高性能的向量搜索引擎,支持大规模数据集。Qdrant 提供了强大的索引、过滤和排序功能,以及丰富的 API,使其成为构建复杂应用程序的理想选择。

这些向量数据库的优缺点是什么?

1.Milvus:•优点:开源,可扩展性高,支持多种相似性度量。•缺点:相对较新,社区和支持可能较小。2.Pinecone:•优点:简单易用,完全托管,无服务器,专注于实时搜索和推荐系统。•缺点:可能不如其他开源选项灵活。3.Vespa:•优点:实时大数据处理,灵活的数据模型,内置机器学习功能,适用于多种场景。•缺点:可能不如其他专用向量数据库在向量搜索性能上快速。4.Weaviate:•优点:知识图谱向量搜索引擎,自然语言处理,图查询和模型训练支持。•缺点:可能更适合知识图谱应用而非通用向量搜索。5.Vald:•优点:高度可扩展,云原生,通过Kubernetes部署和管理,支持多种搜索算法。•缺点:较高的运维复杂性,需要熟悉Kubernetes。6.GSI:•优点:分布式,可扩展,用于全球状态估计,一致性哈希和向量近似搜索。•缺点:相对较新,可能缺乏广泛的社区支持。7.Qdrant:•优点:开源,高性能,强大的索引、过滤和排序功能,丰富的API。•缺点:社区和支持可能相对较小。

Elasticsearch如何做向量存储与检索

Elasticsearch 是一种广泛使用的开源搜索引擎,主要用于全文检索。虽然它不是为向量搜索而设计的,但我们可以利用其内置的功能(如 dense_vector 类型和 script_score 函数)在 Elasticsearch 中执行向量工程化任务。以下是一个完整的实践过程示例:

1.安装和运行 Elasticsearch: 首先,确保已安装并运行 Elasticsearch。可以访问官方文档了解详细的安装过程:https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html2.创建索引: 定义一个包含 dense_vector 类型字段的索引映射。例如,创建一个名为“向量索引”的索引,其中包含一个名为“向量”字段:

代码语言:javascript
复制
curl -X PUT "localhost:9200/vector-index" -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "properties": {
      "vector": {
        "type": "dense_vector",
        "dims": 128
      },
      "metadata": {
        "type": "keyword"
      }
    }
  }
}'

3.索引数据: 向新创建的索引添加向量数据。这里以两个示例向量及其元数据为例:

代码语言:javascript
复制
curl -X POST "localhost:9200/vector-index/_doc/1" -H 'Content-Type: application/json' -d'
{
"vector": [1.0, 0.5, 0.0, ...],
"metadata": "vector_1"
}'

curl -X POST "localhost:9200/vector-index/_doc/2" -H 'Content-Type: application/json' -d'
{
"vector": [0.0, 0.5, 1.0, ...],
"metadata": "vector_2"
}'

4.查询相似向量: 使用 script_score 查询功能,在给定查询向量的情况下,根据余弦相似性对索引中的向量进行评分和排序:

代码语言:javascript
复制
curl -X GET "localhost:9200/vector-index/_search" -H 'Content-Type: application/json' -d'
{
"query": {
"script_score": {
"query": {
"match_all": {}
},
"script": {
"source": "cosineSimilarity(params.query_vector, doc['\''vector'\'']) + 1.0",
"params": {
"query_vector": [1.0, 0.0, 0.5, ...]
}
}
}
}
}'

这将返回与查询向量最相似的向量及其元数据。

注意:虽然在 Elasticsearch 中执行向量搜索是可行的,但性能和扩展性可能不如专门为向量搜索设计的数据库,如本文前面提到的向量数据库。

要将 Elasticsearch 中的分词器与向量搜索结合,可以在索引创建时设置分词器,以便在存储文本数据时对其进行处理。接下来,通过训练一个模型(如 Word2Vec、FastText 或 BERT)将这些分词文本转换为向量。最后,在查询时,对查询文本执行相同的分词和向量化操作,并使用向量搜索查询相似向量。

以下是一个简化的示例,说明如何将分词器与向量搜索结合使用:

1.定义一个包含 dense_vector 类型和分词器的索引映射。例如,创建一个名为“text-vector-index”的索引,其中包含一个名为“vector”的向量字段和一个名为“text”的文本字段:

代码语言:javascript
复制
curl -X PUT "localhost:9200/text-vector-index" -H 'Content-Type: application/json' -d'
{
"mappings": {
"properties": {
"vector": {
"type": "dense_vector",
"dims": 128
},
"text": {
"type": "text",
"analyzer": "standard"
},
"metadata": {
"type": "keyword"
}
}
}
}'

这里,我们为文本字段设置了“standard”分词器。也可以根据需求更改为其他分词器。

2.使用预先训练的模型(如 Word2Vec、FastText 或 BERT),将文本转换为向量。要在索引文本数据之前执行此操作。将文本和生成的向量一起存储在新创建的索引中:

代码语言:javascript
复制
curl -X POST "localhost:9200/text-vector-index/_doc/1" -H 'Content-Type: application/json' -d'
{
"vector": [1.0, 0.5, 0.0, ...],
"text": "这是一个示例文本",
"metadata": "text_1"
}'

3.对于查询,需要对查询文本执行相同的分词和向量化操作。然后,使用与之前相同的 script_score 查询功能根据余弦相似性对索引中的向量进行评分和排序:

代码语言:javascript
复制
curl -X GET "localhost:9200/text-vector-index/_search" -H 'Content-Type: application/json' -d'
{
"query": {
"script_score": {
"query": {
"match_all": {}
},
"script": {
"source": "cosineSimilarity(params.query_vector, doc['\''vector'\'']) + 1.0",
"params": {
"query_vector": [1.0, 0.0, 0.5, ...]
}
}
}
}
}'

这将返回与查询向量(即查询文本的向量表示)最相似的文本及其元数据。

总结

总结一下Elasticsearch进行向量存储和检索的整个流程:

1.创建包含分词器和 dense_vector 类型字段的 Elasticsearch 索引。2.对输入文本进行分词处理并使用预训练模型将分词后的文本转换为向量。3.将原始文本和对应的向量存储在 Elasticsearch 索引中。4.对查询文本执行相同的分词和向量化操作。5.使用 script_score 查询根据余弦相似性对索引中的向量进行评分和排序。

这样就可以利用 Elasticsearch 中的分词器和向量搜索功能为应用程序提供相似文本搜索功能了。需要注意的是,在实际应用中,可能需要根据所选的向量化模型和分词器对这个过程进行调整。在选择向量搜索引擎时,应该考虑数据集的大小、查询性能和扩展性需求。

另外,这种方法的性能和扩展性可能不如专门的向量搜索引擎(如 Milvus、Pinecone 等)那么出色。但是,对于较小的数据集和应用程序,Elasticsearch 结合分词器和向量搜索仍然可以提供可行的解决方案。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 山行AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 市面上常用的向量数据库有哪些
  • 这些向量数据库的优缺点是什么?
  • Elasticsearch如何做向量存储与检索
  • 总结
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档