Analizando comentarios, noticias o twits

Cada vez son más los servicios que ofrecen los distintos proveedores de aplicaciones en la nube. Algunas de ellas disponen de aplicaciones en el mundo analítico que no hace tanto hubiéramos catalogado de ciencia ficción y parte de ellas resultan hoy útiles y pronto serán imprescindibles.

Por ejemplo, no hace tanto que las pocas métricas que se recopilaban en el entorno de la publicación online por parte de las empresas era la de número de visitas, usuarios únicos, páginas vistas, … Poco a poco se han ido incorporando otros servicios: Facebook, Twitter, etc., donde las métricas deben ser muy distintas.

Siempre ha sido necesario conocer el nivel de reputación de una marca, hoy con las redes sociales, saber si los comentarios respecto de nuestra empresa o producto son positivos o negativos no es difícil ni caro. Contar el número de seguidores en una cuenta de una red social no es suficiente.

Tanto Google como Microsoft disponen de un servicio no muy complejo que permite realizar diferentes análisis a partir de un texto, por ejemplo con Text Analytics de Microsoft (que pertenece a la familia de servicios Cognitive Services) podemos saber en que lengua se escribió un comentario, podemos extraer las palabras clave por si nos son de ayuda y también nos da un análisis de sentimiento que evalúa el texto entre 0 y 1 según sea considerado como negativo o positivo, sabiendo así si están hablando bien o no de nosotros sin tener que revisar cientos o miles de comentarios, twits o entradas de Facebook.

En la documentación de Power BI se explica una forma de hacerlo mediante unos ejemplos simples. También podéis recurrir al conector personalizado que realizó Chris Webb y que documentó en su blog. También existen plantillas específicas para poder recuperar información y procesarla sin mayores conocimientos técnicos desde Facebook, Twitter, o bien desde las noticias de Bing.

Podéis ver como funciona este servicio con vuestras propias frases. Para poder acceder al servicio es necesario disponer de una cuenta en Azure, también es posible obtener una cuenta con créditos gratuitos para realizar pruebas en el mismo portal.

Ejemplo

Vamos a realizar un ejemplo simple, que requiere de algún conocimiento avanzado de Power Query aunque intentaré que sea comprensible para todo el mundo. Este ejemplo no cumple las expectativas de todos los casos posibles y tan solo pretende ilustrar el funcionamiento de este tipo de datos. El ejemplo está basado en la documentación de Azure y realiza una petición por cada texto encontrado en la tabla, Con alguna variación también podría hacerse enviando la tabla completa puesto que la API admite hasta 1000 peticiones de una sola vez, como podéis ver en el ejemplo del vídeo de Paula Guilfoyle.

Partiremos de un archivo de Excel y pretendemos conocer si los textos que contiene la tabla (alrededor de 30) son más bien positivos o negativos. Antes de empezar el código debemos asegurarnos que Power BI no nos pondrá pegas a nivel de privacidad, para ello debemos ir a “Archivo”, “Opciones y configuración”, “Opciones”, buscamos “Privacidad” y activamos la opción “Omitir siempre la configuración de nivel de privacidad”.

Para poder disponer de acceso a la valoración necesitaremos un acceso al Azure Text Analytics, que aunque es un servicio de pago permite hasta 1.000 peticiones mensuales gratuitas. Es necesario disponer de una cuenta (sin coste) en Azure , añadir un nuevo servicio de “Text Analytics API” y una vez creado copiar una de las claves.

En Power BI Desktop importamos el archivo de Excel y así ya disponemos de la tabla “Frases” que contiene los textos que serán analizados. Pulsamos sobre “Parámetro nuevo” dentro de “Administrar parámetros”. Al parámetro le ponemos por nombre “ClaveAPI” y al valor le pegamos la clave de la API obtenida en el paso anterior.

Para hacer una valoración es conveniente saber el idioma con el que está escrito el texto a analizar. Aunque el sistema dispone de una detección automática del lenguaje, en nuestro caso realizaremos una función explícita para que nos de primero el idioma para luego pasar este parámetro a la función de valoración del sentimiento.

Para ello vamos a “Nuevo origen” y pulsamos “Consulta en blanco” y “Editor avanzado”

En la ventana de edición escribiremos el siguiente código

