Retour aux projets
2020

Les 12 coups de Wikipedia

Outil de recherche de l'étoile mystérieuse basé sur 428 000 biographies Wikipedia

Python Flask FAISS SQLite FTS5 NLP
Aperçu de Les 12 coups de Wikipedia

Contexte

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.

Fonctionnement

Saisie des indices

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).

Trois modes de recherche

ModeDescriptionCas d'usage
Recherche exacteIdentifie les personnalités dont la page Wikipedia contient littéralement les mots-clésIndices factuels précis
Recherche sémantiqueTrouve des personnalités proches par le sens via embeddings vectorielsIndices vagues ou synonymes
Recherche combinéeMélange des deux approches avec un curseur de pondération ajustableUsage par défaut

Résultats

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.

Stack technique

ComposantTechnologieRôle
BackendFlaskServeur web et API REST
Recherche vectorielleFAISS (Facebook AI)Recherche par similarité sur les embeddings
Embeddingssentence-transformersparaphrase-multilingual-MiniLM-L12-v2
Recherche textuelleSQLite FTS5Recherche full-text exacte
Parsingxml.etreeExtraction depuis les dumps Wikipedia
FrontendHTML / CSS / JSInterface responsive

Modèle d'embeddings

Le modèle paraphrase-multilingual-MiniLM-L12-v2 a été retenu pour :

  • Son support natif du français (modèle multilingue)
  • Sa taille compacte (384 dimensions) adaptée à un corpus volumineux
  • Son bon compromis entre qualité et vitesse d'inférence

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.

Scoring

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.

Pipeline de données

1Extraction

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.

2Nettoyage

Suppression des personnalités nées avant 1900, normalisation des noms de fichiers.

3Corpus final

~428 000 fichiers XML individuels de biographies.

4Indexation

Parsing XML → nettoyage wikitext → génération embeddings → index FAISS + base SQLite FTS5.

5Recherche

Interface web → requête utilisateur → scoring combiné → top 50 résultats.

Défis techniques

DéfiSolution
Volume de donnéesTraitement par batchs avec suivi de progression, commits périodiques, gestion mémoire adaptée
Qualité du corpusNettoyage regex multi-passes du wikitext brut (templates, infobox, références)
Threading Flask/SQLiteConnexion SQLite par requête HTTP, index FAISS et modèle d'embeddings thread-safe en mémoire

Chiffres clés

428 000Biographies indexées
384Dimensions par vecteur
~20 GoDump Wikipedia source
Top 50Résultats par recherche
3Modes de recherche
5Étapes du pipeline