natural language algorithm nlp

algorithm - natural language processing pdf



Algoritmo para determinar qué tan positiva o negativa es una declaración/texto (13)

¿Qué tal el sarcasmo?

  • Jason es el mejor usuario de SO que he visto en mi vida, NO
  • Jason es el mejor usuario de SO que he visto, justo

Necesito un algoritmo para determinar si una oración, un párrafo o un artículo es negativo o de tono positivo ... o mejor aún, qué tan negativo o positivo.

Por ejemplo:

Jason es el peor usuario de SO que he visto en mi vida (-10)

Jason es un usuario de SO (0)

Jason es el mejor usuario de SO que he visto (+10)

Jason es el mejor en chupar con SO (-10)

Mientras, está bien en SO, Jason es el peor en hacer mal (+10)

No es fácil, ¿eh? :)

No espero que alguien me explique este algoritmo, pero supongo que ya hay mucho trabajo en algo así en el mundo académico en alguna parte. Si me puede indicar algunos artículos o investigaciones, me encantaría.

Gracias.


¿Tal vez el software de evaluación de ensayos podría usarse para estimar el tono? Artículo WIRED .
Possible referencia (No pude leerlo)
This informe compara la habilidad de escritura al nivel de grado de Flesch-Kincaid necesario para leerla!
La página 4 de e-rator dice que miran errores y cosas por el estilo. (¡Quizás las malas publicaciones también están mal escritas!)
Artículo de Slashdot .

También podría utilizar un filtro de correo electrónico de algún tipo para la negatividad en lugar del correo no deseado.


Ah, recuerdo una biblioteca de Java para esto llamada LingPipe (licencia comercial) que evaluamos. Funcionaría bien para el corpus de ejemplo que está disponible en el sitio, pero para los datos reales es bastante malo.


Como se señaló, esto viene bajo el análisis del sentimiento en el procesamiento del lenguaje natural.
Afaik GATE no tiene ningún componente que haga análisis de opinión.
En mi experiencia, he implementado un algoritmo que es una adaptación del que aparece en el documento "Reconociendo la polaridad contextual en el análisis de sentimiento a nivel de frase" por Theresa Wilson, Janyce Wiebe, Paul Hoffmann ( this ) como un complemento GATE, que da un resultado razonable Buenos resultados. Podría ayudarlo si quiere iniciar la implementación.


Dependiendo de su aplicación, puede hacerlo a través de un algoritmo de filtrado bayesiano (que a menudo se utiliza en filtros de correo no deseado).

Una forma de hacerlo sería tener dos filtros. Uno para documentos positivos y otro para documentos negativos. Sembraría el filtro positivo con documentos positivos (cualquiera que sea el criterio que use) y el filtro negativo con documentos negativos. El truco sería encontrar estos documentos. Tal vez podrías configurarlo para que tus usuarios califiquen los documentos de manera efectiva.

El filtro positivo (una vez sembrado) buscaría palabras positivas. Tal vez terminaría con palabras como amor , paz , etc. El filtro negativo se sembraría apropiadamente también.

Una vez que los filtros están configurados, ejecuta el texto de prueba a través de ellos para obtener puntajes positivos y negativos. En función de estos puntajes y algo de ponderación, podría obtener su puntaje numérico.

Los filtros bayesianos, aunque simples, son sorprendentemente efectivos.


En mi compañía tenemos un producto que hace esto y también funciona bien. Hice la mayor parte del trabajo en eso. Puedo dar una breve idea:

Es necesario dividir el párrafo en oraciones y luego dividir cada oración en oraciones secundarias más pequeñas, dividir en base a comas, guiones, puntos y coma, dos puntos, ''y'', ''o'', etc. Cada oración secundaria mostrará un sentimiento totalmente separado en algunos casos.

Algunas oraciones, incluso si están divididas, deberán unirse juntas.

Por ejemplo: el producto es increíble, excelente y fantástico.

Hemos desarrollado un conjunto completo de reglas sobre el tipo de oraciones que deben dividirse y cuáles no (según las etiquetas POS de las palabras)

En el primer nivel, puede usar un enfoque de bolsa de palabras, es decir, tener una lista de palabras / frases positivas y negativas y verificar cada oración secundaria. Mientras hace esto, también mire las palabras de negación como ''no'', ''no'', etc. que cambiarán la polaridad de la oración.

Incluso si no puede encontrar el sentimiento, puede optar por un enfoque naive bayes . Este enfoque no es muy preciso (aproximadamente 60%). Pero si aplica esto a solo una oración que no pasa el primer conjunto de reglas, puede obtener fácilmente un 80-85% de precisión.

