Análisis de sentimiento para Twitter en Python [cerrado]

87

Estoy buscando una implementación de código abierto, preferiblemente en python, de Textual Sentiment Analysis ( http://en.wikipedia.org/wiki/Sentiment_analysis ). ¿Alguien está familiarizado con una implementación de código abierto que pueda usar?

Estoy escribiendo una aplicación que busca en Twitter algún término de búsqueda, como "youtube", y cuenta tweets "felices" versus tweets "tristes". Estoy usando el appengine de Google, por lo que está en Python. Me gustaría poder clasificar los resultados de búsqueda devueltos desde Twitter y me gustaría hacerlo en Python. No he podido encontrar tal analizador de sentimientos hasta ahora, específicamente no en Python. ¿Está familiarizado con la implementación de código abierto que puedo usar? Preferiblemente, esto ya está en Python, pero si no, espero que pueda traducirlo a Python.

Tenga en cuenta que los textos que estoy analizando son MUY cortos, son tweets. Entonces, idealmente, este clasificador está optimizado para textos tan cortos.

Por cierto, Twitter admite los operadores ":)" y ":(" en la búsqueda, que tienen como objetivo hacer precisamente esto, pero desafortunadamente, la clasificación proporcionada por ellos no es tan buena, así que pensé que podría intentarlo yo mismo. .

¡Gracias!

Por cierto, una demostración temprana está aquí y el código que tengo hasta ahora está aquí y me encantaría abrirlo con cualquier desarrollador interesado.

Corrió
fuente

Respuestas:

44

Con la mayoría de estos tipos de aplicaciones, tendrá que generar gran parte de su propio código para una tarea de clasificación estadística. Como sugirió Lucka, NLTK es la herramienta perfecta para la manipulación del lenguaje natural en Python, siempre que su objetivo no interfiera con la naturaleza no comercial de su licencia. Sin embargo, sugeriría otros paquetes de software para modelar. No he encontrado muchos modelos sólidos de aprendizaje automático avanzado disponibles para Python, por lo que voy a sugerir algunos binarios independientes que cooperan fácilmente con él.

Puede que le interese The Toolkit for Advanced Discriminative Modeling , que se puede conectar fácilmente con Python. Esto se ha utilizado para tareas de clasificación en diversas áreas del procesamiento del lenguaje natural. También puede elegir entre varios modelos diferentes. Sugeriría comenzar con la clasificación de Entropía máxima siempre que ya esté familiarizado con la implementación de un clasificador Naive Bayes. De lo contrario, es posible que desee examinarlo y codificar uno para obtener una comprensión decente de la clasificación estadística como una tarea de aprendizaje automático.

Los grupos de lingüística computacional de la Universidad de Texas en Austin han impartido clases en las que la mayoría de los proyectos que salen de ellos han utilizado esta gran herramienta. Puede mirar la página del curso de Lingüística Computacional II para tener una idea de cómo hacer que funcione y para qué aplicaciones anteriores ha servido.

Otra gran herramienta que trabaja en la misma línea es Mallet . La diferencia entre Mallet es que hay un poco más de documentación y algunos modelos más disponibles, como árboles de decisión, y está en Java, lo que, en mi opinión, lo hace un poco más lento. Weka es un conjunto completo de diferentes modelos de aprendizaje automático en un gran paquete que incluye algunas cosas gráficas, pero en realidad está destinado principalmente a fines pedagógicos y no es algo que yo pondría en producción.

Buena suerte con tu tarea. La parte realmente difícil probablemente será la cantidad de conocimientos de ingeniería que se requieren desde el principio para clasificar el "conjunto de semillas" del que aprenderá su modelo. Debe ser bastante considerable, dependiendo de si está haciendo una clasificación binaria (feliz o triste) o una amplia gama de emociones (que requerirá aún más). Asegúrese de mantener algunos de estos datos diseñados para probarlos, o ejecute algunas pruebas de diez veces o elimine uno para asegurarse de que realmente está haciendo un buen trabajo de predicción antes de publicarlo. Y sobre todo, ¡diviértete! Esta es la mejor parte de la PNL y la IA, en mi opinión.

Robert Elwell
fuente
Gracias. Solo hago esto por las noches, así que ... tomará algo de tiempo, pero publicaré una actualización cuando tenga algo listo
publicó
7
El código NLTK está disponible bajo Apache License 2.0 según nltk.org/faq
amit
1
¿Por qué dices que Weka tiene fines pedagógicos? ¿No es parte de la suite pentaho BI? Y pentaho sirve a las empresas.
Swapnil
77

Buena suerte con eso.

El sentimiento es enormemente contextual y la cultura de los tweets empeora el problema porque no se le da el contexto para la mayoría de los tweets. El objetivo de Twitter es que puede aprovechar la enorme cantidad de contexto compartido del "mundo real" para incluir una comunicación significativa en un mensaje muy corto.

Si dicen que el video es malo, ¿eso significa malo o malo ?

Un día, una profesora de lingüística estaba dando una conferencia a su clase. "En inglés", dijo, "un doble negativo forma un positivo. Sin embargo, en algunos idiomas, como el ruso, un doble negativo sigue siendo negativo. Sin embargo, no hay ningún idioma en el que un doble positivo pueda formar un negativo".

Una voz desde el fondo de la habitación dijo: "Sí ... está bien".

MarkusQ
fuente
4
Me alegra que tuvieras una respuesta útil, ya que de lo contrario habría tenido que votarte solo por esa cita. :-)
Ben Blank
2
Creo que la cita fue "sí, sí" - de Sidney Morgenbesser
Scott Weinstein
19

