martialroberge commited on
Commit
7a7f712
·
1 Parent(s): cbae9ff

Simplification de l'interface et forçage des Q/R en français

Browse files
Files changed (1) hide show
  1. app.py +48 -100
app.py CHANGED
@@ -239,79 +239,44 @@ def process_images(api_key, hf_token, images, dataset_name, progress=gr.Progress
239
  nb_questions = random.randint(1, 5)
240
  print(f"❓ Génération de {nb_questions} questions...")
241
 
242
- prompt = f"""Tu es un expert en analyse financière, en création de datasets de haute qualité et en analyse multilingue. Examine attentivement ce document financier, IDENTIFIE D'ABORD SA LANGUE, puis génère exactement {nb_questions} questions/réponses de qualité professionnelle dans la même langue que le document.
243
 
244
- ÉTAPE 1 - IDENTIFICATION DE LA LANGUE :
245
- - Analyse attentivement le texte dans l'image
246
- - Identifie la langue principale (fr pour français, en pour anglais, de pour allemand, etc.)
247
- - Utilise cette langue pour toutes les questions et réponses
248
- - Si plusieurs langues sont présentes, choisis la langue dominante
 
249
 
250
  Format de réponse requis (JSON) :
251
  [
252
  {{
253
- "query": "Question financière précise et détaillée dans la langue du document",
254
- "answer": "Réponse complète et exacte dans la langue du document",
255
- "langue": "code ISO de la langue (fr, en, de, etc.)",
256
  "is_negative": false
257
  }}
258
  ]
259
 
260
- Instructions détaillées pour la création du dataset :
261
-
262
- 1. TYPES DE QUESTIONS FINANCIÈRES (sois créatif et précis) :
263
- - Analyse quantitative :
264
- * Montants exacts et variations
265
- * Pourcentages et ratios financiers
266
- * Évolutions temporelles
267
- * Comparaisons chiffrées
268
-
269
- - Analyse qualitative :
270
- * Stratégies et objectifs
271
- * Risques et opportunités
272
- * Contexte réglementaire
273
- * Implications business
274
-
275
- - Dates et échéances :
276
- * Périodes de reporting
277
- * Dates clés
278
- * Échéances importantes
279
- * Historique des événements
280
-
281
- 2. QUESTIONS NÉGATIVES (TRÈS IMPORTANT) :
282
- - Tu DOIS générer au moins 1 question sur {nb_questions} où l'information n'est PAS dans le document
283
- - Pour ces questions, tu DOIS mettre "is_negative": true
284
- - La réponse DOIT commencer par une phrase indiquant l'absence d'information dans la langue du document :
285
- * FR: "Cette information ne figure pas dans le document"
286
- * EN: "This information is not present in the document"
287
- * DE: "Diese Information ist im Dokument nicht enthalten"
288
- - Les questions négatives doivent être plausibles et pertinentes pour un document financier
289
 
290
- 3. QUALITÉ DES QUESTIONS :
291
- - Précision : utilise des chiffres exacts quand possible
292
- - Clarté : questions non ambiguës
293
- - Pertinence : focus sur les aspects financiers importants
294
- - Variété : mélange différents types de questions
295
- - Profondeur : questions qui nécessitent une analyse approfondie
296
 
297
- 4. QUALITÉ DES RÉPONSES :
298
- - Pour les questions normales (is_negative: false) :
299
- * Exactitude : informations vérifiables dans le document
300
- * Complétude : réponses détaillées et exhaustives
301
- * Clarté : formulation professionnelle et précise
302
- * Contexte : inclure les éléments de contexte pertinents
303
- - Pour les questions négatives (is_negative: true) :
304
- * TOUJOURS commencer par la phrase d'absence d'information dans la bonne langue
305
- * Expliquer brièvement pourquoi cette information serait pertinente
306
 
307
- 5. RÈGLES STRICTES :
308
- - Questions et réponses UNIQUEMENT dans la langue détectée du document
309
- - Pas de questions vagues ou générales
310
- - Pas de répétition de questions similaires
311
- - Pas de devinettes ou d'inférences non documentées
312
- - Respect strict du format JSON demandé
313
- - Au moins 1 question négative (is_negative: true) par image
314
- - Code langue ISO correct (fr, en, de, etc.)
315
 
316
  La réponse doit être uniquement le JSON, sans texte supplémentaire."""
317
 
@@ -350,12 +315,12 @@ La réponse doit être uniquement le JSON, sans texte supplémentaire."""
350
 
351
  # Vérifier que chaque élément a les bons champs
352
  for qa in qa_pairs:
353
- if not all(key in qa for key in ["query", "answer", "langue", "is_negative"]):
354
  raise ValueError("Un élément ne contient pas tous les champs requis")
355
 
356
  # Vérifier que la langue est fr
357
- if qa["langue"] != "fr":
358
- qa["langue"] = "fr"
359
 
360
  # Générer un ID unique
361
  qa["id"] = generate_unique_id()
@@ -383,7 +348,7 @@ La réponse doit être uniquement le JSON, sans texte supplémentaire."""
383
  "image": qa["image"],
384
  "query": qa["query"],
385
  "answer": qa["answer"],
386
- "langue": qa["langue"],
387
  "file_name": qa["file_name"],
388
  "is_negative": qa["is_negative"]
389
  }
