tymbos commited on
Commit
d6a5933
·
verified ·
1 Parent(s): 9dd78b5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -38
app.py CHANGED
@@ -2,7 +2,6 @@
2
  import os
3
  import gradio as gr
4
  import requests
5
- import tempfile
6
  from io import BytesIO
7
  import matplotlib.pyplot as plt
8
  from datasets import load_dataset
@@ -18,7 +17,7 @@ CHECKPOINT_FILE = "checkpoint.txt"
18
  TOKENIZER_DIR = "tokenizer_model"
19
  TOKENIZER_FILE = os.path.join(TOKENIZER_DIR, "tokenizer.json")
20
  CHUNK_SIZE = 1000 # Μέγεθος batch για checkpoint
21
- MAX_SAMPLES = 3000000 # Όριο δειγμάτων (προσαρμόστε ανάλογα με τις ανάγκες σας)
22
 
23
  # Παγκόσμια μεταβλητή ελέγχου συλλογής
24
  STOP_COLLECTION = False
@@ -102,43 +101,47 @@ def analyze_checkpoint(num_samples=1000):
102
 
103
  return report
104
 
105
- def train_and_test(dataset_name, configs, split, vocab_size, min_freq, test_text):
106
- """Εκπαίδευση του tokenizer και δοκιμή του."""
 
 
 
107
  global STOP_COLLECTION
108
- print("🚀 Ξεκινά η διαδικασία συλλογής και εκπαίδευσης...")
 
 
109
 
110
- all_texts = load_checkpoint()
111
- total_processed = len(all_texts)
112
- print(f"📌 Υπάρχουν ήδη {total_processed} δείγματα στο checkpoint.")
113
-
114
  dataset_iterator = create_iterator(dataset_name, configs, split)
115
  new_texts = []
116
 
117
  for text in dataset_iterator:
118
- # Έλεγχος αν έχει ζητηθεί διακοπή
119
  if STOP_COLLECTION:
120
- print("⏹️ Συλλογή σταμάτησε από το χρήστη.")
121
  break
122
-
123
  new_texts.append(text)
124
  total_processed += 1
125
-
126
  if len(new_texts) >= CHUNK_SIZE:
127
  append_to_checkpoint(new_texts)
128
- print(f"✅ Αποθηκεύτηκαν {total_processed} δείγματα στο checkpoint.")
129
  new_texts = []
130
-
131
  if total_processed >= MAX_SAMPLES:
132
- print("⚠️ Έφτασε το όριο δειγμάτων.")
133
  break
134
-
135
  if new_texts:
136
  append_to_checkpoint(new_texts)
137
- print(f"✅ Τελικό batch αποθηκεύτηκε ({total_processed} δείγματα).")
138
-
139
- print("🚀 Η συλλογή δεδομένων ολοκληρώθηκε! Ξεκινάει η εκπαίδευση του tokenizer...")
140
 
141
- # Εκπαίδευση του tokenizer
 
 
 
 
 
 
142
  all_texts = load_checkpoint()
143
  tokenizer = train_tokenizer(all_texts, vocab_size, min_freq, TOKENIZER_DIR)
144
 
@@ -163,23 +166,33 @@ def train_and_test(dataset_name, configs, split, vocab_size, min_freq, test_text
163
  decoded,
164
  img_buffer.getvalue())
165
 
166
- # Callback για τη διακοπή συλλογής
 
 
 
 
 
 
167
  def stop_collection():
 
168
  global STOP_COLLECTION
169
  STOP_COLLECTION = True
170
- print("⏹️ Ο χρήστης ζήτησε διακοπή συλλογής δειγμάτων.")
171
- return "Η συλλογή σταμάτησε!"
172
 
173
- # Callback για την επανεκκίνηση συλλογής
174
  def restart_collection():
 
 
 
 
175
  global STOP_COLLECTION
176
  STOP_COLLECTION = False
177
- print("▶️ Ο χρήστης ζήτησε επανεκκίνηση συλλογής δειγμάτων.")
178
- return "Η συλλογή ξεκίνησε εκ νέου!"
 
179
 
180
  # Gradio Interface
181
  with gr.Blocks() as demo:
182
- gr.Markdown("## Wikipedia Tokenizer Trainer with Checkpointing")
183
 
184
  with gr.Row():
