GoshawkVortexAI commited on
Commit
fbe7529
·
verified ·
1 Parent(s): 97dad21

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +173 -50
app.py CHANGED
@@ -1,87 +1,210 @@
1
- import gradio as gr
2
  import torch
 
3
  from transformers import AutoTokenizer, AutoModelForSequenceClassification
4
 
5
- # Hugging Face model repo
6
- MODEL_NAME = "GoshawkVortexAI/Goshawk_insurance"
7
 
8
- # CPU kullan
9
- device = torch.device("cpu")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
 
 
11
  print("Model yükleniyor...")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
- tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
14
- model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME)
 
15
 
16
- model.to(device)
17
- model.eval()
 
 
18
 
19
- # Label mapping
20
- id2label = model.config.id2label
21
 
 
 
 
22
 
23
  def predict(text):
24
- if not text or not text.strip():
25
- return "Lütfen bir sigorta metni girin."
26
-
27
- inputs = tokenizer(
28
- text,
29
- return_tensors="pt",
30
- truncation=True,
31
- padding=True,
32
- max_length=256
33
- )
34
 
35
- inputs = {k: v.to(device) for k, v in inputs.items()}
 
 
 
 
 
36
 
37
- with torch.no_grad():
38
- outputs = model(**inputs)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
 
40
- probabilities = torch.softmax(outputs.logits, dim=-1)[0]
 
41
 
42
- results = {}
43
 
44
- for i, probability in enumerate(probabilities):
45
- label = id2label.get(i, f"LABEL_{i}")
46
- results[label] = float(probability)
 
47
 
48
- # En yüksek olasılık
49
- best_label = max(results, key=results.get)
50
- confidence = results[best_label]
 
 
 
 
 
 
 
 
 
 
 
51
 
