Franky Bonanno

← Notizie

pgvector spiegato semplice, parte 1: come far capire il significato a un database

· Guide

pgvector spiegato semplice, parte 1: come far capire il significato a un database

Un database che trova i documenti anche quando non contengono le parole che hai scritto? Con pgvector si può. Prima puntata: cosa sono gli embedding e perché cambiano la ricerca.

Un problema che conosci già

Immagina un archivio di contratti. In uno c'è scritto: «Il conduttore può esercitare il diritto di recesso con preavviso di sei mesi». Tu cerchi: «come disdire l'affitto».

Per un essere umano la risposta è ovvia: è proprio quel documento. Per una ricerca normale, no. Nel testo non compaiono né «disdire» né «affitto». Risultato: zero risultati, e la sensazione che il computer non capisca niente.

Come cercano i computer di solito

La ricerca di sempre confronta parole. Se scrivi «affitto», cerca documenti che contengono «affitto». Le versioni più evolute sanno che «affitti» e «affittare» sono parenti, e qualcuna conosce anche dei sinonimi, ma sempre di parole si tratta.

Va benissimo per cose precise: un cognome, il numero di una fattura, un codice. Ma è cieca davanti al significato. E noi, quando cerchiamo, di solito non ricordiamo le parole esatte: ricordiamo l'idea.

L'idea geniale: trasformare il significato in numeri

Da qualche anno esistono modelli di intelligenza artificiale capaci di leggere un testo e restituire una lista di numeri che ne rappresenta il senso. Questa lista si chiama embedding, o, più semplicemente, vettore.

Il modo più facile per capirlo è pensare a una mappa. Ogni frase, ogni parola, ogni documento diventa un punto sulla mappa. E la regola è una sola: cose che significano cose simili finiscono vicine.

«Gatto», «cane» e «cucciolo» stanno nello stesso quartiere. «Auto», «moto» e «camion» in un altro. «Pizza», «pasta» e «cannolo» in un terzo. E la tua ricerca «cucciolo di casa», anche se non contiene la parola «cane», atterra proprio nel quartiere degli animali.

Una precisazione importante: i modelli veri non usano una mappa piatta con due coordinate, ma centinaia o migliaia di numeri per ogni testo. È come avere una mappa con tante dimensioni, impossibile da disegnare, ma l'idea è identica: la vicinanza vuol dire somiglianza di significato.

Cercare diventa misurare distanze

A questo punto cercare è sorprendentemente semplice:

1. Il testo che cerchi diventa anch'esso un punto sulla mappa.
2. Il database guarda quali documenti sono più vicini a quel punto.
3. Ti mostra quelli, in ordine di vicinanza.

Per tornare ai contratti: «come disdire l'affitto» e «diritto di recesso con preavviso di sei mesi» finiscono vicinissimi, perché parlano della stessa cosa, anche se non hanno una parola in comune.

Dove entra pgvector

pgvector è un'estensione gratuita e open source di PostgreSQL, uno dei database più usati al mondo. Aggiunge due cose:

  • un nuovo tipo di colonna, per salvare i vettori accanto agli altri dati;
  • gli strumenti per trovare i più vicini a un punto, e gli indici per farlo in fretta anche con tanti documenti.

Il vantaggio è pratico: non serve un database separato, né un servizio in più da gestire. I vettori vivono nello stesso database dove hai già utenti, documenti e permessi. E una sola domanda può dire, per esempio: «trovami i documenti più simili a questo, ma solo quelli di questo cliente».

Che cosa ci puoi fare

  • Ricerca per significato nei documenti di un'azienda o di uno studio.
  • «Documenti simili a questo», come i suggerimenti di un sito di articoli.
  • Assistenti che rispondono sui tuoi file: prima trovano i passaggi più adatti alla domanda, poi li passano a un modello di linguaggio che scrive la risposta.
  • Individuare duplicati o quasi-duplicati in un archivio.

I limiti, detti onestamente

  • Dipende dal modello. I vettori li produce un modello di IA: se lo cambi, vanno rigenerati tutti.
  • Non sostituisce la ricerca per parole. Per un numero di fattura o un cognome preciso, la ricerca classica resta migliore. Le due cose, insieme, funzionano meglio che da sole: ne parleremo in una delle prossime puntate.
  • «Simile» non vuol dire «vero». Trova ciò che somiglia alla domanda, non garantisce che sia la risposta giusta.

Dove l'ho usato io

La ricerca per significato con pgvector è uno dei progetti guidati del mio libro Costruire un sistema documentale: un sistema di gestione documentale costruito capitolo per capitolo con Django 6.1, HTMX e pgvector. Se vuoi vedere come si fa dall'inizio alla fine, trovi la scheda qui: Building a Document Management System. Il libro è in inglese.

Prossima puntata

Nella seconda parte mettiamo le mani sul codice: PostgreSQL con Docker, l'estensione pgvector e il primo campo vettoriale in un progetto Django. Passo dopo passo, senza dare niente per scontato.