Close

Via Don Minzoni, 59 - 73025 - Martano (LE)

How Tokenization and Fine-Tuning Optimize Sentiment Analysis
Data Analysis

Come Tokenization e Fine-Tuning Ottimizzano l’Analisi del Sentiment: Un Caso Studio Pratico

By, Alberto
  • 2 Apr, 2025
  • 28 Views
  • 0 Comment

_Perché Tokenization e Fine-Tuning Sono Cruciali

Nel mondo di oggi, la gestione automatizzata di grandi volumi di dati è diventata indispensabile per migliorare l’efficienza operativa in diversi settori. Tokenization e fine-tuning sono due tecniche fondamentali nel machine learning che, se applicate correttamente, possono potenziare in modo significativo la capacità di un modello di interpretare e analizzare dati complessi. Ma perché questi processi sono così importanti?re these processes so important?

Efficienza e Accuratezza

I modelli di machine learning permettono di processare automaticamente grandi quantità di testo, riducendo il lavoro umano e migliorando la precisione. Il fine-tuning migliora la capacità del modello di comprendere sfumature specifiche del contesto, mentre la tokenization assicura che il testo venga trasformato in un formato adatto agli algoritmi di apprendimento automatico. Senza queste ottimizzazioni, anche i modelli più avanzati possono avere difficoltà a gestire incoerenze e ambiguità presenti nei dati testuali grezzi.

Applicazioni Pratiche

  • Sentiment analysis: Aiuta le aziende a comprendere il feedback dei clienti proveniente da recensioni o social media, facilitando decisioni più consapevoli.
  • Classificazione automatica: Filtra e organizza contenuti testuali come email, commenti o feedback in categorie utili.
  • Raccomandazioni personalizzate: I sistemi di raccomandazione offrono agli utenti suggerimenti su misura basati sui dati raccolti.

_Strumenti Essenziali per Tokenization e Fine-Tuning

I seguenti esempi di codice sono scritti in Python e utilizzano le seguenti librerie e strumenti:

  • Transformers: Una libreria sviluppata da Hugging Face, ideale per il fine-tuning di modelli linguistici preaddestrati.
  • AutoTokenizer: Uno strumento che gestisce in modo efficiente la tokenization dei testi.
  • PyTorch: Utilizzato per la gestione del modello durante le fasi di addestramento e valutazione.

Tokenization e Fine-Tuning: Approfondimento Tecnico

Nel precedente articolo abbiamo introdotto l’analisi del sentiment utilizzando il dataset Yelp Polarity.
In questo articolo ci concentreremo sugli aspetti tecnici della tokenization e del fine-tuning, esplorando come queste tecniche ottimizzino il processo di machine learning per ottenere una maggiore accuratezza.

Download e Preparazione del Dataset

Per cominciare, utilizziamo un sottoinsieme del dataset Yelp Polarity per ridurre i tempi di calcolo. Questo dataset contiene recensioni etichettate come positive o negative, che useremo per addestrare il modello.

dataset = load_dataset("yelp_polarity")
dataset['train'] = dataset['train'].select(range(1000))
dataset['test'] = dataset['test'].select(range(100))

Tokenization: Il Cuore del Preprocessing

La tokenization è un processo fondamentale che converte il testo grezzo in un formato comprensibile per il modello di machine learning. Per questa fase, utilizziamo il modello DistilBERT, una versione più leggera e ottimizzata del celebre BERT (Bidirectional Encoder Representations from Transformers), pensata per essere più efficiente mantenendo prestazioni simili. DistilBERT è particolarmente adatto quando si desidera ridurre i tempi di elaborazione e il peso del modello, senza compromettere significativamente l’accuratezza.

from transformers import AutoTokenizer
MODEL_NAME = "distilbert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)

def tokenize_function(examples):
    return tokenizer(examples['text'], padding="max_length", truncation=True)

tokenized_datasets = dataset.map(tokenize_function, batched=True)
tokenized_datasets.set_format('torch', columns=['input_ids', 'attention_mask', 'label'])

