Tutorial sull'analisi del sentiment

Pubblico

Questo tutorial è pensato per iniziare a esplorare e sviluppare applicazioni con l'API Google Cloud Natural Language. È progettato per persone che hanno familiarità con la programmazione di base, anche se non hai molte conoscenze di programmazione, dovresti essere in grado di seguirlo. Dopo aver seguito questo tutorial, dovresti essere in grado di utilizzare la documentazione di riferimento per creare le tue applicazioni di base.

Questo tutorial illustra un'applicazione API Natural Language utilizzando il codice Python. Lo scopo qui non è spiegare le librerie client Python, ma spiegare come effettuare chiamate all'API Natural Language. Le applicazioni in Java e in Node.js sono sostanzialmente simili. Consulta gli esempi dell'API Natural Language per trovare esempi in altri linguaggi (incluso questo esempio all'interno del tutorial).

Prerequisiti

Questo tutorial ha diversi prerequisiti:

analisi del sentiment del documento

Questo tutorial illustra un'applicazione API Natural Language di base, utilizzando una richiesta analyzeSentiment, che esegue l'analisi del sentiment sul testo. L'analisi del sentiment tenta di determinare l'atteggiamento complessivo (positivo o negativo) ed è rappresentato da valori numerici score e magnitude. Per ulteriori informazioni su questi concetti, consulta Nozioni di base su Natural Language.

Per prima cosa, mostreremo l'intero codice. (Tieni presente che abbiamo rimosso la maggior parte dei commenti da questo codice per mostrarti quanto è breve. Forniremo ulteriori commenti man mano che esamineremo il codice.)

Per ulteriori informazioni sull'installazione e sull'utilizzo della libreria client di Google Cloud Natural Language per Python, vedi Librerie client dell'API Natural Language.
"""Demonstrates how to make a simple call to the Natural Language API."""

import argparse

from google.cloud import language_v1

def print_result(annotations):
    score = annotations.document_sentiment.score
    magnitude = annotations.document_sentiment.magnitude

    for index, sentence in enumerate(annotations.sentences):
        sentence_sentiment = sentence.sentiment.score
        print(f"Sentence {index} has a sentiment score of {sentence_sentiment}")

    print(f"Overall Sentiment: score of {score} with magnitude of {magnitude}")
    return 0

def analyze(movie_review_filename):
    """Run a sentiment analysis request on text within a passed filename."""
    client = language_v1.LanguageServiceClient()

    with open(movie_review_filename) as review_file:
        # Instantiates a plain text document.
        content = review_file.read()

    document = language_v1.Document(
        content=content, type_=language_v1.Document.Type.PLAIN_TEXT
    )
    annotations = client.analyze_sentiment(request={"document": document})

    # Print the results
    print_result(annotations)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter
    )
    parser.add_argument(
        "movie_review_filename",
        help="The filename of the movie review you'd like to analyze.",
    )
    args = parser.parse_args()

    analyze(args.movie_review_filename)

Questa semplice applicazione esegue le seguenti attività:

  • Importa le librerie necessarie per eseguire l'applicazione
  • Recupera un file di testo e lo passa alla funzione main()
  • Legge il file di testo ed effettua una richiesta al servizio
  • Analizza la risposta del servizio e la mostra all'utente

Esamineremo questi passaggi in maggiore dettaglio di seguito.

Importazione delle librerie

Per ulteriori informazioni sull'installazione e sull'utilizzo della libreria client di Google Cloud Natural Language per Python, vedi Librerie client dell'API Natural Language.
import argparse

from google.cloud import language_v1

Importiamo argparse, una libreria standard, per consentire all'applicazione di accettare i nomi file di input come argomenti.

Per utilizzare l'API Cloud Natural Language, sarà necessario importare anche il modulo language dalla libreria google-cloud-language. Il modulo types contiene le classi necessarie per creare le richieste.

Esecuzione dell'applicazione

if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter
    )
    parser.add_argument(
        "movie_review_filename",
        help="The filename of the movie review you'd like to analyze.",
    )
    args = parser.parse_args()

    analyze(args.movie_review_filename)

In questo caso analizziamo semplicemente l'argomento passato per il nome file di testo e lo passiamo alla funzione analyze().

Autenticazione nell'API

Prima di comunicare con il servizio API Natural Language, devi autenticare il servizio utilizzando credenziali acquisite in precedenza. All'interno di un'applicazione, il modo più semplice per ottenere le credenziali è utilizzare le Credenziali predefinite dell'applicazione (ADC). Per impostazione predefinita, ADC tenterà di ottenere le credenziali dal file di ambiente GOOGLE_APPLICATION_CREDENTIALS, che deve essere impostato in modo da puntare al file di chiavi JSON dell'account di servizio. Devi aver configurato l'account di servizio e l'ambiente per l'utilizzo di ADC nella Guida rapida. Per ulteriori informazioni, consulta Configurazione di un account di servizio.

La libreria client di Google Cloud per Python utilizza automaticamente le credenziali predefinite dell'applicazione.

Richiesta

