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