LLM 向量数据库入门

940 阅读3分钟

什么是向量数据库?

向量数据库是一种专门用于存储、查询和管理嵌入式向量数据的数据库。嵌入式向量数据通常是将非结构化数据(如文本、图像或音频)转换为固定长度的数值向量,以便进行相似度搜索和其他分析操作。向量数据库在信息检索、推荐系统和自然语言处理等领域具有广泛应用。

向量数据库的原理

向量数据库的核心原理是通过将非结构化数据嵌入到数值向量中,然后在这些向量之间执行相似度搜索。向量数据库通常支持以下功能:

  1. 向量存储:存储固定长度的数值向量,通常与与原始数据的元数据(如 ID、名称等)一起存储。

  2. 向量检索:在查询时,将非结构化查询数据嵌入到向量中,然后检索最接近嵌入查询向量的向量。检索过程通常基于相似度度量,如余弦相似度或欧几里得距离。

  3. 索引:为了提高查询效率,向量数据库通常使用索引结构(如 k-NN 图、ANNOY 索引或 HNSW 索引),以便在大规模数据集上执行快速近似最近邻搜索。

向量数据库的示例

在这个示例中,我们将使用开源的 Milvus ↗ 向量数据库来存储和检索嵌入式向量数据。Milvus 是一个分布式向量数据库,支持大规模数据存储和实时相似度查询。

安装和配置 Milvus

首先,确保您已经正确安装了 Milvus 数据库。详细的安装指南可以在 Milvus 官方文档 ↗ 中找到。

创建集合和索引

使用 Milvus Python SDK,我们首先需要创建一个集合(Collection)来存储向量数据。然后,为集合创建一个索引以提高查询效率。

import random
from milvus import Milvus, IndexType, MetricType

# 连接到 Milvus 服务器
client = Milvus(host="localhost", port="19530")

# 创建集合
collection_name = "example_collection"
dimension = 128
collection_param = {
    "collection_name": collection_name,
    "dimension": dimension,
    "index_file_size": 1024,
    "metric_type": MetricType.L2
}
status = client.create_collection(collection_param)

# 创建索引
index_param = {
    "nlist": 16384
}
status = client.create_index(collection_name, IndexType.IVF_FLAT, index_param)

插入向量数据

假设我们有一些嵌入式向量数据,我们可以将它们插入到 Milvus 集合中。

# 生成示例向量数据
vectors = [[random.random() for _ in range(dimension)] for _ in range(1000)]

# 插入向量数据
status, ids = client.insert(collection_name, vectors)

查询相似向量

现在我们可以在 Milvus 数据库中执行相似度查询,找到最接近给定查询向量的向量。

# 生成一个查询向量
query_vector = [random.random() for _ in range(dimension)]

# 搜索最相似的向量
top_k = 10
search_param = {
    "nprobe": 32
}
status, results = client.search(collection_name, top_k, query_vector, search_param)

# 输出查询结果
for result in results[0]:
    print(f"Vector ID: {result.id}, Distance: {result.distance}")

总结

向量数据库是一种强大的工具,用于存储和检索嵌入式向量数据。它们可以高效地处理非结构化数据(如文本、图像和音频),并在信息检索、推荐系统和自然语言处理等领域发挥重要作用。通过了解向量数据库的基本概念和原理,您可以开始在您的应用程序中利用这些数据库的强大功能。