Mayo de 2018

Volumen 33, número 5

Inteligencia artificial: Análisis de sentimiento de textos

Por Frank La La

Frank La VigneUno de los truisms del mundo moderno controladas por datos es que continuó aumentando el progreso y el volumen de datos. Vemos más datos generan cada día que nunca en el historial de usuario. Y ningún destino es este un rápido crecimiento más evidente que en el mundo de los medios sociales, donde los usuarios generan contenido en una escala inimaginable. Twitter de los usuarios, por ejemplo, colectivamente mandar aproximadamente 6.000 tweets cada segundo, según el sitio Internet Live estadísticas de seguimiento (internetlivestats.com/twitter-estadísticas). En ese caso, hay unos 350.000 tweets enviados por minuto, tweets 500 millones al día y tweets aproximadamente 200 millones por año. Mantenerse al día con este flujo de datos para evaluar el contenido sería imposible incluso para los equipos más grandes, simplemente no se pudo contratar personal suficiente para examinar Twitter para evaluar la opinión de su usuario base en un momento dado.

Afortunadamente, el caso de uso para analizar cada tweet sería un caso extremo. Hay, sin embargo, los motivos empresariales válido para las opiniones de seguimiento, ya sea en un tema específico, el término de búsqueda o hashtag. Aunque esto reduce el número de tweets para analizar de forma significativa, el gran volumen de los datos que se va a analizar todavía resulta poco práctico para analizar los mensajes de la tweets de ninguna manera coherente.

Por suerte, analizar la opinión general de texto es un proceso que se puede automatizar fácilmente mediante el análisis de opiniones. Análisis de opiniones es el proceso de cálculo clasificar y categorizar opiniones expresadas en texto para determinar si la actitud expresada en muestra un tono positivo, negativo o neutral. En resumen, el proceso se puede automatizar y destilado a una puntuación matemática que indica tono y subjetividad.

Configurar un bloc de notas de Azure

En febrero (msdn.com/magazine/mt829269), tratan en blocs de notas de Jupyter de detalle y los entornos en los que se pueden ejecutar. Aunque cualquier entorno de Python 3 puede ejecutar el código de este artículo, por simplicidad, deberá usar Azure blocs de notas. Busque en el sitio de Web de servicios de Azure blocs de notas en notebooks.azure.com e inicie sesión con sus credenciales de ID de Microsoft. Crear una nueva biblioteca con el nombre artificialmente inteligente. En el campo de Id. de biblioteca, escriba "ArtificiallyIntelligent" y haga clic en crear. En la siguiente página, haga clic en nuevo para crear un nuevo bloc de notas. Escriba un nombre en el cuadro de texto Nombre del elemento, elija el Bloc de notas de Python 3.6 en la lista desplegable de tipo de elemento y haga clic en nuevo (figura 1).

Crear un nuevo bloc de notas con un núcleo de Python 3.6
Figura 1 crear un nuevo bloc de notas con un núcleo de Python 3.6

Haga clic en el Bloc de notas recién creado y espere a que el servicio para conectarse a un núcleo.

Análisis de opiniones en Python

Una vez preparado el Bloc de notas, escriba el código siguiente en la celda vacía y ejecutar el código de la celda.

from textblob import TextBlob
simple_text = TextBlob("Today is a good day for a picnic.")
print(simple_text.sentiment)

Los resultados que aparecen será similar al siguiente:

Sentiment(polarity=0.7, subjectivity=0.6000000000000001)

Polaridad hace referencia a cómo positivo o negativo el tono de las tasas de texto de entrada de -1 a + 1, por -1 son más negativo y + 1 está más positiva. Subjetividad hace referencia a cómo subjetiva las tasas de instrucción de 0 a 1, siendo 1 el alta subjetiva. Con solo tres líneas de código, podría analizar opiniones no solo de un fragmento de texto, sino también su subjetividad. ¿Cómo algo parecido a análisis de opiniones, una vez se consideran complicado, hicimos tan aparentemente simple?

