
QuickStart • Caractéristiques principales • Backends pris en charge • Installation
Les environs est un magasin vectoriel à faible dépendance à faible dépendance. Il fournit une interface simple et intuitive pour la recherche du voisin le plus proche, avec un support pour différents backends et évaluation.
Il existe de nombreux packages et méthodes de voisins les plus proches. Cependant, nous avons eu du mal à les comparer. Chaque package a sa propre interface, ses bizarreries et ses limites, et l'apprentissage d'un nouveau package peut prendre du temps. En plus de cela, comment évaluez-vous efficacement différents packages? Comment savez-vous lequel est le meilleur pour votre cas d'utilisation?
C'est là que les environs entrent en jeu. Au lieu d'apprendre une nouvelle interface pour chaque nouveau package ou backend, le voisinage fournit une interface unifiée pour tous les backends. Cela vous permet d'expérimenter facilement avec différentes méthodes d'indexation et mesures de distance et choisir la meilleure pour votre cas d'utilisation. Les environs fournit également un moyen simple d'évaluer les performances de différents backends, vous permettant de mesurer les requêtes par seconde et le rappel.
Installez le package avec:
pip install vicinityFacultativement, installez l'un des backends pris en charge ou installez-les tout simplement avec:
pip install vicinity[all]L'extrait de code suivant montre comment utiliser à proximité pour la recherche du voisin le plus proche:
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 )Économie et chargement d'un magasin vectoriel:
vicinity . save ( 'my_vector_store' )
vicinity = Vicinity . load ( 'my_vector_store' )Évaluation d'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 ,
)À proximité fournit les caractéristiques suivantes:
Les backends suivants sont pris en charge:
BASIC : un index plat simple (correspondance exacte) pour le stockage et la recherche vectoriels.flat : recherche exacte.ivf : recherche de fichiers inversé.hnsw : graphique hiérarchique Small World Navigable.lsh : Hachage sensible de la localité.scalar : quantificateur scalaire.pq : quantificateur de produit.ivf_scalar : Recherche de fichiers inversée avec quantification scalaire.ivfpq : recherche de fichiers inversé avec quantification du produit.ivfpqr : Recherche de fichiers inversée avec quantification du produit et raffinement. Remarque: les backends ANN ne prennent pas en charge la suppression dynamique. Pour supprimer des articles, vous devez recréer l'index. L'insertion est prise en charge dans les backends suivants: FAISS , HNSW et Usearch . Le backend BASIC prend en charge l'insertion et la suppression.
| Backend | Paramètre | Description | Valeur par défaut |
|---|---|---|---|
| BASIQUE | metric | Métrique de similitude à utiliser ( cosine , euclidean ). | "cosine" |
| ENNUYER | metric | Métrique de similitude à utiliser ( dot , euclidean , cosine ). | "cosine" |
trees | Nombre d'arbres à utiliser pour l'indexation. | 100 | |
length | Longueur facultative de l'ensemble de données. | None | |
| Fais | metric | Métrique de similitude à utiliser ( cosine , l2 ). | "cosine" |
index_type | Type d'indice Faish ( flat , ivf , hnsw , lsh , scalar , pq , ivf_scalar , ivfpq , ivfpqr ). | "hnsw" | |
nlist | Nombre de cellules pour les indices de FIV. | 100 | |
m | Nombre de sous-quantats pour les index PQ et HNSW. | 8 | |
nbits | Nombre de bits pour les index LSH et PQ. | 8 | |
refine_nbits | Nombre de bits pour l'étape de raffinement dans les index IVFPQR. | 8 | |
| HNSW | metric | Espace de similitude à utiliser ( cosine , l2 ). | "cosine" |
ef_construction | Taille de la liste dynamique pendant la construction d'index. | 200 | |
m | Nombre de connexions par couche. | 16 | |
| Pynndescent | metric | Métrique de similitude à utiliser ( cosine , euclidean , manhattan ). | "cosine" |
n_neighbors | Nombre de voisins à utiliser pour la recherche. | 15 | |
| Usearch | metric | Métrique de similitude à utiliser ( cos , ip , l2sq , hamming , tanimoto ). | "cos" |
connectivity | Nombre de connexions par nœud dans le graphique. | 16 | |
expansion_add | Nombre de candidats considérés lors de la construction de graphiques. | 128 | |
expansion_search | Nombre de candidats considérés lors de la recherche. | 64 | |
| VOYAGEUR | metric | Espace de similitude à utiliser ( cosine , l2 ). | "cosine" |
ef_construction | Le nombre de vecteurs que cet index recherche lors de l'insertion d'un nouveau vecteur dans l'index. | 200 | |
m | Le nombre de connexions entre les nœuds dans la structure des données internes de l'arbre. | 16 |
Les options d'installation suivantes sont 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