tymbos commited on
Commit
4410500
·
verified ·
1 Parent(s): 24cb1cd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -39
app.py CHANGED
@@ -1,8 +1,8 @@
1
  # -*- coding: utf-8 -*-
2
  import os
3
  import gradio as gr
4
- import requests
5
  import time
 
6
  from io import BytesIO
7
  import matplotlib.pyplot as plt
8
  from datasets import load_dataset
@@ -17,11 +17,15 @@ DetectorFactory.seed = 0
17
  CHECKPOINT_FILE = "checkpoint.txt"
18
  TOKENIZER_DIR = "tokenizer_model"
19
  TOKENIZER_FILE = os.path.join(TOKENIZER_DIR, "tokenizer.json")
20
- MAX_SAMPLES = 50000000 # Όριο δειγμάτων
21
 
22
  # Παγκόσμια μεταβλητή ελέγχου συλλογής
23
  STOP_COLLECTION = False
24
 
 
 
 
 
25
 
26
  def load_checkpoint():
27
  """Φόρτωση δεδομένων από το checkpoint αν υπάρχει."""
@@ -52,79 +56,59 @@ def create_iterator(dataset_name, configs, split):
52
  print(f"⚠️ Σφάλμα φόρτωσης dataset για config {config}: {e}")
53
 
54
 
55
- def analyze_checkpoint(num_samples=1000):
56
- """Αναλύει τα πρώτα num_samples δείγματα από το checkpoint και επιστρέφει το ποσοστό γλωσσών."""
57
- if not os.path.exists(CHECKPOINT_FILE):
58
- return "Το αρχείο checkpoint δεν υπάρχει."
59
-
60
- with open(CHECKPOINT_FILE, "r", encoding="utf-8") as f:
61
- lines = f.read().splitlines()
62
-
63
- sample_lines = lines[:num_samples] if len(lines) >= num_samples else lines
64
-
65
- language_counts = {}
66
- total = 0
67
- for line in sample_lines:
68
- try:
69
- lang = detect(line)
70
- language_counts[lang] = language_counts.get(lang, 0) + 1
71
- total += 1
72
- except Exception:
73
- continue
74
-
75
- if total == 0:
76
- return "Δεν βρέθηκαν έγκυρα δείγματα για ανάλυση."
77
-
78
- report = "📊 Αποτελέσματα Ανάλυσης:\n"
79
- for lang, count in language_counts.items():
80
- report += f" - {lang}: {count / total * 100:.2f}%\n"
81
-
82
- return report
83
-
84
-
85
  def collect_samples(dataset_name, configs, split, chunk_size):
86
  """
87
  Ξεκινά τη συλλογή δειγμάτων από το dataset μέχρι να φτάσει το MAX_SAMPLES
88
  ή μέχρι να ζητηθεί διακοπή (STOP_COLLECTION).
89
  """
90
  global STOP_COLLECTION
91
- STOP_COLLECTION = False # Βεβαιωνόμαστε ότι η συλλογή ξεκινάει κανονικά
92
  total_processed = len(load_checkpoint())
93
- progress_messages = [f"📌 Ξεκινά η συλλογή... Υπάρχουν ήδη {total_processed} δείγματα στο checkpoint."]
94
 
 
 
 
 
95
  dataset_iterator = create_iterator(dataset_name, configs, split)
96
  new_texts = []
97
 
98
  for text in dataset_iterator:
99
  if STOP_COLLECTION:
100
  progress_messages.append("⏹️ Η συλλογή σταμάτησε από το χρήστη.")
 
101
  break
102
 
103
  new_texts.append(text)
104
  total_processed += 1
105
-
106
  if len(new_texts) >= chunk_size:
107
  append_to_checkpoint(new_texts)
108
  progress_messages.append(f"✅ Αποθηκεύτηκαν {total_processed} δείγματα στο checkpoint.")
 
109
  new_texts = []
110
 
111
  if total_processed >= MAX_SAMPLES:
112
  progress_messages.append("⚠️ Έφτασε το όριο δειγμάτων.")
 
113
  break
114
 
115
  if new_texts:
116
  append_to_checkpoint(new_texts)
117
  progress_messages.append(f"✅ Τελικό batch αποθηκεύτηκε ({total_processed} δείγματα).")
