Confronto tra database vettoriali, librerie di ricerca vettoriale e plugin di ricerca vettoriale
Bentornati a Vector Database 101!
L'aumento di ChatGPT e di altri modelli linguistici di grandi dimensioni (LLM) ha favorito la crescita delle tecnologie di ricerca vettoriale, con database vettoriali specializzati come Milvus e Zilliz Cloud, oltre a librerie come FAISS e plugin di ricerca vettoriale integrati nei database tradizionali.
Nel nostro precedente post della serie, abbiamo approfondito i fondamenti dei database vettoriali. In questo post continueremo a esplorare l'intricato regno della ricerca vettoriale, confrontando database vettoriali, plugin di ricerca vettoriale e librerie di ricerca vettoriale.
Che cos'è la ricerca vettoriale?
Laricerca vettoriale, nota anche come ricerca per similarità vettoriale, è una tecnica per recuperare i risultati top-k più simili o semanticamente correlati a un determinato vettore di interrogazione tra una vasta raccolta di dati vettoriali densi. Prima di effettuare le ricerche di similarità , utilizziamo le reti neurali per trasformare i dati non strutturati, come testo, immagini, video e audio, in vettori numerici ad alta dimensione, chiamati vettori di incorporamento. Dopo aver generato i vettori di incorporamento, i motori di ricerca vettoriale confrontano la distanza spaziale tra il vettore di query in ingresso e i vettori presenti negli archivi vettoriali. Più sono vicini nello spazio, più sono simili.
Sul mercato sono disponibili diverse tecnologie di ricerca vettoriale, tra cui librerie di machine learning come NumPy di Python, librerie di ricerca vettoriale come FAISS, plugin di ricerca vettoriale costruiti su database tradizionali e database vettoriali specializzati come Milvus e Zilliz Cloud.
Database vettoriali vs. librerie di ricerca vettoriale
I database vettoriali specializzati non sono l'unico stack per le ricerche di similarità . Prima dell'avvento dei database vettoriali, molte librerie di ricerca vettoriale, come FAISS, ScaNN e HNSW, sono state utilizzate per il recupero di vettori.
Le librerie di ricerca vettoriale possono aiutare a costruire rapidamente un prototipo di sistema di ricerca vettoriale ad alte prestazioni. FAISS, ad esempio, è una libreria open-source sviluppata da Meta per la ricerca di similarità e il clustering vettoriale denso. FAISS è in grado di gestire collezioni di vettori di qualsiasi dimensione, anche quelle che non possono essere caricate completamente in memoria. Inoltre, FAISS offre strumenti per la valutazione e la regolazione dei parametri. Anche se scritto in C++, FAISS offre un'interfaccia Python/NumPy.
Tuttavia, le librerie di ricerca vettoriale sono solo librerie ANN leggere piuttosto che soluzioni gestite e hanno funzionalità limitate. Se il set di dati è piccolo e limitato, queste librerie possono essere sufficienti per l'elaborazione di dati non strutturati, anche per i sistemi in produzione. Tuttavia, con l'aumento delle dimensioni dei set di dati e l'ingresso di un maggior numero di utenti, il problema della scala diventa sempre più difficile da risolvere. Inoltre, non consentono di modificare i dati dell'indice e non possono essere interrogati durante l'importazione dei dati.
I database vettoriali, invece, sono una soluzione ottimale per l'archiviazione e il recupero di dati non strutturati. Possono memorizzare e interrogare milioni o addirittura miliardi di vettori, fornendo contemporaneamente risposte in tempo reale; sono altamente scalabili per soddisfare le crescenti esigenze aziendali degli utenti.
Inoltre, i database vettoriali come Milvus hanno caratteristiche molto più facili da usare per i dati strutturati/semistrutturati: cloud-nativity, multi-tenancy, scalabilità , ecc. Queste caratteristiche diventeranno chiare man mano che ci addentreremo in questo tutorial.
Inoltre, operano su un livello di astrazione completamente diverso da quello delle librerie di ricerca vettoriale: i database vettoriali sono servizi a tutti gli effetti, mentre le librerie ANN sono destinate a essere integrate nell'applicazione che si sta sviluppando. In questo senso, le librerie ANN sono uno dei tanti componenti su cui sono costruiti i database vettoriali, in modo simile a come Elasticsearch è costruito su Apache Lucene.
Per dare un esempio del perché questa astrazione è così importante, vediamo come inserire un nuovo elemento di dati non strutturati in un database vettoriale. In Milvus è facilissimo:
from pymilvus import Collectioncollection = Collection('book')mr = collection.insert(data)
È davvero così semplice: 3 righe di codice. Con una libreria come FAISS o ScaNN, purtroppo, non c'è un modo semplice per farlo senza ricreare manualmente l'intero indice in determinati punti di controllo. Anche se fosse possibile, le librerie di ricerca vettoriale mancano di scalabilità e multi-tenancy, due delle caratteristiche più importanti dei database vettoriali.
Database vettoriali vs. plugin di ricerca vettoriale per database tradizionali
Bene, ora che abbiamo stabilito la differenza tra le librerie di ricerca vettoriale e i database vettoriali, diamo un'occhiata a come i database vettoriali differiscono dai plugin di ricerca vettoriale.
Un numero crescente di database relazionali tradizionali e di sistemi di ricerca come Clickhouse ed Elasticsearch includono plugin di ricerca vettoriale integrati. Elasticsearch 8.0, ad esempio, include funzionalità di inserimento vettoriale e di ricerca RNA che possono essere richiamate tramite endpoint API restful. Il problema dei plugin di ricerca vettoriale dovrebbe essere chiaro come la notte e il giorno: queste soluzioni non adottano un approccio full-stack alla gestione dell'incorporazione e alla ricerca vettoriale. Al contrario, questi plugin sono pensati come miglioramenti delle architetture esistenti, il che li rende limitati e non ottimizzati. Sviluppare un'applicazione di dati non strutturati su un database tradizionale sarebbe come cercare di inserire batterie al litio e motori elettrici nel telaio di un'auto a gas: non è una grande idea!
Per illustrare il perché di questa situazione, torniamo all'elenco delle caratteristiche che un database vettoriale dovrebbe implementare (dalla prima sezione). Ai plugin di ricerca vettoriale mancano due di queste caratteristiche: la sintonizzazione e API/SDK di facile utilizzo. Continuerò a usare il motore ANN di Elasticsearch come esempio; altri plugin per la ricerca vettoriale funzionano in modo molto simile, quindi non mi dilungherò troppo nei dettagli. Elasticsearch supporta l'archiviazione vettoriale tramite il tipo di campo dense_vector
e consente di eseguire interrogazioni tramite knnsearch endpoint
:
PUT index
{
"mappings": {
"properties": {
"image-vector": {
"type": "dense_vector",
"dims": 128,
"index": true,
"similarity": "l2_norm"
}
}
}
}
PUT index/_doc
{
"image-vector": [0.12, 1.34, ...]
}
GET index/_knn_search
{
"knn": {
"field": "image-vector",
"query_vector": [-0.5, 9.4, ...],
"k": 10,
"num_candidates": 100
}
}
Il plugin ANN di Elasticsearch supporta solo un algoritmo di indicizzazione: Hierarchical Navigable Small Worlds, noto anche come HNSW (mi piace pensare che il creatore abbia anticipato la Marvel quando si è trattato di rendere popolare il multiverso). Inoltre, come metrica di distanza è supportata solo la distanza L2/Euclidea. È un buon inizio, ma confrontiamolo con Milvus, un vero e proprio database vettoriale. Utilizzo di pymilvus
:
>>> field1 = FieldSchema(name='id', dtype=DataType.INT64, description='int64', is_primary=True)
>>> field2 = FieldSchema(name='embedding', dtype=DataType.FLOAT_VECTOR, description='embedding', dim=128, is_primary=False)
>>> schema = CollectionSchema(fields=[field1, field2], description='hello world collection')
>>> collection = Collection(name='my_collection', data=None, schema=schema)
>>> index_params = {
'index_type': 'IVF_FLAT',
'params': {'nlist': 1024},
"metric_type": 'L2'}
>>> collection.create_index('embedding', index_params)
>>> search_param = {
'data': vector,
'anns_field': 'embedding',
'param': {'metric_type': 'L2', 'params': {'nprobe': 16}},
'limit': 10,
'expr': 'id_field > 0'
}
>>> results = collection.search(**search_param)
Sebbene sia Elasticsearch che Milvus dispongano di metodi per creare indici, inserire vettori di incorporamento ed eseguire ricerche di prossimità , è chiaro da questi esempi che Milvus ha un'API di ricerca vettoriale più intuitiva (API migliore per l'utente) e un supporto più ampio per gli indici vettoriali e le metriche di distanza (migliore sintonia). Milvus prevede inoltre di supportare un maggior numero di indici vettoriali e di consentire l'interrogazione tramite istruzioni simili a SQL in futuro, migliorando ulteriormente sia la sintonizzazione che l'usabilità .
Abbiamo appena esaurito un bel po' di contenuti. Questa sezione è stata abbastanza lunga, quindi per coloro che l'hanno sfogliata, ecco un breve riassunto: Milvus è migliore dei plugin di ricerca vettoriale perché Milvus è stato costruito da zero come database vettoriale, consentendo un insieme più ricco di funzionalità e un'architettura più adatta ai dati non strutturati.
Come scegliere tra le diverse tecnologie di ricerca vettoriale?
Non tutti i database vettoriali sono creati allo stesso modo; ognuno possiede caratteristiche uniche che si adattano ad applicazioni specifiche. Le librerie e i plugin di ricerca vettoriale sono facili da usare e ideali per gestire ambienti di produzione su piccola scala con milioni di vettori. Se le dimensioni dei dati sono ridotte e si richiede solo una funzionalità di ricerca vettoriale di base, queste tecnologie sono sufficienti per la vostra attività .
Tuttavia, un database vettoriale specializzato dovrebbe essere la scelta migliore per le aziende ad alta intensità di dati che gestiscono centinaia di milioni di vettori e richiedono risposte in tempo reale. Milvus, ad esempio, gestisce senza problemi miliardi di vettori, offrendo una velocità di interrogazione fulminea e una ricca funzionalità . Inoltre, le soluzioni completamente gestite come Zilliz si rivelano ancora più vantaggiose, liberandovi dalle sfide operative e permettendovi di concentrarvi esclusivamente sulle vostre attività principali.
Date un'occhiata ai corsi Vector Database 101
- Introduzione ai dati non strutturati
- Che cos'è un database vettoriale?
- Confronto tra database vettoriali, librerie di ricerca vettoriale e plugin di ricerca vettoriale
- Introduzione a Milvus
- Avvio rapido di Milvus
- Introduzione alla ricerca per similarità vettoriale
- Nozioni di base sull'indice vettoriale e sull'indice di file invertito
- Quantizzazione scalare e quantizzazione del prodotto
- Piccoli mondi navigabili gerarchici (HNSW)
- Vicini approssimati Oh Yeah (ANNOY)
- Scegliere il giusto indice vettoriale per il proprio progetto
- DiskANN e l'algoritmo di Vamana
- Che cos'è la ricerca vettoriale?
- Database vettoriali vs. librerie di ricerca vettoriale
- Database vettoriali vs. plugin di ricerca vettoriale per database tradizionali
- Come scegliere tra le diverse tecnologie di ricerca vettoriale?
- Date un'occhiata ai corsi Vector Database 101
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word