2009-06-01 13 views
55

Supongo que debería usarse un procesador de lenguaje natural para analizar el texto en sí, pero ¿qué sugerencias tiene para que un algoritmo detecte el estado de ánimo de un usuario según el texto que ha escrito? Dudo que sea muy preciso, pero aún así estoy interesado.¿Es posible adivinar el estado de ánimo de un usuario según la estructura del texto?

EDITAR: No soy de ninguna manera un experto en lingüística o procesamiento del lenguaje natural, por lo que me disculpo si esta pregunta es demasiado general o estúpida.

+65

SI ES en mayúsculas el usuario es PROBABLEMENTE ENOJADO –

+1

lectura de su mente mientras están escribiendo podría ser más fácil. –

+2

tal vez puedas contar el número de 4 palabras de letras? ;) –

Respuesta

64

Esta es la base de un área de procesamiento del lenguaje natural llamada sentiment analysis. Aunque tu pregunta es general, ciertamente no es estúpida, esto tipo de investigación es realizada por Amazon en el texto en las revisiones de productos, por ejemplo.

Si usted es serio sobre esto, entonces un versio simple n podría lograrse -

  1. adquirir un corpus de sentimiento positivo/negativo.Si se trata de un proyecto profesional, puede tomarse un tiempo y anotar manualmente un corpus, pero si tenía prisa o simplemente quería experimentar esto al principio, le sugiero que consulte el artículo sentiment polarity corpus de la investigación de Bo Pang y Lillian Lee. El problema con el uso de ese corpus es que no está adaptado a su dominio (específicamente, el corpus utiliza reseñas de películas), pero aún así debería ser aplicable.

  2. Divida su conjunto de datos en oraciones positivas o negativas. Para el corpus de polaridad de sentimiento, puede dividir cada revisión en sus oraciones compuestas y luego aplicar la etiqueta de polaridad de sentimiento general (positiva o negativa) a todas esas oraciones. Divida este corpus en dos partes: el 90% debe ser para el entrenamiento, el 10% debe ser para la prueba. Si está usando Weka, entonces puede manejar la división del corpus por usted.

  3. Aplique un algoritmo de aprendizaje automático (como SVM, Naive Bayes, Maximum Entropy) al cuerpo de entrenamiento en un nivel de palabra. Este modelo se llama bag of words model, que simplemente representa la oración como las palabras de las que está compuesta. Este es el mismo modelo en el que se ejecutan muchos filtros de correo no deseado. Para una buena introducción a los algoritmos de aprendizaje automático existe una aplicación llamada Weka que implementa un rango de estos algoritmos y le da una GUI para jugar con ellos. Luego puede probar el rendimiento del modelo aprendido de la máquina a partir de los errores cometidos al intentar clasificar su corpus de prueba con este modelo.

  4. Aplique este algoritmo de aprendizaje automático a sus publicaciones de usuario. Para cada publicación de usuario, separe la publicación en oraciones y luego clasifíquelas utilizando su modelo de máquina aprendida.

Así que sí, si usted es serio acerca de esto, entonces es posible, incluso sin experiencia en lingüística computacional. Sería una buena cantidad de trabajo, pero incluso con modelos basados ​​en palabras se pueden lograr buenos resultados.

Si necesita más ayuda no dude en ponerse en contacto conmigo - Estoy siempre dispuesto a ayudar a otras personas interesadas en PNL =]


Pequeñas Notas -

  1. Simplemente dividir un segmento de texto en oraciones es un campo de PNL - llamado sentence boundary detection. Hay una serie de herramientas, OSS o gratuitas, disponibles para hacer esto, pero para su tarea una simple división en espacios en blanco y puntuación debería estar bien.
  2. SVMlight es también otro aprendiz de máquina a considerar, y de hecho su SVM inductivo realiza una tarea similar a la que estamos viendo, tratando de clasificar qué artículos de Reuter son sobre "adquisiciones corporativas" con 1000 ejemplos positivos y 1000 negativos.
  3. Convertir las oraciones en características para clasificar puede llevar algo de trabajo. En este modelo, cada palabra es una característica: esto requiere poner en paréntesis la oración, lo que significa separar palabras y signos de puntuación entre sí. Otro consejo es poner en minúscula todas las fichas de palabras separadas para que "TE ODIE" y "TE ODIO" terminen siendo consideradas iguales. Con más datos, podría probar y también incluir si la capitalización ayuda a clasificar si alguien está enojado, pero creo que las palabras deberían ser suficientes al menos para un esfuerzo inicial.

