
QuickStart • Principais recursos • Backands suportados • Instalação
A vizinhança é uma loja vetorial leve e de baixa dependência. Ele fornece uma interface simples e intuitiva para a pesquisa de vizinhos mais próxima, com suporte para diferentes back -ends e avaliação.
Existem muitos pacotes e métodos mais próximos dos vizinhos por aí. No entanto, achamos difícil compará -los. Cada pacote tem sua própria interface, peculiaridades e limitações, e aprender um novo pacote pode demorar muito tempo. Além disso, como você avalia efetivamente diferentes pacotes? Como você sabe qual é o melhor para o seu caso de uso?
É aqui que entra a vizinhança. Em vez de aprender uma nova interface para cada novo pacote ou back -end, o Vicinity fornece uma interface unificada para todos os back -ends. Isso permite que você experimente facilmente diferentes métodos de indexação e métricas de distância e escolha a melhor para o seu caso de uso. A Vicinity também fornece uma maneira simples de avaliar o desempenho de diferentes back -end, permitindo que você medir as consultas por segundo e recall.
Instale o pacote com:
pip install vicinityOpcionalmente, instale qualquer um dos back -ends suportados ou simplesmente instale todos eles com:
pip install vicinity[all]O snippet de código a seguir demonstra como usar a vizinhança para a pesquisa de vizinhos mais próxima:
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 )Economizando e carregando uma loja de vetores:
vicinity . save ( 'my_vector_store' )
vicinity = Vicinity . load ( 'my_vector_store' )Avaliando um back -end:
# 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 ,
)Vizinhança fornece os seguintes recursos:
Os seguintes backnds são suportados:
BASIC : um índice simples simples (de correspondência exata) para armazenamento e pesquisa de vetores.flat : pesquisa exata.ivf : Pesquisa de arquivo invertido.hnsw : Gráfico mundial pequeno e navegável hierárquico.lsh : Hash sensível à localidade.scalar : quantizador escalar.pq : Quantizer do produto.ivf_scalar : Pesquisa de arquivo invertido com quantizador escalar.ivfpq : Pesquisa de arquivo invertido com o quantizador do produto.ivfpqr : pesquisa de arquivo invertido com quantizador e refinamento do produto. Nota: Os back -ends da RNA não suportam a exclusão dinâmica. Para excluir itens, você precisa recriar o índice. A inserção é suportada nos seguintes back -end: FAISS , HNSW e Usearch . O back -end BASIC suporta inserção e exclusão.
| Back -end | Parâmetro | Descrição | Valor padrão |
|---|---|---|---|
| Básico | metric | Métrica de similaridade para uso ( cosine , euclidean ). | "cosine" |
| IRRITAR | metric | Métrica de similaridade para uso ( dot , euclidean , cosine ). | "cosine" |
trees | Número de árvores a serem usadas para indexação. | 100 | |
length | Comprimento opcional do conjunto de dados. | None | |
| FAISS | metric | Métrica de similaridade para uso ( cosine , l2 ). | "cosine" |
index_type | Tipo de índice FAISS ( flat , ivf , hnsw , lsh , scalar , pq , ivf_scalar , ivfpq , ivfpqr ). | "hnsw" | |
nlist | Número de células para índices de fertilização in vitro. | 100 | |
m | Número de subquantizadores para índices de PQ e HNSW. | 8 | |
nbits | Número de bits para índices LSH e PQ. | 8 | |
refine_nbits | Número de bits para o estágio de refinamento nos índices de ivfpqr. | 8 | |
| HNSW | metric | Espaço de similaridade para usar ( cosine , l2 ). | "cosine" |
ef_construction | Tamanho da lista dinâmica durante a construção do índice. | 200 | |
m | Número de conexões por camada. | 16 | |
| PynNDescent | metric | Métrica de similaridade para uso ( cosine , euclidean , manhattan ). | "cosine" |
n_neighbors | Número de vizinhos para usar na pesquisa. | 15 | |
| Pesquisa | metric | Métrica de similaridade para uso ( cos , ip , l2sq , hamming , tanimoto ). | "cos" |
connectivity | Número de conexões por nó no gráfico. | 16 | |
expansion_add | Número de candidatos considerados durante a construção de gráficos. | 128 | |
expansion_search | Número de candidatos considerados durante a pesquisa. | 64 | |
| VIAJANTE | metric | Espaço de similaridade para usar ( cosine , l2 ). | "cosine" |
ef_construction | O número de vetores que esse índice procura ao inserir um novo vetor no índice. | 200 | |
m | O número de conexões entre nós na estrutura de dados internos da árvore. | 16 |
As seguintes opções de instalação estão disponíveis:
# 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