Aplicación de Minería de Datos a Conjuntos de Textos. Como analizar «twitter» de una manera muy sencilla.

Ago 2, 2012   //   by wpuser   //   Minería de Datos  //  Comentarios desactivados en Aplicación de Minería de Datos a Conjuntos de Textos. Como analizar «twitter» de una manera muy sencilla.

La mayoría de la información relevante en las organizaciones y fuera, estañ en formato no estructurado o texto. Cada vez es mayor la necesidad de realizar análisis sobre texto plano para normalizarlo, y extraer lo relevante de lo abundante. en este post, de una manera muy sencilla, voy a explicar cómo podemos tratar la información desestructurada de una forma muy sencilla, con técnicas de Minería de Datos sobre texto directamente, para extraer conclusiones.

Existen dos tipos de análisis en Lenguaje Natural, y complementarios. Por una parte está el análisis estadístico, que informa sobre la relevancia que tienen ciertas palabras o conceptos (conjuntos de palabras) en los distintos textos, en referncia al propio texto, y al conjunto total.  Esta es una primera aproximación básica, a recuperar lo relevante del conjunto de información. sin embargo, en esta aproximación, no se realiza ningún proceso semántco, es decir, que las máquinas extraen relaciones entre los conceptos en base a su repetición estadística, pero no «comprenden» que relaciones existen entre dichos conceptos, ni se realiza un procesado morfosintactico, para discirmar, por ejemplo, de lo que es un verbo, a un nombre, o aun adjetivo, ni siquiera, en qué contexto se está trabajndo. Quiero decir, que una frase, por ejemplo «pastor alemán», tendrá la misma relevancia en un contexto de oficios, que en un contexto de «razas de animales», aunque, para nosotros, dependiendo de qué hablemos, bien «pastor», o bien «alemán» será más relevante depende de cada caso.

Para este segundo caso necesitamos, o bien, a nivel estadístico, asignar pesos a los conceptos en función del contexto (como se ha comentado en post anteriores ), o bien, necesitamos deifnir las relaciones morfosintácticas y semánticas entre los mismos (como también se ha comentado en otros post anteriores).

En todo caso, en este ejemplo, nos ceñiremos al estudio básico de la información estadística aplicando algoritmos de extracción de información, segmentación y clasificación sobre dichos datos.

Lo primero que tenemos que hacer es recuperar la información, por ejemplo, d etwitter. Para ello, tenemos servicios gratuitos que nos lo suministran, por ejemplo http://otter.topsy.com. A través de este servicio, buscamos un concepto determinado, como puede ser «juegos olímpicos», ya que estamos en ello:

http://otter.topsy.com/searchdate.rss?q=juegos%20ol%C3%ADmpicos&window=d28

A partir de aquí, obtenemos un XML con la información de los últimos twitter al respecto, en el siguiente formato:

 

 

Una vez obtenida dicha información, necesitamos introducirla en nuestro sistema de Minería de Datos, en base a un «lector de XML», o vía Xpath, como «parseador» de la información. voy a utilizar RapidMiner, como plataforma de Minería de Datos para este ejemplo, pero igualmente podríamos utilizar SAS, SPSS, Weka u otras muchas plataformas.

Una vez recogida la información, y dividida en autor, titulo, descripción, etc… tenemos que hacer el siguiente proceso:

Tokenizar: Separar las palabras de las frases o twitters una a una.

