ModaHub魔搭社区:AI原生云向量数据库MIlvus Cloud实现 HNSW

实现 HNSW

HNSW 并不简单,因此我们只在此处进行最简单的实现。像之前一样,我们首先创建一组(128 维)向量的数据集:

>>> import numpy as np
>>> dataset = np.random.normal(size=(1000, 128))

第一步是构建 HNSW 索引。为此,我们需要将每个向量添加到我们的数据集中。我们首先创建一个数据结构来保存索引。在这个基本示例中,我们将使用列表的列表来表示索引,其中内部列表对应于每个层/图:

>>> L = 5  # 5 层 HNSW
>>> index = [[] for _ in range(L)]

ModaHub魔搭社区:AI原生云向量数据库MIlvus Cloud实现 HNSW_第1张图片

每个图中的每个元素都是一个 3 元组,其中包含向量、向量链接到的索引列表以及下面一层中对应节点的索引。对于底层,3 元组的第三个元素将设置为 None。

由于每次插入都需要在图中搜索最近的邻居,我们先来实现这一点。我们可以遍历索引中的任何子图:

def _search_layer(graph, entry, query, ef=1):

    best = (np.linalg.norm(graph[entry][0] - query), entry)

    nns = [best]
  

你可能感兴趣的:(python,numpy,机器学习,向量数据库,Milvus,数据库,MIlvus,Cloud)