_Valutazione del Modello Senza Fine-Tuning

Il primo passo consiste nel valutare il modello senza alcuna ottimizzazione, utilizzando la versione preaddestrata di DistilBERT. Questo serve a stabilire una baseline per confrontare i miglioramenti ottenuti.

from transformers import Trainer
from transformers import AutoModelForSequenceClassification
import numpy as np
from sklearn.metrics import accuracy_score

model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME, num_labels=2).to('cuda')
trainer_no_finetune = Trainer(model=model)

predictions_no_finetune = trainer_no_finetune.predict(tokenized_datasets['test'])
preds_no_finetune = np.argmax(predictions_no_finetune.predictions, axis=1)

accuracy_no_finetune = accuracy_score(tokenized_datasets['test']['label'], preds_no_finetune)
print(f"Accuracy without fine-tuning: {accuracy_no_finetune}")

Output:

Accuracy without fine-tuning: 0.43

_Fine-Tuning su Modelli Preaddestrati

Per migliorare l’accuratezza, utilizziamo un modello preaddestrato su un dataset simile, lo SST-2 (Stanford Sentiment Treebank), e lo applichiamo al dataset di Yelp attraverso il fine-tuning.

sst_model_name = "distilbert-base-uncased-finetuned-sst-2-english"
sst_model = AutoModelForSequenceClassification.from_pretrained(sst_model_name).to('cuda')

trainer_sst_finetuned = Trainer(model=sst_model)
predictions_sst_finetune = trainer_sst_finetuned.predict(tokenized_datasets['test'])
accuracy_sst_finetune = accuracy_score(tokenized_datasets['test']['label'], np.argmax(predictions_sst_finetune.predictions, axis=1))

print(f"Accuracy with fine-tuning on SST-2: {accuracy_sst_finetune}")

Output:

Accuracy with fine-tuning on SST-2: 0.85

_Fine-Tuning Personalizzato sul Dataset Yelp Polarity

Successivamente, eseguiamo un fine-tuning personalizzato sul dataset Yelp Polarity, con l’obiettivo di massimizzare l’accuratezza adattando il modello a dati più pertinenti e specifici.

from transformers import TrainingArguments, Trainer

training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    num_train_epochs=3,
)

trainer_finetune = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets['train'],
    eval_dataset=tokenized_datasets['test'],
)

trainer_finetune.train()

Output:

Accuracy after custom (with Yelp-Polarity dataset) fine-tuning: 0.91

_Confronto dei Risultati

Dopo aver applicato il fine-tuning, possiamo confrontare le prestazioni del modello nei diversi scenari:

predictions_finetune = trainer_finetune.predict(tokenized_datasets['test'])
accuracy_finetune = accuracy_score(tokenized_datasets['test']['label'], np.argmax(predictions_finetune.predictions, axis=1))

print(f"Accuracy without fine-tuning: {accuracy_no_finetune}")
print(f"Accuracy with fine-tuning on SST-2: {accuracy_sst_finetune}")
print(f"Accuracy with custom fine-tuning on Yelp: {accuracy_finetune}")

Output Conclusivo:

Accuracy without fine-tuning: 0.43
Accuracy with fine-tuning on SST-2: 0.85
Accuracy with custom fine-tuning on Yelp: 0.91

_Conclusioni e Vantaggi

Attraverso tokenization e fine-tuning, abbiamo migliorato in modo significativo le prestazioni dei modelli di machine learning. Questi processi non si applicano solo all’analisi del sentiment, ma anche ad ambiti come la classificazione automatica e i sistemi di raccomandazione. In settori come il customer support o il marketing, i modelli possono essere personalizzati per rispondere a esigenze specifiche, riducendo i tempi di elaborazione dei dati e aumentando l’accuratezza delle analisi.

Sebbene l’accuratezza sia una metrica utile, una valutazione statistica più approfondita richiederebbe l’analisi di ulteriori metriche, come precision, recall e F1-score. Tuttavia, questa analisi dimostra i notevoli miglioramenti ottenuti grazie al fine-tuning.