118
-
 
119
  return "\n".join(progress_messages)
120
 
121
 
122
  def train_tokenizer_fn(dataset_name, configs, split, vocab_size, min_freq, test_text):
123
  """Εκπαιδεύει τον tokenizer χρησιμοποιώντας τα δεδομένα του checkpoint."""
124
- print("🚀 Ξεκινά η εκπαίδευση...")
125
  all_texts = load_checkpoint()
126
  tokenizer = train_tokenizer(all_texts, vocab_size, min_freq, TOKENIZER_DIR)
127
 
 
 
 
128
  # Φόρτωση εκπαιδευμένου tokenizer
129
  trained_tokenizer = Tokenizer.from_file(TOKENIZER_FILE)
130
 
@@ -151,6 +135,7 @@ def stop_collection():
151
  """Σταματά τη συλλογή δειγμάτων."""
152
  global STOP_COLLECTION
153
  STOP_COLLECTION = True
 
154
  return "⏹️ Η συλλογή σταμάτησε από το χρήστη."
155
 
156
 
@@ -160,6 +145,7 @@ def restart_collection():
160
  STOP_COLLECTION = False
161
  if os.path.exists(CHECKPOINT_FILE):
162
  os.remove(CHECKPOINT_FILE)
 
163
  return "🔄 Το checkpoint διαγράφηκε. Μπορείς να ξεκινήσεις νέα συλλογή."
164
 
165
 
@@ -179,7 +165,6 @@ with gr.Blocks() as demo:
179
  start_btn = gr.Button("Start Collection")
180
  stop_btn = gr.Button("Stop Collection")
181
  restart_btn = gr.Button("Restart Collection")
182
- analyze_btn = gr.Button("Analyze Samples")
183
  train_btn = gr.Button("Train Tokenizer")
184
 
185
  progress = gr.Textbox(label="Progress", interactive=False, lines=10)
@@ -189,8 +174,8 @@ with gr.Blocks() as demo:
189
  start_btn.click(collect_samples, [dataset_name, configs, split, chunk_size], progress)
190
  stop_btn.click(stop_collection, [], progress)
191
  restart_btn.click(restart_collection, [], progress)
192
- analyze_btn.click(analyze_checkpoint, [], progress)
193
  train_btn.click(train_tokenizer_fn, [dataset_name, configs, split, vocab_size, min_freq, test_text],
194
  [progress, decoded_text, token_distribution])
195
 
 
196
  demo.launch()
 
1
  # -*- coding: utf-8 -*-
2
  import os
3
  import gradio as gr
 
4
  import time
5
+ import datetime
6
  from io import BytesIO
7
  import matplotlib.pyplot as plt
8
  from datasets import load_dataset
 
17
  CHECKPOINT_FILE = "checkpoint.txt"
18
  TOKENIZER_DIR = "tokenizer_model"
19
  TOKENIZER_FILE = os.path.join(TOKENIZER_DIR, "tokenizer.json")
20
+ MAX_SAMPLES = 3000000 # Όριο δειγμάτων
21
 
22
  # Παγκόσμια μεταβλητή ελέγχου συλλογής
23
  STOP_COLLECTION = False
24
 
25
+ # ===== ΕΜΦΑΝΙΣΗ LOG ΕΚΚΙΝΗΣΗΣ =====
26
+ startup_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
27
+ print(f"\n===== Application Startup at {startup_time} =====\n")
28
+
29
 
30
  def load_checkpoint():
31
  """Φόρτωση δεδομένων από το checkpoint αν υπάρχει."""
 
56
  print(f"⚠️ Σφάλμα φόρτωσης dataset για config {config}: {e}")
57
 
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  def collect_samples(dataset_name, configs, split, chunk_size):
60
  """
61
  Ξεκινά τη συλλογή δειγμάτων από το dataset μέχρι να φτάσει το MAX_SAMPLES
62
  ή μέχρι να ζητηθεί διακοπή (STOP_COLLECTION).
63
  """
64
  global STOP_COLLECTION
65
+ STOP_COLLECTION = False
66
  total_processed = len(load_checkpoint())
 
67
 
