解锁 Milvus 向量数据库的秘密

197 阅读3分钟

什么是向量数据库?

向量数据库是一种专门用于存储、索引和查询向量嵌入的数据库系统。这些向量通常来源于机器学习和深度学习模型对非结构化数据(如文本、图像、音频)的编码处理。通过将原始数据转化为密集的数值向量,向量数据库能够支持诸如相似性搜索、推荐系统、图像检索等多种应用场景

Milvus 简介

Milvus 是一个开源的向量数据库,于 2019 年创建。它的主要目标是存储、索引和管理由深度神经网络和其他机器学习模型生成的大规模嵌入向量。Milvus 能够在万亿级别上索引向量,并支持多种索引类型和相似度度量方法

Milvus 的关键特性

  • 高性能相似性搜索:通过近似最近邻(ANN)算法实现快速查找相似向量。
  • 大规模数据管理:能够处理数以亿计的高维向量,保持高效查询性能。
  • 灵活性:支持动态添加、删除向量,并适应不同类型的数据和应用场景。
  • 多模态数据支持:可以处理文本、图像、声音等多种模态的向量化数据。

Milvus 可以解决的问题

  1. 相似性搜索:在大规模数据集中查找与给定查询向量最相似的向量。
  2. 机器学习应用:作为机器学习模型的特征存储和检索引擎。
  3. 数据分析:用于分析高维数据,发现数据中的模式和趋势。

应用场景示例

  • 图像搜索:将图像转换为向量,然后在数据库中快速找到最相似的图像。
  • 推荐系统:根据用户行为向量,推荐相似的商品或内容。
  • 自然语言处理:文本相似度计算,语义搜索。
  • 分子相似度搜索:快速搜索具有相似分子结构的候选药物。

Milvus 的索引类型和相似度度量方法

Milvus 支持多种索引类型,如 FLAT、IVF_FLAT、IVF_SQ8、IVF_PQ、HNSW 和 ANNOY。常用的相似度度量方法包括欧氏距离(L2)、内积(IP)、汉明距离(Hamming)等

示例代码

以下是一个简单的 Python 示例,展示如何使用 Milvus 进行向量搜索:

python
from pymilvus import connections, FieldSchema, CollectionSchema, Collection

# 连接 Milvus
connections.connect("default", host="localhost", port=19530)

# 定义字段和集合
field_schema = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128)
]

schema = CollectionSchema(fields=field_schema, description="example collection")

# 创建集合
collection = Collection(name="example", schema=schema)

# 插入数据
import numpy as np
vectors = np.random.rand(10, 128).tolist()
ids = [i for i in range(10)]
collection.insert([ids, vectors])

# 创建索引
index_params = {"metric_type": "L2", "index_type": "IVF_FLAT"}
collection.create_index(field_name="vector", params=index_params)

# 查询
query_vector = np.random.rand(1, 128).tolist()[0]
search_params = {"metric_type": "L2"}
result = collection.search(query_vector, "vector", search_params, limit=10)

# 输出结果
for i in result:
    print(i)

总结

Milvus 是一个功能强大的向量数据库,可以高效地存储、索引和查询向量数据。它在相似性搜索、机器学习和数据分析等领域具有广泛的应用前景。通过使用 Milvus,您可以轻松构建高性能的搜索和推荐系统。