USearch

USearch 与 FAISS 都采用同一种 HNSW 算法。

核验日期

核心信息

以下信息由程序从官方接口读取,不经模型改写。

许可证
Apache-2.0
语言
C++
维护方
unum-cloud
核验日期

它是什么

USearch 与 FAISS 都采用同一种 HNSW 算法。项目将 USearch 描述为一个简单且可扩展的单个 C++11 头文件库。项目称 USearch 小巧且兼容性广,同时不牺牲性能,主要侧重于用户自定义度量和更少的依赖。HNSW 不要求向量长度相同。

主要能力

  1. USearch 列出了经 SIMD 优化的度量,以及带 JIT 编译的用户自定义度量。

  2. 大型索引可以从磁盘查看,而不必加载到内存。

  3. USearch 列出了异构查找、重命名/重新标记和即时删除。

  4. USearch 兼容 OpenMP 和自定义的执行器,用于细粒度并行。

  5. USearch 列出了用于基因组学和化学应用的二进制 Tanimoto 和 Sorensen 系数。

  6. 在 USearch 中可以向搜索方法传入谓词函数,该函数会在图遍历期间直接应用。

怎么上手

  1. 默认的存储和量化级别取决于硬件,项目建议大多数现代 CPU 使用 bf16。

  2. 可以通过 add 和 search 上显式的 dtype 参数传入来自 NumKong 的预量化缓冲区,也可以让 USearch 在内部对更高精度的输入进行量化。

  3. 可以使用 Numba、Cppyy 或 PeachPy 在 Python 中定义自定义度量。

  4. 内置度量返回距离,因此 Match.distance 越小表示越近。

  5. Haversine 距离开箱即用,也可以定义更复杂的关系,例如考虑地球扁率的 Vincenty 公式。

  6. 与向量搜索和分子搜索类似,USearch 可用于地理空间信息系统。

摘自 README · py
# pip install usearch

import numpy as np
from usearch.index import Index

index = Index(ndim=3)               # Default settings for 3D vectors
vector = np.array([0.2, 0.6, 0.4])  # Can be a matrix for batch operations
index.add(42, vector)               # Add one or many vectors in parallel
matches = index.search(vector, 10)  # Find 10 nearest neighbors

assert matches[0].key == 42
assert matches[0].distance <= 0.001
assert np.allclose(index[42], vector, atol=0.1) # Ensure high tolerance in mixed-precision comparisons

适合谁

USearch 支持多种序列化形式。可以序列化到由路径定义的文件。可以序列化到由回调定义的流,并支持增量序列化或重建。

可以序列化到固定长度的缓冲区,或支持随机访问的内存映射文件。使用 USearch 可以实现亚二次复杂度的近似、模糊和语义连接。可以构建多个较小的索引并一起查看,而不是构建一个庞大的索引。

启用量化后,"get" 类函数无法恢复原始数据。量化到 i8_t 整数时,仅适用于类余弦度量。量化到 b1x8_t 单比特表示时,仅适用于 Jaccard、Hamming 等二进制度量。

来源

本页内容整理自以下官方来源,点击可核对原文。

核验日期 ·

本页由 AI 依据上述官方来源整理,并经自动核对,未经本站实测。 发现错误?告诉我们。