Hnswlib 开源项目教程

Hnswlib 开源项目教程

hnswlibHeader-only C++/python library for fast approximate nearest neighbors项目地址:https://gitcode.com/gh_mirrors/hn/hnswlib

项目介绍

Hnswlib 是一个强大的近邻搜索(ANN)库,采用 Header-only C++ 实现,并提供 Python 绑定。它支持插入和更新操作,是热门向量数据库 Milvus 底层的 ANN 库之一,为 Milvus 提供 HNSW 检索功能。HNSW(Hierarchical Navigable Small World)算法通过将节点划分成不同层级,并贪婪地遍历来自上层的元素,直到达到局部最小值,然后切换到下一层,以上一层中的局部最小值作为新元素重新开始遍历,直到遍历完最低一层。

项目快速启动

安装

你可以通过以下命令从源码安装 Hnswlib:

apt-get install -y python-setuptools python-pip
git clone https://github.com/nmslib/hnswlib.git
cd hnswlib
pip install .

或者直接使用 pip 安装:

pip install hnswlib

使用示例

以下是一个简单的 Python 使用示例:

import hnswlib
import numpy as np

# 设置维度和其他参数
dim = 16
num_elements = 10000

# 生成随机数据
data = np.float32(np.random.random((num_elements, dim)))

# 创建 HNSW 索引
index = hnswlib.Index(space='l2', dim=dim)
index.init_index(max_elements=num_elements, ef_construction=200, M=16)

# 添加数据到索引
index.add_items(data)

# 设置查询参数
index.set_ef(50)

# 查询最近的邻居
labels, distances = index.knn_query(data[:1], k=5)
print("Labels:", labels)
print("Distances:", distances)

应用案例和最佳实践

应用案例

Hnswlib 广泛应用于需要快速近似最近邻搜索的场景,如图像检索、推荐系统、自然语言处理等。例如,在图像检索系统中,可以使用 Hnswlib 来快速找到与查询图像最相似的图像。

最佳实践

  1. 参数调优:根据具体应用场景调整 ef_constructionM 参数,以达到最佳性能。
  2. 数据预处理:在进行向量插入之前,对数据进行必要的预处理,如归一化、降维等。
  3. 索引优化:定期对索引进行优化,如重建索引、调整查询参数等。

典型生态项目

Hnswlib 作为 Milvus 的底层 ANN 库之一,与 Milvus 紧密集成。Milvus 是一个开源的向量数据库,支持多种 ANN 算法,包括 HNSW。通过与 Milvus 的集成,Hnswlib 可以更好地服务于大规模向量数据的存储和检索需求。

Milvus 集成示例

以下是一个简单的 Milvus 集成示例:

from milvus import Milvus, DataType

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

# 创建集合
collection_name = 'example_collection'
collection_param = {
    "fields": [
        {"name": "embedding", "type": DataType.FLOAT_VECTOR, "params": {"dim": 128}},
    ],
    "segment_row_limit": 4096,
    "auto_id": True
}
client.create_collection(collection_name, collection_param)

# 插入数据
data = [
    [i for i in range(10000)],  # ID 列表
    [[float(i) for _ in range(128)] for i in range(10000)]  # 向量数据
]
client.insert(collection_name, data)

# 创建索引
index_param = {
    "index_type": "HNSW",
    "params": {"M": 16, "efConstruction": 500},
    "metric_type": "L2"
}

hnswlibHeader-only C++/python library for fast approximate nearest neighbors项目地址:https://gitcode.com/gh_mirrors/hn/hnswlib

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆蜜彬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值