(text) => let
    apikey      = ClaveAPI,
    endpoint    = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/languages",
    jsontext    = Text.FromBinary(Json.FromValue(Text.Start(Text.Trim(text), 5000))),
    jsonbody    = "{ documents: [ { language: ""en"", id: ""0"", text: " & jsontext & " } ] }",
    bytesbody   = Text.ToBinary(jsonbody),
    headers     = [#"Ocp-Apim-Subscription-Key" = apikey],
    bytesresp   = Web.Contents(endpoint, [Headers=headers, Content=bytesbody]),
    jsonresp    = Json.Document(bytesresp),
    language    = jsonresp[documents]{0}[detectedLanguages]{0}[iso6391Name]
in  language

Renombramos la función a “IdentificaIdioma”

Esta función espera un texto de entrada y devuelve el idioma en formato ISO 639-1, es decir “es” para español, “en” para inglés, “de” para alemán, etc.

Ahora crearemos una función que realice la valoración de cada frase importada. Para ello repetimos  “Nuevo origen” y pulsamos “Consulta en blanco” y “Editor avanzado”

En la ventana de edición escribiremos el siguiente código

(text) => let
 apikey = ClaveAPI,
 idioma = IdentificaIdioma(text),
 endpoint = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment",
 jsontext = Text.FromBinary(Json.FromValue(Text.Start(Text.Trim(text), 5000))),
 jsonbody = "{ documents: [ { language: """ & idioma & """, id: ""0"", text: " & jsontext & " } ] }",
 bytesbody = Text.ToBinary(jsonbody),
 headers = [#"Ocp-Apim-Subscription-Key" = apikey],
 bytesresp = Web.Contents(endpoint, [Headers=headers, Content=bytesbody]),
 jsonresp = Json.Document(bytesresp),
 sentiment = jsonresp[documents]{0}[score]
in sentiment

Renombramos la consulta que hemos acabado de realizar a “RecogeValoracionTexto”.

Ahora duplicamos la tabla “Frases”. Para ello nos valemos de la opción “Duplicar” del menú contextual.

Por defecto la nueva tabla tiene el nombre “Frases (2)”. Hacemos un click en ella

Para hacer la valoración de sentimiento añadiremos una columna que llame a la función previamente creada. Para ello vamos al apartado del menú “Agregar columna”, pulsamos sobre “Invocar función personalizada” y lo dejamos como la siguiente imagen.

Al pulsar “Aceptar” a los pocos segundos deberá aparecer la nueva columna con la valoración efectuada en cada línea de texto.

Al aplicar los cambios ya tenemos las valoraciones disponibles para realizar los informes que deseemos. Puede que sea mejor para la lectura, cambiar el tipo de datos de la “Valoración” a decimal y con formato porcentaje.

Text Analytics utiliza un motor de “Machine Learning” con algoritmos de clasificación y no es infalible. Deberemos tener en cuenta que no todos los textos deben tener obligatoriamente connotaciones positivas o negativas, así que dependiendo de la tipología del texto podemos acotar las valoraciones neutras entre el 40 y 60% o bien aumentar o disminuir el rango. En el archivo de ejemplo hay frases aleatorias, unas cortas, otras largas, unas claramente negativas y otras de neutras extraídas de Twitter o de titulares de prensa. En estas circunstancias uno debe esperar lo siguiente:

  • “Un hombre atracó una farmacia”. Esperamos una puntuación negativa (realizó un atraco)
  • “Un detenido por el atraco a una farmacia”. Esperamos una puntuación positiva (lo detuvieron).

Pues Text Analytics se muestra dubitativo otorgando valoraciones de 0,56 y 0,52 a las frases anteriores.

En el ejemplo de comentarios específicos:

  • “Este producto es genial, lo recomiendo a todo el mundo”. Claramente positivo
  • “Este producto es una porquería, deberían retirarlo del mercado”. Claramente negativo

Aquí Text Analytics no tiene dudas otorgando un 1 al comentario positivo y 0,15 al segundo.

Resumen

Text Analytics realiza una valoración de las “emoción” del significado de una frase. Por ello, suponemos que debido al tipo de entrenamiento sometido al algoritmo de clasificación utilizado, no es siempre válido para otro tipo de frases como pueden ser titulares de prensa.

Incorporar esta técnica a Power BI es bastante simple pues en un par de horas uno puede comprender su funcionamiento y poner en práctica un modelo que probablemente será de mucha utilidad para empresas de ciento tamaño preocupados por los comentarios y su reputación en blogs, foros o redes sociales y que tras esa primera pequeña inversión en tiempo podrán realizar informes con información actualizada de forma instantánea.

Además de Text Analytics de Microsoft, existen otros servicios, de otros proveedores, que nos pueden ayudar en esta tarea o en otras afines y en los que también podemos valernos de las capacidades de Power BI para recoger los resultados.

 

 

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *