🚀 Prova Zilliz Cloud, la versione completamente gestita di Milvus, gratuitamente—sperimenta prestazioni 10 volte più veloci! Prova Ora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Ricerca di similarità scalabile e velocissima con il database vettoriale Milvus

Ricerca di similarità scalabile e velocissima con il database vettoriale Milvus

  • Engineering
June 21, 2022
Dipanjan Sarkar

cover image immagine di copertina

Introduzione

In questo articolo tratteremo alcuni aspetti interessanti relativi ai database vettoriali e alla ricerca di similarità su scala. Nel mondo di oggi, in rapida evoluzione, vediamo nuove tecnologie, nuove aziende, nuove fonti di dati e, di conseguenza, dobbiamo continuare a utilizzare nuovi modi per archiviare, gestire e sfruttare questi dati per ottenere informazioni. Per decenni i dati strutturati e tabellari sono stati archiviati in database relazionali e la Business Intelligence si basa sull'analisi e sull'estrazione di informazioni da questi dati. Tuttavia, considerando l'attuale panorama dei dati, "oltre l'80-90% dei dati è costituito da informazioni non strutturate come testo, video, audio, log di server web, social media e altro ancora". Le organizzazioni hanno sfruttato la potenza dell'apprendimento automatico e dell'apprendimento profondo per cercare di estrarre informazioni da questi dati, poiché i metodi tradizionali basati sulle query potrebbero non essere sufficienti o addirittura possibili. Esiste un enorme potenziale non sfruttato per estrarre informazioni preziose da questi dati e siamo solo all'inizio!

"Poiché la maggior parte dei dati del mondo non è strutturata, la capacità di analizzarli e di agire su di essi rappresenta una grande opportunità". - Mikey Shulman, responsabile ML, Kensho

I dati non strutturati, come suggerisce il nome, non hanno una struttura implicita, come una tabella di righe e colonne (quindi chiamati dati tabellari o strutturati). A differenza dei dati strutturati, non esiste un modo semplice per memorizzare i contenuti dei dati non strutturati all'interno di un database relazionale. Le sfide principali per lo sfruttamento dei dati non strutturati sono tre:

  • Memorizzazione: I normali database relazionali sono adatti a contenere dati strutturati. Sebbene sia possibile utilizzare i database NoSQL per archiviare tali dati, l'elaborazione di questi dati per estrarre le rappresentazioni giuste per alimentare le applicazioni di intelligenza artificiale su scala diventa un ulteriore sovraccarico.
  • Rappresentazione: I computer non capiscono il testo o le immagini come noi. Capiscono solo i numeri e noi dobbiamo convertire i dati non strutturati in una rappresentazione numerica utile, in genere vettori o embeddings.
  • Interrogazione: Non è possibile interrogare i dati non strutturati direttamente sulla base di dichiarazioni condizionali definite come l'SQL per i dati strutturati. Immaginiamo un semplice esempio di ricerca di scarpe simili, data una foto del nostro paio di scarpe preferite! Non è possibile utilizzare i valori grezzi dei pixel per la ricerca, né rappresentare caratteristiche strutturate come la forma, la misura, lo stile, il colore e altro ancora. Immaginate di doverlo fare per milioni di scarpe!

Per questo motivo, per consentire ai computer di comprendere, elaborare e rappresentare i dati non strutturati, di solito li convertiamo in vettori densi, spesso chiamati embeddings.

figure 1 Figura 1

Esiste una varietà di metodologie che sfruttano in particolare il deep learning, tra cui le reti neurali convoluzionali (CNN) per i dati visivi come le immagini e i Transformer per i dati testuali, che possono essere utilizzati per trasformare questi dati non strutturati in embeddings. Zilliz ha un ottimo articolo che illustra le diverse tecniche di embedding!

Ora, memorizzare questi vettori di incorporazioni non è sufficiente. Bisogna anche essere in grado di interrogare e trovare vettori simili. Perché lo chiedete? La maggior parte delle applicazioni del mondo reale si basa sulla ricerca di similarità vettoriali per soluzioni basate sull'intelligenza artificiale. Ciò include la ricerca visiva (immagini) in Google, i sistemi di raccomandazione in Netflix o Amazon, i motori di ricerca testuale in Google, la ricerca multimodale, la de-duplicazione dei dati e molto altro ancora!

Memorizzare, gestire e interrogare i vettori su scala non è un compito semplice. Per questo sono necessari strumenti specializzati e i database vettoriali sono lo strumento più efficace per questo lavoro! In questo articolo tratteremo i seguenti aspetti:

Iniziamo!

