Applicazioni pratiche di deep learning/Riconoscimento recensioni positive Amazon
Caricamento librerie:
modifica!pip install -q datasets transformers
Parte 1: Dati
modificaPer identificare le tendenze dei clienti di Amazon nel marketing è utile fare il sentiment analysis o analisi del sentimento utilizzando le recenzioni dei prodotti e valutare quante e quali sono positive e/o negative . Hugging Face possiede il dataset amazon_polarity contenente 35 milioni di recensioni fino a marzo 2013 in 18 anni contenente per ogni osservazione 3 variabili : title (titolo della recensione), content (testo della recensione) e label che può assumere 2 valori : 1=positiva , 0=negativa . Il dataset è suddiviso in 2 parti : train e test
Parte 2: Domanda di ricerca
modificaSi vuole calcolare l'Accuracy o accuratezza previsionale nel determinare se una recensione è positiva o negativa, utilizzando il modello di deep learning distilbert-base-uncased-finetuned-sst-2-english che viene usato di default su Hugging Face per il sentiment analysis.
from datasets import get_dataset_split_names
get_dataset_split_names("amazon_polarity")
['train', 'test']
Si importa da Hugging Face il sottoinsieme test di amazon_polarity contenente 400.000 osservazioni.
Caricamento dati:
from datasets import load_dataset
dataset = load_dataset("amazon_polarity", split="test")
dataset
Dataset({ features: ['label', 'title', 'content'], num_rows: 400000 })
La prima osservazione nel dataset:
dataset[0]
{'content': 'My lovely Pat has one of the GREAT voices of her generation. I have listened to this CD for YEARS and I still LOVE IT. When I\'m in a good mood it makes me feel better. A bad mood just evaporates like sugar in the rain. This CD just oozes LIFE. Vocals are jusat STUUNNING and lyrics just kill. One of life\'s hidden gems. This is a desert isle CD in my book. Why she never made it big is just beyond me. Everytime I play this, no matter black, white, young, old, male, female EVERYBODY says one thing "Who was that singing ?"', 'label': 1, 'title': 'Great CD'}
Si estraggono 1000 osservazioni dal dataset relativamente alle variabili content e label:
test_cases = dataset["content"][:1000]
test_labels = dataset["label"][:1000]
Si carica da Hugging Face il modello di default per il sentiment analysis:
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
No model was supplied, defaulted to distilbert-base-uncased-finetuned-sst-2-english (https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english)
Si applica il modello alle 1000 recensioni e la previsione se la recensione è positiva o negativa si carica nel vettore predictions:
predictions = []
for i in range(1000):
output = classifier(test_cases[i])
if output[0]['label'] == 'NEGATIVE':
predictions.append(0)
else:
predictions.append(1)
Si carica la libreria evaluate e la metrica accuracy effettuando il calcolo, per cui l'accuracy previsionale del modello su 1000 recenzioni è del 87,6%:
!pip install evaluate
import evaluate
accuracy_metric = evaluate.load("accuracy")
accuracy_output = accuracy_metric.compute(references=test_labels, predictions=predictions)
print(accuracy_output)
{'accuracy': 0.876}