Gracias a todos por sus sugerencias, ¡de hecho fueron muy útiles! Terminé usando un clasificador ingenuo bayesiano, que tomé prestado de aquí . Comencé alimentándolo con una lista de palabras clave buenas / malas y luego agregué una función de "aprender" empleando los comentarios de los usuarios. Resultó funcionar bastante bien.

Los detalles completos de mi trabajo como en una publicación de blog .

Nuevamente, su ayuda fue muy útil, ¡así que gracias!

Corrió
fuente
1
El enlace de la publicación del blog ya no funciona, ¿podrías actualizarlo?
Petrutiu Mihai
Hola @PetrutiuMihai, de hecho, ese blog fue eliminado. Pero es algo bastante antiguo, no está al frente de la investigación a partir de hoy, por lo que no se perderá mucho; (
publicó el
14

He elaborado una lista de palabras etiquetadas con sentimiento. Puedes acceder a él desde aquí:

http://www2.compute.dtu.dk/pubdb/views/edoc_download.php/6010/zip/imm6010.zip

Encontrarás un breve programa de Python en mi blog:

http://finnaarupnielsen.wordpress.com/2011/06/20/simplest-sentiment-analysis-in-python-with-af/

Esta publicación muestra cómo usar la lista de palabras con oraciones individuales, así como con Twitter.

Los enfoques de listas de palabras tienen sus limitaciones. Encontrará una investigación de las limitaciones de mi lista de palabras en el artículo "Un nuevo ANEW: Evaluación de una lista de palabras para el análisis de sentimientos en microblogs". Ese artículo está disponible en mi página de inicio.

Tenga en cuenta unicode(s, 'utf-8')que falta un en el código (por razones pedagógicas).

Finn Årup Nielsen
fuente
"Posterous Spaces ya no está disponible" ¿Podría publicar código Python en alguna parte?
andilabs
1
Gracias por notarlo. Ahora he cambiado el enlace posterior a un enlace de Wordpress donde moví mi blog.
Finn Årup Nielsen
¿Podrías decir algo sobre algún experimento con tu sentimiento con palabras iluminadas? Me refiero a lo que fue precisión, recuerdo de clasificación.
andilabs
1
Tengo enlaces a algunas evaluaciones aquí: neuro.compute.dtu.dk/wiki/AFINN#Evaluation Yo mismo no he evaluado su desempeño en términos de precisión, recuperación y clasificación. Lo que hice fue una correlación de rango con el etiquetado de tweets de Amazon Mechanical Turk de Mislove.
Finn Årup Nielsen
10

Muchos trabajos de investigación indican que un buen punto de partida para el análisis de sentimientos es mirar los adjetivos, por ejemplo, si son adjetivos positivos o negativos. Para un bloque corto de texto, esta es prácticamente tu única opción ... Hay artículos que analizan documentos completos o análisis a nivel de oraciones, pero como dices, los tweets son bastante cortos ... No existe un enfoque mágico real para comprender el sentimiento de una oración, así que creo que su mejor opción sería buscar uno de estos artículos de investigación y tratar de obtener su conjunto de datos de adjetivos con orientación positiva / negativa.

Ahora bien, dicho esto, el sentimiento es específico del dominio y es posible que le resulte difícil obtener un alto nivel de precisión con un conjunto de datos de propósito general.

Buena suerte.


fuente
Maldita sea, iba a adelantarte.
Dana the Sane
4

Creo que puede resultarle difícil encontrar lo que busca. Lo más parecido que conozco es LingPipe , que tiene alguna funcionalidad de análisis de sentimientos y está disponible bajo un tipo limitado de licencia de código abierto, pero está escrito en Java.

Además, los sistemas de análisis de sentimientos generalmente se desarrollan entrenando un sistema en datos de reseñas de productos / películas que son significativamente diferentes del tweet promedio. Se optimizarán para texto con varias oraciones, todas sobre el mismo tema. Sospecho que sería mejor que usted mismo creara un sistema basado en reglas, tal vez basado en un léxico de términos de sentimiento como el que proporciona la Universidad de Pittsburgh .

Consulte We Feel Fine para ver una implementación de una idea similar con una interfaz realmente hermosa (y twitrratr ).

Stompchicken
fuente
1

Quizás TextBlob (basado en NLTK y patrón) sea la herramienta de análisis de sentimientos adecuada para usted.

Sonson123
fuente
1

Me encontré con Natural Language Toolkit hace un tiempo. Probablemente podrías usarlo como punto de partida. También tiene muchos módulos y complementos, por lo que tal vez ya tengan algo similar.

Luka Marinko
fuente
0

Pensamiento un tanto loco: podría intentar usar la API de Twitter para descargar un gran conjunto de tweets y luego clasificar un subconjunto de ese conjunto con emoticonos: un grupo positivo para ":)", ":]", ": D", etc. y otro grupo negativo con ":(", etc.

Una vez que tenga esa clasificación cruda, puede buscar más pistas con frecuencia o análisis de ngramas o algo por el estilo.

Puede parecer una tontería, pero se han realizado investigaciones serias al respecto (búsqueda de "análisis de sentimientos" y emoticonos). Digno de una mirada.


fuente
0

Para aquellos interesados ​​en codificar Twitter Sentiment Analyis desde cero, hay un curso de Coursera " Ciencia de datos " con código Python en GitHub (como parte de la tarea 1 - enlace ). Los sentimientos son parte del AFINN-111 .

Puede encontrar soluciones de trabajo, por ejemplo aquí . Además de la lista de opiniones AFINN-111, existe una implementación simple de construir una lista de términos dinámica basada en la frecuencia de los términos en los tweets que tienen una puntuación pos / neg (ver aquí ).

philshem
fuente