martialroberge
commited on
Commit
·
cbae9ff
1
Parent(s):
3cb2c3b
Amélioration du prompt pour la détection de langue et de l'interface utilisateur
Browse files
app.py
CHANGED
@@ -239,14 +239,20 @@ 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
|
|
|
|
|
|
|
|
|
|
|
|
|
243 |
|
244 |
Format de réponse requis (JSON) :
|
245 |
[
|
246 |
{{
|
247 |
-
"query": "Question financière précise et détaillée",
|
248 |
-
"answer": "Réponse complète et exacte
|
249 |
-
"langue": "fr",
|
250 |
"is_negative": false
|
251 |
}}
|
252 |
]
|
@@ -275,10 +281,10 @@ Instructions détaillées pour la création du dataset :
|
|
275 |
2. QUESTIONS NÉGATIVES (TRÈS IMPORTANT) :
|
276 |
- Tu DOIS générer au moins 1 question sur {nb_questions} où l'information n'est PAS dans le document
|
277 |
- Pour ces questions, tu DOIS mettre "is_negative": true
|
278 |
-
- La réponse DOIT commencer par
|
279 |
-
|
280 |
-
*
|
281 |
-
*
|
282 |
- Les questions négatives doivent être plausibles et pertinentes pour un document financier
|
283 |
|
284 |
3. QUALITÉ DES QUESTIONS :
|
@@ -295,16 +301,17 @@ Instructions détaillées pour la création du dataset :
|
|
295 |
* Clarté : formulation professionnelle et précise
|
296 |
* Contexte : inclure les éléments de contexte pertinents
|
297 |
- Pour les questions négatives (is_negative: true) :
|
298 |
-
* TOUJOURS commencer par
|
299 |
* Expliquer brièvement pourquoi cette information serait pertinente
|
300 |
|
301 |
5. RÈGLES STRICTES :
|
302 |
-
- Questions et réponses UNIQUEMENT
|
303 |
- Pas de questions vagues ou générales
|
304 |
- Pas de répétition de questions similaires
|
305 |
- Pas de devinettes ou d'inférences non documentées
|
306 |
- Respect strict du format JSON demandé
|
307 |
- Au moins 1 question négative (is_negative: true) par image
|
|
|
308 |
|
309 |
La réponse doit être uniquement le JSON, sans texte supplémentaire."""
|
310 |
|
@@ -428,42 +435,77 @@ limitations under the License.
|
|
428 |
with gr.Blocks() as demo:
|
429 |
gr.Markdown("""
|
430 |
# 🎯 Mini-VLM Dataset Builder
|
431 |
-
Créez
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
432 |
|
433 |
-
### ⚠️
|
434 |
-
1.
|
435 |
-
2.
|
436 |
""")
|
437 |
|
438 |
with gr.Row():
|
439 |
with gr.Column(scale=1):
|
440 |
api_key = gr.Textbox(
|
441 |
-
label="Clé API Google Gemini",
|
442 |
type="password",
|
443 |
placeholder="Entrez votre clé API Gemini",
|
444 |
value=""
|
445 |
)
|
446 |
hf_token = gr.Textbox(
|
447 |
-
label="Token Hugging Face",
|
448 |
type="password",
|
449 |
placeholder="Entrez votre token Hugging Face",
|
450 |
value=""
|
451 |
)
|
452 |
dataset_name = gr.Textbox(
|
453 |
-
label="Nom du dataset",
|
454 |
-
placeholder="votre-username/nom-du-dataset"
|
|
|
455 |
)
|
456 |
|
457 |
with gr.Column(scale=1):
|
458 |
files = gr.File(
|
459 |
-
label="Documents (PDF, PNG, JPG, JPEG)",
|
460 |
file_count="multiple",
|
461 |
height=200
|
462 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
463 |
|
464 |
-
submit_btn = gr.Button("Créer le dataset", variant="primary")
|
465 |
output = gr.Textbox(
|
466 |
-
label="Résultat",
|
467 |
lines=3,
|
468 |
interactive=False
|
469 |
)
|
|
|
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 |
]
|
|
|
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 :
|
|
|
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 |
|
|
|
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():
|
471 |
with gr.Column(scale=1):
|
472 |
api_key = gr.Textbox(
|
473 |
+
label="🔑 Clé API Google Gemini",
|
474 |
type="password",
|
475 |
placeholder="Entrez votre clé API Gemini",
|
476 |
value=""
|
477 |
)
|
478 |
hf_token = gr.Textbox(
|
479 |
+
label="🔑 Token Hugging Face",
|
480 |
type="password",
|
481 |
placeholder="Entrez votre token Hugging Face",
|
482 |
value=""
|
483 |
)
|
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)
|
507 |
output = gr.Textbox(
|
508 |
+
label="📝 Résultat",
|
509 |
lines=3,
|
510 |
interactive=False
|
511 |
)
|