Prima abbiamo stabilito la necessità di rappresentare i dati non strutturati, come le immagini e il testo, come vettori, poiché i computer possono comprendere solo i numeri. In genere sfruttiamo i modelli di intelligenza artificiale, più precisamente i modelli di deep learning, per convertire i dati non strutturati in vettori numerici che possono essere letti dalle macchine. In genere questi vettori sono fondamentalmente un elenco di numeri in virgola mobile che rappresentano collettivamente l'elemento sottostante (immagine, testo ecc.).

Capire i vettori

Nel campo dell'elaborazione del linguaggio naturale (NLP) esistono molti modelli di incorporamento delle parole, come Word2Vec, GloVe e FastText, che possono aiutare a rappresentare le parole come vettori numerici. Con il passare del tempo, si è assistito alla nascita di modelli di trasformazione come BERT, che possono essere sfruttati per apprendere vettori di incorporamento contestuali e migliori rappresentazioni per intere frasi e paragrafi.

Allo stesso modo, nel campo della computer vision abbiamo modelli come le reti neurali convoluzionali (CNN) che possono aiutare ad apprendere rappresentazioni da dati visivi come immagini e video. Con l'avvento dei trasformatori, abbiamo anche i trasformatori di visione che possono avere prestazioni migliori delle normali CNN.

figure 2 Figura 2

Il vantaggio di questi vettori è che possono essere sfruttati per risolvere problemi del mondo reale come la ricerca visiva, in cui si carica una foto e si ottengono risultati di ricerca che includono immagini visivamente simili. Google ha una funzione molto popolare nel suo motore di ricerca, come illustrato nell'esempio seguente.

figure 3 Figura 3

Tali applicazioni sono alimentate da vettori di dati e dalla ricerca di similarità vettoriale. Se si considerano due punti in uno spazio di coordinate cartesiane X-Y. La distanza tra due punti può essere calcolata come una semplice distanza euclidea, rappresentata dalla seguente equazione.

figure 4 figura 4

Immaginando che ogni punto dati sia un vettore di dimensioni D, è possibile utilizzare la distanza euclidea o anche altre metriche di distanza come la distanza di Hamming o la distanza del coseno per scoprire quanto sono vicini i due punti dati. Questo può aiutare a costruire una nozione di vicinanza o di somiglianza che può essere usata come metrica quantificabile per trovare elementi simili dati da un elemento di riferimento usando i loro vettori.

La ricerca per similarità vettoriale, spesso nota come ricerca del vicino più prossimo (NN), è fondamentalmente il processo di calcolo della somiglianza a coppie (o delle distanze) tra un elemento di riferimento (per il quale si vogliono trovare elementi simili) e un insieme di elementi esistenti (tipicamente in un database) e di restituzione dei primi 'k' vicini più prossimi che sono i primi 'k' elementi più simili. Il componente chiave per calcolare questa somiglianza è la metrica di somiglianza, che può essere la distanza euclidea, il prodotto interno, la distanza coseno, la distanza di Hamming, ecc. Quanto più piccola è la distanza, tanto più simili sono i vettori.

La sfida della ricerca esatta del vicino (NN) è la scalabilità. È necessario calcolare N distanze (assumendo N elementi esistenti) ogni volta per ottenere elementi simili. Questo può essere molto lento, soprattutto se non si memorizzano e indicizzano i dati da qualche parte (come un database vettoriale!). Per accelerare i calcoli, di solito si ricorre alla ricerca approssimata dei vicini, spesso chiamata ricerca ANN, che finisce per memorizzare i vettori in un indice. L'indice aiuta a memorizzare questi vettori in modo intelligente per consentire un rapido recupero dei vicini "approssimativamente" simili per un elemento di riferimento della query. Le tipiche metodologie di indicizzazione della RNA includono:

  • Trasformazioni vettoriali: Include l'aggiunta di trasformazioni aggiuntive ai vettori, come la riduzione delle dimensioni (ad esempio PCA \ t-SNE), la rotazione e così via.
  • Codifica dei vettori: Applicazione di tecniche basate su strutture di dati come Locality Sensitive Hashing (LSH), Quantizzazione, Alberi, ecc. che possono aiutare a recuperare più velocemente elementi simili.
  • Metodi di ricerca non esaustivi: Sono utilizzati soprattutto per evitare la ricerca esaustiva e comprendono metodi come i grafi di vicinato, gli indici invertiti ecc.

Per creare un'applicazione di ricerca per similarità vettoriale, è necessario un database che possa aiutare a memorizzare, indicizzare e interrogare in modo efficiente (ricerca) su scala. Ecco i database vettoriali!

Che cos'è un database vettoriale?

