In alcuni dei nostri precedenti articoli abbiamo già discusso di cosa siano gli embeddings, di come essi vengano utilizzati nelle applicazioni di machine learning e abbiamo anche visto come generarli. Adesso è arrivato il momento di vedere come salvarli e utilizzarli. In questo post esploreremo le funzionalità di Qdrant, uno dei database vettoriali più diffusi.
Cos’è Qdrant?
Qdrant è un database vettoriale open-source progettato per la gestione e la ricerca efficiente di dati ad alta dimensione. A differenza dei database relazionali tradizionali, che memorizzano i dati in tabelle strutturate, Qdrant memorizza i dati come vettori, che sono rappresentazioni numeriche di dati complessi come testo, immagini o audio. Questo tipo di struttura dati è ideale per applicazioni di intelligenza artificiale (AI) che richiedono la ricerca di similarità tra dati ad alta dimensione, come la ricerca di immagini simili, la raccomandazione di prodotti e l’analisi del testo.
Come installare Qdrant su Docker
In questo tutorial vedremo come installare Qdrant usando un engine Docker (in particolare la versione gratuita di Rancher Desktop).
Una volta installato docker sulla propria macchina, per scaricare l’immagine di Qdrant è sufficiente lanciare in console il comando:
docker pull qdrant/qdrant
Al termine del download, per eseguire l’immagine bisogna lanciare il comando:
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant
La porta 6333 è quella sulla quale viene esposta la console web mentre la 6334 è necessaria per consentire eventuali connessioni dall’esterno.
Usare la Web-UI
Dopo aver lanciato l’immagine Docker, è possibile collegarsi alla dashboard web che è esposta al seguente URL:
http://localhost:6333/dashboard
Navigando mediante il menù di sinistra sarà possibile accedere alla “Console” che permette di eseguire comandi mediante l’invocazione delle API HTTP. Per esempio è possibile creare una nuova collection eseguendo la seguente richiesta:
PUT collections/cities
{
"vectors": {
"size": 4,
"distance": "Dot"
}
}
Per eseguire il comando è sufficiente cliccare sul link “RUN” che compare in alto sopra l’istruzione.
Così facendo abbiamo definito:
- il nome della collection che è indicato nel path dell’endpoint (“test_collection”)
- la dimensione dei vettori che andremo a salvare (4)
- il tipo di metrica di distanza (“Dot”).
La metrica di distanza può assumere diversi valori (“Dot“, “Cosine“, “Euclid“, “Manhattan“) e indica l’algoritmo che verrà usato per calcolare la distanza tra due vettori.
Una volta creata la collection, possiamo iniziare ad inserire i primi vettori. Ad esempio:
PUT collections/cities/points
{
"points": [
{
"id": 1,
"vector": [0.05, 0.61, 0.76, 0.74],
"payload": {"city": "Berlin"}
},
{
"id": 2,
"vector": [0.19, 0.81, 0.75, 0.11],
"payload": {"city": "London"}
},
{
"id": 3,
"vector": [0.36, 0.55, 0.47, 0.94],
"payload": {"city": "Moscow"}
},
{
"id": 4,
"vector": [0.18, 0.01, 0.85, 0.80],
"payload": {"city": "New York"}
},
{
"id": 5,
"vector": [0.24, 0.18, 0.22, 0.44],
"payload": {"city": "Beijing"}
},
{
"id": 6,
"vector": [0.35, 0.08, 0.11, 0.44],
"payload": {"city": "Mumbai"}
}
]
}
Navigando nella scheda “Collections” troveremo la collezione che abbiamo appena creato. Selezionandola e poi cliccando sul tab “VISUALIZE” sarà possibile lanciare una query e visualizzare graficamente i risultati.
Ad esempio è possibile eseguire una query semplicissima che mette solo un limite al numero di vettori visualizzati:
{
"limit": 500
}
Questa funzionalità può essere molto utile perché permette di avere una rappresentazione grafica ed intuitiva dei dati raccolti.