Costruzione del proprio strumento di analisi del sentiment utilizzando LLM
Introduzione
L'analisi del sentiment è un processo che determina il tono emotivo di un testo, che può essere applicato in molte aree, come il marketing, il servizio clienti o le ricerche di opinione pubblica. In questo articolo, vi mostreremo come costruire il vostro strumento di analisi del sentiment utilizzando grandi modelli linguistici (LLM).
Scelta del modello
Il primo passo è la scelta del modello linguistico appropriato. Possiamo scegliere tra:
- Modelli pre-addestrati (ad esempio BERT, RoBERTa, DistilBERT) – pronti all'uso, ma che richiedono adattamento.
- Modelli specializzati (ad esempio VADER, TextBlob) – progettati specificamente per l'analisi del sentiment.
- Modelli personalizzati – addestrati su dati specifici per il vostro settore.
Per il nostro esempio, utilizzeremo Hugging Face Transformers con il modello DistilBERT, che è una versione più leggera di BERT e si adatta bene ai compiti di analisi del sentiment.
Installazione delle librerie necessarie
Per iniziare, installiamo le librerie necessarie:
pip install transformers torch pandas
Caricamento del modello e del tokenizzatore
Successivamente, carichiamo il modello e il tokenizzatore:
from transformers import pipeline
# Caricamento dello strumento pronto per l'analisi del sentiment
sentiment_pipeline = pipeline("sentiment-analysis")
Preparazione dei dati
Prepariamo un set di dati per il test. Possiamo utilizzare un semplice esempio:
texts = [
"Adoro questo prodotto, è fantastico!",
"Non lo consiglio, molto deluso.",
"Prodotto medio, niente di speciale.",
"Il funzionamento è soddisfacente, ma il prezzo è troppo alto."
]
Analisi del sentiment
Ora possiamo eseguire l'analisi del sentiment per i nostri testi:
results = sentiment_pipeline(texts)
for text, result in zip(texts, results):
print(f"Testo: {text}")
print(f"Sentiment: {result['label']} (Certanza: {result['score']:.2f})")
print("---")
Adattamento del modello
Se vogliamo adattare il modello ai nostri dati specifici, possiamo utilizzare la libreria Hugging Face Transformers per addestrare il modello sul nostro set di dati.
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from transformers import Trainer, TrainingArguments
import pandas as pd
from sklearn.model_selection import train_test_split
# Esempio di set di dati
data = pd.DataFrame({
"text": ["Adoro questo prodotto", "Non lo consiglio", "Prodotto medio"],
"label": [1, 0, 0] # 1 - positivo, 0 - negativo
})
# Suddivisione dei dati in set di addestramento e test
train_texts, test_texts, train_labels, test_labels = train_test_split(
data["text"], data["label"], test_size=0.2
)
# Caricamento del tokenizzatore e del modello
model_name = "distilbert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
# Tokenizzazione dei dati
train_encodings = tokenizer(list(train_texts), truncation=True, padding=True)
test_encodings = tokenizer(list(test_texts), truncation=True, padding=True)
# Classe per la gestione dei dati
class SentimentDataset(torch.utils.data.Dataset):
def __init__(self, encodings, labels):
self.encodings = encodings
self.labels = labels
def __getitem__(self, idx):
item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}
item["labels"] = torch.tensor(self.labels[idx])
return item
def __len__(self):
return len(self.labels)
train_dataset = SentimentDataset(train_encodings, train_labels)
test_dataset = SentimentDataset(test_encodings, test_labels)
# Impostazioni di addestramento
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=16,
per_device_eval_batch_size=64,
warmup_steps=500,
weight_decay=0.01,
logging_dir="./logs",
logging_steps=10,
)
# Addestramento del modello
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=test_dataset
)
trainer.train()
Implementazione del modello
Dopo aver addestrato il modello, possiamo salvarlo e utilizzarlo per l'analisi del sentiment:
model.save_pretrained("./custom_sentiment_model")
tokenizer.save_pretrained("./custom_sentiment_model")
# Caricamento del modello personalizzato
custom_model = AutoModelForSequenceClassification.from_pretrained("./custom_sentiment_model")
custom_tokenizer = AutoTokenizer.from_pretrained("./custom_sentiment_model")
# Esempio di analisi
custom_pipeline = pipeline("sentiment-analysis", model=custom_model, tokenizer=custom_tokenizer)
print(custom_pipeline("Questo prodotto è fantastico!"))
Conclusione
In questo articolo, abbiamo mostrato come costruire il proprio strumento di analisi del sentiment utilizzando grandi modelli linguistici. Passo dopo passo, abbiamo discusso la scelta del modello, la preparazione dei dati, l'analisi del sentiment e l'adattamento del modello alle nostre esigenze. Grazie a questo strumento, possiamo analizzare efficacemente il tono emotivo dei testi in vari settori.