Dato che ora abbiamo capito come i vettori possono essere utilizzati per rappresentare i dati non strutturati e come funziona la ricerca vettoriale, possiamo combinare insieme i due concetti per costruire un database vettoriale.

I database vettoriali sono piattaforme di dati scalabili per memorizzare, indicizzare e interrogare vettori incorporati generati da dati non strutturati (immagini, testo ecc.) utilizzando modelli di deep learning.

Gestire un numero enorme di vettori per la ricerca di similarità (anche con gli indici) può essere molto costoso. Ciononostante, i database vettoriali migliori e più avanzati dovrebbero consentire di inserire, indicizzare e cercare tra milioni o miliardi di vettori di destinazione, oltre a specificare un algoritmo di indicizzazione e una metrica di similarità a scelta.

I database vettoriali devono principalmente soddisfare i seguenti requisiti chiave per un sistema di gestione di database robusto da utilizzare in azienda:

  1. Scalabile: I database vettoriali devono essere in grado di indicizzare ed eseguire una ricerca approssimativa dei vicini per miliardi di vettori incorporati.
  2. Affidabile: I database vettoriali devono essere in grado di gestire i guasti interni senza perdita di dati e con un impatto operativo minimo, vale a dire essere tolleranti ai guasti.
  3. Veloce: La velocità di interrogazione e di scrittura è importante per i database vettoriali. Per piattaforme come Snapchat e Instagram, che possono avere centinaia o migliaia di nuove immagini caricate al secondo, la velocità diventa un fattore incredibilmente importante.

I database vettoriali non si limitano a memorizzare i dati vettoriali. Sono anche responsabili dell'utilizzo di strutture dati efficienti per indicizzare questi vettori per un rapido recupero e per supportare le operazioni CRUD (creazione, lettura, aggiornamento e cancellazione). I database vettoriali dovrebbero anche supportare idealmente il filtraggio degli attributi, ovvero il filtraggio basato su campi di metadati che di solito sono campi scalari. Un semplice esempio potrebbe essere il recupero di scarpe simili in base ai vettori di immagini per una marca specifica. In questo caso, la marca sarebbe l'attributo in base al quale effettuare il filtraggio.

figure 5 Figura 5

La figura precedente mostra come Milvus, il database vettoriale di cui parleremo tra poco, utilizza il filtraggio degli attributi. Milvus introduce il concetto di bitmask nel meccanismo di filtraggio per mantenere vettori simili con un bitmask di 1 in base alla soddisfazione di specifici filtri di attributo. Maggiori dettagli su questo aspetto sono disponibili qui.

Milvus - Il database vettoriale più avanzato del mondo

Milvus è una piattaforma open-source per la gestione di database vettoriali costruita appositamente per i dati vettoriali su larga scala e per semplificare le operazioni di apprendimento automatico (MLOps).

figure 6 figura 6

Zilliz è l'organizzazione che ha realizzato Milvus, il database vettoriale più avanzato al mondo, per accelerare lo sviluppo di data fabric di nuova generazione. Milvus è attualmente un progetto di laurea presso la LF AI & Data Foundation e si concentra sulla gestione di enormi insiemi di dati non strutturati per l'archiviazione e la ricerca. L'efficienza e l'affidabilità della piattaforma semplificano il processo di implementazione di modelli di AI e MLOps su scala. Milvus ha ampie applicazioni che spaziano dalla scoperta di farmaci, alla computer vision, ai sistemi di raccomandazione, ai chatbot e molto altro ancora.

Caratteristiche principali di Milvus