La parte importante es la lista de palabras positivas / negativas y la forma en que se dividen las cosas. Si lo desea, puede subir incluso un nivel más alto implementando HMM (Hidden Markov Model) o CRF (Conditional Random Fields). Pero no soy un profesional en NLP y alguien más puede llenarte en esa parte.

Para las personas curiosas, implementamos todo esto es python con NLTK y el módulo Reverendo Bayes.

Muy simple y maneja la mayoría de las oraciones. Sin embargo, puede enfrentar problemas al tratar de etiquetar contenido de la web. La mayoría de las personas no escribe oraciones correctas en la web. También manejar el sarcasmo es muy difícil.


Esta es una vieja pregunta, pero me encontré con que buscaba una herramienta que pudiera analizar el tono del artículo y encontró Watson Tone Analyzer de IBM. Permite 1000 llamadas de API mensuales gratis.


Esto cae bajo el paraguas del procesamiento del lenguaje natural , por lo que leer sobre eso es probablemente un buen lugar para comenzar.

Si no desea entrar en un problema muy complicado, puede crear listas de palabras "positivas" y "negativas" (y ponderarlas si lo desea) y hacer conteos de palabras en secciones de texto. Obviamente, esta no es una solución "inteligente", pero le proporciona cierta información con muy poco trabajo, donde hacer una PNL seria llevaría mucho tiempo.

Uno de sus ejemplos podría ser marcado como positivo cuando en realidad era negativo usando este enfoque ("Jason es el mejor en chupar con SO") a menos que su peso sea más "succión" que "mejor" ... Pero también esto es una pequeña muestra de texto, si estás mirando párrafos o más de texto, entonces la ponderación se vuelve más confiable a menos que tengas a alguien intentando intencionalmente engañar a tu algoritmo.


Hay muchos enfoques de aprendizaje automático para este tipo de análisis de sentimiento. Usé la mayoría de los algoritmos de aprendizaje automático, que ya están implementados. mi caso he usado

algoritmos de clasificación weka

  • SVM
  • ingenuo basiano
  • J48

    Solo tienes que hacer esto para entrenar el modelo según tu contexto, agregar el vector presentado y el ajuste basado en reglas. En mi caso obtuve algo (61% de precisión). Así que pasamos a stanford core nlp (entrenaron su modelo para las reseñas de películas) y usamos su conjunto de entrenamiento y agregamos nuestro conjunto de entrenamiento. podríamos lograr un 80-90% de precisión.


Hay un subcampo del procesamiento del lenguaje natural llamado análisis de sentimiento que se ocupa específicamente de este dominio del problema. Hay una buena cantidad de trabajo comercial realizado en el área porque los productos de consumo son tan revisados ​​en foros de usuarios en línea (ugc o contenido generado por el usuario). También hay una plataforma prototipo para análisis de texto llamada GATE de la universidad de Sheffield, y un proyecto python llamado nltk . Ambos se consideran flexibles, pero no de muy alto rendimiento. Uno u otro podrían ser buenos para resolver tus propias ideas.


Puedes hacer así:

Jason is the worst SO user I have ever witnessed (-10)

peor (-), el resto es (+). entonces, eso sería (-) + (+) = (-)

Jason is an SO user (0)

() + () = ()

Jason is the best SO user I have ever seen (+10)

mejor (+), el resto es (). Entonces, eso sería (+) + () = (+)

Jason is the best at sucking with SO (-10)

mejor (+), succión (-). entonces, (+) + (-) = (-)

While, okay at SO, Jason is the worst at doing bad (+10)

peor (-), haciendo mal (-). Entonces, (-) + (-) = (+)


Se trata de contexto, creo. Si está buscando a las personas que son mejores para chupar con SO. Chupar lo mejor puede ser algo positivo. Para determinar qué es malo o bueno y cuánto podría recomendar mirar en Fuzzy Logic.

Es un poco como ser alto. Alguien que mide 1.95m puede considerarse alto. Si coloca a esa persona en un grupo con personas de más de 2.10 m, se ve corto.


use Algorithm::NaiveBayes; my $nb = Algorithm::NaiveBayes->new; $nb->add_instance (attributes => {foo => 1, bar => 1, baz => 3}, label => ''sports''); $nb->add_instance (attributes => {foo => 2, blurp => 1}, label => [''sports'', ''finance'']); ... repeat for several more instances, then: $nb->train; # Find results for unseen instances my $result = $nb->predict (attributes => {bar => 3, blurp => 2});