ElPierrito commited on
Commit
78c807c
·
verified ·
1 Parent(s): 3f96b86

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +68 -0
app.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from datasets import load_dataset
3
+ from sklearn.model_selection import train_test_split
4
+ from sklearn.preprocessing import LabelEncoder
5
+ from sklearn.linear_model import LogisticRegression
6
+ from sklearn.feature_extraction.text import TfidfVectorizer
7
+ from sklearn.pipeline import Pipeline
8
+
9
+ # 1. Laden und Vorbereiten des Datensatzes (einmalig beim Start)
10
+ try:
11
+ dataset = load_dataset("banking77")
12
+ texts = dataset['train']['text'] + dataset['test']['text']
13
+ labels = dataset['train']['label'] + dataset['test']['label']
14
+ label_encoder = LabelEncoder()
15
+ numerical_labels = label_encoder.fit_transform(labels)
16
+ label_names = label_encoder.classes_
17
+ train_texts, test_texts, train_labels, test_labels = train_test_split(
18
+ texts, numerical_labels, test_size=0.2, random_state=42, stratify=numerical_labels
19
+ )
20
+ except Exception as e:
21
+ print(f"Fehler beim Laden des Datensatzes: {e}")
22
+ label_names = ["Fehler beim Laden"]
23
+ pipeline = None
24
+
25
+ # 2. Trainieren des Modells (einmalig beim Start)
26
+ if 'pipeline' not in locals() or pipeline is None:
27
+ try:
28
+ pipeline = Pipeline([
29
+ ('tfidf', TfidfVectorizer()),
30
+ ('classifier', LogisticRegression(solver='liblinear', multi_class='ovr', random_state=42))
31
+ ])
32
+ pipeline.fit(train_texts, train_labels)
33
+ print("Modell erfolgreich trainiert.")
34
+ except Exception as e:
35
+ print(f"Fehler beim Trainieren des Modells: {e}")
36
+ pipeline = None
37
+
38
+ # 3. Funktion für die Vorhersage
39
+ def predict_intent(text):
40
+ if pipeline is not None and label_names:
41
+ prediction = pipeline.predict([text])[0]
42
+ predicted_label = label_names[prediction]
43
+ probabilities = pipeline.predict_proba([text])[0]
44
+ confidences = {label_names[i]: f"{probabilities[i]:.2f}" for i in range(len(label_names))}
45
+ return predicted_label, confidences
46
+ else:
47
+ return "Fehler", {"Fehler": "Modell nicht geladen oder trainiert."}
48
+
49
+ # 4. Erstellen der Gradio Interface
50
+ iface = gr.Interface(
51
+ fn=predict_intent,
52
+ inputs=gr.Textbox(label="Gib deine Kundenanfrage ein:"),
53
+ outputs=[
54
+ gr.Label(label="Vorhergesagte Kundenintention:"),
55
+ gr.JSON(label="Konfidenzwerte:")
56
+ ],
57
+ title="Vorhersage der Kundenintention (Banking77)",
58
+ description="Dieses Demo sagt die Kundenintention basierend auf der Eingabe einer Textanfrage vorher. Das Modell wurde auf dem Banking77-Datensatz trainiert.",
59
+ examples=[
60
+ ["Ich habe mein Passwort vergessen."],
61
+ ["Wie kann ich Geld überweisen?"],
62
+ ["Meine Karte ist verloren gegangen."],
63
+ ["Was ist der aktuelle Zinssatz für ein Sparkonto?"]
64
+ ]
65
+ )
66
+
67
+ # 5. Starten der Gradio App (wird beim Ausführen des Skripts aktiv)
68
+ iface.launch(share=False)