Torna al blog
Embedding Multilingue in Locale: EmbeddingGemma e i Modelli Piccoli che Girano sul Tuo PC

Embedding Multilingue in Locale: EmbeddingGemma e i Modelli Piccoli che Girano sul Tuo PC

8 min di lettura1 visualizzazioni
di Marco Salmaso
Per costruire un sistema RAG non serve per forza un'API a pagamento: i modelli di embedding piccoli e multilingue di oggi girano su un normale computer, anche senza GPU, e funzionano bene con l'italiano. Cosa sono gli embedding, perché conviene generarli in locale e come usare EmbeddingGemma in pochi passaggi.

Cosa Sono gli Embedding

Un embedding è una rappresentazione numerica del significato di un testo. Un modello di embedding prende in ingresso una frase, un paragrafo o un documento e restituisce un vettore, cioè una lista di numeri (tipicamente qualche centinaio). La proprietà fondamentale è che testi con significato simile producono vettori vicini.

Le frasi "come faccio un reso?" e "procedura per restituire un articolo" non hanno quasi parole in comune, ma i loro embedding saranno molto vicini. È questa proprietà a rendere possibile la ricerca semantica e, di conseguenza, i sistemi RAG: si confronta il vettore della domanda con i vettori dei documenti e si recuperano i più simili.

Perché Generarli in Locale

Molti servizi offrono embedding tramite API: si invia un testo, si riceve un vettore. È comodo, ma ci sono buone ragioni per farlo in locale.

  • Privacy: i documenti non lasciano mai la propria macchina o la propria rete. Per procedure interne, contratti o dati di clienti è spesso un requisito.
  • Costi: indicizzare un archivio di documenti significa generare migliaia o milioni di embedding. In locale il costo marginale è zero.
  • Indipendenza: nessun limite di richieste, nessun cambio di prezzo o di modello deciso da altri. E un vincolo spesso dimenticato: se il fornitore dismette il modello, tutti i vettori salvati vanno rigenerati.
  • Latenza: per volumi moderati, un modello piccolo in locale risponde in pochi millisecondi senza passare dalla rete.

Fino a poco tempo fa il compromesso era la qualità: i modelli piccoli funzionavano bene in inglese e male nelle altre lingue. Oggi non è più così.

EmbeddingGemma

EmbeddingGemma è un modello di embedding di Google della famiglia Gemma, con circa 300 milioni di parametri. È stato progettato esplicitamente per funzionare on-device, cioè su laptop, desktop e perfino dispositivi mobili, ed è addestrato su oltre cento lingue, italiano compreso.

Alcune caratteristiche lo rendono particolarmente adatto a progetti personali e aziendali di piccola scala:

  • Dimensioni contenute: occupa poca memoria e gira in modo accettabile anche su CPU.
  • Vettori a 768 dimensioni, riducibili a dimensioni più piccole (ad esempio 512, 256 o 128) grazie alla tecnica Matryoshka: i primi valori del vettore contengono già la maggior parte dell'informazione, quindi si può troncare per risparmiare spazio con una perdita di qualità limitata.
  • Prompt per compito: il modello rende meglio quando si indica se il testo è una domanda o un documento, perché le due cose vanno rappresentate in modo leggermente diverso.

Usarlo con Python

Il modo più semplice è la libreria sentence-transformers:

from sentence_transformers import SentenceTransformer

modello = SentenceTransformer("google/embeddinggemma-300m")

documenti = [
    "Per registrare un reso da un altro negozio, aprire la sezione Resi e selezionare il punto vendita di origine.",
    "Gli inventari di fine stagione si svolgono la prima settimana di febbraio e di agosto.",
    "Il cambio taglia è gratuito entro 30 giorni dall'acquisto con scontrino.",
]

domanda = "Come faccio a restituire un capo comprato in un altro negozio?"

emb_documenti = modello.encode_document(documenti)
emb_domanda = modello.encode_query(domanda)

similarita = modello.similarity(emb_domanda, emb_documenti)
print(similarita)

Il primo documento otterrà il punteggio più alto, anche se la domanda non usa le parole "registrare" o "sezione Resi". Questa è la ricerca semantica in poche righe.

Per salvare spazio si può troncare la dimensione dei vettori già al caricamento:

modello = SentenceTransformer("google/embeddinggemma-300m", truncate_dim=256)

L'accesso al modello su Hugging Face richiede di accettarne la licenza d'uso una tantum.

Le Alternative

EmbeddingGemma non è l'unica opzione. Altri modelli piccoli e multilingue molto usati sono:

  • la famiglia multilingual-e5 (small, base, large), solida e ampiamente testata;
  • BGE-M3, più grande, che produce sia vettori densi sia sparsi ed è ottimo per la ricerca ibrida;
  • nomic-embed-text e i modelli disponibili direttamente in Ollama, comodi se si usa già Ollama per gli LLM locali.

La scelta giusta dipende dai propri documenti: il consiglio è preparare un piccolo set di domande reali con le risposte attese e confrontare due o tre modelli. Mezz'ora di test vale più di qualsiasi classifica generica.

Consigli Pratici

Il chunking conta quanto il modello

Gli embedding funzionano meglio su porzioni di testo coerenti: un paragrafo, una sezione, una procedura. Dividere i documenti in blocchi di qualche centinaio di parole, con una leggera sovrapposizione tra blocchi consecutivi, è un buon punto di partenza. Blocchi troppo lunghi diluiscono il significato; troppo corti perdono il contesto.

Non mescolare modelli

Vettori prodotti da modelli diversi non sono confrontabili. Se si cambia modello, bisogna rigenerare tutti gli embedding. Conviene salvare, insieme a ogni vettore, il nome e la versione del modello usato.

Normalizzare il testo

Rimuovere intestazioni ripetute, piè di pagina, numeri di pagina e spazi superflui prima di generare gli embedding migliora la qualità dei risultati in modo sorprendente.

Salvare i vettori in un database adatto

Una volta generati, gli embedding vanno salvati in un database che permetta la ricerca per similarità, come Qdrant o pgvector. Un'architettura interessante è esporre salvataggio e ricerca tramite un server MCP: qualsiasi assistente AI compatibile può allora memorizzare e recuperare informazioni, mentre gli embedding vengono generati localmente senza inviare i testi a servizi esterni.

Conclusioni

I modelli di embedding piccoli e multilingue hanno reso la ricerca semantica accessibile a chiunque abbia un computer. EmbeddingGemma, con i suoi 300 milioni di parametri, il supporto all'italiano e la possibilità di ridurre la dimensione dei vettori, è un'ottima base per costruire sistemi RAG privati, economici e indipendenti. Il passo successivo è collegarli a un buon database vettoriale e, soprattutto, curare la qualità dei documenti che si indicizzano.