Editar

acabo de descubrir LingPipe que en realidad tiene un tutorial on sentiment analysis utilizando el corpus sentimiento de polaridad Bo Pang y Lillian Lee que estaba hablando. Si utiliza Java, puede ser una excelente herramienta para utilizar, e incluso si no, sigue todos los pasos que discutí anteriormente.

+0

Es muy interesante leer esto (y especialmente algunas de las otras respuestas) a esta pregunta hoy - las respuestas, escritas principalmente en 2009, realmente sacan a la luz cuánto ha crecido este campo y la conciencia pública sobre este campo. – Aman

+1

@smerity ¡Oye! Me interesa esto debido a un proyecto que desarrollaré. ¿Hay alguna manera de que podamos discutir algunas cosas? ¡Gracias! – codeninja

+0

@smerity ¿crees que cambiarías mucho para cualquier cosa como esta hoy en día? – slackbot39243

3

No puedo creer que estoy tomando en serio ... suponiendo un espacio estado de ánimo de una sola dimensión:

  • Si el texto contiene una palabra de maldición, -10 estado de ánimo.
  • Creo que las exclamaciones serían tendrían como negativas, por lo que -2 de ánimo.
  • Cuando me siento frustrado, escribo Muy. Corto. Frases. -5 estado de ánimo.

Cuanto más pienso en ello, cuanto más está claro que muchos de estos significantes indican el estado de ánimo extremos en general, pero no siempre está claro qué tipo del estado de ánimo.

+2

Maldije cuando estoy feliz :) –

+1

¿Cómo reconoces si fue escrito por una mujer, entonces? –

+4

@J S: Fácil: simplemente haz otra pregunta sobre SO: "¿Es posible adivinar el género de un usuario según la estructura del texto?" – luvieere

0

Sí.

Si puede o no puede hacerlo es otra historia. El problema parece al principio ser AI completo.

Ahora bien, si tuviera tiempos de pulsación de tecla, debería poder descifrarlo.

+0

Tiempos de pulsaciones de teclas? ¿Cómo exactamente? –

+0

Probablemente tengas que calibrar, pero deberías poder inferir el estado de ánimo a partir de variaciones en los tiempos de pulsación de teclas dentro de unas pocas oraciones. En particular, la ira tiende a variar entre dos extremos. – Joshua

+0

No tengo idea de qué se trata el bit "AI completo", pero el resto cubre más o menos mis pensamientos sobre el asunto – BCS

12

