Outil de recherche de l'étoile mystérieuse basé sur 428 000 biographies Wikipedia
Dans le jeu "Les 12 coups de midi" (TF1), une étoile mystérieuse est progressivement dévoilée au fil des émissions. Des indices visuels et textuels sont révélés un à un, et les candidats doivent deviner quelle personnalité se cache derrière.
Le problème : avec des centaines de milliers de personnalités possibles, il est très difficile pour un humain de recouper mentalement plusieurs indices entre eux. Ce projet automatise cette recherche en croisant les indices avec l'ensemble des biographies Wikipedia francophones.
L'utilisateur entre les indices au fur et à mesure de leur apparition dans l'émission, séparés par des virgules (ex : chanteur, français, années 80, cinéma).
| Mode | Description | Cas d'usage |
|---|---|---|
| Recherche exacte | Identifie les personnalités dont la page Wikipedia contient littéralement les mots-clés | Indices factuels précis |
| Recherche sémantique | Trouve des personnalités proches par le sens via embeddings vectoriels | Indices vagues ou synonymes |
| Recherche combinée | Mélange des deux approches avec un curseur de pondération ajustable | Usage par défaut |
Un classement des 50 personnalités les plus probables avec score détaillé, indices retrouvés, aperçu du texte Wikipedia et lien direct vers la page.
| Composant | Technologie | Rôle |
|---|---|---|
| Backend | Flask | Serveur web et API REST |
| Recherche vectorielle | FAISS (Facebook AI) | Recherche par similarité sur les embeddings |
| Embeddings | sentence-transformers | paraphrase-multilingual-MiniLM-L12-v2 |
| Recherche textuelle | SQLite FTS5 | Recherche full-text exacte |
| Parsing | xml.etree | Extraction depuis les dumps Wikipedia |
| Frontend | HTML / CSS / JS | Interface responsive |
Le modèle paraphrase-multilingual-MiniLM-L12-v2 a été retenu pour :
Chaque biographie est convertie en un vecteur de 384 dimensions. Lors d'une recherche, la requête est projetée dans le même espace vectoriel, puis FAISS identifie les vecteurs les plus proches par similarité cosinus.
score_exact = nombre d'indices trouvés / nombre total d'indices
score_sémantique = similarité cosinus entre la requête et la biographie (0 à 1)
score_combiné = w * score_sémantique + (1 - w) * score_exact
Le poids w est ajustable par l'utilisateur via un curseur dans l'interface.
Découpage du dump Wikipedia FR (~20 Go XML) en fichiers individuels. Seules les pages avec section "Biographie" ou "Vie privée" sont conservées.
Suppression des personnalités nées avant 1900, normalisation des noms de fichiers.
~428 000 fichiers XML individuels de biographies.
Parsing XML → nettoyage wikitext → génération embeddings → index FAISS + base SQLite FTS5.
Interface web → requête utilisateur → scoring combiné → top 50 résultats.
| Défi | Solution |
|---|---|
| Volume de données | Traitement par batchs avec suivi de progression, commits périodiques, gestion mémoire adaptée |
| Qualité du corpus | Nettoyage regex multi-passes du wikitext brut (templates, infobox, références) |
| Threading Flask/SQLite | Connexion SQLite par requête HTTP, index FAISS et modèle d'embeddings thread-safe en mémoire |