Python disfruta de un ecosistema de cuenta, especialmente en relación con aprendizaje automático y el procesamiento de lenguaje natural (NLP). El fragmento de código anterior se basa en la biblioteca de TextBlob (textblob.readthedocs.io/en/dev). TextBlob es una biblioteca de código abierto para el procesamiento de datos de texto, proporcionando una API simple para entrar en lenguaje natural común (NLP) las tareas de procesamiento. Estas tareas incluyen análisis de opiniones y mucho más.

En la celda vacía situada debajo de los resultados, escriba el siguiente código y ejecutarlo:

simple_text = TextBlob("the sky is blue.")
print(simple_text.sentiment)

Los resultados de estado que la frase "el cielo es azul" tiene una polarización de 0,0 y un aspecto subjetivo de 0,1. Esto significa que el texto es neutro en tono y puntuaciones bajas en subjetividad. En la celda en blanco inmediatamente debajo de los resultados, escriba el código siguiente y ejecute la celda:

simple_text1 = TextBlob("I hate snowstorms.")
print(simple_text1.sentiment)
simple_text2 = TextBlob("Bacon is my favorite!")
print(simple_text2.sentiment)

Tenga en cuenta que el algoritmo identificado correctamente que el contenido de simple_text1 tenía una opinión negativo (-0.8) y que la instrucción es bastante subjetiva (0.9). Además, el algoritmo infiere correctamente las opiniones de simple_text2 (0.625) y su naturaleza muy subjetiva (1.0).

Sin embargo, el algoritmo tener dificultades importante analizar los matices más sutiles de idioma. Sarcasm, por ejemplo, no sólo es difícil de detectar, pero puede deshacerse de los resultados. Imagine un escenario donde un restaurante extrae las revisiones de un sitio de la revisión en línea como Yelp y publica automáticamente las revisiones con una opinión positivo en su sitio Web y redes sociales. Escriba el código siguiente en una celda vacía y ejecutarlo:

