Búsqueda de vecino más cercano

Descripción

Dado que el índice de similitud entre vectores es necesario en el negocio, el índice de acacia vectorial tiene un valor de aplicación muy alto en muchos escenarios comerciales. Ya tenemos una forma de procesar palabras, oraciones, imágenes y otra información de manera contundente. Esto tiene valor de aplicación en algunas búsquedas de relevancia.

En este artículo, se construyen annoy y nmslib.
A continuación, se proporcionan dos formas de construcción de índices:

Molestar la construcción del índice:

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')

construcción del índice 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)

Breve comentario: en el
proceso de uso general, nmslib debería ser un poco más rápido y buscar en el índice según el vector, que también es más amigable para los no registrados.

Supongo que te gusta

Origin blog.csdn.net/cyinfi/article/details/102134979
Recomendado
Clasificación