實(shí)現(xiàn) HNSW
HNSW 并不簡(jiǎn)單,因此我們只在此處進(jìn)行最簡(jiǎn)單的實(shí)現(xiàn)。像之前一樣,我們首先創(chuàng)建一組(128 維)向量的數(shù)據(jù)集:
>>> import numpy as np >>> dataset = np.random.normal(size=(1000, 128))
第一步是構(gòu)建 HNSW 索引。為此,我們需要將每個(gè)向量添加到我們的數(shù)據(jù)集中。我們首先創(chuàng)建一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)保存索引。在這個(gè)基本示例中,我們將使用列表的列表來(lái)表示索引,其中內(nèi)部列表對(duì)應(yīng)于每個(gè)層/圖:
>>> L = 5 # 5 層 HNSW >>> index = [[] for _ in range(L)]
每個(gè)圖中的每個(gè)元素都是一個(gè) 3 元組,其中包含向量、向量鏈接到的索引列表以及下面一層中對(duì)應(yīng)節(jié)點(diǎn)的索引。對(duì)于底層,3 元組的第三個(gè)元素將設(shè)置為 None。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-555973.html
由于每次插入都需要在圖中搜索最近的鄰居,我們先來(lái)實(shí)現(xiàn)這一點(diǎn)。我們可以遍歷索引中的任何子圖:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-555973.html
def _search_layer(graph, entry, query, ef=1): best = (np.linalg.norm(graph[entry][0] - query), entry) nns = [best]
到了這里,關(guān)于ModaHub魔搭社區(qū):AI原生云向量數(shù)據(jù)庫(kù)MIlvus Cloud實(shí)現(xiàn) HNSW的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!