sample_customer_review1 =
  TextBlob("The burgers at this place will
  make you ill with joy.")
print(sample_customer_review1.sentiment)
sample_customer_review2 =
  TextBlob("Whenever I want to take a sick
  day, I eat here the night before and it is
  always a sure fire win!")
print(sample_customer_review2.sentiment)

Claramente la opinión de estos dos revisiones son negativos. Aunque el algoritmo parece pensar en caso contrario, con las revisiones de puntuación como si tuviera opiniones puntuaciones, 0,15 y 0.26 respectivamente. En este caso, el restaurante es probable que no sería aconsejable cualquiera de estas revisiones resaltadas en cualquier plataforma. Sistemas de procesamiento de lenguaje natural todavía tienen que tome una buena comprensión de sarcasm, aunque no hay una gran cantidad de investigación que se está realizando actualmente en esta área (thesarcasmdetector.com/about).

Conectarse a Twitter

Hasta ahora, sólo he ejecutado pequeños fragmentos de texto mediante el analizador de TextBlob. Un uso más práctico de esta tecnología es pasarlos datos generado por el usuario, lo ideal es que en casi en tiempo real. Afortunadamente, Twitter, con sus usuarios activos de aproximadamente 327 millones (www.statista.com/statistics/282087/number-of-monthly-active-twitter-users), proporciona un flujo constante de texto que se va a analizar.

Para conectarse con la API de Twitter, necesito registrar una aplicación con Twitter para generar las credenciales necesarias. En un explorador, vaya a apps.twitter.com y, si es necesario, inicie sesión con sus credenciales de Twitter. Haga clic en el botón Crear nueva aplicación para abrir el crear un formulario de la aplicación tal y como se muestra en figura 2. Escriba un nombre, descripción y un sitio Web de la aplicación. Para los fines de este artículo, la dirección del sitio Web no importa, por tanto, escriba una dirección URL válida. Haga clic en la casilla de verificación para aceptar los términos del acuerdo para desarrolladores de Twitter y haga clic en el botón de la aplicación de Twitter de crear.

El Twitter Crear formulario de la aplicación
Figura 2 la Twitter Crear formulario de la aplicación

En la pantalla siguiente, busque la clave de consumidor (clave de API) en la sección de configuración de la aplicación. Haga clic en el vínculo en el "administrar claves y tokens de acceso". En la página siguiente, haga clic en crear Mi botón de token de acceso, tal y como se muestra en figura 3, para crear un token de acceso. Tome nota de los siguientes cuatro valores que se muestra en esta página: Clave de consumidor (clave de API), el secreto del consumidor (API de secreto), Token de acceso y obtener acceso a secreto del Token.

Las claves de aplicación de Twitter y pantalla de Tokens de acceso
Figura 3 claves de la aplicación de Twitter y pantalla de Tokens de acceso

Usar Tweepy para leer Tweets

Tweepy es una biblioteca de Python que simplifica la interacción entre el código de Python y la API de Twitter. Puede encontrar más información acerca de Tweepy en docs.tweepy.org/en/v3.5.0. En este momento, vuelva a Jupyter notebook y escriba el código siguiente para instalar la API Tweepy. La marca de exclamación indica a Jupyter para ejecutar un comando en el shell:

!pip install tweepy

Una vez que el código se ejecuta correctamente, leerá el texto de respuesta en la celda: "Instalado correctamente tweepy-3.6.0," aunque puede cambiar el número de versión específico. En la siguiente celda, escriba el código en figura 4 en recién creado, vacía la celda y lo ejecuta.

Figura 4 uso Tweepy para tener acceso a la API de Twitter

import tweepy
consumer_key = "[Insert Consumer Key value]"
consumer_secret = "[Insert Consumer Secret value]"
access_token = "[Insert Access Token value]"
access_token_secret = "[Insert Access Token Secret value]"
authentication_info = tweepy.OAuthHandler(consumer_key, consumer_secret)
authentication_info.set_access_token(access_token, access_token_secret)
twitter_api = tweepy.API(authentication_info)
spacex_tweets = twitter_api.search("#spacex")
for tweet in spacex_tweets:
  print(tweet.text)
  analysis = TextBlob(tweet.text)
  print(analysis.sentiment)

Los resultados que vuelven a estar deben ser similares al siguiente:

#ElonMusk deletes own, #SpaceX and #Tesla Facebook pages after #deletefacebook https://t.co/zKGg4ZM2pi https://t.co/d9YFboUAUj
Sentiment(polarity=0.0, subjectivity=0.0)
RT @loislane28: Wow. did @elonmusk just delete #SpaceX and #Tesla from Facebook? https://t.co/iN4N4zknca
Sentiment(polarity=0.0, subjectivity=0.0)

Tenga en cuenta que mientras el código ejecuta una búsqueda en datos de Twitter de activos, sus resultados variarán sin duda. El formato es un poco confuso para leer. Modificar el para crear un bucle en la celda situada a lo siguiente y, a continuación, vuelva a ejecutar el código.

for tweet in spacex_tweets:
  analysis = TextBlob(tweet.text)
  print('{0} | {1} | {2}'.format(tweet.text, analysis.sentiment.polarity,
    analysis.sentiment.subjectivity))

Agregar caracteres de barra vertical a la salida debe facilitar la lectura. Tenga en cuenta también que dos campos de la propiedad de opinión, polaridad y subjetividad, se pueden mostrar individualmente.

Cargar datos de opinión de Twitter en una trama de datos

El código anterior había creado una lista delimitados por canalización de tweet puntuaciones contenido y opiniones. Una estructura más útil para un análisis más profundo sería una trama de datos. Una trama de datos es una estructura de datos con etiqueta multidimensionales bidireccional. Las columnas pueden contener tipos de valores diferentes. Similar a una hoja de cálculo o una tabla SQL, tramas de datos proporcionan un mecanismo sencillo y familiar para trabajar con conjuntos de datos.

Tramas de datos forman parte de la biblioteca Pandas. Por lo tanto, debe importar la biblioteca de Pandas junto con Numpy. Insertar una celda en blanco debajo de la celda actual, escriba el código siguiente y ejecute:

import pandas as pd
import numpy as np
tweet_list = []
for tweet in spacex_tweets:
  analysis = TextBlob(tweet.text)
  tweet_list.append({'Text': tweet.text, 'Polarity': analysis.sentiment.polarity,
    'Subjectivity':analysis.sentiment.subjectivity })
  tweet_df = pd.DataFrame(tweet_list)   
tweet_df

Los resultados mostrarán ahora en una más fáciles de leer el formato tabular. Sin embargo, que no es todo lo que las tramas de datos puede hacer la biblioteca. Insertar una celda en blanco debajo de la celda actual, escriba el código siguiente y ejecute:

print ("Polarity Stats")
print ("Avg", tweet_df["Polarity"].mean())
print ("Max", tweet_df["Polarity"].max())
print ("Min", tweet_df["Polarity"].min())
print ("Subjectivity Stats")
print ("Avg", tweet_df["Subjectivity"].mean())
print ("Max", tweet_df["Subjectivity"].max())
print ("Min", tweet_df["Subjectivity"].min())

Al cargar los datos de análisis de opiniones tweet en una trama de datos, resulta más sencillo ejecutar y analizar los datos a escala. Sin embargo, estas estadísticas descriptivas simplemente arañar la superficie de la eficacia que proporcionan tramas de datos. Para realizar una exploración más completa de tramas de datos de Pandas en Python, ver la difusión por Web, "Datos de análisis de Python con Pandas," por Jonathan Wood en bit.ly/2urCxQX.

Resumen

Con el progreso y el volumen de datos continúa aumentando, las empresas grandes y pequeñas deben encontrar maneras para aprovechar el aprendizaje automático para dar sentido a los datos y convertirlos en una visión general práctica. Procesamiento de lenguaje natural o procesamiento de lenguaje natural, es una clase de algoritmos que se puede analizar el texto no estructurado y analizarlo en estructuras legible por máquina, dando acceso a uno de los atributos clave de cualquier cuerpo de texto, opiniones. No hace mucho tiempo, esto estaba fuera del alcance de desarrollador medio, pero ahora la biblioteca de TextBlob Python pone esta tecnología para el ecosistema de Python. Mientras que los algoritmos a veces pueden experimentar dificultades con los matices y matices de idioma, que proporcionan una excelente base para realizar la detección de datos no estructurados.

Como se muestra en este artículo, el esfuerzo necesario para analizar un bloque de texto de opinión en cuanto a negatividad o subjetividad determinado ahora es trivial. Gracias a un vibrante ecosistema de Python de bibliotecas de código abierto de terceros, también es fácil de origen de datos desde sitios de redes sociales en vivo, como Twitter y extraer tweets de los usuarios en tiempo real. Otra biblioteca de Python, Pandas, simplifica el proceso para llevar a cabo análisis avanzados en estos datos. Con el análisis exhaustivo, las empresas pueden supervisar las fuentes de medios sociales y obtener conocimientos sobre lo que los clientes se diciendo y compartir información acerca de esto.


Frank La Vigne dirige la práctica de datos y análisis en Wintellect y hospeda en colaboración el podcast DataDriven. Tiene un blog con regularidad en FranksWorld.com y puede observarlo en su canal de YouTube, "De Frank mundo TV" (FranksWorld.TV).

Gracias al siguiente experto técnico por su ayuda en la revisión de este artículo: Andy Leonard


Discuta sobre este artículo en el foro de MSDN Magazine