@@ -435,36 +400,21 @@ limitations under the License.
435
  with gr.Blocks() as demo:
436
  gr.Markdown("""
437
  # 🎯 Mini-VLM Dataset Builder
438
- ### Créez des datasets de haute qualité pour l'entraînement de modèles Vision-Langage (VLM)
439
 
440
- ## 🎓 Pourquoi utiliser cette application ?
441
 
442
- Cette application permet de créer des datasets de questions/réponses de haute qualité en utilisant l'API Gemini de Google.
443
- L'objectif est de permettre l'entraînement de petits modèles VLM (Vision-Language Models) plus légers et plus rapides,
444
- tout en conservant des performances proches des grands modèles comme GPT-4V ou Gemini.
445
 
446
- ### 🔄 Pipeline de fonctionnement :
447
- 1. **Upload des documents** : PDF ou images (PNG, JPG, JPEG)
448
- 2. **Prétraitement** :
449
- - Conversion des PDFs en images
450
- - Normalisation des formats
451
- - Mélange aléatoire pour une meilleure distribution
452
- 3. **Analyse par Gemini** :
453
- - Détection automatique de la langue (FR, EN, DE, etc.)
454
- - Génération de 1 à 5 questions/réponses par image
455
- - Inclusion de questions négatives pour l'entraînement
456
- 4. **Structuration du dataset** :
457
- - Split automatique (80% train, 10% validation, 10% test)
458
- - Format standardisé avec IDs uniques
459
- - Métadonnées complètes (langue, type de question, etc.)
460
- 5. **Publication sur Hugging Face** :
461
- - Création automatique du repository
462
- - Upload des images et métadonnées
463
- - Structure optimisée pour l'entraînement
464
 
465
- ### ⚠️ Prérequis
466
- 1. Une [clé API Gemini](https://makersuite.google.com/app/apikey) pour l'analyse des documents
467
- 2. Un [token Hugging Face](https://huggingface.co/settings/tokens) avec droits d'écriture pour la publication
468
  """)
469
 
470
  with gr.Row():
@@ -484,23 +434,21 @@ with gr.Blocks() as demo:
484
  dataset_name = gr.Textbox(
485
  label="📁 Nom du dataset",
486
  placeholder="votre-username/nom-du-dataset",
487
- info="Format requis : username/nom-du-dataset (exemple: marsouuu/finance-dataset-fr)"
488
  )
489
 
490
  with gr.Column(scale=1):
491
  files = gr.File(
492
- label="📄 Documents (PDF, PNG, JPG, JPEG)",
493
  file_count="multiple",
494
  height=200
495
  )
496
  gr.Markdown("""
497
- ### 📊 Statistiques générées :
498
- - 80% des images pour l'entraînement
499
- - 10% pour la validation
500
- - 10% pour les tests
501
- - 1 à 5 questions par image
502
- - Au moins 1 question négative par image
503
- - Détection automatique de la langue
504
  """)
505
 
506
  submit_btn = gr.Button("🚀 Créer le dataset", variant="primary", scale=2)
 
239
  nb_questions = random.randint(1, 5)
240
  print(f"❓ Génération de {nb_questions} questions...")
241
 