68
+ # LOG: Ξεκίνησε η διαδικασία συλλογής
69
+ print(f"🚀 Ξεκινά η συλλογή δεδομένων... Υπάρχουν ήδη {total_processed} δείγματα στο checkpoint.")
70
+
71
+ progress_messages = [f"📌 Ξεκινά η συλλογή... Υπάρχουν ήδη {total_processed} δείγματα στο checkpoint."]
72
  dataset_iterator = create_iterator(dataset_name, configs, split)
73
  new_texts = []
74
 
75
  for text in dataset_iterator:
76
  if STOP_COLLECTION:
77
  progress_messages.append("⏹️ Η συλλογή σταμάτησε από το χρήστη.")
78
+ print("⏹️ Η συλλογή σταμάτησε από το χρήστη.")
79
  break
80
 
81
  new_texts.append(text)
82
  total_processed += 1
83
+
84
  if len(new_texts) >= chunk_size:
85
  append_to_checkpoint(new_texts)
86
  progress_messages.append(f"✅ Αποθηκεύτηκαν {total_processed} δείγματα στο checkpoint.")
87
+ print(f"✅ Αποθηκεύτηκαν {total_processed} δείγματα στο checkpoint.")
88
  new_texts = []
89
 
90
  if total_processed >= MAX_SAMPLES:
91
  progress_messages.append("⚠️ Έφτασε το όριο δειγμάτων.")
92
+ print("⚠️ Έφτασε το όριο δειγμάτων.")
93
  break
94
 
95
  if new_texts:
96
  append_to_checkpoint(new_texts)
97
  progress_messages.append(f"✅ Τελικό batch αποθηκεύτηκε ({total_processed} δείγματα).")
98
+ print(f"✅ Τελικό batch αποθηκεύτηκε ({total_processed} δείγματα).")
99
+
100
  return "\n".join(progress_messages)
101
 
102
 
103
  def train_tokenizer_fn(dataset_name, configs, split, vocab_size, min_freq, test_text):
104
  """Εκπαιδεύει τον tokenizer χρησιμοποιώντας τα δεδομένα του checkpoint."""
105
+ print("\n🚀 Ξεκινά η διαδικασία εκπαίδευσης...")
106
  all_texts = load_checkpoint()
107
  tokenizer = train_tokenizer(all_texts, vocab_size, min_freq, TOKENIZER_DIR)
108
 
109
+ # LOG: Τέλος εκπαίδευσης
110
+ print(f"✅ Εκπαίδευση ολοκληρώθηκε! Το tokenizer αποθηκεύτηκε στο {TOKENIZER_DIR}.")
111
+
112
  # Φόρτωση εκπαιδευμένου tokenizer
113
  trained_tokenizer = Tokenizer.from_file(TOKENIZER_FILE)
114
 
 
135
  """Σταματά τη συλλογή δειγμάτων."""
136
  global STOP_COLLECTION
137
  STOP_COLLECTION = True
138
+ print("⏹️ Η συλλογή σταμάτησε από το χρήστη.")
139
  return "⏹️ Η συλλογή σταμάτησε από το χρήστη."
140
 
141
 
 
145
  STOP_COLLECTION = False
146
  if os.path.exists(CHECKPOINT_FILE):
147
  os.remove(CHECKPOINT_FILE)
148
+ print("🔄 Το checkpoint διαγράφηκε. Έτοιμο για νέα συλλογή.")
149
  return "🔄 Το checkpoint διαγράφηκε. Μπορείς να ξεκινήσεις νέα συλλογή."
150
 
151
 
 
165
  start_btn = gr.Button("Start Collection")
166
  stop_btn = gr.Button("Stop Collection")
167
  restart_btn = gr.Button("Restart Collection")
 
168
  train_btn = gr.Button("Train Tokenizer")
169
 
170
  progress = gr.Textbox(label="Progress", interactive=False, lines=10)
 
174
  start_btn.click(collect_samples, [dataset_name, configs, split, chunk_size], progress)
175
  stop_btn.click(stop_collection, [], progress)
176
  restart_btn.click(restart_collection, [], progress)
 
177
  train_btn.click(train_tokenizer_fn, [dataset_name, configs, split, vocab_size, min_freq, test_text],
178
  [progress, decoded_text, token_distribution])
179
 
180
+ print("\nGradio Interface is launching...")
181
  demo.launch()