|
|
|
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 |