跳转到主要内容

近似最近邻库

项目描述

Latest Version Documentation Status Build Status Apache-License 2.0

轻量级近似 Nearest N

N2代表两个N,来源于'近似 Nearest Neighbor 算法'。

为什么创建N2

在N2之前,已经存在其他一些优秀的近似最近邻库,例如 AnnoyNMSLIB。然而,它们各自在可用性、性能等方面都有不同的优势和劣势。因此,N2的开发目标是结合现有aKNN库的优势,并弥补其不足。

特性

  • 轻量级库,可以快速处理大型数据集。

  • 在索引构建时间、搜索速度和内存使用方面表现出良好的性能。

  • 支持多核CPU进行索引构建。

  • 默认支持mmap功能,以高效处理大型索引文件。

  • 支持Python/Go绑定。

支持的距离度量

度量

定义

d(p, q)

“角度”

1 - cosθ

1 - {sum(pi · qi) / sqrt(sum(pi · pi) · sum(qi · qi))}

“L2”

平方L2

sum{(pi - qi)2}

“点积”

点积

sum(pi · qi)

N2支持三种距离度量。对于“角度”和“L2”,距离 d 的定义是:向量越接近,d 越小。然而,对于“点积”,距离 d 的定义是:向量越接近,d 越大。您可能想知道为什么我们将“点积”度量定义为“点积”而不是“(1 - 点积)”。做出这一决定的理由是,允许用户将Hnsw搜索函数返回的 d 值直接解释为点积值。

快速入门

  1. 使用pip安装N2。

$ pip install n2
  1. 以下是一个Python代码片段,演示如何使用N2。

import numpy as np

from n2 import HnswIndex

N, dim = 10240, 20
samples = np.arange(N * dim).reshape(N, dim)

index = HnswIndex(dim)
for sample in samples:
    index.add_data(sample)
index.build(m=5, n_threads=4)
print(index.search_by_id(0, 10))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

完整文档

请访问 n2.readthedocs.io 获取完整文档。该文档网站详细解释了以下内容。

性能

  • 以下是我们的基准实验结果。

  • 您还可以在 ann-benchmarks.com 上查看各种ANN库的基准测试。请注意,ann-benchmarks.com(最后检查日期:2020年10月8日)使用的是N2版本0.1.6,我们正在继续努力提高N2的性能。

索引构建时间

image0

搜索速度

image1

内存使用

image2

参考文献

许可证

本软件根据以下 Apache 2许可证 许可,如下所述。

版权所有 2017 Kakao Corp。http://www.kakaocorp.com

根据“许可证”(“许可证”);除非遵守本许可证,否则不得使用本项目。您可以在 https://apache.ac.cn/licenses/LICENSE-2.0 获取许可证的副本。

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”提供,不提供任何明示或暗示的保证或条件。有关许可证的具体语言、许可和限制,请参阅许可证。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

n2-0.1.7.tar.gz (8.6 MB 查看哈希值)

上传时间

由以下支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面