Come i database vettoriali stanno rivoluzionando la ricerca di dati non strutturati nelle applicazioni di IA
I database vettoriali sono diventati fondamentali nel rivoluzionare la ricerca di dati non strutturati all'interno delle applicazioni di IA. Uno dei loro ruoli ampiamente riconosciuti è nella retrieval-augmented generation (RAG), un processo che collega documenti pertinenti con gli LLM. Tuttavia, le loro applicazioni e capacità vanno ben oltre la RAG; sono applicabili in modo più ampio a una varietà di diversi tipi di dati non strutturati, cioè qualsiasi tipo di dato che non si conforma a un modello di dati predefinito, come testo, immagini, audio, molecole e grafi.
Al recente Brazil Unstructured Data Meetup, Frank Liu, responsabile di Intelligenza artificiale e machine learning presso Zilliz, ha parlato di come i database vettoriali stiano trasformando il panorama della ricerca di dati non strutturati nelle applicazioni di IA. Le sue intuizioni fanno luce sulle capacità ampie e di grande impatto di questi database.
Guarda la registrazione dell'intervento di Frank al meetup Segui la demo
Che cosa sono i vettori?
Prima di trattare i database vettoriali e il loro ruolo nelle applicazioni di IA, è importante capire che cosa sono i vettori, poiché sono gli elementi costitutivi dei database vettoriali. Un vettore è una lista di numeri che codifica le informazioni in un modo che i computer possono elaborare. Immagina di avere un'immagine, come quella mostrata qui sotto:
Fig 1- Un'immagine rappresentata in formato vettoriale
Per te è un bellissimo fiore, ma per un computer questa immagine deve essere convertita in un formato che possa comprendere. È qui che entrano in gioco gli embedding vettoriali.
L'immagine del fiore sopra viene trasformata in un embedding vettoriale: un array strutturato di numeri. Ogni numero nel vettore rappresenta una particolare caratteristica dell'immagine, come colore, texture o forma. La combinazione di questi numeri fornisce una rappresentazione compatta ed efficiente dell'immagine che il computer può utilizzare per varie attività, come cercare immagini simili, categorizzare oggetti o persino generare nuove immagini. Ecco una visualizzazione di come gli embedding vettoriali vengono generati e archiviati in un database vettoriale come Milvus.
Fig 2- Processo di generazione e archiviazione degli embedding vettoriali
Il processo inizia con una knowledge base contenente vari tipi di dati. I dati vengono quindi elaborati da modelli di embedding, che li convertono in vettori. Infine, i vettori vengono archiviati in un database vettoriale come Milvus, pronti per il recupero.
L'embedding dei dati non è limitato alle immagini. Testo, audio e persino tipi di dati più complessi come molecole e grafi possono essere trasformati in embedding vettoriali. Rappresentando i dati come vettori, possiamo sfruttare la potenza dei database vettoriali per eseguire ricerche efficienti e accurate.
Vediamo come i database vettoriali vengono utilizzati nei diversi campi.
Diversi casi d'uso supportati dai database vettoriali
I database vettoriali stanno trasformando il modo in cui gestiamo e cerchiamo dati non strutturati in una moltitudine di applicazioni. Dal potenziamento delle capacità dei sistemi di IA alla formulazione di raccomandazioni più efficaci, le possibilità sono vaste e di grande impatto. Passiamo ad alcuni casi d'uso specifici supportati dai database vettoriali.
Retrieval-Augmented Generation (RAG)
I database vettoriali stanno trasformando la RAG consentendo un recupero più efficiente e semanticamente significativo delle informazioni pertinenti. I metodi tradizionali di ricerca basati su parole chiave spesso risultano insufficienti quando si tratta di query complesse o contesti sfumati. I database vettoriali affrontano questa limitazione archiviando e cercando i dati in base alla similarità semantica piuttosto che a corrispondenze esatte.
Nel RAG, i documenti vengono convertiti in vettori ad alta dimensionalità che ne catturano il significato semantico. Quando viene ricevuta una query, anch'essa viene convertita in un vettore e il database vettoriale trova rapidamente i documenti semanticamente più simili. Questo approccio consente un recupero delle informazioni più sfumato e consapevole del contesto, fondamentale per generare risposte accurate e pertinenti.
Considera un chatbot di assistenza clienti per un'azienda tecnologica. Quando un utente chiede: "Come posso risolvere i problemi del mio dispositivo che non si accende?" il database vettoriale può recuperare documenti pertinenti anche se non contengono quelle parole esatte. Potrebbe estrarre informazioni su problemi di alimentazione, problemi della batteria e passaggi generali per la risoluzione dei problemi. L'LLM utilizza quindi queste informazioni recuperate per generare una risposta completa e contestualmente pertinente, migliorando significativamente la qualità dell'assistenza clienti.
Sistema di raccomandazione
I database vettoriali stanno rivoluzionando i sistemi di raccomandazione consentendo calcoli di similarità più sofisticati ed efficienti. I sistemi di raccomandazione tradizionali spesso faticano con il problema del "cold start" e possono essere computazionalmente costosi quando gestiscono grandi dataset. I database vettoriali affrontano questi problemi consentendo rapide ricerche approssimate del vicino più prossimo in spazi ad alta dimensionalità.
In un sistema di raccomandazione basato su database vettoriale, sia gli utenti sia gli elementi sono rappresentati come vettori in uno spazio di embedding condiviso. Questi embedding catturano caratteristiche e preferenze complesse, consentendo raccomandazioni più sfumate. Il database vettoriale può trovare rapidamente utenti o elementi simili, abilitando la personalizzazione in tempo reale anche con dataset enormi.
Ad esempio, un servizio di streaming musicale come Spotify utilizza database vettoriali per alimentare il suo motore di raccomandazione. Ogni brano è rappresentato come un vettore, che cattura vari attributi come genere, tempo, atmosfera e pattern di ascolto. Anche le preferenze degli utenti sono codificate come vettori. Quando un utente ascolta una nuova canzone, il sistema può trovare rapidamente canzoni simili nello spazio vettoriale, consentendo la scoperta di nuova musica in linea con i gusti dell'utente, anche se proviene da un artista o un genere non familiare.
Ricerca di similarità molecolare
I database vettoriali stanno trasformando la ricerca di similarità molecolare nella scoperta di farmaci consentendo un'identificazione più efficiente e accurata di composti simili. I metodi tradizionali spesso si basano sulla similarità della struttura 2D, che può non rilevare importanti similarità conformazionali 3D o relazioni tra gruppi funzionali.
Con i database vettoriali, le immagini delle molecole sono rappresentate come vettori ad alta dimensionalità che catturano proprietà strutturali e chimiche complesse. Questo consente ai ricercatori di cercare molecole con proprietà simili o potenziali attività biologiche, anche se le loro strutture 2D appaiono diverse. La velocità dei database vettoriali consente inoltre uno screening rapido di vaste librerie chimiche.
Prendi l'esempio di un'azienda farmaceutica alla ricerca di nuovi candidati antibiotici. Ha una molecola antibiotica nota che funziona bene ma presenta gravi effetti collaterali. Utilizzando un database vettoriale, può cercare rapidamente tra milioni di composti per trovare molecole con proprietà antibatteriche simili ma profili di effetti collaterali potenzialmente diversi. La rappresentazione vettoriale potrebbe catturare caratteristiche come la distribuzione della carica, potenziali siti di legame e forma 3D, consentendo la scoperta di molecole strutturalmente diverse ma funzionalmente simili che le tradizionali ricerche di similarità 2D potrebbero non individuare.
Ricerca di similarità multimodale
I database vettoriali stanno rivoluzionando la ricerca multimodale fornendo un modo unificato per rappresentare e cercare tra diversi tipi di dati (testo, immagini, audio, ecc.). I sistemi di ricerca tradizionali spesso faticano con query cross-modali o nel trovare relazioni tra diversi tipi di dati.
In un sistema multimodale basato su database vettoriali, tutti i tipi di dati vengono proiettati in uno spazio condiviso ad alta dimensionalità in cui le somiglianze possono essere calcolate indipendentemente dal tipo di dato originale. Questo consente capacità di ricerca più flessibili e potenti, permettendoci di trovare contenuti correlati tra diverse modalità.
Ad esempio, una piattaforma di e-commerce implementa un sistema di ricerca multimodale utilizzando database vettoriali. Un utente può caricare un'immagine di un mobile che gli piace e fornire una descrizione testuale del colore e del materiale desiderati. Il sistema converte sia l'immagine sia il testo in vettori in uno spazio condiviso. Quindi cerca nel database vettoriale per trovare prodotti che corrispondano sia allo stile visivo dell'immagine sia agli attributi specifici della descrizione testuale. Questo consente agli utenti di trovare esattamente ciò che cercano, anche se non riescono a esprimerlo completamente solo a parole, migliorando notevolmente l'esperienza di acquisto.
Questi sono solo alcuni casi d'uso che vengono rivoluzionati dai database vettoriali. Frank ha condiviso la seguente slide con ancora più casi d'uso.
Fig 3- Casi d'uso dei database vettoriali
L'elenco sopra non è esaustivo. È solo una rappresentazione di ciò che è possibile quando si tratta di migliorare la ricerca dei dati nelle applicazioni AI tramite database vettoriali.
Poiché ora comprendi l'importanza dei database vettoriali in vari campi. Implementiamo uno dei casi d'uso in modo che tu possa vederli in azione. Utilizzeremo Milvus poiché è il database vettoriale più popolare in termini di stelle su GitHub.
Implementazione di un sistema di ricerca di similarità multimodale usando Milvus, Radient, ImageBind e Meta-Chameleon-7b
Per implementare un sistema di ricerca di similarità multimodale usando gli strumenti sopra. Devi installarli nel tuo ambiente e importarli.
Configurazione del tuo ambiente
Inizia installando le librerie richieste e scaricando i modelli necessari.
!pip install -U radient
!pip install -U yt-dlp
!pip install pymilvus
!pip install -U git+https://github.com/facebookresearch/chameleon.git@main
!git clone https://huggingface.co/eastwind/meta-chameleon-7b
!yt-dlp "https://www.youtube.com/watch?v=wwk1QIDswcQ" -o ~/google_io_preshow.mp4
!pip install git+https://github.com/fzliu/ImageBind@main
Ecco cosa fa ciascuna delle librerie sopra:
Radient: Crea ed esegue workflow per elaborare e analizzare dati multimodali, integrando vari passaggi di elaborazione dei dati.
yt-dlp: Uno strumento da riga di comando per scaricare video da YouTube. In questo articolo, useremo questo video dal pre-show di Google.
PyMilvus: L'SDK Python per interagire con il database vettoriale Milvus e Milvus lite, consentendo una ricerca di similarità efficiente e il recupero di dati su larga scala.
Chameleon: Un modello vision-language sviluppato da Meta AI, capace di comprendere e generare testo basato su input visivi, utile per integrare input di dati multimodali.
Meta-Chameleon-7b: Un modello specifico della serie Chameleon, progettato per attività vision-language avanzate, che fornisce risposte consapevoli del contesto integrando dati visivi e testuali.
ImageBind: Un modello di embedding multimodale.
Dopo aver installato le librerie, dobbiamo importarle nel tuo codice per poter utilizzare le loro funzioni.
from pathlib import Path
from radient import make_operator
from radient import Workflow
Nota che importiamo solo radient. Questo perché Radient gestisce l'integrazione e l'utilizzo del modello di embedding e di PyMilvus all'interno dei suoi workflow. Pertanto non dobbiamo importarli manualmente.
La funzione make_operator ci consente di creare vari operatori che formeranno i blocchi costitutivi del nostro workflow. La classe Workflow collegherà questi operatori in una sequenza logica.
Dopo le importazioni, sei pronto per implementare il sistema di ricerca di similarità multimodale.
Creazione degli operatori
Inizia specificando le attività specifiche che il workflow eseguirà.
path = Path('/content/google.mp4') // pass the youtube downloaded video path here
read = make_operator(optype="source", method="local", task_params={"path": str(path)})
demux = make_operator(optype="transform", method="video-demux", task_params={"interval": 5.8})
vectorize = make_operator (optype="vectorizer", method="imagebind", modality="multimodal", task_params={})
store = make_operator (optype="sink", method="milvus", task_params={"operation": "insert"})
Analizziamo nel dettaglio ciascun operatore:
read: Questo è un operatoresourceche legge il file video locale. Prende il percorso del file come parametro ed è responsabile del caricamento dei dati video nel nostro workflow.demux: Questo è un operatoretransformche demuxa (separa) il video in frame a intervalli di 5,8 secondi. Questo passaggio è fondamentale per suddividere il flusso video continuo in immagini discrete che possono essere elaborate singolarmente.vectorize: Questo operatore utilizza il modelloImageBindper creare embedding vettoriali per dati multimodali. ImageBind è un modello potente in grado di creare embedding unificati per diverse modalità (come immagini, testo e audio), consentendoci di rappresentare i nostri frame video in uno spazio vettoriale ad alta dimensionalità.store: Questo è un operatore sink che inserisce i dati vettorializzati in Milvus lite. Una versione leggera di Milvus
Dopo aver creato gli operatori, il passaggio successivo consiste nel creare un workflow utilizzandoli.
Costruzione del workflow di inserimento
Successivamente, costruiamo un workflow per inserire i nostri dati video elaborati nel database Milvus:
insert_wf = (Workflow()
.add(read, name="read")
.add(demux, name="demux")
.add(vectorize, name="vectorize")
.add(store, name="store")
)
insert_wf()
Questo workflow inizia leggendo il file video, quindi lo demuxa in singoli frame. Ogni frame viene successivamente vettorializzato utilizzando il modello ImageBind. I vettori risultanti vengono archiviati nel database Milvus.
Se tutto funziona correttamente, dovresti vedere un output simile a quello riportato di seguito:
Fig 4- Risultati dell'operazione di inserimento
L'output mostra una conferma che il tuo video è stato elaborato e inserito in Milvus. Mostra il risultato dell'operazione di inserimento, indicando il numero di record inseriti, i loro ID e il costo computazionale.
Configurazione del workflow di ricerca
Dopo aver inserito i nostri dati, dobbiamo configurare un workflow per la ricerca. Questo workflow ci consentirà di trovare frame video pertinenti in base a query testuali:
vectorize = make_operator("vectorizer", "imagebind", modality="text")
search = make_operator("sink", "milvus", task_params={"operation": "search", "output_fields": None})
search_wf = (Workflow()
.add(vectorize, name="vectorize")
.add(search, name="search")
)
Questo workflow di ricerca consiste in due passaggi principali:
L'operatore
vectorizeprende l'input testuale e lo converte in un embedding vettoriale utilizzando ImageBind. Questo ci consente di rappresentare la nostra query testuale nello stesso spazio vettoriale dei nostri frame video.L'operatore
searchutilizza quindi questo vettore per eseguire una ricerca per similarità nel database Milvus, trovando i frame video più simili alla nostra query.
Poiché abbiamo il workflow di ricerca, eseguiamo una ricerca.
Esecuzione di una ricerca multimodale
Questa è una ricerca multimodale poiché stiamo usando il testo per cercare in un video. Per essere precisi, stiamo cercando nei frame del video.
prompt = "What was unusual about the coffee mug?"
search_wf(data=prompt)
search_vars = {
"limit": 1, # top-k limit
"output_fields": ["*"] # output fields
}
results = search_wf(
extra_vars={"search": search_vars},
data=prompt
)
results[0][0][0]["entity"]["data"]
Qui definiamo un prompt di ricerca che chiede informazioni su una tazza da caffè insolita. Il dizionario search_vars specifica che vogliamo il primo risultato e tutti i campi di output.
Eseguiamo quindi il workflow di ricerca con questi input. Il workflow vettorializza il nostro prompt di testo, cerca vettori simili in Milvus e restituisce i risultati. L’indicizzazione annidata [0][0][0] accede al primo (e in questo caso unico) risultato di ricerca, e ["entity"]["data"] recupera i dati effettivi associati a questo risultato.
Il codice sopra restituisce il percorso del frame che meglio corrisponde alla nostra query.
/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png
Visualizziamo questo frame restituito per vedere cosa c’è di insolito nella tazza.
from PIL import Image
image_path = "/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png"
image = Image.open(image_path)
import matplotlib.pyplot as plt
plt.imshow(image)
plt.show()
Questo codice apre il file immagine corrispondente al nostro risultato di ricerca utilizzando PIL (Python Imaging Library) e lo visualizza usando matplotlib. Questa rappresentazione visiva ci aiuta a capire cosa ha trovato il sistema in risposta alla nostra query su una tazza da caffè insolita.
Ecco l’output:
Fig 5- Una persona che esce da una tazza
Come puoi vedere, questo frame mostra una tazza insolita, poiché non puoi far entrare una persona in una tazza normale. L’attività insolita è che c’è una persona che esce da una tazza.
Sfruttare Meta-Chameleon-7b per la descrizione delle immagini
Per migliorare ulteriormente il nostro sistema di ricerca multimodale, possiamo usare il modello Meta-Chameleon-7b per generare una descrizione dell’immagine:
from chameleon.inference.chameleon import ChameleonInferenceModel
import os
# Verify the file path and existence
image_path = '/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png'
print(f"Image path: {image_path}")
print(f"File exists: {os.path.exists(image_path)}")
print(f"File size: {os.path.getsize(image_path)} bytes")
# Initialize the model
model = ChameleonInferenceModel(
"./meta-chameleon-7b/models/7b/",
"./meta-chameleon-7b/tokenizer/text_tokenizer.json",
"./meta-chameleon-7b/tokenizer/vqgan.yaml",
"./meta-chameleon-7b/tokenizer/vqgan.ckpt",
)
try:
tokens = model.generate(
prompt_ui=[
{"type": "image", "value": f"file:{image_path}"}, # Remove the space after 'file:'
{"type": "text", "value": prompt},
{"type": "sentinel", "value": "<END-OF-TURN>"},
]
)
result = model.decode_text(tokens)[0]
print("Generated description:")
print(result)
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()
Questo codice inizializza il modello Meta-Chameleon-7b, un modello vision-language in grado di comprendere e descrivere immagini nel contesto. Gli forniamo sia l’immagine sia il nostro prompt di testo originale, consentendogli di generare una descrizione pertinente alla nostra query.
Il metodo generate accetta una lista di input, inclusi il percorso del file immagine, il nostro prompt di testo e un token sentinella per contrassegnare la fine dell’input. Il modello genera quindi una sequenza di token, che decodifichiamo in testo leggibile dall’uomo. Ecco un esempio di come dovrebbe apparire l’output:
Fig 6- Output della descrizione di un’immagine usando un modello vision-language
Questa implementazione mostra come database vettoriali come Milvus possano essere integrati in sistemi di IA più ampi, consentendo una ricerca efficiente per similarità tra diverse modalità.
Conclusione
Frank ha fatto un buon lavoro nel mostrarci come i database vettoriali siano emersi come una tecnologia trasformativa nel campo dell'IA e del machine learning, in particolare per la gestione dei dati non strutturati. Come dimostrato, le loro applicazioni vanno ben oltre i semplici sistemi di retrieval-augmented generation (RAG), rivoluzionando vari ambiti tra cui l'assistenza clienti, i sistemi di raccomandazione, la scoperta di farmaci e la ricerca multimodale. Vai avanti e implementa applicazioni IA ancora più sofisticate basate su database vettoriali. Ecco alcune risorse per riferimento.
Per una comprensione più dettagliata, inclusa la storia degli embedding, guarda il replay del talk del meetup.
Ulteriori risorse
Continua a leggere

Introducing Functions and Model Inference on Zilliz Cloud: Automatic Embedding and Reranking with Hosted Models
Zilliz Cloud Functions auto-generate embeddings via OpenAI, Voyage AI, Cohere, or Zilliz Hosted Models. Built-in reranking — just insert text and search.

Zilliz Cloud Now Available in Azure North Europe: Bringing AI-Powered Vector Search Closer to European Customers
The addition of the Azure North Europe (Ireland) region further expands our global footprint to better serve our European customers.

Bringing AI to Legal Tech: The Role of Vector Databases in Enhancing LLM Guardrails
Discover how vector databases enhance AI reliability in legal tech, ensuring accurate, compliant, and trustworthy AI-powered legal solutions.


