Instructivo de análisis de opiniones

Público

Este instructivo está diseñado para que comiences a explorar y desarrollar aplicaciones rápidamente con la API de Google Cloud Natural Language. Está pensado para los usuarios familiarizados con la programación básica, aunque deberías poder entenderlo sin tener muchos conocimientos sobre programación. Una vez que completes este instructivo, debería poder usar la Documentación de referencia para crear tus propias aplicaciones básicas.

En este instructivo se explica paso a paso cómo crear una aplicación con la API de Natural Language con el código de Python. La finalidad no es explicar las bibliotecas cliente de Python, sino cómo hacer llamadas a la API de Natural Language. En esencia, las aplicaciones en Java y Node.js son similares. Consulta las Aplicaciones de muestra de la API de Natural Language para ver muestras en otros lenguajes (incluida la muestra de este instructivo).

Requisitos previos

Este instructivo tiene varios requisitos previos:

Analiza opiniones en documentos

En este instructivo, se explica una aplicación básica de la API de Natural Language, mediante una solicitud analyzeSentiment que realiza análisis de opiniones en textos. El análisis de opiniones intenta determinar la actitud general (positiva o negativa) y se representa mediante valores numéricos de score y magnitude (para obtener más información sobre estos conceptos, consulta Conceptos básicos de Natural Language).

Te mostraremos el código completo primero. (Ten en cuenta que quitamos la mayoría de los comentarios de este código para mostrarte lo breve que es. Proporcionaremos más comentarios a medida que repasemos el código).

Para obtener más información sobre cómo instalar y usar la biblioteca cliente de Google Cloud Natural Language para Python, consulta las bibliotecas cliente de la API de 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)

Esta aplicación simple ejecuta las siguientes tareas:

  • Importa las bibliotecas necesarias para ejecutar la aplicación.
  • Toma un archivo de texto y lo pasa a la función main().
  • Lee el archivo de texto y realiza una solicitud al servicio.
  • Analiza la respuesta del servicio y se lo muestra al usuario.

Repasaremos estos pasos con más detalle a continuación.

Importa bibliotecas

Para obtener más información sobre cómo instalar y usar la biblioteca cliente de Google Cloud Natural Language para Python, consulta Bibliotecas cliente de la API de Natural Language.
import argparse

from google.cloud import language_v1

Importamos argparse, una biblioteca estándar, para permitir que la aplicación acepte nombres de archivos de entrada como argumentos.

Para usar la API de Cloud Natural Language, también debes importar el módulo language de la biblioteca google-cloud-language. El módulo types contiene clases que son necesarias para crear solicitudes.

Ejecuta tu aplicación

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)

Aquí, simplemente analizamos el argumento que se pasó para el nombre de archivo de texto y lo pasamos a la función analyze().

Autenticación de la API

Antes de comunicarse con el servicio de API de Natural Language, debes autenticar su servicio con las credenciales adquiridas previamente. Dentro de una aplicación, la manera más simple de obtener credenciales es usar las credenciales predeterminadas de la aplicación (ADC). De forma predeterminada, las ADC intentarán obtener credenciales del archivo de entorno GOOGLE_APPLICATION_CREDENTIALS, el cual debe configurarse para que apunte al archivo de claves JSON de tu cuenta de servicio. (Debes haber configurado tu cuenta de servicio y tu entorno para usar las ADC en la Guía de inicio rápido. Consulta Configurar una cuenta de servicio para obtener más información).

La biblioteca cliente de Google Cloud para Python utiliza automáticamente las credenciales predeterminadas de la aplicación.

Realiza la solicitud

Una vez que el servicio de la API de Natural Language está listo, podemos acceder al servicio mediante una llamada al método analyze_sentiment de la instancia LanguageServiceClient.

La biblioteca cliente encapsula los detalles para las solicitudes y respuestas a la API. Consulta la referencia de la API de Natural Language para obtener información completa sobre la estructura específica de esta solicitud.

Para obtener más información sobre cómo instalar y usar la biblioteca cliente de Google Cloud Natural Language para Python, consulta Bibliotecas cliente de la API de 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)

Este fragmento de código realiza las siguientes tareas:

  1. Crea una instancia de LanguageServiceClient como cliente.
  2. Lee el nombre de archivo que contiene los datos de texto en una variable.
  3. Crea una instancia de un objeto Document con el contenido del archivo.
  4. Llama al método analyze_sentiment del cliente.

Analiza la respuesta

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

Repasamos la respuesta para extraer el valor score de las opiniones para cada oración, y los valores score y magnitude generales para toda la revisión, y se los muestra al usuario.

Ejecuta la muestra

Para ejecutar la muestra, la probamos en un conjunto de reseñas (falsas) de la película "Bladerunner".

  1. Descarga las muestras desde Google Cloud Storage:

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

    Por lo general, gsutil se instala como parte de la CLI de gcloud. Para instalar la última versión de la CLI de gcloud, consulta la documentación de la CLI de gcloud.

  2. Descomprime las muestras, lo cual creará la carpeta "reseñas":

    gunzip sentiment-samples.tgz
    tar -xvf sentiment-samples.tar
    
  3. Ejecuta nuestro análisis de opiniones en uno de los archivos especificados:

    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
    

El ejemplo anterior indicaría que una reseña fue, relativamente, positiva (puntuación de 0.5) y emotiva (magnitud de 5.5).

La ejecución del análisis en los otros ejemplos debería producir valores similares a los que se muestran a continuación:

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

Ten en cuenta que todas las magnitudes son similares (lo que indica una cantidad relativamente similar de opiniones emocionalmente significativas), excepto en el caso "neutro", que indica una reseña con poca opinión emotiva, ya sea positiva o negativa. (Para obtener más información sobre las puntuaciones y magnitud de las opiniones, y cómo interpretar esos valores, consulta Interpretar los valores de análisis de opiniones).

Si deseas explorar el análisis de opiniones con más datos, Stanford proporciona un conjunto de datos de reseñas de películas de IMDB. Para recuperar estas reseñas de películas:

  1. Descarga el conjunto de datos de Large Movie Review.
  2. Descomprime el archivo en tu directorio de trabajo. Las reseñas de películas se dividen en los directorios pos y neg, dentro de los directorios de datos train y test, y cada archivo de texto contiene una reseña de película.
  3. Ejecuta la herramienta sentiment_analysis.py en cualquiera de los archivos de texto de reseñas de películas.

¡Felicitaciones! ¡Has realizado tus primeras tareas de inferencia usando la API de Google Cloud Natural Language!