Stopwords: Eliminar aquellas palabras no relevantes (como él, la, los, ser, estar, etc…). Para ello, recomiendo usar la lista de stopwords del «stemmer» de  «snowball» en castellano (http://snowball.tartarus.org/algorithms/spanish/stop.txt).

Vectorizar los twitters: Necesitamos convertir cada «twit» en un vector de palabras, es decir,  cada «twit» será un afila en un «excel» en el que la primera columna será el id del texto, y tendrá otras tantas columnas como el conjunto de palabras de todos los textos, y en el valor de la columna, aparecerá  un valor, indicando la relevancia de dicha palabra en ese texto, con respecto a los demás. Esto quiere decir que, por ejemplo, en nuestro caso «juego» o «competición» aparecerá en muchos textos, así que es relevante en el texto, pero no mucho, ya que aparece también en otros textos. Será más relevante. por ejemplo, «esgrima», ya que diferencia los textos referentes a esgrima, de los referentes a «fútbol».  Este algoritmo de llama TF/IDF….

Todo este proceso, se realiza casi de forma automática desde las plataforma de Minería de datos, y obtenemos el siguiente resultado:

Ya tenemos los textos «normalizados» en vectores. Ya podemos hacer un primer análisis de cuáles son las palabras que más aparecen en el conjunto de twitters, aunque no tienen por que ser las más relevantes a la hora de discriminar los diferentes textos:

Pero el «ranking» de palabras nos suministra información, pero podemos avanzar un poco más. Sería interesante saber cómo se organizan esas palabras dentro de los documentos o «twit», es decir, si existen grupos de palabras que se agrupen en distintas categorías que expliquen cómo distintos grupos de personas hablas de temas diferentes, y cuáles son esos temas. ¿Cómo lo hacemos» 

Pues muy sencillo, símplemente tenemos que aplicar un algoritmo de segmentación sobre los distintos vectores, que los agrupe por similitud, y cuando la separación entre los distintos grupos es amplia, el sistema considera que los intereses son diferentes.

Para ello, aplicamos el típico algoritmo de clasificación sobre los vectores de palabras (Clustering with k-medoids):

Lo primero que tenemos que decidir es en cuántos grupos ordenamos el conjunto de vectores. Lo mejor es que sea el propio sistema el que nos los diga, y para ello, necesitamos, de alguna manera, optimizar la información en el menor grupo posible, pero con el mayor porcentaje de confianza de clasificación. Y esto, es un mero problema de optimización, que se rsuleve perfectamente con técnica de Algoritmos Genéticos.

Para ello, aplicamos el operador de Algoritmos Genéticos sobre el conjunto de datos, diciéndole al sistea que minimize la función de segmentar, pero optimizando el número de vectores por grupo.  Aplicando dicho algoritmo, para un máximo de 10 segmentos, el sistema nos sugiere un total de 5 grupos diferentes (k=5), así que aplicamos K-medioids con ese valor.

 

Una vez aplicada la segmentación, nos aparecen 5 grupos cuyos «centroides», o representantes de los mismos son los siguientes:

Todavía los sistemas no pueden dar nombres directos a los conjuntos de tags automáticamente (si tuviésemos una ontología adhoc, sería sencillo, lo hablaremos en post a futuro), pero parece ser que el «cluster_0» habla de las publicaciones de temas publicados por «EL País», y muy generalistas,  el «cluster_1» de los atletas venezolanos, y algún evento importante que ocurrirá a la mañana, o mañana (este es el problema de no tener un análisis semántico, por cierto, felicidades a Venezuela por su oro en esgrima), el «cluster_2» de temas relacionados con la inauguración del evento,   y el «cluster_3«, más enfocado a cifras y ratios que a otros menesteres, y el «cluster_4«, de retransmisiones e imágenes.

De esta forma, vemos que en Twitter, se está hablando, acerca de los Juegos Olímpicos, en 5 categorías diferentes, con temáticas diferentes. A partir de aquí, podemos sacar las estadísticas y gráficas que queramos. Por ejemplo:

  • ¿De qué se habla más?:  Curiosamente, de ratios y cifras (relacionados con la afluencia a los juegos) , seguido del cluster_2 (sobre la inauguración y un canal en twitter relacionado), y en tercer lugar, el cluster_0 más generalistas (racismo, sexo, transparencia….),

 

¿Quién habla de qué? Podríamos saber cada Autor, a que grupos pertenece, y de qué está hablando. El País, de lo suyo, noticias24.com, en general, de temas de ratios y Venezuela, twitter, muy enfocado a la inaguración a su canal oficial de Los Juegos, etc….

 

¿Cuando se habla de qué?, Ver una línea temporal sobre los conjuntos de intereses, los Autores y cuándo publican:

En definitiva, hemos transformado un proceso aparentemente muy complejo de tratamiento de textos en lenguaje natural, a un formato vectorizado que nos permite realizar cualquier operación de análisis, comparación, clasificación e incluso predicción.

¿Podríamos saber, en base a un texto dado, cuál sería su autor, o a qué categoría pertenecería?

Pues evidentemente, sí:  solo tenemos que aplicar a los mismos vectores un algoritmo de clasificación (árboles de decisión, por ejemplo, para que podamos comprender las conclusiones, y aplicar a nuevos textos el modelo de árlbol (como procesamos millones de documentos con nuestra aplicación DocThor) :

 

Este es un ejemplo simple de cómo, aplicando algoritmos muy maduros sobre, a priori, problemas complejos, podemos dar solución a necesidades reales actuales. Espero que os haya gustado.

 

Comments are closed.