tymbos commited on
Commit
eef1e7e
·
verified ·
1 Parent(s): be0261d

Update train_tokenizer.py

Browse files
Files changed (1) hide show
  1. train_tokenizer.py +8 -37
train_tokenizer.py CHANGED
@@ -1,51 +1,26 @@
1
- import regex # Βιβλιοθήκη για υποστήριξη Unicode regex
2
  from tokenizers import Tokenizer, decoders, models, normalizers, pre_tokenizers, trainers
3
- from tokenizers.pre_tokenizers import PreTokenizer
4
  from datasets import load_dataset
 
5
 
6
- # Ορισμός custom regex για κώδικα και πολυγλωσσικό κείμενο.
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 custom_pre_tokenizer(pretokenized_string):
22
- """
23
- Custom pre-tokenizer που χρησιμοποιεί το regex για να εξάγει tokens με offsets.
24
- """
25
- # Εφαρμόζουμε το regex για να βρούμε τα tokens
26
- tokens_with_offsets = [(m.group(), m.span()) for m in regex.finditer(code_regex, pretokenized_string.sequence)]
27
- pretokenized_string.split(lambda: tokens_with_offsets)
28
 
29
  def train_tokenizer(iterator, vocab_size=32000, min_frequency=2):
30
- # Δημιουργία του Tokenizer με το μοντέλο BPE και ειδικό token για Unknown.
31
  tokenizer = Tokenizer(models.BPE(unk_token="<unk>"))
32
 
33
- # Εφαρμογή normalization (NFC και αφαίρεση τόνων, αν χρειάζεται)
34
  tokenizer.normalizer = normalizers.Sequence([
35
  normalizers.NFC(),
36
- #normalizers.StripAccents() # Προαιρετικό: αφαιρεί τόνους
37
  ])
38
 
39
- # Ορισμός custom pre-tokenizer με χρήση της συνάρτησης που ορίσαμε
40
- tokenizer.pre_tokenizer = PreTokenizer.custom(custom_pre_tokenizer)
41
-
42
- # Επιπλέον χρήση του ByteLevel pre-tokenizer για συμβατότητα με το GPT-2
43
  tokenizer.pre_tokenizer = pre_tokenizers.Sequence([
44
- tokenizer.pre_tokenizer,
45
  pre_tokenizers.ByteLevel(add_prefix_space=False)
46
  ])
47
 
48
- # Ορισμός του Trainer για το BPE
49
  trainer = trainers.BpeTrainer(
50
  vocab_size=vocab_size,
51
  min_frequency=min_frequency,
@@ -54,10 +29,6 @@ def train_tokenizer(iterator, vocab_size=32000, min_frequency=2):
54
  show_progress=True
55
  )
56
 
57
- # Εκπαίδευση του tokenizer από iterator κειμένων
58
  tokenizer.train_from_iterator(iterator, trainer=trainer)
59
-
60
- # Ορισμός decoder ώστε να αντιστρέφεται σωστά η κωδικοποίηση
61
  tokenizer.decoder = decoders.ByteLevel()
62
-
63
  return tokenizer
 
 
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"""'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|//.*|\/\*[\s\S]*?\*\/|\b(?:if|else|for|while|return|function)\b|[<>]=?|\+{1,2}|-{1,2}|&&|\|\||[!*/%^&|=-]|\d+\.\d+|\d+|\.\d+|[:;,.{}[\]()]|\p{L}+|\p{N}+|\s+|\S"""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
  def train_tokenizer(iterator, vocab_size=32000, min_frequency=2):
 
9
  tokenizer = Tokenizer(models.BPE(unk_token="<unk>"))
10
 
11
+ # Προχωρημένο Normalization
12
  tokenizer.normalizer = normalizers.Sequence([
13
  normalizers.NFC(),
14
+ #normalizers.StripAccents() # Προαιρετικό για τόνους
15
  ])
16
 
17
+ # Προσαρμοσμένος Pre-tokenizer με Split
 
 
 
18
  tokenizer.pre_tokenizer = pre_tokenizers.Sequence([
19
+ pre_tokenizers.Split(pattern=re.compile(code_regex), behavior='isolated'),
20
  pre_tokenizers.ByteLevel(add_prefix_space=False)
21
  ])
22
 
23
+ # Προχωρημένος Trainer
24
  trainer = trainers.BpeTrainer(
25
  vocab_size=vocab_size,
26
  min_frequency=min_frequency,
 
29
  show_progress=True
30
  )
31
 
 
32
  tokenizer.train_from_iterator(iterator, trainer=trainer)
 
 
33
  tokenizer.decoder = decoders.ByteLevel()
 
34
  return tokenizer