- Accueil
- Méthodologie
1. Catalogue au niveau des groupes
Le point de départ est un catalogue soigneusement constitué de 484 lignes recensant des groupes ethniques, indexé par nom, avec des colonnes normalisées pour le territoire d’origine, la région, la langue, les codes ISO de langue, les codes ISO de pays, la religion et une URL Wikipedia lorsqu’elle existe. La taxonomie suit une hiérarchie classique continent → sous-région → ethnie : Amériques, Europe, Afrique, Asie, Océanie au niveau des continents ; 23 sous-régions ; 484 groupes ethniques.
Ce catalogue est antérieur au pipeline actuel et il est tenu manuellement. Il est publié comme configuration ethnicities du jeu de données public sur HuggingFace.
2. Extraction des personnalités notables
Pour chaque groupe disposant d’une URL Wikipedia, nous tentons de récupérer l’article « List of {Ethnicity} people » correspondant. Lorsqu’un tel article existe, nous en extrayons les noms, de courts descripteurs « connu pour », les années de naissance et de décès lorsqu’elles y figurent, ainsi que les URL de référence de chaque personne. 291 groupes sur 484 ont au moins un article de ce type sur Wikipedia ; 193 n’en ont pas (généralement des groupes petits ou peu connus pour lesquels aucune page de liste n’a été rédigée). L’extraction a produit 13 094 lignes de personnes au total, publiées comme configuration notable_people.
3. Recherche des URL d’images
Pour chaque personne extraite, nous suivons l’URL de référence jusqu’à son article Wikipedia individuel et en extrayons l’URL d’une image représentative, en privilégiant l’image de l’infobox en tête d’article, et à défaut la première image OpenGraph. 6 243 sur 13 094 personnes (47,7 %) ont une image Wikipedia trouvable ; les autres, environ 52 %, n’ont pas d’image d’infobox (souvent des figures antérieures à la photographie ou des personnes peu connues dont l’article ne contient que du texte).
Le serveur upload.wikimedia.org de Wikimedia limite le débit de manière agressive par adresse IP source. Nous limitons le module de récupération à 2 requêtes par seconde par IP source ; un rythme plus soutenu déclenche des erreurs HTTP 429 au sein des lots.
4. Annotation par LLM de vision
Chaque image dont l’URL a été trouvée est soumise à un modèle de langage de vision avec une invite structurée fixe qui demande 14 champs phénotypiques, plus un score de confiance autodéclaré (de 0,0 à 1,0) et une classe de qualité d’image (high / medium / low / very_low). L’invite demande explicitement au modèle d’utiliser le vocabulaire Fitzpatrick I à VI pour la couleur de peau (en acceptant des plages le cas échéant), de détecter la présence d’un pli épicanthique en tant que sous-champ structuré de la forme des yeux, de traiter la photographie comme une observation d’une personne (et non comme le prototype d’un stéréotype ethnique), de renvoyer unknown ou une valeur vide pour les champs impossibles à évaluer, et de signaler explicitement les occultations (lunettes, chapeau, maquillage, visage partiel).
Le modèle utilisé est le profil d’inférence Anthropic Claude Sonnet 4.6 sur AWS Bedrock (us.anthropic.claude-sonnet-4-6). Des essais pilotes avec des modèles de gamme supérieure n’ont montré aucun gain de précision mesurable sur cette invite : la tâche est une extraction structurée à contexte court avec un schéma fixe, que Sonnet traite en pleine qualité pour un coût moindre.
Statistiques d’exécution : 5 668 images analysées avec succès ; environ 575 échecs (échecs de chargement, erreurs du modèle, échecs d’analyse syntaxique ou fichiers trop volumineux dépassant le plafond Bedrock de 5 MB par image) ; parallélisme = 4 ; débit d’environ 0,42 image par seconde (limité par le réseau) ; coût total de 44,66 USD au tarif public de Bedrock.
La réponse structurée est analysée et stockée ligne par ligne. Le JSON brut d’origine est conservé dans la base de données source (colonne ethnic_image_analysis.raw_json) à des fins d’audit, mais il n’est pas redistribué.
5. Système de vocabulaire contrôlé
En plus de l’analyse historique à 14 champs, le pipeline définit désormais un vocabulaire contrôlé complet qui couvre 22 catégories anatomiques, avec 196 dimensions et 853 classes de vocabulaire, en s’appuyant sur plus de 113 références évaluées par des pairs. Chaque fichier de vocabulaire est un document JSON qui précise les dimensions (avec leur type : catégoriel / ordinal / numérique / structuré), l’échelle (avec sa source), la description, les valeurs valides (avec leurs définitions) et des métadonnées d’observabilité (si la dimension peut être évaluée à partir d’une photographie et avec quelle étendue visible minimale).
Un script générateur (scripts/generate-from-vocabulary.mjs) lit chaque fichier de vocabulaire et produit quatre artefacts : un fragment d’invite d’analyse pour le LLM de vision, un modèle de base de données Prisma, une fonction d’agrégation et une page de documentation en Markdown. Ajouter une nouvelle dimension revient à modifier un fichier JSON et à relancer le générateur ; il n’y a aucune invite d’analyse écrite à la main à maintenir en parallèle du schéma.
Consultez l’Atlas pour parcourir les 22 catégories, le Glossaire pour les 853 termes définis, ou le dépôt public du vocabulaire pour les fichiers sources.
6. Agrégation par groupe
Un agrégateur déterministe en SQL/JavaScript (sans LLM) produit une fiche de synthèse par groupe à partir des lignes d’observation d’images de chaque groupe. L’agrégateur n’utilise pas de LLM et peut être relancé. Pour chaque groupe comptant au moins 3 observations d’images (actuellement 209 groupes sur 484), il produit :
- Taille de l’échantillon et répartition par source
- Répartition par qualité (pourcentages high / medium / low / very_low)
- Confiance autodéclarée moyenne
- Distribution Fitzpatrick (proportion de lignes dans chaque classe, de I à VI)
- Distributions de la couleur des cheveux, de la texture des cheveux et de la couleur des yeux
- Proportion de plis épicanthiques (oui / non / partiel)
- Avertissements conditionnels : petit échantillon (N<10), échantillon modeste (N<25), qualité faible, confiance faible, « les personnalités notables de Wikipedia sont surtout des hommes et des personnes publiques, pas un échantillon représentatif de la population »
7. Score de couverture
Chaque page de groupe ethnique affiche un score de profondeur des données de 0 à 100, composé de quatre éléments pondérés :
- Taille de l’échantillon de 0 à 40 (nombre d’images sur une échelle logarithmique, plafonné à n≥50)
- Qualité de 0 à 30 (% des images au niveau
image_quality = "high") - Confiance de 0 à 20 (confiance moyenne autodéclarée du modèle)
- Diversité des sources de 0 à 10 (nombre de source_types distincts ; actuellement toujours 0 ou 1, puisque les sources sont à 100 % Wikipedia ; compatible avec les évolutions futures)
Le score reflète honnêtement la profondeur de la couverture. Les groupes pour lesquels Wikipedia n’offre aucune couverture photographique sont à 0 ; ceux dont la couverture est complète approchent 100. Le score est stocké dans ethniclist.CoverageScore et se met à jour dès que les données sous-jacentes changent.
8. Reproductibilité
Tout le code du pipeline est open source, sous licence Apache 2.0, sur github.com/Agaveis/phenotype-catalog-pipeline. L’article méthodologique est publié sur doi.org/10.5281/zenodo.20075617. Le jeu de données est publié sous licence CC BY 4.0 sur huggingface.co/datasets/EthnicErotic/phenotype-catalog.
Pour reproduire le pipeline, il faut : des identifiants AWS avec accès à Bedrock dans us-east-1, une base de données SQL Server avec le schéma (ou un portage vers la base de données de votre choix), Node.js 18+, la CLI HuggingFace pour la mise en ligne, et environ 45 USD de budget d’inférence vision sur Bedrock pour l’exécution complète sur 5 668 images.