在AI时代,寻找新需求是开发者面临的真正挑战——以某知名近似最近邻搜索库为例
a.内容描述
- 核心功能定位:一个高效的近似最近邻搜索库。它是一个轻量级、仅头文件、无依赖(除C++ 11外)的C++实现,同时提供了Python接口。其核心在于实现了HNSW算法,支持增量式索引构建与元素更新、删除,并能与用户自定义的距离函数协同工作。与同类系统相比,它具有更少的内存占用和更快的构建速度。
- 关键应用场景:适用于需要在海量高维向量数据中快速进行相似性搜索的各类应用。典型的例子包括:为AppStore或Android应用市场排名靠前的推荐系统、信息检索引擎构建嵌入向量索引;支撑某知名生物医学AI框架中的分子结构或基因序列相似性比对;以及赋能图像、视频、语音等多媒体内容检索系统。
b.功能特性
- 算法与性能:实现了分层可导航小世界图算法,支持在构建速度和查询精度之间进行权衡的参数调整。
- 核心功能点:
- 索引管理:支持创建、初始化、增量插入、更新元素、标记/取消标记删除、调整最大容量以及将已删除元素的空间重新用于新插入元素。
- 查询功能:支持K近邻批量查询,并可在查询时通过过滤器函数对结果进行筛选。
- 持久化:索引支持序列化保存到磁盘以及从磁盘加载。
- 距离度量:原生支持平方L2距离、内积和余弦相似度。通过C++接口,用户可以使用自定义的距离函数。
- 多线程:支持在多线程环境下进行数据插入和查询,并提供了线程数设置接口。
- 数据获取:支持通过用户标签获取对应的向量数据,并可以指定返回格式为NumPy数组或列表。
- 高级搜索:在C++层面,还支持多向量文档搜索和基于距离阈值的epsilon搜索。
- 其他特性:库本身具有较低的构建时间和内存占用;Python接口支持pickle序列化;提供了详尽的算法参数说明文档。
d.使用说明
- 环境准备:可通过
pip install hnswlib直接安装Python绑定库,或从源码编译安装。编译需要支持C++11及以上标准的编译器。 - 基本工作流:
- 创建索引:通过
hnswlib.Index(space, dim)指定距离空间和向量维度。 - 初始化索引:使用
init_index设置最大容量、图连接数M、构造时精度参数ef_construction等。 - 添加数据:使用
add_items批量插入向量数据,并可选择性地指定每个向量的整数标签。支持更新已有标签对应的向量。 - 设置查询参数:使用
set_ef设置查询时的精度/速度权衡参数ef。 - 执行查询:使用
knn_query对查询向量进行K近邻搜索。 - 持久化:使用
save_index保存索引,后续可使用load_index加载。
- 创建索引:通过
- 高级用法:
- 过滤:在
knn_query中传入filter参数(布尔函数)以筛选特定标签的结果。 - 处理删除:使用
mark_deleted标记元素为删除状态,它们将在搜索结果中被省略。通过设置allow_replace_deleted=True,允许新插入元素复用被删除元素占用的内存空间。 - 获取数据:使用
get_items并通过ids参数指定标签列表,可以取回存储的向量数据。 - 并行:通过设置
num_threads参数或修改Index对象的num_threads属性,可以控制插入和查询时使用的CPU线程数。
- 过滤:在
- 注意事项:
- Python过滤函数在多线程查询时性能受限,建议在过滤时设置
num_threads=1。 - 索引的
ef参数在保存时不会被持久化,加载索引后需手动设置。 add_items与knn_query之间不是线程安全的,但多个add_items调用或resize_index与add_items或knn_query之间也不是线程安全的,需注意同步。
- Python过滤函数在多线程查询时性能受限,建议在过滤时设置
e.潜在新需求
(1)需求1:用户希望支持稀疏向量索引,以更高效地处理非零元素较少的向量数据,从而拓展其在文本或推荐等领域的应用场景。
(2)需求2:用户希望实现索引容量的自动扩容机制,即在插入元素时若容量不足,系统能够自动触发扩容操作,而无需用户手动调用resize_index并进行额外的同步管理。
(3)需求3:用户希望对索引进行运行时性能分析和测量,提供内置的性能指标收集与报告功能,以便更直观地调优参数。
(4)需求4:用户希望获得针对Javascript运行时环境的官方绑定,特别是对Bun和Node.js环境的支持,以便在Web服务端或边缘计算场景中使用。
(5)需求5:用户希望对搜索过程进行更精细化的控制,例如在查询时支持基于半径的搜索(Range Search),或者允许在遍历图节点时动态指定跳过某些节点(如基于标签或元数据)。
article id:9b123946370ccc793687ebde44fc8844
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码

公众号二维码


浙公网安备 33010602011771号