
QuickStart • Características principales • Backends compatibles • Instalación
La vecindad es una tienda vectorial ligera de baja dependencia. Proporciona una interfaz simple e intuitiva para la búsqueda de vecinos más cercanos, con soporte para diferentes backends y evaluación.
Hay muchos paquetes y métodos de vecinos más cercanos. Sin embargo, nos resultó difícil compararlos. Cada paquete tiene su propia interfaz, peculiaridades y limitaciones, y aprender un nuevo paquete puede llevar mucho tiempo. Además de eso, ¿cómo evalúa efectivamente diferentes paquetes? ¿Cómo sabes cuál es el mejor para tu caso de uso?
Aquí es donde entra una vecindad. En lugar de aprender una nueva interfaz para cada nuevo paquete o backend, Vicinity proporciona una interfaz unificada para todos los backends. Esto le permite experimentar fácilmente con diferentes métodos de indexación y métricas de distancia y elegir la mejor para su caso de uso. La vecindad también proporciona una manera simple de evaluar el rendimiento de diferentes backends, lo que le permite medir las consultas por segundo y recordar.
Instale el paquete con:
pip install vicinityOpcionalmente, instale cualquiera de los backends compatibles, o simplemente instale todos con:
pip install vicinity[all]El siguiente fragmento de código demuestra cómo usar vecindad para la búsqueda de vecinos más cercanos:
import numpy as np
from vicinity import Vicinity , Backend , Metric
# Create some dummy data
items = [ "triforce" , "master sword" , "hylian shield" , "boomerang" , "hookshot" ]
vectors = np . random . rand ( len ( items ), 128 )
# Initialize the Vicinity instance (using the basic backend and cosine metric)
vicinity = Vicinity . from_vectors_and_items (
vectors = vectors ,
items = items ,
backend_type = Backend . BASIC ,
metric = Metric . COSINE
)
# Create a query vector
query_vector = np . random . rand ( 128 )
# Query for nearest neighbors with a top-k search
results = vicinity . query ( query_vector , k = 3 )
# Query for nearest neighbors with a threshold search
results = vicinity . query_threshold ( query_vector , threshold = 0.9 )
# Query with a list of query vectors
query_vectors = np . random . rand ( 5 , 128 )
results = vicinity . query ( query_vectors , k = 3 )Guardar y cargar una tienda vectorial:
vicinity . save ( 'my_vector_store' )
vicinity = Vicinity . load ( 'my_vector_store' )Evaluación de un backend:
# Use the first 1000 vectors as query vectors
query_vectors = vectors [: 1000 ]
# Evaluate the Vicinity instance by measuring the queries per second and recall
qps , recall = vicinity . evaluate (
full_vectors = vectors ,
query_vectors = query_vectors ,
)La vecindad proporciona las siguientes características:
Se admiten los siguientes backends:
BASIC : un índice plano simple (coincidencia exacta) para el almacenamiento y búsqueda vectorial.flat : búsqueda exacta.ivf : búsqueda de archivos invertidos.hnsw : gráfico jerárquico de pequeño mundo navegable.lsh : hashes sensibles a la localidad.scalar : cuantizador escalar.pq : cuantizador de productos.ivf_scalar : búsqueda de archivos invertidos con cuantizador escalar.ivfpq : búsqueda de archivos invertidos con cuantizador de productos.ivfpqr : búsqueda de archivos invertidos con cuantizador de productos y refinamiento. Nota: Los backends de ANN no admiten la eliminación dinámica. Para eliminar los elementos, debe recrear el índice. La inserción es compatible con los siguientes backends: FAISS , HNSW y Usearch . El backend BASIC admite la inserción y la eliminación.
| Backend | Parámetro | Descripción | Valor predeterminado |
|---|---|---|---|
| BÁSICO | metric | Métrica de similitud para usar ( cosine , euclidean ). | "cosine" |
| ENOJARSE | metric | Métrica de similitud para usar ( dot , euclidean , cosine ). | "cosine" |
trees | Número de árboles para usar para la indexación. | 100 | |
length | Longitud opcional del conjunto de datos. | None | |
| Faiss | metric | Métrica de similitud para usar ( cosine , l2 ). | "cosine" |
index_type | Tipo de índice FAISS ( flat , ivf , hnsw , lsh , scalar , pq , ivf_scalar , ivfpq , ivfpqr ). | "hnsw" | |
nlist | Número de celdas para índices de FIV. | 100 | |
m | Número de subcantizadores para índices PQ y HNSW. | 8 | |
nbits | Número de bits para índices LSH y PQ. | 8 | |
refine_nbits | Número de bits para la etapa de refinamiento en índices IVFPQR. | 8 | |
| HNSW | metric | Espacio de similitud para usar ( cosine , l2 ). | "cosine" |
ef_construction | Tamaño de la lista dinámica durante la construcción del índice. | 200 | |
m | Número de conexiones por capa. | 16 | |
| Pynndescente | metric | Métrica de similitud para usar ( cosine , euclidean , manhattan ). | "cosine" |
n_neighbors | Número de vecinos para usar para la búsqueda. | 15 | |
| USARECHE | metric | Métrica de similitud para usar ( cos , ip , l2sq , hamming , tanimoto ). | "cos" |
connectivity | Número de conexiones por nodo en el gráfico. | 16 | |
expansion_add | Número de candidatos considerados durante la construcción de gráficos. | 128 | |
expansion_search | Número de candidatos considerados durante la búsqueda. | 64 | |
| VIAJERO | metric | Espacio de similitud para usar ( cosine , l2 ). | "cosine" |
ef_construction | El número de vectores que busca este índice al insertar un nuevo vector en el índice. | 200 | |
m | El número de conexiones entre nodos en la estructura de datos internos del árbol. | 16 |
Las siguientes opciones de instalación están disponibles:
# Install the base package
pip install vicinity
# Install all backends
pip install vicinity[all]
# Install specific backends
pip install vicinity[annoy]
pip install vicinity[faiss]
pip install vicinity[hnsw]
pip install vicinity[pynndescent]
pip install vicinity[usearch]
pip install vicinity[voyager]MIT