Torna al blog
7 min di letturaPostgreSQLRicercaLingRise
Ricerca semantica multilingue con pgvector
Come 9 lingue convivono in un unico indice vettoriale senza degradare la pertinenza.
Il problema
LingRise indicizza trascrizioni di podcast in 9 lingue. Un utente francofono che studia spagnolo deve poter cercare in francese e arrivare a un passaggio spagnolo pertinente.
L'approccio
- Un modello di embedding realmente multilingue, non un modello inglese con traduzione preliminare.
- Un unico indice
ivfflatsu una colonnavector(1536)in PostgreSQL, con un pre-filtro parziale sulang. - Un punteggio ibrido:
0.7 * similarità_coseno + 0.3 * BM25per recuperare i nomi propri, che gli embedding gestiscono male.
La parte controintuitiva
Filtrare per lingua prima della ricerca vettoriale peggiorava il recall: i risultati migliori venivano spesso da un'altra lingua. La soluzione è stata cercare in modo ampio e poi ripesare a livello applicativo.