El análisis de sentimientos es una tarea de clasificación de textos y tiene múltiples usos. Supongamos que se tienen las siguientes criticas sobre una película:
- Decepcionante.
- Aburrida.
- Personajes memorables y bien desarrollados.
- Una gran puesta en escena que no defraudará.
- Increíblemente predecible.
Podemos intentar aplicar este tipo de análisis a productos, tomemos, por ejemplo, una impresora y algunos aspectos de esta como:
- velocidad de impresión
- precio
- facilidad de uso
- soporte al cliente
- etc.
Pero el análisis de sentimientos puede ser usado para cosas más complejas que la clasificación de opiniones sobre productos o películas. Se lo ha utilizado, por ejemplo, para estimar la "confianza del consumidor". Según Wikipedia:
"La confianza del consumidor es un indicador económico que mide el grado de optimismo que los consumidores sienten sobre el estado general de la economía y sobre su situación financiera personal. Qué tan seguras se sienten las personas sobre la estabilidad de sus ingresos determina sus actividades de consumo y por lo tanto sirve como uno de los indicadores claves en la forma general de la economía."
¿Cómo fue posible usar el análisis de sentimientos par calcular este indicador? A través de Twitter, tomando los sentimientos de las personas en general, y puntuándolos en un rango de valores. El gráfico obtenido a través del tiempo fue cotejado con el gráfico de una encuesta realizada por la empresa estadounidense Gallup.
Si aún no están convencidos de que el análisis de sentimientos combinado con Twitter es una herramienta poderosa, déjenme decirles que incluso ha sido utilizado para predecir el mercado de valores [1]. En este experimento se utilizaron dos herramientas para el seguimiento de estados de ánimo:
- OpinionFinder que mide opinión negativa versus opinión positiva y
- Google-Profile of Mood States (perfil Google de estados de ánimo) que mide el humor en termino de 6 dimensiones: calmado, alerta, seguro, vital, amable y feliz.
Se descubrió, entre otras cosas, que "la calma" podía predecir el Índice Dow Jones con 3 días de anticipación [1]:
Afortunadamente ya existen varias aplicaciones que rápidamente nos permiten hacer análisis de sentimientos en Twitter sobre un tópico cualquiera, por ejemplo: Sentiment140
Pueden encontrar recomendaciones sobre herramientas similares en este blog:
El análisis de sentimientos es conocido también con otros nombres:
- Extracción de opinión (opinion extraction)
- Minería de opiniones (opinion mining.)
- Minería de sentimientos (sentiment mining, )
- Análisis de subjetividad (subjectivity analysis)
Entonces, ¿para qué podemos utilizar el análisis de sentimientos?
• Películas: ¿Es esta critica positiva o negativa?
• Productos: ¿Qué piensa la gente del nuevo iPhone?
• Sentimientos públicos: ¿Cómo es la confianza del consumidor?, ¿crece de forma impar? , etc.
• Política: ¿Qué piensa la gente acerca de este candidato o de esta situación?
• Predicción: predecir el resultado de una elección o una tendencia de mercado a partir de los sentimientos.
Tipología de Scherer de los estados afectivos:
El psicólogo Klaus Scherer, definió la siguiente tipología de estados afectivos :
Emoción: Respuesta relativamente corta del organismo a estímulos externos. Ejemplos de emoción son la ira, la tristeza, la alegría, el miedo, la vergüenza, el orgullo, la alegría y la desesperación.
Estado de ánimo: sentimiento subjetivo de baja intensidad y larga duración. Ejemplos de estados de ánimo : alegre, triste, irritable, apático.
postura interpersonal: posición afectiva respecto a otra persona en una interacción especifica. Ejemplos de posturas interpersonales son: distante, frío, cálido, de apoyo y de desprecio.
Actitudes: preferencia o predisposición de una persona respecto a otras personas u objetos. Ejemplos de actitudes son: simpatía, amor, odio, deseo y valoración.
Rasgos de personalidad: tendencias en el comportamiento típico de una persona. Ejemplo de rasgos de personalidad: nervioso, ansioso, imprudente, taciturno, hostil, envidioso y celoso.
Cuando se realiza análisis de sentimientos, en verdad lo que se está haciendo es detectando actitudes, es decir se está detectando la "preferencia o predisposición de una persona respecto a otras personas u objetos"
Y en particular algunos (o todos) de los siguientes elementos de la actitud:
1. El portador de dicha actitud
2. El destinatario de dicha actitud.
3. El tipo de actitud:
- de un conjunto de actitudes candidatas: simpatía, amor, odio, deseo y valoración.
- o más comúnmente una polaridad ponderada: positiva, negativa o neutral (y a veces un valor)
4. El texto que contiene la actitud (documento u oración)
Resumen
- Una tarea sencilla de análisis de sentimientos consiste en:
- determinar si la actitud de un texto es positiva o negativa
- Una tarea un poco más compleja de análisis de sentimientos consiste en:
- puntuar la actitud de un texto de 1 a 5.
- Una tarea realmente avanzada de análisis de sentimientos consiste en:
- detectar el portador, el destinatario y el tipo de actitud de un texto.
Referencias:
[1] BOLLEN, Johan; MAO, Huina; ZENG, Xiaojun. Twitter mood predicts the stock market. Journal of Computational Science, 2011, vol. 2, no 1, p. 1-8.
Hola Juan Manuel, muy bien explicado, tenia una consulta, pues voy a realizar mi proyecto de tesis (estudio ingeniería de sistemas), y estaba pensando en plantear una aplicación web que me permita visualizar un histograma comparando las menciones a los virtuales candidatos a la presidencia de mi país (Perú) y que además permita visualizar la polaridad de cada tweet, tengo pensado desarrollarlo en django, que tan factible crees que sea hacerlo en django?, muchas gracias de antemano, cualquier sugerencia me sería de mucha ayuda
ResponderEliminarHola Jorge David, muchas gracias por tu comentario. Antes que nada dejame decirte que escogiste un excelente tema para tu proyecto de Tesis, el Análisis de Sentimientos es un tema muy interesante y está en boga.
EliminarNo estoy familiarizado con django, sé que es un framework que trabaja con Python, así que lo primero que voy a hacer es recomendarte una herramienta para trabajar con PLN en Python: NLTK: http://www.nltk.org/.
De todas formas, tal y como yo lo veo tenes 2 proyectos (corregime si me equivoco): un proyecto es el que tendrá la responsabilidad de consumir los datos de Twitter, analizarlos y dejar la información obtenida en una base de datos. Este proyecto se puede realizar con Python y NLTK o con cualquier otra tecnología que sea de tu interés.
El otro proyecto sería una aplicación web, esta sí realizada con django y cuya finalidad sería mostrar los datos existentes en la base de datos anterior.
No sé si esta arquitectura es válida para tu proyecto, pero tal vez simplifique las cosas.
Te deseo mucha suerte con tu proyecto y no dudes en escribirme por cualquier otra consulta.
Hola Juan Manuel, pues luego de leer algo sobre NLTK, he decidico realizar el proyecto en python y NLTK para la obtención de datos, mi duda surge en que yo quiero mantener un histórico de los Tweets capturados, y estado pensando en MySQL pero, mi consulta es si debo almacenar los tweets antes o después de ser analizados?, es recomendable usar MySQL, porque en algunos libros he visto que usan CouchDB. Gracias de antemano.
EliminarHola Jorge, yo creo que es conveniente que captures y almacenes todos los Tweets en crudo, para que luego puedas procesarlos desde tu servidor local de forma eficiente. La información que extraigas en limpio seguramente tengas que almacenarla también para poder utilizarla en un futuro.
EliminarRespecto a la decisión de utilizar MySQL o CouchDB (o en todo caso cualquier otro motor noSQL) es más personal y depende de lo que quieras hacer con tus datos. MySQL es una base de datos relacional, esto quiere decir, entre otras cosas, que permite almacenar la información de forma muy precisa y permite también establecer relaciones "fuertes" entre los datos. Ademas permite ejecutar consultas complejas. En cambio CouchDB es una base orientada a documentos, la información no necesariamente tiene que tener un esquema definido, puede ser texto plano y por ende no permite consultas demasiado complejas. CouchDB puede ser más rápida para el recupero de información, sobre todo si estamos hablando de (por lo menos) millones de registros y es mucho más escalable en ambientes distribuidos, MySQL escala en cambio aumentando la potencia del servidor local en el cual corre.
Esto fue muy a grandes rasgos la diferencia entre ambas, espero que te haya podido servir.
Nuevamente suerte con tu proyecto y no dudes en escribirme por cualquier otra consulta.
Hola juan manuel, primero agradecer la amabilidad y tiempo que tomas para responder mis consultas, tus aportes me están aclarando muchas dudas. Creo que una base de datos NoSQL sería la más adecuada por lo que los datos del api de twitter los obtendria en json y seria más facil pasarlos a una bd NoSQL (ejm. CouchDB, MongoDB), no se si sera correcto mi enfoque. Ahora mi duda surge en que si para el tipo de proyecto que voy a realizar, este tipo de bd me ofrecerá un rendimiento adecuado teniendo en cuenta que no se ejecutará sobre un servidor, sino sobre una pc común; y que la cantidad de datos que se guardará sera considerablemente grande. Ahora una ultima consulta, con una bd NoSQL puedo realizar consultas que me permitan realizar gráficos de esos datos en el lado del cliente ?? (es algo que no encontrado en google :D ). gracias nuevamente y disculpa las molestias
EliminarHola Jorge, me alegra poder serte de ayuda. Tu análisis es correcto, es una buena opción utilizar NoSQL para guardar documentos JSON. Para generar gráficos, necesitaras alguna herramienta de reportes, estas en general trabajan con bases de datos relacionales. Desconozco si existe una herramienta de reportes que pueda trabajar directamente con una base NoSQL. De todas formas dependerá de la complejidad de las consultas que necesites, para los gráficos que desees mostrar. Una cosa es que muestres la cantidad de Tweets por país, pongamos por caso y otra que muestres la cantidad de veces que una palabra fue utilizada en una región, en una época especifica del año, etc., etc. En este último caso quizás tener la información en una base de datos relacional será más conveniente. Podes usar dos bases: una para el procesamiento en crudo y otra para el resumen y análisis para los reportes. Sería perfectamente válido.
EliminarMi consejo es que identifiques primeramente que gráficos (que datos) te interesaría mostrar y en función de eso busques una herramienta o biblioteca adecuada para generar dichos reportes. Luego la misma herramienta o biblioteca te dirá que bases puede usar.
Saludos cordiales.