Titembaye commited on
Commit
d2a4487
·
verified ·
1 Parent(s): 288834c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -37
app.py CHANGED
@@ -14,21 +14,21 @@ MAX_LENGTH = 256
14
  DEVICE = torch.device("cpu") # Force CPU pour Hugging Face Spaces gratuit
15
 
16
  print("="*60)
17
- print("🚀 Initialisation du Détecteur de Phishing")
18
  print("="*60)
19
 
20
  # Vérifier que le modèle existe
21
  if not os.path.exists(MODEL_PATH):
22
  raise FileNotFoundError(
23
- f"Modèle introuvable: {MODEL_PATH}\n"
24
  f" Assurez-vous que le dossier existe et contient les fichiers du modèle."
25
  )
26
 
27
  # Charger le tokenizer et le modèle
28
- print(f"📥 Chargement du tokenizer depuis {MODEL_PATH}...")
29
  tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
30
 
31
- print(f"📥 Chargement du modèle depuis {MODEL_PATH}...")
32
  # Charger en mode CPU avec optimisations mémoire
33
  model = AutoModelForSequenceClassification.from_pretrained(
34
  MODEL_PATH,
@@ -38,8 +38,8 @@ model = AutoModelForSequenceClassification.from_pretrained(
38
  model.to(DEVICE)
39
  model.eval()
40
 
41
- print(f"Modèle chargé avec succès!")
42
- print(f"🖥️ Device: {DEVICE}")
43
  print("="*60 + "\n")
44
 
45
 
@@ -54,7 +54,7 @@ def predict_phishing(email_text):
54
  tuple: (verdict, probabilités, analyse détaillée)
55
  """
56
  if not email_text.strip():
57
- return "⚠️ Veuillez entrer un email", {}, ""
58
 
59
  # Tokenization
60
  inputs = tokenizer(
@@ -77,7 +77,7 @@ def predict_phishing(email_text):
77
  confidence = probabilities[predicted_class].item()
78
 
79
  # Résultats
80
- label = "🚨 Phishing Détecté" if predicted_class == 1 else "✅ Email Légitime"
81
 
82
  prob_dict = {
83
  "Légitime": float(probabilities[0]),
@@ -86,21 +86,21 @@ def predict_phishing(email_text):
86
 
87
  # Analyse détaillée
88
  analysis = f"""
89
- ### 📊 Résultats de l'analyse
90
 
91
  **Verdict:** {label}
92
  **Confiance:** {confidence * 100:.1f}%
93
 
94
- ### 🔍 Détails des probabilités
95
  - **Légitime:** {probabilities[0] * 100:.2f}%
96
  - **Phishing:** {probabilities[1] * 100:.2f}%
97
 
98
- ### 📝 Informations
99
  - **Modèle:** BERT-base-uncased (adversarial training)
100
  - **Longueur du texte:** {len(email_text)} caractères
101
  - **Tokens:** {len(tokenizer.encode(email_text))} tokens
102
 
103
- ### ⚠️ Avertissement
104
  Cette analyse est fournie à titre éducatif uniquement. En cas de doute sur un email réel,
105
  contactez votre service informatique ou l'expéditeur présumé par un canal sécurisé.
106
  """
@@ -153,14 +153,14 @@ Tracking ID: XYZ123456"""]
153
  # Interface Gradio
154
  with gr.Blocks(theme=gr.themes.Soft(), title="Détecteur de Phishing") as demo:
155
  gr.Markdown("""
156
- # 🛡️ Détecteur de Phishing par Intelligence Artificielle
157
 
158
  Cette application utilise un modèle **BERT fine-tuné avec adversarial training**
159
  pour détecter les emails de phishing.
160
 
161
  **Axes d'évaluation:**
162
- - 🎯 Robustesse face aux attaques adversariales générées par IA
163
- - 🌐 Généralisation cross-linguale (EN/FR)
164
 
165
  ---
166
  """)
@@ -175,18 +175,18 @@ with gr.Blocks(theme=gr.themes.Soft(), title="Détecteur de Phishing") as demo:
175
  )
176
 
177
  with gr.Row():
178
- analyze_btn = gr.Button("🔍 Analyser", variant="primary", size="lg")
179
  clear_btn = gr.ClearButton([email_input], value="🗑️ Effacer")
180
 
181
  with gr.Column(scale=1):
182
  verdict_output = gr.Textbox(
183
- label="🎯 Verdict",
184
  interactive=False,
185
  lines=2
186
  )
187
 
188
  prob_output = gr.Label(
189
- label="📊 Probabilités",
190
  num_top_classes=2
191
  )
192
 
@@ -194,7 +194,7 @@ with gr.Blocks(theme=gr.themes.Soft(), title="Détecteur de Phishing") as demo:
194
  analysis_output = gr.Markdown(label="📈 Analyse Détaillée")
195
 
196
  # Exemples