242
+ prompt = f"""Tu es un expert en analyse financière et en création de datasets. Examine attentivement ce document financier et génère exactement {nb_questions} questions/réponses en français, quelle que soit la langue du document.
243
 
244
+ ÉTAPE 1 - IDENTIFICATION DE LA LANGUE DU DOCUMENT :
245
+ - Analyse le texte dans l'image
246
+ - Identifie la langue principale (fr, en, de, etc.)
247
+ - Cette information servira uniquement de métadonnée
248
+
249
+ IMPORTANT : Toutes les questions et réponses DOIVENT être en français, même si le document est dans une autre langue !
250
 
251
  Format de réponse requis (JSON) :
252
  [
253
  {{
254
+ "query": "Question financière en français",
255
+ "answer": "Réponse en français",
256
+ "langue_document": "code ISO de la langue source (fr, en, de, etc.)",
257
  "is_negative": false
258
  }}
259
  ]
260
 
261
+ Instructions pour la création du dataset :
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
262
 
263
+ 1. QUESTIONS FINANCIÈRES :
264
+ - Analyse des montants, ratios et variations
265
+ - Stratégies et objectifs financiers
266
+ - Risques et opportunités
267
+ - Dates et échéances importantes
 
268
 
269
+ 2. QUESTIONS NÉGATIVES :
270
+ - Au moins 1 question sur {nb_questions} où l'information n'est PAS dans le document
271
+ - Pour ces questions, mettre "is_negative": true
272
+ - La réponse DOIT commencer par "Cette information ne figure pas dans le document"
 
 
 
 
 
273
 
274
+ 3. RÈGLES STRICTES :
275
+ - Questions et réponses TOUJOURS en français
276
+ - Questions précises et non ambiguës
277
+ - Pas de répétitions
278
+ - Format JSON strict
279
+ - Au moins 1 question négative par image
 
 
280
 
281
  La réponse doit être uniquement le JSON, sans texte supplémentaire."""
282
 
 
315
 
316
  # Vérifier que chaque élément a les bons champs
317
  for qa in qa_pairs:
318
+ if not all(key in qa for key in ["query", "answer", "langue_document", "is_negative"]):
319
  raise ValueError("Un élément ne contient pas tous les champs requis")
320
 
321
  # Vérifier que la langue est fr
322
+ if qa["langue_document"] != "fr":
323
+ qa["langue_document"] = "fr"
324
 
325
  # Générer un ID unique
326
  qa["id"] = generate_unique_id()
 
348
  "image": qa["image"],
349
  "query": qa["query"],
350
  "answer": qa["answer"],
351
+ "langue_document": qa["langue_document"],
352
  "file_name": qa["file_name"],
353
  "is_negative": qa["is_negative"]
354
  }
 
400
  with gr.Blocks() as demo:
401
  gr.Markdown("""
402
  # 🎯 Mini-VLM Dataset Builder
 
403
 
404
+ ## Créateur de datasets financiers en français pour mini-modèles VLM
405
 
406
+ Cette application permet de créer des datasets de questions/réponses en français à partir de documents financiers
407
+ (en français ou autres langues) pour entraîner des modèles Vision-Langage (VLM) légers et performants.
 
408
 
409
+ ### 🔄 Processus :
410
+ 1. Upload de documents (PDF, images)
411
+ 2. Analyse automatique par Gemini
412
+ 3. Génération de Q/R en français
413
+ 4. Création du dataset sur Hugging Face
 
 
 
 
 
 
 
 
 
 
 
 
 
414
 
415
+ ### ⚠️ Prérequis :
416
+ - [Clé API Gemini](https://makersuite.google.com/app/apikey)
417
+ - [Token Hugging Face](https://huggingface.co/settings/tokens)
418
  """)
419
 
420
  with gr.Row():
 
434
  dataset_name = gr.Textbox(
435
  label="📁 Nom du dataset",
436
  placeholder="votre-username/nom-du-dataset",
437
+ info="Format : username/nom-du-dataset (ex: marsouuu/finance-dataset-fr)"
438
  )
439
 
440
  with gr.Column(scale=1):
441
  files = gr.File(
442
+ label="📄 Documents financiers (PDF, PNG, JPG, JPEG)",
443
  file_count="multiple",
444
  height=200
445
  )
446
  gr.Markdown("""
447
+ ### 📊 Caractéristiques :
448
+ - Questions et réponses en français
449
+ - 1 à 5 Q/R par document
450
+ - Questions négatives incluses
451
+ - Split train/val/test automatique
 
 
452
  """)
453
 
454
  submit_btn = gr.Button("🚀 Créer le dataset", variant="primary", scale=2)