tymbos commited on
Commit
96d5cf9
·
verified ·
1 Parent(s): c398762

Update train_tokenizer.py

Browse files
Files changed (1) hide show
  1. train_tokenizer.py +39 -31
train_tokenizer.py CHANGED
@@ -1,34 +1,42 @@
1
  # -*- coding: utf-8 -*-
2
- from tokenizers import Tokenizer, decoders, models, normalizers, pre_tokenizers, trainers
3
  import os
 
4
 
5
- def train_tokenizer(iterator, vocab_size=50000, min_frequency=3, output_dir="tokenizer_model", num_threads=4):
6
- """Εκπαιδεύει έναν BPE tokenizer και τον αποθηκεύει."""
7
- print("🔄 Ξεκινάει η εκπαίδευση του tokenizer...")
8
- try:
9
- tokenizer = Tokenizer(models.BPE(unk_token="<unk>"))
10
- tokenizer.normalizer = normalizers.NFC() # Υποστήριξη Unicode UTF-8 για ελληνικούς τόνους
11
- tokenizer.pre_tokenizer = pre_tokenizers.Sequence([
12
- pre_tokenizers.WhitespaceSplit(),
13
- pre_tokenizers.Punctuation(),
14
- pre_tokenizers.Digits(individual_digits=True)
15
- ])
16
- trainer = trainers.BpeTrainer(
17
- vocab_size=vocab_size,
18
- min_frequency=min_frequency,
19
- special_tokens=["<|endoftext|>", "<pad>", "<unk>", "<mask>", "[CITATION]", "[CODE_START]", "[CODE_END]"],
20
- continuing_subword_prefix=""
21
- )
22
- print(f"📏 Μέγεθος λεξιλογίου: {vocab_size}, Ελάχιστη συχνότητα: {min_frequency}")
23
- tokenizer.train_from_iterator(iterator, trainer=trainer, num_threads=num_threads)
24
- tokenizer.decoder = decoders.ByteLevel()
25
- if not os.path.exists(output_dir):
26
- os.makedirs(output_dir)
27
- print(f"📂 Δημιουργήθηκε φάκελος: {output_dir}")
28
- tokenizer.save(os.path.join(output_dir, "tokenizer.json"))
29
- tokenizer.model.save(output_dir)
30
- print(f" Ο tokenizer αποθηκεύτηκε στον φάκελο '{output_dir}'!")
31
- return tokenizer
32
- except Exception as e:
33
- print(f"❌ Σφάλμα κατά την αποθήκευση: {e}")
34
- raise
 
 
 
 
 
 
 
 
 
1
  # -*- coding: utf-8 -*-
 
2
  import os
3
+ from tokenizers import Tokenizer, models, pre_tokenizers, decoders, trainers
4
 
5
+ def train_tokenizer(texts, vocab_size, min_freq, output_dir, num_workers):
6
+ """
7
+ Εκπαίδευση ενός custom BPE tokenizer για το GPT-2.
8
+
9
+ Args:
10
+ texts (list): Λίστα με κείμενα για εκπαίδευση.
11
+ vocab_size (int): Μέγεθος λεξιλογίου.
12
+ min_freq (int): Ελάχιστη συχνότητα εμφάνισης για να συμπεριληφθεί token.
13
+ output_dir (str): Φάκελος όπου θα αποθηκευτεί ο tokenizer.
14
+ num_workers (int): Αριθμός εργαζομένων για παράλληλη επεξεργασία (σε αυτή την υλοποίηση δεν χρησιμοποιείται απευθείας).
15
+
16
+ Returns:
17
+ Tokenizer: Ο εκπαιδευμένος tokenizer.
18
+ """
19
+ # Αρχικοποίηση tokenizer με μοντέλο BPE και καθορισμό token για άγνωστα
20
+ tokenizer = Tokenizer(models.BPE(unk_token="<unk>"))
21
+
22
+ # Ορισμός του pre-tokenizer για byte-level επεξεργασία (όπως στο GPT-2)
23
+ tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel()
24
+ tokenizer.decoder = decoders.ByteLevel()
25
+
26
+ # Ορισμός του trainer για BPE
27
+ trainer = trainers.BpeTrainer(
28
+ vocab_size=vocab_size,
29
+ min_frequency=min_freq,
30
+ special_tokens=["<s>", "<pad>", "</s>", "<unk>", "<mask>"]
31
+ )
32
+
33
+ # Εκπαίδευση του tokenizer με τα παρεχόμενα κείμενα
34
+ tokenizer.train_from_iterator(texts, trainer=trainer, length=len(texts))
35
+
36
+ # Δημιουργία φακέλου αποθήκευσης αν δεν υπάρχει
37
+ if not os.path.exists(output_dir):
38
+ os.makedirs(output_dir)
39
+
40
+ # Αποθήκευση του tokenizer σε αρχείο JSON
41
+ tokenizer.save(os.path.join(output_dir, "tokenizer.json"))
42
+ return tokenizer