tymbos commited on
Commit
869fcd2
·
verified ·
1 Parent(s): 7f59263

Update train_tokenizer.py

Browse files
Files changed (1) hide show
  1. train_tokenizer.py +23 -16
train_tokenizer.py CHANGED
@@ -1,37 +1,40 @@
 
1
  from tokenizers import Tokenizer, decoders, models, normalizers, pre_tokenizers, trainers
2
  from datasets import load_dataset
3
- import re
4
 
5
- # Προσαρμοσμένος Pre-tokenizer για κώδικα και πολυγλωσσικό κείμενο
 
6
  code_regex = r"""(?x:
7
- //.*?$|/\*.*?\*/| # Σχόλια
8
- "(?:\\.|[^\\"])*"| # Strings
9
- '(?:\\.|[^\\'])*'| # Chars
10
- \b(?:if|else|for|while|return|function)\b| # Keywords
 
11
  [<>]=?|\+\+|--|&&|\|\||[-+*/%=&|^~!]=?| # Operators
12
- \d+\.?\d*|\.\d+| # Αριθμοί
13
- [{}[\](),.;:]| # Σύμβολα
14
- \p{L}+|\p{N}+| # Unicode letters/numbers
15
- \s+| # Whitespace
16
- \S # Άλλα
17
  )"""
18
 
19
  def train_tokenizer(iterator, vocab_size=32000, min_frequency=2):
 
20
  tokenizer = Tokenizer(models.BPE(unk_token="<unk>"))
21
 
22
- # Προχωρημένο Normalization
23
  tokenizer.normalizer = normalizers.Sequence([
24
  normalizers.NFC(),
25
- normalizers.StripAccents() # Προαιρετικό για τόνους
26
  ])
27
 
28
- # Προσαρμοσμένος Pre-tokenizer
29
  tokenizer.pre_tokenizer = pre_tokenizers.Sequence([
30
- pre_tokenizers.Regex(code_regex),
31
  pre_tokenizers.ByteLevel(add_prefix_space=False)
32
  ])
33
 
34
- # Προχωρημένος Trainer
35
  trainer = trainers.BpeTrainer(
36
  vocab_size=vocab_size,
37
  min_frequency=min_frequency,
@@ -40,6 +43,10 @@ def train_tokenizer(iterator, vocab_size=32000, min_frequency=2):
40
  show_progress=True
41
  )
42
 
 
43
  tokenizer.train_from_iterator(iterator, trainer=trainer)
 
 
44
  tokenizer.decoder = decoders.ByteLevel()
 
45
  return tokenizer
 
1
+ import regex # Χρησιμοποιείται για την υποστήριξη Unicode properties στο regex
2
  from tokenizers import Tokenizer, decoders, models, normalizers, pre_tokenizers, trainers
3
  from datasets import load_dataset
 
4
 
5
+ # Ορισμός custom regex για κώδικα και πολυγλωσσικό κείμενο.
6
+ # Χρησιμοποιεί το module regex που υποστηρίζει \p{L} και \p{N}.
7
  code_regex = r"""(?x:
8
+ //.*?$| # Σχόλια τύπου //
9
+ /\*.*?\*/| # Σχόλια τύπου /* */
10
+ "(?:\\.|[^\\"])*"| # Strings με διπλά εισαγωγικά
11
+ '(?:\\.|[^\\'])*'| # Strings με μονά εισαγωγικά
12
+ \b(?:if|else|for|while|return|function)\b| # Κλειδικά για κώδικα
13
  [<>]=?|\+\+|--|&&|\|\||[-+*/%=&|^~!]=?| # Operators
14
+ \d+\.?\d*|\.\d+| # Αριθμοί
15
+ [{}[\](),.;:]| # Σύμβολα
16
+ \p{L}+|\p{N}+| # Unicode γράμματα/αριθμοί
17
+ \s+| # Διαστήματα
18
+ \S # Οποιοσδήποτε άλλος χαρακτήρας
19
  )"""
20
 
21
  def train_tokenizer(iterator, vocab_size=32000, min_frequency=2):
22
+ # Δημιουργία του Tokenizer με το μοντέλο BPE και ειδικό token για Unknown.
23
  tokenizer = Tokenizer(models.BPE(unk_token="<unk>"))
24
 
25
+ # Εφαρμογή normalization (NFC και αφαίρεση τόνων, αν χρειάζεται)
26
  tokenizer.normalizer = normalizers.Sequence([
27
  normalizers.NFC(),
28
+ normalizers.StripAccents() # Προαιρετικό: αφαιρεί τόνους
29
  ])
30
 
31
+ # Ορισμός custom pre-tokenizer με χρήση regex και ByteLevel
32
  tokenizer.pre_tokenizer = pre_tokenizers.Sequence([
33
+ pre_tokenizers.Regex(pattern=code_regex),
34
  pre_tokenizers.ByteLevel(add_prefix_space=False)
35
  ])
36
 
37
+ # Ορισμός του Trainer για το BPE
38
  trainer = trainers.BpeTrainer(
39
  vocab_size=vocab_size,
40
  min_frequency=min_frequency,
 
43
  show_progress=True
44
  )
45
 
46
+ # Εκπαίδευση του tokenizer από iterator κειμένων
47
  tokenizer.train_from_iterator(iterator, trainer=trainer)
48
+
49
+ # Ορισμός decoder ώστε να αντιστρέφεται σωστά η κωδικοποίηση
50
  tokenizer.decoder = decoders.ByteLevel()
51
+
52
  return tokenizer