Ora che il servizio API Natural Language è pronto, possiamo accedervi chiamando il metodo analyze_sentiment dell'istanza LanguageServiceClient.

La libreria client incapsula i dettagli relativi alle richieste e alle risposte all'API. Consulta la pagina Riferimento API Natural Language per informazioni complete sulla struttura specifica di questa richiesta.

Per ulteriori informazioni sull'installazione e sull'utilizzo della libreria client di Google Cloud Natural Language per Python, vedi Librerie client dell'API Natural Language.
def analyze(movie_review_filename):
    """Run a sentiment analysis request on text within a passed filename."""
    client = language_v1.LanguageServiceClient()

    with open(movie_review_filename) as review_file:
        # Instantiates a plain text document.
        content = review_file.read()

    document = language_v1.Document(
        content=content, type_=language_v1.Document.Type.PLAIN_TEXT
    )
    annotations = client.analyze_sentiment(request={"document": document})

    # Print the results
    print_result(annotations)

Questo snippet di codice esegue le seguenti attività:

  1. Crea un'istanza di un'istanza LanguageServiceClient come client.
  2. Legge il nome file contenente i dati di testo in una variabile.
  3. Crea un'istanza di un oggetto Document con i contenuti del file.
  4. Chiama il metodo analyze_sentiment del cliente.

Analisi della risposta

def print_result(annotations):
    score = annotations.document_sentiment.score
    magnitude = annotations.document_sentiment.magnitude

    for index, sentence in enumerate(annotations.sentences):
        sentence_sentiment = sentence.sentiment.score
        print(f"Sentence {index} has a sentiment score of {sentence_sentiment}")

    print(f"Overall Sentiment: score of {score} with magnitude of {magnitude}")
    return 0

Esaminiamo la risposta per estrarre i valori del sentiment score per ogni frase, i valori complessivi score e magnitude per l'intera recensione e li mostriamo all'utente.

esegui l'esempio

Per eseguire l'anteprima, lo testeremo su una serie di recensioni di film (fasulli) per il film "Bladerunner".

  1. Scarica gli esempi da Google Cloud Storage:

    gsutil cp gs://cloud-samples-tests/natural-language/sentiment-samples.tgz .
    

    In genere gsutil viene installato come parte di gcloud CLI. Per installare la versione più recente di gcloud CLI, consulta la documentazione di gcloud CLI.

  2. Decomprimi questi esempi, in modo da creare una cartella "reviews":

    gunzip sentiment-samples.tgz
    tar -xvf sentiment-samples.tar
    
  3. Esegui la nostra analisi del sentiment su uno dei file specificati:

    python sentiment_analysis.py reviews/bladerunner-pos.txt
    Sentence 0 has a sentiment score of 0.8
    Sentence 1 has a sentiment score of 0.9
    Sentence 2 has a sentiment score of 0.8
    Sentence 3 has a sentiment score of 0.2
    Sentence 4 has a sentiment score of 0.1
    Sentence 5 has a sentiment score of 0.4
    Sentence 6 has a sentiment score of 0.3
    Sentence 7 has a sentiment score of 0.4
    Sentence 8 has a sentiment score of 0.2
    Sentence 9 has a sentiment score of 0.9
    Overall Sentiment: score of 0.5 with magnitude of 5.5
    

L'esempio riportato sopra indica una recensione relativamente positiva (punteggio 0.5) e relativamente emotiva (magnitudine 5.5).

L'esecuzione dell'analisi sugli altri esempi dovrebbe produrre valori simili a quelli mostrati di seguito:

python sentiment_analysis.py reviews/bladerunner-neg.txt
...
Overall Sentiment: score of -0.6 with magnitude of 3.3

python sentiment_analysis.py reviews/bladerunner-mixed.txt
...
Overall Sentiment: score of 0 with magnitude of 4.7

python sentiment_analysis.py reviews/bladerunner-neutral.txt
...
Overall Sentiment: score of -0.1 with magnitude of 1.8

Tieni presente che le dimensioni sono tutte simili (indicando una quantità relativamente uguale di sentiment emotivamente significativo), tranne il caso "neutro", che indica una recensione con un sentiment emotivo non molto emotivo, positivo o negativo. Per ulteriori informazioni su punteggi e grandezza del sentiment e su come interpretare questi valori, consulta Interpretazione dei valori dell'analisi del sentiment.

Se vuoi esplorare l'analisi del sentiment con più dati, Stanford fornisce un set di dati relativo alle recensioni dei film di IMDB. Per recuperare queste recensioni di film:

  1. Scarica il set di dati relativo alle recensioni di film di grandi dimensioni.
  2. Decomprimi il file nella tua directory di lavoro. Le recensioni dei film sono suddivise in directory pos e neg all'interno delle directory di dati train e test, in cui ogni file di testo contiene una recensione del film.
  3. Esegui lo strumento sentiment_analysis.py su qualsiasi file di testo delle recensioni dei film.

Complimenti! Hai eseguito le prime attività di inferenza utilizzando l'API Google Cloud Natural Language.