Retour au blog
7 min de lecturePostgreSQLRechercheLingRise
Recherche sémantique multilingue avec pgvector
Comment 9 langues cohabitent dans un même index vectoriel sans dégrader la pertinence.
Le problème
LingRise indexe des transcriptions de podcasts en 9 langues. Un utilisateur francophone qui apprend l'espagnol doit pouvoir chercher en français et tomber sur un passage espagnol pertinent.
L'approche
- Un modèle d'embedding réellement multilingue, pas un modèle anglais avec traduction préalable.
- Un seul index
ivfflatsur une colonnevector(1536)dans PostgreSQL, avec un filtrelangen pré-filtrage partiel. - Un score hybride :
0.7 * similarité_cosinus + 0.3 * BM25pour rattraper les noms propres, que les embeddings gèrent mal.
Ce qui a été contre-intuitif
Filtrer par langue avant la recherche vectorielle dégradait le rappel : les meilleurs résultats venaient souvent d'une autre langue. La solution a été de chercher large puis de repondérer côté application.