| | |
| | import os |
| | from tokenizers import Tokenizer, models, pre_tokenizers, decoders, trainers |
| |
|
| | def train_tokenizer(texts, vocab_size, min_freq, output_dir, num_workers): |
| | """ |
| | Εκπαίδευση ενός custom BPE tokenizer για το GPT-2. |
| | |
| | Args: |
| | texts (list): Λίστα με κείμενα για εκπαίδευση. |
| | vocab_size (int): Μέγεθος λεξιλογίου. |
| | min_freq (int): Ελάχιστη συχνότητα εμφάνισης για να συμπεριληφθεί token. |
| | output_dir (str): Φάκελος όπου θα αποθηκευτεί ο tokenizer. |
| | num_workers (int): Αριθμός εργαζομένων για παράλληλη επεξεργασία (σε αυτή την υλοποίηση δεν χρησιμοποιείται απευθείας). |
| | |
| | Returns: |
| | Tokenizer: Ο εκπαιδευμένος tokenizer. |
| | """ |
| | |
| | tokenizer = Tokenizer(models.BPE(unk_token="<unk>")) |
| | |
| | |
| | tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel() |
| | tokenizer.decoder = decoders.ByteLevel() |
| | |
| | |
| | trainer = trainers.BpeTrainer( |
| | vocab_size=vocab_size, |
| | min_frequency=min_freq, |
| | special_tokens=["<s>", "<pad>", "</s>", "<unk>", "<mask>"] |
| | ) |
| | |
| | |
| | tokenizer.train_from_iterator(texts, trainer=trainer, length=len(texts)) |
| | |
| | |
| | if not os.path.exists(output_dir): |
| | os.makedirs(output_dir) |
| | |
| | |
| | tokenizer.save(os.path.join(output_dir, "tokenizer.json")) |
| | return tokenizer |