52
- return {
53
- "Tahmin": best_label,
54
- "Güven": f"{confidence * 100:.2f}%",
55
- "Tüm sonuçlar": {
56
- k: f"{v * 100:.2f}%"
57
- for k, v in sorted(
 
 
 
 
 
58
  results.items(),
59
  key=lambda x: x[1],
60
  reverse=True
61
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  }
63
- }
64
 
65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  demo = gr.Interface(
 
67
  fn=predict,
 
68
  inputs=gr.Textbox(
69
  label="Sigorta Metni",
70
- placeholder="Örneğin: Araç kaza nedeniyle hasar gördü...",
 
 
 
71
  lines=6
72
  ),
73
- outputs=gr.JSON(label="Model Sonucu"),
74
- title="Goshawk Insurance AI",
 
 
 
 
 
75
  description=(
76
- "Sigorta sektörüne özel DistilBERT modeli. "
77
- "Metni analiz ederek ilgili sınıfı tahmin eder."
78
  ),
79
- examples=[
80
- ["Araç kazası sonucunda ön tampon ve far hasar gördü."],
81
- ["Kasko poliçesi kapsamında hasar başvurusu yapılmıştır."],
82
- ["Sigortalının sağlık giderleri poliçe kapsamında değerlendirilmiştir."]
83
- ]
84
  )
85
 
 
 
 
 
 
86
  if __name__ == "__main__":
87
- demo.launch()
 
 
 
 
 
 
 
1
+ import os
2
  import torch
3
+ import gradio as gr
4
  from transformers import AutoTokenizer, AutoModelForSequenceClassification
5
 
 
 
6
 
7
+ # =========================================================
8
+ # GOSHAWK INSURANCE AI
9
+ # DistilBERT - Insurance Sector
10
+ # CPU Optimized
11
+ # =========================================================
12
+
13
+ # Model dosyaları bu Space'in içinde olduğu için
14
+ # Hugging Face'e tekrar bağlanmıyoruz.
15
+ MODEL_PATH = "./"
16
+
17
+ DEVICE = torch.device("cpu")
18
+
19
+
20
+ # ---------------------------------------------------------
21
+ # Model yükleme
22
+ # ---------------------------------------------------------
23
 
24
+ print("========================================")
25
+ print("GOSHAWK INSURANCE AI")
26
  print("Model yükleniyor...")
27
+ print("========================================")
28
+
29
+ try:
30
+ tokenizer = AutoTokenizer.from_pretrained(
31
+ MODEL_PATH,
32
+ local_files_only=True
33
+ )
34
+
35
+ model = AutoModelForSequenceClassification.from_pretrained(
36
+ MODEL_PATH,
37
+ local_files_only=True
38
+ )
39
+
40
+ model.to(DEVICE)
41
+ model.eval()
42
 
43
+ print("Model başarıyla yüklendi.")
44
+ print("Device:", DEVICE)
45
+ print("Labels:", model.config.id2label)
46
 
47
+ except Exception as e:
48
+ print("MODEL YÜKLEME HATASI:")
49
+ print(str(e))
50
+ raise e
51
 
 
 
52
 
53
+ # ---------------------------------------------------------
54
+ # Tahmin fonksiyonu
55
+ # ---------------------------------------------------------
56
 
57
  def predict(text):
 
 
 
 
 
 
 
 
 
 
58
 
59
+ if text is None or not text.strip():
60
+ return {
61
+ "Hata": "Lütfen bir sigorta metni girin."
62
+ }
63
+
64
+ text = text.strip()
65
 
66
+ try:
67
+
68
+ # Tokenization
69
+ inputs = tokenizer(
70
+ text,
71
+ return_tensors="pt",
72
+ truncation=True,
73
+ padding=True,
74
+ max_length=256
75
+ )
76
+
77
+ # CPU
78
+ inputs = {
79
+ key: value.to(DEVICE)
80
+ for key, value in inputs.items()
81
+ }
82
 
83
+ # Tahmin
84
+ with torch.inference_mode():
85
 
86
+ outputs = model(**inputs)
87
 
88
+ probabilities = torch.softmax(
89
+ outputs.logits,
90
+ dim=-1
91
+ )[0]
92
 
93
+ # Sonuçları hazırla
94
+ results = {}
95
+
96
+ for i, probability in enumerate(probabilities):
97
+
98
+ label = model.config.id2label.get(
99
+ i,
100
+ f"LABEL_{i}"
101
+ )
102
+
103
+ results[label] = round(
104
+ float(probability) * 100,
105
+ 2
106
+ )
107
 
108
+ # En yüksek sonuç
109
+ best_label = max(
110
+ results,
111
+ key=results.get
112
+ )
113
+
114
+ confidence = results[best_label]
115
+
116
+ # Büyükten küçüğe sırala
117
+ sorted_results = dict(
118
+ sorted(
119
  results.items(),
120
  key=lambda x: x[1],
121
  reverse=True
122
  )
123
+ )
124
+
125
+ return {
126
+ "Tahmin": best_label,
127
+ "Güven": f"{confidence:.2f}%",
128
+ "Sonuçlar": {
129
+ label: f"{score:.2f}%"
130
+ for label, score in sorted_results.items()
131
+ }
132
+ }
133
+
134
+ except Exception as e:
135
+
136
+ return {
137
+ "Hata": str(e)
138
  }
 
139
 
140
 
141
+ # ---------------------------------------------------------
142
+ # Örnekler
143
+ # ---------------------------------------------------------
144
+
145
+ examples = [
146
+ [
147
+ "Araç kazası sonucunda ön tampon ve far hasar gördü."
148
+ ],
149
+ [
150
+ "Sigortalı kasko poliçesi kapsamında hasar başvurusunda bulundu."
151
+ ],
152
+ [
153
+ "Trafik kazası nedeniyle araçta maddi hasar oluşmuştur."
154
+ ],
155
+ [
156
+ "Poliçe kapsamında sağlık giderlerinin karşılanması talep edilmiştir."
157
+ ],
158
+ [
159
+ "Sigortalının hasar dosyası incelenerek ödeme yapılmasına karar verilmiştir."
160
+ ]
161
+ ]
162
+
163
+
164
+ # ---------------------------------------------------------
165
+ # Gradio arayüzü
166
+ # ---------------------------------------------------------
167
+
168
  demo = gr.Interface(
169
+
170
  fn=predict,
171
+
172
  inputs=gr.Textbox(
173
  label="Sigorta Metni",
174
+ placeholder=(
175
+ "Örneğin: "
176
+ "Araç kazası sonucunda ön tampon hasar gördü..."
177
+ ),
178
  lines=6
179
  ),
180
+
181
+ outputs=gr.JSON(
182
+ label="Goshawk Insurance AI Sonucu"
183
+ ),
184
+
185
+ title="🛡️ Goshawk Insurance AI",
186
+
187
  description=(
188
+ "Sigorta sektörüne özel DistilBERT yapay zeka modeli. "
189
+ "Sigorta metinlerini analiz ederek sınıflandırır."
190
  ),
191
+
192
+ examples=examples,
193
+
194
+ submit_btn="Analiz Et",
195
+ clear_btn="Temizle"
196
  )
197
 
198
+
199
+ # ---------------------------------------------------------
200
+ # Uygulamayı başlat
201
+ # ---------------------------------------------------------
202
+
203
  if __name__ == "__main__":
204
+
205
+ demo.launch(
206
+ server_name="0.0.0.0",
207
+ server_port=int(
208
+ os.environ.get("PORT", 7860)
209
+ )
210
+ )