Sin duda, es posible juzgar el estado de ánimo de un usuario según el texto que escriba, pero no sería trivial. Las cosas que se me ocurren:

  • capitales tiende a significar agitación, irritación o frustración y es sin duda una respuesta emocional pero de nuevo algunos novatos hacen porque no se dan cuenta de la importancia por lo que no se podía asumir que sin mirar qué más han escrito (para asegurarse de que no todo esté en mayúsculas);
  • Las mayúsculas son realmente solo una forma de énfasis. Otros son el uso de ciertos colores agresivos (por ejemplo, rojo) o el uso de fuentes en negrita o más grandes;
  • Algunas personas cometen más errores de ortografía y gramática y errores tipográficos cuando son muy emocionales;
  • El escaneo de emoticonos podría darle una idea muy clara de lo que siente el usuario, pero de nuevo algo como :) podría interpretarse como feliz, "ya te lo dije" o incluso tener un significado sarcástico;
  • El uso de improperios tiende a tener un significado claro, pero una vez más no es claro. El habla coloquial de muchas personas contendrá rutinariamente ciertas palabras de cuatro letras. Para otras personas, es posible que ni siquiera digan "infierno", diciendo "diablos", por lo que cualquier improperio (incluso "apesta") es significativo;
  • Los grupos de signos de puntuación (como @ # $ @ $ @) tienden a ser reemplazados por improperios en un contexto cuando los improperios no son necesariamente apropiados, por lo que es menos probable que sean coloquiales;
  • Los signos de exclamación pueden indicar sorpresa, shock o exasperación.

Es posible que desee mirar Advances in written text analysis o incluso Determining Mood for a Blog by Combining Multiple Sources of Evidence.

Por último, vale la pena señalar que el texto escrito suele percibirse como más negativo de lo que realmente es. Este es un problema común con la comunicación por correo electrónico en las empresas, solo como un ejemplo.

2

Mi memoria no es buena en este tema, pero creo que vi algunas investigaciones sobre la estructura gramatical del texto y el tono general. Eso también podría ser tan simple como palabras más cortas y palabras de expresión de emoción (bueno, los improperios son bastante obvios).

Editar: Noté que la primera persona en responder tenía una publicación sustancialmente similar. De hecho, podría haber alguna idea seria sobre oraciones más cortas.

1

El análisis del estado de ánimo y el comportamiento es una ciencia muy seria. A pesar de las otras respuestas burlándose de la pregunta, las agencias de aplicación de la ley han estado investigando la categorización del estado de ánimo durante años. Los usos en computadoras de los que he oído generalmente tienen más contexto (información de tiempo, patrón de voz, velocidad en los canales cambiantes). Creo que podría, con cierto éxito, determinar si un usuario está de un humor particular entrenando una red neuronal con muestras de dos grupos conocidos: enojado y no enojado. Buena suerte en tus esfuerzos.

1

Estoy de acuerdo con ojblass que esta es una pregunta seria.

La categorización del estado de ánimo es actualmente un tema candente en el área de reconocimiento de voz . Si lo piensas bien, una aplicación de respuesta de voz interactiva (IVR) necesita manejar a los clientes enojados de una manera muy diferente a la calma: las personas enojadas deben enrutarse rápidamente a los operadores humanos con la experiencia y capacitación adecuadas. El tono vocal es un indicador bastante confiable de la emoción, lo suficientemente práctico para que las empresas estén ansiosas por hacer que esto funcione. Google "reconocimiento de emoción del habla", o lea este article para obtener más información.

La situación no debería ser diferente en las GUI basadas en web. Refiriéndonos a los comentarios de Cletus, las analogías entre el texto y la detección de emoción del habla son interesantes. Si una persona escribe CAPITALES, se dice que está "gritando", como si su voz subiera en volumen y tono usando una interfaz de voz. La detección de malas palabras es análoga a la "detección de palabras clave" de las blasfemias en los sistemas de habla. Si una persona está molesta, cometerán más errores utilizando una GUI o una interfaz de usuario de voz (VUI) y pueden enrutarse a un ser humano.

Aquí hay un área de investigación de detección de emociones "multimodal". Imagine una interfaz web con la que también puede hablar (siguiendo las líneas de la implementación del prototipo IBM/Motorola/Opera XHTML + Voice Profile). La detección de emociones podría basarse en una combinación de señales de la modalidad de habla y de entrada visual.

1

pienso, mi algoritmo es bastante sencillo, sin embargo, por qué no calcular smilics a través del texto :) :(vs

Obviamente, el texto ":) :) :) :)" remite a una feliz usuario , mientras que ":(:(:(" seguramente se resolverá en uno triste. ¡Disfruta!

3

Si admite fuentes, el texto en negrita es probablemente un usuario enojado. Textos de tamaño regular de color verde con mariposas clip art uno feliz.

0

Supongo que la lógica difusa. De cualquier manera, será bastante fácil comenzar con varias reglas para determinar el estado de ánimo del usuario y luego extender y combinar el "motor" con otros más precisos y sofisticados.

0

Si un usuario escribe siguientes caracteres entonces es tratar enojado súper calmarlo primera ...

`K` 

`k` 
Cuestiones relacionadas