197
- gr.Markdown("### 💡 Exemples à tester")
198
  gr.Examples(
199
  examples=examples,
200
  inputs=email_input,
@@ -204,21 +204,6 @@ with gr.Blocks(theme=gr.themes.Soft(), title="Détecteur de Phishing") as demo:
204
  # Footer
205
  gr.Markdown("""
206
  ---
207
-
208
- ### 📚 À propos
209
-
210
- **Projet:** Détection de Phishing par IA - Robustesse Adversariale et Généralisation Cross-Linguale
211
-
212
- **Datasets utilisés:**
213
- - Enron Email Dataset (500k emails)
214
- - SMS Spam Collection (5,574 SMS)
215
- - Phishing Email Dataset (18,650 emails)
216
- - Phishing adversariaux générés par Ollama + Gemma3:1b
217
-
218
- **Modèle:**
219
- - BERT-base-uncased (110M paramètres)
220
- - Fine-tuné avec adversarial training (50% baseline + 50% adversarial)
221
-
222
  ⚠️ **Disclaimer:** Cette application est fournie à des fins éducatives et de recherche uniquement.
223
  """)
224
 
@@ -232,10 +217,10 @@ with gr.Blocks(theme=gr.themes.Soft(), title="Détecteur de Phishing") as demo:
232
 
233
  if __name__ == "__main__":
234
  print("\n" + "="*60)
235
- print("🚀 Lancement de l'application Gradio")
236
  print("="*60)
237
- print(f"📱 Device: {DEVICE}")
238
- print(f"🤖 Modèle: {MODEL_PATH}")
239
  print("="*60 + "\n")
240
 
241
  demo.launch(
 
14
  DEVICE = torch.device("cpu") # Force CPU pour Hugging Face Spaces gratuit
15
 
16
  print("="*60)
17
+ print("Initialisation du Détecteur de Phishing")
18
  print("="*60)
19
 
20
  # Vérifier que le modèle existe
21
  if not os.path.exists(MODEL_PATH):
22
  raise FileNotFoundError(
23
+ f"Modèle introuvable: {MODEL_PATH}\n"
24
  f" Assurez-vous que le dossier existe et contient les fichiers du modèle."
25
  )
26
 
27
  # Charger le tokenizer et le modèle
28
+ print(f"Chargement du tokenizer depuis {MODEL_PATH}...")
29
  tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
30
 
31
+ print(f"Chargement du modèle depuis {MODEL_PATH}...")
32
  # Charger en mode CPU avec optimisations mémoire
33
  model = AutoModelForSequenceClassification.from_pretrained(
34
  MODEL_PATH,
 
38
  model.to(DEVICE)
39
  model.eval()
40
 
41
+ print(f"Modèle chargé avec succès!")
42
+ print(f"Device: {DEVICE}")
43
  print("="*60 + "\n")
44
 
45
 
 
54
  tuple: (verdict, probabilités, analyse détaillée)
55
  """
56
  if not email_text.strip():
57
+ return "Veuillez entrer un email", {}, ""
58
 
59
  # Tokenization
60
  inputs = tokenizer(
 
77
  confidence = probabilities[predicted_class].item()
78
 
79
  # Résultats
80
+ label = "🚨Phishing Détecté" if predicted_class == 1 else "✅ Email Légitime"
81
 
82
  prob_dict = {
83
  "Légitime": float(probabilities[0]),
 
86
 
87
  # Analyse détaillée
88
  analysis = f"""
89
+ ### Résultats de l'analyse
90
 
91
  **Verdict:** {label}
92
  **Confiance:** {confidence * 100:.1f}%
93
 
94
+ ### Détails des probabilités
95
  - **Légitime:** {probabilities[0] * 100:.2f}%
96
  - **Phishing:** {probabilities[1] * 100:.2f}%
97
 
98
+ ### Informations
99
  - **Modèle:** BERT-base-uncased (adversarial training)
100
  - **Longueur du texte:** {len(email_text)} caractères
101
  - **Tokens:** {len(tokenizer.encode(email_text))} tokens
102
 
103
+ ### Avertissement
104
  Cette analyse est fournie à titre éducatif uniquement. En cas de doute sur un email réel,
105
  contactez votre service informatique ou l'expéditeur présumé par un canal sécurisé.
106
  """
 
153
  # Interface Gradio
154
  with gr.Blocks(theme=gr.themes.Soft(), title="Détecteur de Phishing") as demo:
155
  gr.Markdown("""
156
+ # Détecteur de Phishing par Intelligence Artificielle
157
 
158
  Cette application utilise un modèle **BERT fine-tuné avec adversarial training**
159
  pour détecter les emails de phishing.
160
 
161
  **Axes d'évaluation:**
162
+ - Robustesse face aux attaques adversariales générées par IA
163
+ - Généralisation cross-linguale (EN/FR)
164
 
165
  ---
166
  """)
 
175
  )
176
 
177
  with gr.Row():
178
+ analyze_btn = gr.Button("Analyser", variant="primary", size="lg")
179
  clear_btn = gr.ClearButton([email_input], value="🗑️ Effacer")
180
 
181
  with gr.Column(scale=1):
182
  verdict_output = gr.Textbox(
183
+ label="Verdict",
184
  interactive=False,
185
  lines=2
186
  )
187
 
188
  prob_output = gr.Label(
189
+ label="Probabilités",
190
  num_top_classes=2
191
  )
192
 
 
194
  analysis_output = gr.Markdown(label="📈 Analyse Détaillée")
195
 
196
  # Exemples
197
+ gr.Markdown("### Exemples à tester")
198
  gr.Examples(
199
  examples=examples,
200
  inputs=email_input,
 
204
  # Footer
205
  gr.Markdown("""
206
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  ⚠️ **Disclaimer:** Cette application est fournie à des fins éducatives et de recherche uniquement.
208
  """)
209
 
 
217
 
218
  if __name__ == "__main__":
219
  print("\n" + "="*60)
220
+ print("Lancement de l'application Gradio")
221
  print("="*60)
222
+ print(f"Device: {DEVICE}")
223
+ print(f" Modèle: {MODEL_PATH}")
224
  print("="*60 + "\n")
225
 
226
  demo.launch(