185
  with gr.Column():
@@ -189,10 +202,11 @@ with gr.Blocks() as demo:
189
  vocab_size = gr.Slider(20000, 100000, value=50000, label="Vocabulary Size")
190
  min_freq = gr.Slider(1, 100, value=3, label="Minimum Frequency")
191
  test_text = gr.Textbox(value="Η Ακρόπολη είναι σύμβολο της αρχαίας Ελλάδας.", label="Test Text")
192
- train_btn = gr.Button("Train")
193
- analyze_btn = gr.Button("Analyze Samples")
194
  stop_btn = gr.Button("Stop Collection")
 
195
  restart_btn = gr.Button("Restart Collection")
 
196
  with gr.Column():
197
  progress = gr.Textbox(label="Progress", interactive=False, lines=10)
198
  results_text = gr.Textbox(label="Test Decoded Text", interactive=False)
@@ -200,16 +214,26 @@ with gr.Blocks() as demo:
200
  # Έλεγχος ύπαρξης του tokenizer για download
201
  initial_file_value = TOKENIZER_FILE if os.path.exists(TOKENIZER_FILE) else None
202
  download_button = gr.File(label="Download Tokenizer", value=initial_file_value)
203
-
204
- train_btn.click(train_and_test,
205
- inputs=[dataset_name, configs, split, vocab_size, min_freq, test_text],
206
- outputs=[progress, results_text, results_plot])
207
 
208
- analyze_btn.click(fn=lambda: analyze_checkpoint(1000),
209
- inputs=[],
 
 
 
 
 
 
 
 
 
210
  outputs=progress)
211
 
212
- stop_btn.click(fn=stop_collection, inputs=[], outputs=progress)
213
- restart_btn.click(fn=restart_collection, inputs=[], outputs=progress)
 
 
 
 
 
214
 
215
  demo.launch()
 
2
  import os
3
  import gradio as gr
4
  import requests
 
5
  from io import BytesIO
6
  import matplotlib.pyplot as plt
7
  from datasets import load_dataset
 
17
  TOKENIZER_DIR = "tokenizer_model"
18
  TOKENIZER_FILE = os.path.join(TOKENIZER_DIR, "tokenizer.json")
19
  CHUNK_SIZE = 1000 # Μέγεθος batch για checkpoint
20
+ MAX_SAMPLES = 3000000 # Όριο δειγμάτων (προσαρμόστε όπως χρειάζεται)
21
 
22
  # Παγκόσμια μεταβλητή ελέγχου συλλογής
23
  STOP_COLLECTION = False
 
101
 
102
  return report
103
 
104
+ def collect_samples(dataset_name, configs, split):
105
+ """
106
+ Ξεκινά τη συλλογή δειγμάτων από το dataset μέχρι να φτάσει το MAX_SAMPLES
107
+ ή μέχρι να ζητηθεί διακοπή (STOP_COLLECTION).
108
+ """
109
  global STOP_COLLECTION
110
+ STOP_COLLECTION = False # Βεβαιωνόμαστε ότι η συλλογή ξεκινάει ανενεργή τη διακοπή
111
+ total_processed = len(load_checkpoint())
112
+ progress_messages = [f"📌 Υπάρχουν ήδη {total_processed} δείγματα στο checkpoint."]
113
 
 
 
 
 
114
  dataset_iterator = create_iterator(dataset_name, configs, split)
115
  new_texts = []
116
 
117
  for text in dataset_iterator:
 
118
  if STOP_COLLECTION:
119
+ progress_messages.append("⏹️ Η συλλογή διακόπηκε από το χρήστη.")
120
  break
121
+
122
  new_texts.append(text)
123
  total_processed += 1
124
+
125
  if len(new_texts) >= CHUNK_SIZE:
126
  append_to_checkpoint(new_texts)
127
+ progress_messages.append(f"✅ Αποθηκεύτηκαν {total_processed} δείγματα στο checkpoint.")
128
  new_texts = []
129
+
130
  if total_processed >= MAX_SAMPLES:
131
+ progress_messages.append("⚠️ Έφτασε το όριο δειγμάτων.")
132
  break
133
+
134
  if new_texts:
135
  append_to_checkpoint(new_texts)