Milvus è ricco di caratteristiche e funzionalità utili, quali:

  • Velocità di ricerca impressionante su un trilione di set di dati vettoriali: La latenza media della ricerca e del recupero vettoriale è stata misurata in millisecondi su un trilione di set di dati vettoriali.
  • Gestione semplificata dei dati non strutturati: Milvus dispone di ricche API progettate per i flussi di lavoro della scienza dei dati.
  • Database vettoriale affidabile e sempre attivo: Le funzioni di replica e failover/failback integrate in Milvus assicurano che i dati e le applicazioni possano mantenere sempre la continuità operativa.
  • Altamente scalabile ed elastico: La scalabilità a livello di componente consente di scalare su e giù su richiesta.
  • Ricerca ibrida: Oltre ai vettori, Milvus supporta tipi di dati come booleani, stringhe, numeri interi, numeri in virgola mobile e altro ancora. Milvus abbina il filtraggio scalare a una potente ricerca di similarità vettoriale (come si è visto nell'esempio di similarità delle scarpe).
  • Struttura Lambda unificata: Milvus combina l'elaborazione in stream e in batch per l'archiviazione dei dati, per bilanciare tempestività ed efficienza.
  • Viaggi nel tempo: Milvus mantiene una linea temporale per tutte le operazioni di inserimento e cancellazione dei dati. Consente agli utenti di specificare i timestamp in una ricerca per recuperare una vista dei dati in un determinato momento.
  • Sostenuto dalla comunità e riconosciuto dal settore: Con oltre 1.000 utenti aziendali, più di 10.5K stelle su GitHub e una comunità open-source attiva, non siete soli quando utilizzate Milvus. In quanto progetto di laurea della LF AI & Data Foundation, Milvus gode di un sostegno istituzionale.

Un modo comune di costruire un sistema di intelligenza artificiale basato sulla ricerca di somiglianze vettoriali è quello di accoppiare algoritmi come Approximate Nearest Neighbor Search (ANNS) con librerie open-source come:

  • Facebook AI Similarity Search (FAISS): Questo framework consente una ricerca efficiente della somiglianza e il raggruppamento di vettori densi. Contiene algoritmi che cercano insiemi di vettori di qualsiasi dimensione, fino a quelli che potrebbero non entrare nella RAM. Supporta funzionalità di indicizzazione come il multi-indice invertito e la quantizzazione del prodotto.
  • Annoy di Spotify (Approximate Nearest Neighbors Oh Yeah): Questo framework utilizza proiezioni casuali e costruisce un albero per consentire ANNS in scala per vettori densi.
  • ScaNN (Scalable Nearest Neighbors) di Google: Questo framework esegue un'efficiente ricerca di similarità vettoriale in scala. Consiste in implementazioni che includono la potatura dello spazio di ricerca e la quantizzazione per la ricerca del prodotto interno massimo (MIPS).

Sebbene ognuna di queste librerie sia utile a modo suo, a causa di diverse limitazioni, queste combinazioni di algoritmi e librerie non sono equivalenti a un vero e proprio sistema di gestione dei dati vettoriali come Milvus. Discuteremo ora alcune di queste limitazioni.

Limitazioni degli approcci esistenti

Gli approcci esistenti utilizzati per la gestione dei dati vettoriali, come discusso nella sezione precedente, presentano le seguenti limitazioni:

  1. Flessibilità: I sistemi esistenti memorizzano tipicamente tutti i dati nella memoria principale, quindi non possono essere eseguiti facilmente in modalità distribuita su più macchine e non sono adatti a gestire insiemi di dati massicci.
  2. Gestione dinamica dei dati: I dati sono spesso considerati statici una volta inseriti nei sistemi esistenti, il che complica l'elaborazione dei dati dinamici e rende impossibile una ricerca quasi in tempo reale.
  3. Elaborazione avanzata delle query: La maggior parte degli strumenti non supporta l'elaborazione avanzata delle query (ad esempio, il filtraggio degli attributi, la ricerca ibrida e le query multivettore), che è essenziale per la costruzione di motori di ricerca di similarità del mondo reale che supportino il filtraggio avanzato.
  4. Ottimizzazioni per il calcolo eterogeneo: Poche piattaforme offrono ottimizzazioni per architetture di sistema eterogenee su CPU e GPU (ad eccezione di FAISS), con conseguenti perdite di efficienza.

Milvus cerca di superare tutte queste limitazioni e ne parleremo in dettaglio nella prossima sezione.

Il vantaggio di Milvus - Comprensione di Knowhere

Milvus cerca di affrontare e risolvere con successo le limitazioni dei sistemi esistenti basati su algoritmi inefficienti di gestione dei dati vettoriali e di ricerca di similarità nei seguenti modi:

  • Migliora la flessibilità offrendo il supporto per una varietà di interfacce applicative (inclusi SDK in Python, Java, Go, C++ e API RESTful).
  • Supporta diversi tipi di indici vettoriali (ad esempio, indici basati sulla quantizzazione e indici basati su grafi) e l'elaborazione avanzata delle query.
  • Milvus gestisce i dati vettoriali dinamici utilizzando un log-structured merge-tree (albero LSM), mantenendo efficienti gli inserimenti e le cancellazioni di dati e le ricerche in tempo reale.
  • Milvus offre anche ottimizzazioni per architetture di calcolo eterogenee su CPU e GPU moderne, consentendo agli sviluppatori di adattare i sistemi a scenari, set di dati e ambienti applicativi specifici.

Knowhere, il motore di esecuzione vettoriale di Milvus, è un'interfaccia operativa per l'accesso ai servizi negli strati superiori del sistema e alle librerie di ricerca di similarità vettoriale come Faiss, Hnswlib, Annoy negli strati inferiori del sistema. Inoltre, Knowhere è anche responsabile dell'elaborazione eterogenea. Knowhere controlla su quale hardware (ad esempio, CPU o GPU) eseguire le richieste di creazione di indici e di ricerca. È così che Knowhere prende il suo nome: sa dove eseguire le operazioni. Nelle versioni future saranno supportati altri tipi di hardware, tra cui DPU e TPU.

figure 7 Figura 7

Il calcolo in Milvus coinvolge principalmente operazioni vettoriali e scalari. Knowhere gestisce solo le operazioni sui vettori in Milvus. La figura precedente illustra l'architettura di Knowhere in Milvus. Il livello più basso è l'hardware di sistema. Le librerie di indici di terze parti si trovano sopra l'hardware. Poi Knowhere interagisce con il nodo indice e il nodo di interrogazione in alto tramite CGO. Knowhere non solo estende ulteriormente le funzioni di Faiss, ma ne ottimizza anche le prestazioni e presenta diversi vantaggi, tra cui il supporto di BitsetView, il supporto di più metriche di similarità, il supporto del set di istruzioni AVX512, la selezione automatica delle istruzioni SIMD e altre ottimizzazioni delle prestazioni. I dettagli sono disponibili qui.

Architettura Milvus

La figura seguente illustra l'architettura complessiva della piattaforma Milvus. Milvus separa il flusso di dati dal flusso di controllo ed è suddiviso in quattro livelli indipendenti in termini di scalabilità e disaster recovery.

figure 8 Figura 8

  • Livello di accesso: Il livello di accesso è composto da un gruppo di proxy stateless e funge da livello frontale del sistema e da endpoint per gli utenti.
  • Servizio di coordinamento: Il servizio di coordinamento è responsabile della gestione dei nodi della topologia del cluster, del bilanciamento del carico, della generazione dei timestamp, della dichiarazione dei dati e della gestione dei dati.
  • Nodi worker: Il nodo worker, o di esecuzione, esegue le istruzioni emesse dal servizio coordinatore e i comandi del linguaggio di manipolazione dei dati (DML) avviati dal proxy. Un nodo worker in Milvus è simile a un nodo dati in Hadoop o a un region server in HBase.
  • Archiviazione: È la pietra angolare di Milvus, responsabile della persistenza dei dati. Il livello di storage è composto da meta store, log broker e object storage.

Per maggiori dettagli sull'architettura, consultate qui!

Eseguire una ricerca visiva di immagini con Milvus - Un esempio di caso d'uso

I database vettoriali open-source come Milvus consentono a qualsiasi azienda di creare il proprio sistema di ricerca di immagini visive con un numero minimo di passaggi. Gli sviluppatori possono utilizzare modelli di intelligenza artificiale pre-addestrati per convertire i propri set di dati di immagini in vettori, e quindi sfruttare Milvus per consentire la ricerca di prodotti simili in base all'immagine. Vediamo di seguito un esempio di come progettare e costruire un sistema di questo tipo.

figure 9 Figura 9

In questo flusso di lavoro possiamo utilizzare un framework open-source come towhee per sfruttare un modello pre-addestrato come ResNet-50 ed estrarre vettori dalle immagini, memorizzare e indicizzare questi vettori con facilità in Milvus e memorizzare anche una mappatura degli ID delle immagini alle immagini reali in un database MySQL. Una volta che i dati sono indicizzati, possiamo caricare facilmente qualsiasi nuova immagine ed eseguire ricerche su scala utilizzando Milvus. La figura seguente mostra un esempio di ricerca visiva di immagini.

figure 10 Figura 10

Date un'occhiata al tutorial dettagliato che è stato reso disponibile su GitHub grazie a Milvus.

Conclusione

In questo articolo abbiamo affrontato un bel po' di argomenti. Abbiamo iniziato con le sfide legate alla rappresentazione di dati non strutturati, allo sfruttamento dei vettori e alla ricerca di similarità vettoriale su scala con Milvus, un database vettoriale open source. Abbiamo discusso i dettagli su come Milvus è strutturato e sui componenti chiave che lo alimentano, oltre a una descrizione di come risolvere un problema del mondo reale, la ricerca di immagini visive con Milvus. Provatelo e iniziate a risolvere i vostri problemi reali con Milvus!

Vi è piaciuto questo articolo? Contattatemi per discuterne ancora o per dare un feedback!

Informazioni sull'autore

Dipanjan (DJ) Sarkar è un Data Science Lead, esperto di Google Developer - Machine Learning, autore, consulente e consulente AI. Contatti: http://bit.ly/djs_linkedin

Like the article? Spread the word

Continua a Leggere