USearch
USearch 与 FAISS 都采用同一种 HNSW 算法。
核验日期
核心信息
以下信息由程序从官方接口读取,不经模型改写。
- 许可证
- Apache-2.0
- 语言
- C++
- 维护方
- unum-cloud
- 核验日期
它是什么
USearch 与 FAISS 都采用同一种 HNSW 算法。项目将 USearch 描述为一个简单且可扩展的单个 C++11 头文件库。项目称 USearch 小巧且兼容性广,同时不牺牲性能,主要侧重于用户自定义度量和更少的依赖。HNSW 不要求向量长度相同。
主要能力
USearch 列出了经 SIMD 优化的度量,以及带 JIT 编译的用户自定义度量。
大型索引可以从磁盘查看,而不必加载到内存。
USearch 列出了异构查找、重命名/重新标记和即时删除。
USearch 兼容 OpenMP 和自定义的执行器,用于细粒度并行。
USearch 列出了用于基因组学和化学应用的二进制 Tanimoto 和 Sorensen 系数。
在 USearch 中可以向搜索方法传入谓词函数,该函数会在图遍历期间直接应用。
怎么上手
默认的存储和量化级别取决于硬件,项目建议大多数现代 CPU 使用 bf16。
可以通过 add 和 search 上显式的 dtype 参数传入来自 NumKong 的预量化缓冲区,也可以让 USearch 在内部对更高精度的输入进行量化。
可以使用 Numba、Cppyy 或 PeachPy 在 Python 中定义自定义度量。
内置度量返回距离,因此 Match.distance 越小表示越近。
Haversine 距离开箱即用,也可以定义更复杂的关系,例如考虑地球扁率的 Vincenty 公式。
与向量搜索和分子搜索类似,USearch 可用于地理空间信息系统。
# 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 等二进制度量。
来源
本页内容整理自以下官方来源,点击可核对原文。
- GitHub READMEhttps://github.com/unum-cloud/USearch抓取于
核验日期 ·
本页由 AI 依据上述官方来源整理,并经自动核对,未经本站实测。 发现错误?告诉我们。