136
+ progress_messages.append(f"✅ Τελικό batch αποθηκεύτηκε ({total_processed} δείγματα).")
 
 
137
 
138
+ return "\n".join(progress_messages)
139
+
140
+ def train_tokenizer_fn(dataset_name, configs, split, vocab_size, min_freq, test_text):
141
+ """
142
+ Εκπαιδεύει τον tokenizer χρησιμοποιώντας τα δείγματα που έχουν συλλεχθεί στο checkpoint.
143
+ """
144
+ print("🚀 Ξεκινά η εκπαίδευση του tokenizer με τα δεδομένα του checkpoint...")
145
  all_texts = load_checkpoint()
146
  tokenizer = train_tokenizer(all_texts, vocab_size, min_freq, TOKENIZER_DIR)
147
 
 
166
  decoded,
167
  img_buffer.getvalue())
168
 
169
+ # Callbacks κουμπιών
170
+
171
+ def start_collection(dataset_name, configs, split):
172
+ """Ξεκινά τη συλλογή δειγμάτων (ή επανεκκινεί τη συλλογή αν έχει γίνει restart)."""
173
+ msg = collect_samples(dataset_name, configs, split)
174
+ return msg
175
+
176
  def stop_collection():
177
+ """Θέτει το flag για διακοπή της συλλογής δειγμάτων."""
178
  global STOP_COLLECTION
179
  STOP_COLLECTION = True
180
+ return "Η συλλογή σταμάτησε από το χρήστη."
 
181
 
 
182
  def restart_collection():
183
+ """
184
+ Επαναφέρει τη συλλογή διαγρά��οντας το checkpoint και
185
+ επαναφέροντας το flag ώστε να ξεκινήσει νέα συλλογή.
186
+ """
187
  global STOP_COLLECTION
188
  STOP_COLLECTION = False
189
+ if os.path.exists(CHECKPOINT_FILE):
190
+ os.remove(CHECKPOINT_FILE)
191
+ return "Το checkpoint διαγράφτηκε. Μπορείς να ξεκινήσεις νέα συλλογή."
192
 
193
  # Gradio Interface
194
  with gr.Blocks() as demo:
195
+ gr.Markdown("## Wikipedia Tokenizer Trainer with Collection, Analysis & Training")
196
 
197
  with gr.Row():
198
  with gr.Column():
 
202
  vocab_size = gr.Slider(20000, 100000, value=50000, label="Vocabulary Size")
203
  min_freq = gr.Slider(1, 100, value=3, label="Minimum Frequency")
204
  test_text = gr.Textbox(value="Η Ακρόπολη είναι σύμβολο της αρχαίας Ελλάδας.", label="Test Text")
205
+ start_btn = gr.Button("Start Collection")
 
206
  stop_btn = gr.Button("Stop Collection")
207
+ analyze_btn = gr.Button("Analyze Samples")
208
  restart_btn = gr.Button("Restart Collection")
209
+ train_btn = gr.Button("Train Tokenizer")
210
  with gr.Column():
211
  progress = gr.Textbox(label="Progress", interactive=False, lines=10)
212
  results_text = gr.Textbox(label="Test Decoded Text", interactive=False)
 
214
  # Έλεγχος ύπαρξης του tokenizer για download
215
  initial_file_value = TOKENIZER_FILE if os.path.exists(TOKENIZER_FILE) else None
216
  download_button = gr.File(label="Download Tokenizer", value=initial_file_value)
 
 
 
 
217
 
218
+ # Συνδέουμε τα κουμπιά με τις συναρτήσεις
219
+ start_btn.click(fn=start_collection,
220
+ inputs=[dataset_name, configs, split],
221
+ outputs=progress)
222
+
223
+ stop_btn.click(fn=stop_collection,
224
+ inputs=[],
225
+ outputs=progress)
226
+
227
+ analyze_btn.click(fn=lambda: analyze_checkpoint(1000),
228
+ inputs=[],
229
  outputs=progress)
230
 
231
+ restart_btn.click(fn=restart_collection,
232
+ inputs=[],
233
+ outputs=progress)
234
+
235
+ train_btn.click(fn=train_tokenizer_fn,
236
+ inputs=[dataset_name, configs, split, vocab_size, min_freq, test_text],
237
+ outputs=[progress, results_text, results_plot])
238
 
239
  demo.launch()