說明
由於業務中需要用到向量之間的相似索引,其實向量相思索引在很多的業務場景中都有非常高的應用價值。我們已經有把詞、句子、圖片、等信息處理成響亮的方法。這樣在一些相關性檢索方面就有了應用價值。
本文中搭建了annoy和nmslib兩種方式。
下面提供了兩種方式的的索引構建方式:
annoy索引構建:
f = 200
tc_index = AnnoyIndex(f,metric='angular')
with open(r"D:\sent_vec", "r", encoding="utf-8") as reader:
for line in reader:
line = line.strip()
linespl = line.split()
id = int(linespl[0])
vec = [float(v) for v in linespl[1:]]
tc_index.add_item(id, vec)
tc_index.build(5)
tc_index.save(r'D:\index.ann')
nmslib索引構建:
tc_index = nms.init(method='hnsw', space='cosinesimil')
with open(r"D:\sent_vec", "r", encoding="utf-8") as reader:
for line in reader:
line = line.strip()
linespl = line.split()
id = int(linespl[0])
if id % 10000 == 0:
print("processing {}".format(id))
vec = [float(v) for v in linespl[1:]]
if first_data == None:
first_data = vec
tc_index.addDataPoint(id, vec)
簡評:
總體使用過程中,nmslib要稍微快一點,根據向量去檢索索引,對未登錄也比較友好 。