File size: 2,182 Bytes
b7ffce6
cd21527
 
b7ffce6
 
 
 
 
cd21527
 
 
 
 
b7ffce6
cd21527
b7ffce6
 
cd21527
b7ffce6
 
 
 
 
 
 
 
cd21527
b7ffce6
 
 
 
cd21527
 
 
 
 
 
 
 
b7ffce6
cd21527
 
 
 
 
 
 
 
 
 
 
b7ffce6
 
 
 
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
from transformers import BertTokenizer, BertForTokenClassification, Trainer, TrainingArguments
from datasets import Dataset
import json
import torch

# Carica il tokenizer e il modello pre-addestrato (dbmdz/bert-base-italian-uncased)
tokenizer = BertTokenizer.from_pretrained("dbmdz/bert-base-italian-uncased")
model = BertForTokenClassification.from_pretrained("dbmdz/bert-base-italian-uncased", num_labels=5)  # Aggiungi il numero corretto di etichette (labels)

# Carica il dataset
with open('entity_dataset.json', 'r') as f:
    dataset = json.load(f)

# Funzione per preparare i dati
def prepare_dataset(dataset):
    input_texts = [entry["query"] for entry in dataset]
    labels = [entry["entities"] for entry in dataset]

    # Tokenizza i dati di input
    encodings = tokenizer(input_texts, truncation=True, padding=True, max_length=512)
    # Aggiungi le etichette (entità) come output
    # Qui supponiamo che tu stia etichettando solo le entità (puoi adattare la funzione per il tuo caso)
    # Nota: dovresti mappare le etichette in modo che corrispondano al formato richiesto per BERT

    # Associa le etichette agli input tokenizzati
    encodings['labels'] = torch.tensor(labels)

    return Dataset.from_dict(encodings)

# Prepara il dataset per l'addestramento
train_dataset = prepare_dataset(dataset)

# Imposta i parametri di addestramento
training_args = TrainingArguments(
    output_dir="./results",          # Cartella di output
    evaluation_strategy="epoch",     # Come viene eseguita la valutazione
    learning_rate=2e-5,              # Tasso di apprendimento
    per_device_train_batch_size=16,  # Dimensione del batch
    num_train_epochs=3,              # Numero di epoche
    weight_decay=0.01                # Peso di decadimento (per evitare overfitting)
)

# Inizializza il trainer
trainer = Trainer(
    model=model,                     # Il modello
    args=training_args,              # I parametri di addestramento
    train_dataset=train_dataset,     # Il dataset di addestramento
)

# Avvia l'addestramento
trainer.train()

# Salva il modello addestrato
model.save_pretrained("./hotel_model")
tokenizer.save_pretrained("./hotel_model")