⚙ Architecture
Le système le plus simple : un appel API. Pas de pipeline local, pas de GPU d’entraînement. La traduction est entièrement déléguée au modèle multimodal de Google.
Comment ça marche : l’audio est encodé et envoyé à l’API Gemini avec une consigne textuelle (voir section Consigne). Le modèle multimodal traite directement l’audio et retourne le texte traduit. Aucun entraînement, aucun checkpoint local.
Garde-fous anti-boucles : pour le run de référence run_005, un post-traitement du texte renvoyé par l’API filtre le raisonnement interne et tronque les répétitions (« and and and… »). Sans ce filtre (run_004 utterance v2 initial), 2 extraits produisent des boucles qui biaisent le score test (20,3 au lieu de 41,1). Ce n’est pas une instruction ajoutée au prompt.
Point de vigilance : le corpus m-TEDx est librement accessible sur Internet (vidéos, transcriptions, sous-titres). On ne peut pas exclure que Gemini l’ait rencontré pendant son pré-entraînement. Les scores se comparent donc avec prudence aux modèles entraînés uniquement sur m-TEDx train/dev/test.
💬 Consigne (prompt)
Texte envoyé à l’API avec chaque segment audio. Identique pour tous les runs du projet (Gemini 2.5 et 3.5 Flash, utterance et sentence_like, configs v1 et v2).
Instruction envoyée à Gemini (prompt.template)
Translate the French speech to English.
Format de la requête : l’API reçoit, dans l’ordre, la consigne ci-dessus puis le fichier audio (WAV 16 kHz). Le modèle doit renvoyer la traduction anglaise de la parole française entendue.
Fichiers de config : 3_Gemini/configs/fr-en/gemini_flash_35_utterance_v2.yaml (runs run_004 / run_005 utterance), gemini_flash_35_sentence_v2.yaml (sentence_like), gemini_flash.yaml et gemini_flash_utterance.yaml (2.5 Flash). La formulation est volontairement proche de celle utilisée en variante 2 (speechLLM).
Post-traitement (hors prompt) : les garde-fous du run_005 sont appliqués après la réponse API dans gemini_common.sanitize_gemini_translation : exclusion des parts de raisonnement interne (thought) et troncature des boucles de mots avant calcul du BLEU.
⚡ Hyperparamètres (paramètres API)
| Paramètre | Valeurs | Impact | État |
|---|---|---|---|
| Modèle | gemini-2.5-flash · gemini-3.5-flash |
3.5 Flash v2 (41) > 2.5 Flash (34) en utterance avec bons réglages | ok |
| max_output_tokens | 256 (trop bas !) → 8192 (recommandé) |
256 tok → troncature → BLEU 13 au lieu de 41 | corrigé en v2 |
| thinking_level | minimal (v2) |
Réduit le coût API tout en gardant de bonnes performances | ok en v2 |
| Consigne (prompt) | Translate the French speech to English. — voir section |
Même texte pour tous les runs ; pas de variante « anglais uniquement » testée à ce jour | ok |
| Garde-fous anti-boucles | Post-traitement sanitize_gemini_translation |
Filtre les répétitions après l’API — actif à partir de run_005 utterance (pas dans le prompt) |
ok en run_005 |
| Mode de segmentation | utterance (41 BLEU) · sentence_like (36,8) |
utterance donne un meilleur BLEU en 3.5 v2 | ok |
📊 Résultats
| Run | Modèle | Segmentation | BLEU test | Durée | Coût API | Notes |
|---|---|---|---|---|---|---|
run_005 |
3.5 Flash | utterance | 41,1 | 66 min | 0,94 $ | v2 ; max 8192 ; thinking minimal ; post-traitement |
run_004 |
3.5 Flash | sentence_like | 36,8 | 38 min | 1,27 $ | v2 ; max 8192 ; post-traitement anti-boucles |
run_001 |
2.5 Flash | utterance | 33,7 | 1–2 h | voir metrics.json | temp 0 ; max 256 tok |
run_001 |
2.5 Flash | sentence_like | 23 | 1–2 h | voir metrics.json | — |
run_003 |
3.5 Flash | utterance | 13,4 | 99 min | 0,60 $ | non conclusif — troncature (max 256 tok) |
run_003 |
3.5 Flash | sentence_like | 1,5 | 42 min | 0,52 $ | non conclusif — troncature sévère |
run_004 (v2 initial) |
3.5 Flash | utterance | 20,3 | — | — | biaisé — 2 outliers boucles, sans post-traitement |
run_005, 41,1 BLEU) est le meilleur score global du projet. Mais les extraits m-TEDx étant accessibles en ligne, une partie de la performance peut refléter une familiarité avec le corpus. Comparer avec prudence aux systèmes entraînés uniquement sur m-TEDx.
run_072–run_074).
🔧 Pistes d’amélioration
-
1
Affiner la consigne (prompt) : tester des variantes explicites (« anglais uniquement, sans commentaire, sans markdown, traduction complète de l’audio ») — le prompt actuel est minimal (voir section Consigne).
-
2
Conserver le post-traitement anti-boucles dans
gemini_common.py— sans lui, des répétitions peuvent biaiser fortement le BLEU (écart 20 pts entrerun_004utterance initial etrun_005). -
3
Documenter systématiquement le coût par run — champs
gemini_cost_estimate_usdetruntimedanseval/metrics.json. Facilite la comparaison coût/performance entre modèles. -
4
Tester un modèle Gemini plus récent si disponible (ex. gemini-2.0-flash, Gemini Ultra) — et noter la version exacte pour la reproductibilité.
-
5
Analyser la contamination potentielle : comparer les scores Gemini sur un sous-ensemble d’extraits non disponibles publiquement pour estimer si la performance reflète une vraie généralisation.