File size: 2,366 Bytes
cbdb918
 
 
 
ce79099
 
cbdb918
69e225d
cbdb918
 
cc5362f
 
887ad63
cc5362f
887ad63
 
cc5362f
 
 
cbdb918
887ad63
cbdb918
 
 
 
 
 
 
887ad63
cbdb918
 
 
 
 
 
887ad63
cbdb918
 
 
887ad63
 
cbdb918
 
887ad63
cbdb918
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
887ad63
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
from fastapi import FastAPI
from transformers import PreTrainedTokenizerFast
from tokenizers import ByteLevelBPETokenizer
from datasets import load_dataset
from contextlib import asynccontextmanager



app = FastAPI()

@asynccontextmanager
async def lifespan(app: FastAPI):
    # Εκκίνηση της διαδικασίας εκπαίδευσης του tokenizer όταν η εφαρμογή ξεκινά
    await train_tokenizer()
    yield  # Διαχείριση κατά τη διάρκεια της εφαρμογής
    # Οποιαδήποτε διαδικασία που πρέπει να γίνει όταν η εφαρμογή σταματήσει

app = FastAPI(lifespan=lifespan)

async def train_tokenizer():
    # Ρυθμίσεις tokenizer
    vocab_size = 50000
    min_frequency = 2

    # Φόρτωση δεδομένων από Oscar και Wikipedia μέσω streaming
    dataset_greek = load_dataset("oscar", "unshuffled_deduplicated_el", split="train", streaming=True)
    dataset_english = load_dataset("wikipedia", "20220301.en", split="train", streaming=True)

    # Διαχείριση καθαρού κώδικα (αν βρεθούν κατάλληλα δεδομένα)
    try:
        dataset_code = load_dataset("bigcode/the-stack", split="train", streaming=True)
        datasets_list = [dataset_greek, dataset_english, dataset_code]
    except:
        datasets_list = [dataset_greek, dataset_english]

    # Ενοποίηση δεδομένων και προεπεξεργασία
    def preprocess_data(dataset):
        for item in dataset:
            text = item["text"]
            text = text.strip().lower()  # Μπορείς να το κάνεις lower αν το θέλεις
            if text:
                yield text

    combined_data = (preprocess_data(dataset) for dataset in datasets_list)

    # Δημιουργία του tokenizer
    tokenizer = ByteLevelBPETokenizer()

    # Εκπαίδευση του tokenizer
    tokenizer.train_from_iterator(
        combined_data,
        vocab_size=vocab_size,
        min_frequency=min_frequency,
        special_tokens=["<s>", "<pad>", "</s>", "<unk>", "<mask>"]
    )

    # Αποθήκευση του tokenizer
    tokenizer.save_model(".")

@app.get("/")
async def root():
    return {"message": "Custom Tokenizer Training Completed and Saved"}