Applicazioni pratiche di deep learning/Riconoscimento recensioni positive Amazon

Caricamento librerie:

modifica
!pip install -q datasets transformers

Parte 1: Dati

modifica

Per 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

modifica

Si 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}