Ricerca ibrida: perché BM25 e vettori insieme battono entrambi da soli
Quando deve rispondere a una domanda su un contratto, un manuale tecnico o una norma, un motore di ricerca basato solo sulle parole esatte (BM25) o solo sul significato (vettori) perde sempre qualcosa. La ricerca ibrida combina i due approcci, tipicamente con una formula chiamata reciprocal rank fusion, per trovare sia il codice articolo scritto esattamente così sia il passaggio che dice la stessa cosa con parole diverse. Per un sistema RAG su documenti professionali italiani non è un dettaglio tecnico: è spesso la differenza tra una risposta corretta e un'allucinazione.
Cos'è la ricerca ibrida e perché conta per i documenti professionali
La ricerca ibrida esegue due interrogazioni in parallelo sullo stesso insieme di passaggi: una ricerca full-text classica (BM25), che confronta le parole esatte della domanda con quelle del testo, e una ricerca vettoriale, che confronta il significato della domanda con quello dei passaggi tramite embedding. I due elenchi di risultati vengono poi fusi in un'unica classifica. Il vantaggio è semplice da intuire: si ottiene la precisione del confronto letterale insieme alla capacità di capire una domanda formulata con parole diverse da quelle del documento. Per una panoramica di come questi passaggi si inseriscono in una pipeline completa, può consultare la nostra guida su come funziona il RAG.
BM25: il motore delle parole esatte
BM25 è l'algoritmo di ranking usato dalla maggior parte dei motori di ricerca full-text (lo stesso principio sta dietro Elasticsearch o OpenSearch). Assegna un punteggio a ogni passaggio in base alla frequenza dei termini della domanda al suo interno, pesata per quanto quei termini sono rari nell'intero corpus: un termine comune come "contratto" conta poco, un termine raro come "XK-4521B" o "art. 2103 c.c." conta molto. Questo lo rende insostituibile quando la risposta dipende da una stringa esatta: un numero di norma ("D.Lgs. 81/2008"), una sigla di settore (DPO, RSPP, CCNL metalmeccanici), un codice prodotto o un riferimento normativo. Il limite è altrettanto chiaro: se l'utente formula la domanda con parole diverse da quelle del documento, BM25 può non trovare nulla, anche se la risposta esiste chiaramente nel testo.
Ricerca vettoriale: cogliere il significato anche senza le parole giuste
La ricerca vettoriale trasforma ogni passaggio e ogni domanda in un vettore numerico, un embedding, che rappresenta il significato del testo in uno spazio matematico. Passaggi con significato simile finiscono vicini in quello spazio, anche se usano parole completamente diverse. Per capire come funziona nel dettaglio il meccanismo, abbiamo scritto una spiegazione dedicata su cosa sono gli embedding. Questo approccio è prezioso quando l'utente parafrasa, usa sinonimi settoriali ("recesso" invece di "disdetta") o pone una domanda in linguaggio naturale che non ricalca il lessico del documento. Il rovescio della medaglia: gli embedding tendono a essere meno affidabili su stringhe rare, codici, numeri esatti e, soprattutto, sulle negazioni, dove un testo che dice "non è obbligatorio" può risultare semanticamente vicino a uno che dice il contrario.
Perché nessuno dei due basta da solo
Sui documenti professionali, dove convivono articoli di legge, codici tecnici, sigle e domande formulate in linguaggio comune, i due approcci falliscono in situazioni opposte e complementari. Ecco come si comportano in pratica.
BM25 vs ricerca vettoriale vs ibrida
| Tipo di domanda | Solo BM25 | Solo vettori | Ricerca ibrida |
|---|---|---|---|
| Cerca un articolo esatto ("art. 2103 c.c.") | Trova subito | Spesso manca il passaggio giusto | Trova subito |
| Domanda parafrasata ("posso spostare un dipendente su un'altra mansione?") | Rischia di non trovare nulla | Trova il passaggio corretto | Trova il passaggio corretto |
| Codice prodotto o numero di serie | Preciso | Spesso ignorato o confuso con termini simili | Preciso |
| Sinonimi di settore ("recesso" / "disdetta") | Fallisce se il termine non coincide | Trova la corrispondenza | Trova la corrispondenza |
| Negazioni ("non è obbligatorio sotto i 250 dipendenti") | Instabile, dipende dai termini usati | Spesso confonde il caso con il suo opposto | Più stabile se i due segnali vengono pesati bene |
Reciprocal Rank Fusion: la formula che fa funzionare l'ibrido
Il problema tecnico da risolvere è che il punteggio BM25 e la similarità coseno di un embedding non sono comparabili: sono due scale di misura diverse. La reciprocal rank fusion (RRF) risolve il problema ignorando i punteggi assoluti e lavorando solo sulla posizione in classifica. Per ogni passaggio si calcola: punteggio = 1 / (k + posizione nella classifica BM25) + 1 / (k + posizione nella classifica vettoriale), con k tipicamente fissato a 60. Un passaggio che si piazza bene in entrambe le classifiche, anche senza essere primo in nessuna delle due, ottiene un punteggio combinato più alto di un passaggio primo in una sola lista e assente nell'altra. È un meccanismo semplice, robusto e che non richiede di ritarare manualmente i pesi ogni volta che si cambia modello di embedding.
Un esempio di calcolo passo dopo passo
Immagini una domanda interna a un'azienda: "sotto quale soglia di dipendenti non è obbligatorio nominare un DPO?". La ricerca BM25, che riconosce il termine esatto "DPO", piazza il Documento A al primo posto e il Documento B al secondo. La ricerca vettoriale, che coglie meglio la parafrasi sulla soglia dei dipendenti, piazza il Documento B al primo posto e il Documento A solo al quarto. Con k=60: il Documento A ottiene 1/61 + 1/64 = 0,0164 + 0,0156 = 0,0320; il Documento B ottiene 1/62 + 1/61 = 0,0161 + 0,0164 = 0,0325. Il Documento B vince di poco, perché è ben piazzato in entrambe le classifiche, mentre il Documento A, fortissimo su BM25 ma debole sui vettori, resta comunque in cima grazie al punteggio combinato. Nessuno dei due passaggi viene scartato ingiustamente.
Esempi su documenti professionali italiani
- Contratti e CCNL: una domanda come "quante ferie spettano a un apprendista" deve trovare sia il testo che usa letteralmente "apprendista" sia la clausola che parla di "contratto di apprendistato" con lessico diverso.
- Manuali tecnici: coppie di serraggio, codici ricambio e numeri di norma (come quelli raccolti nelle nostre guide su coppie di serraggio moto o coppie di serraggio bici) richiedono un confronto esatto che solo BM25 garantisce con affidabilità.
- Normative europee: domande sulla CSRD o sul GDPR spesso mescolano terminologia tecnica e linguaggio comune; abbiamo approfondito il caso specifico in domande sulla CSRD con fonti e in creare un chatbot conforme al GDPR.
- Sicurezza sul lavoro: un documento come il D.Lgs. 81/2008 contiene sia riferimenti numerici precisi sia obblighi descritti in modo discorsivo, come illustrato in sicurezza sul lavoro con l'IA.
Come attivare la ricerca ibrida senza costruire un'infrastruttura da zero
Costruire tutto internamente significa gestire due indici separati (un motore full-text come Elasticsearch o OpenSearch, e un database vettoriale come pgvector o un servizio dedicato), tenerli sincronizzati a ogni aggiornamento dei documenti, scrivere la logica di fusione RRF e tarare il parametro k sui propri dati. È fattibile, ma ha un costo di manutenzione reale: ne parliamo nel dettaglio in costo di un database vettoriale e nel confronto alternative a Pinecone. La qualità del chunking a monte conta quanto la ricerca stessa: se i passaggi sono tagliati male, né BM25 né i vettori troveranno granché, come spieghiamo in strategie di chunking per RAG. Un'alternativa è usare una piattaforma dove la ricerca ibrida è già integrata nella pipeline di indicizzazione: su Kopik, quando crea una base di conoscenza caricando PDF, Word o Markdown, i documenti vengono estratti, suddivisi e indicizzati per la ricerca ibrida (full-text più espansione semantica delle parole chiave) senza configurazione aggiuntiva. Può interrogare la base dal sito, tramite API e documentazione per sviluppatori con chiavi dedicate, oppure da un client MCP. Può anche sfogliare il catalogo delle basi pubbliche per vedere esempi reali già indicizzati.
Non sbilanci i pesi senza testare
Se dà troppo peso alla ricerca vettoriale su documenti pieni di codici e numeri, rischia di perdere risposte esatte. Se dà troppo peso a BM25 su documenti discorsivi, rischia di perdere parafrasi legittime. Raccolga una decina di domande reali degli utenti finali e verifichi quali passaggi dovrebbero emergere prima di fissare i parametri.
Metta alla prova la ricerca ibrida sui Suoi documenti
Carichi un contratto, un manuale o una norma e verifichi come la ricerca ibrida recupera sia i codici esatti sia le domande parafrasate.
Domande frequenti
Alcune domande che ci vengono poste più spesso su ricerca ibrida, BM25 e reciprocal rank fusion nel contesto del RAG.
Domande frequenti
La ricerca ibrida è sempre meglio della sola ricerca vettoriale?
Per documenti professionali con codici, sigle, numeri di norma o riferimenti esatti, sì: la componente BM25 recupera ciò che gli embedding tendono a trascurare. Su testi puramente discorsivi, senza terminologia tecnica rara, la differenza si riduce ma la ricerca ibrida resta comunque più robusta e raramente peggiora i risultati.
Cos'è BM25 in parole semplici?
È un algoritmo di ranking per la ricerca full-text che assegna un punteggio a un testo in base a quante volte contiene le parole della domanda, dando più peso ai termini rari rispetto a quelli comuni. È lo stesso principio alla base di molti motori di ricerca interni e di sistemi come Elasticsearch.
Come funziona la reciprocal rank fusion in parole semplici?
Prende due classifiche di risultati (una da BM25, una dai vettori) e assegna a ogni documento un punteggio basato sulla sua posizione in ciascuna classifica, non sul punteggio grezzo. I documenti ben piazzati in entrambe le liste salgono in cima alla classifica finale combinata.
Serve configurare manualmente i pesi tra le due ricerche?
Con la reciprocal rank fusion non serve normalizzare i punteggi, ma può comunque essere utile regolare l'importanza relativa dei due canali in base al tipo di documenti. Il modo più affidabile per farlo è testare con domande reali degli utenti prima di fissare i parametri in produzione.
La ricerca ibrida funziona anche con documenti in più lingue?
La componente vettoriale, se basata su modelli di embedding multilingue, può collegare domande e passaggi scritti in lingue diverse. La componente BM25 resta invece ancorata alle parole esatte della lingua del documento, quindi la ricerca ibrida offre comunque una rete di sicurezza utile per i riferimenti letterali.
Kopik usa la ricerca ibrida per indicizzare le basi di conoscenza?
Sì: quando carica documenti su Kopik per creare una base, il contenuto viene indicizzato sia per la ricerca full-text sia per la ricerca semantica, e le due classifiche vengono combinate automaticamente senza che debba configurare nulla.
Riceva la newsletter di Kopik
Nuove basi di conoscenza, guide sul RAG e novità del prodotto. Un'email ogni una o due settimane, disiscrizione con un clic.
Iscrivendosi accetta di ricevere la nostra newsletter. Il Suo indirizzo non viene mai condiviso.