nlp - questions - Algoritmo para negar oraciones
tag questions estructura (6)
Demostraciones agradables usando NTLK - http://text-processing.com/demo y una breve reseña - http://text-processing.com/demo/sentiment/ .
Me preguntaba si alguien estaba familiarizado con cualquier intento de negación de oración algorítmica.
Por ejemplo, dada una oración como "Este libro es bueno", proporcione cualquier número de oraciones alternativas que signifiquen lo contrario como "Este libro no es bueno" o incluso "Este libro es malo".
Obviamente, lograr esto con un alto grado de precisión probablemente estaría más allá del alcance de la PNL actual, pero estoy seguro de que ha habido algún trabajo sobre el tema. Si alguien sabe de algún trabajo, ¿quiere señalarme algunos papeles?
Hay un proceso similar para la lógica de primer orden. El algoritmo habitual es asignar P
a not P
, y luego realizar traducciones válidas para mover el not
conveniente a algún lugar, por ejemplo:
Original: (not R(x) => exists(y) (O(y) and P(x, y)))
Negate it: not (not R(x) => exists(y) (O(y) and P(x, y)))
Rearrange: not (R(x) or exists(y) (O(y) and P(x, y)))
not R(x) and not exists(y) (O(y) and P(x, y))
not R(x) and forall(y) not (O(y) and P(x, y))
not R(x) and forall(y) (not O(y) or not P(x, y))
Haciendo lo mismo en inglés, estaría negando "Si no está lloviendo aquí, entonces hay alguna actividad que es una actividad al aire libre y se puede realizar aquí" a "NO es el caso que ..." y finalmente a "Es no llueve y todas las actividades posibles no son para el aire libre o no se pueden realizar aquí ".
El lenguaje natural es mucho más complicado que la lógica de primer orden, por supuesto ... pero si puede analizar la oración en algo donde se puedan identificar las palabras "no", "y", "o", "existe", etc. , entonces deberías poder realizar traducciones similares.
La forma ingenua, por supuesto, es tratar de agregar "no" justo después de {am, are, is}. Sin embargo, no tengo idea de cómo funcionará esto en su entorno, probablemente solo funcionará con oraciones similares a predicados.
Para frases simples, busque adverbios o adjetivos dados las reglas de la gramática inglesa y sustituya un antónimo si solo existe un significado. De lo contrario, use la regla de negación en inglés correcta para negar el verbo (es decir, es -> no es).
Algoritmo de alto nivel:
- Busque cada palabra por su tipo (nombre, verbo, adjetivo, adverbio, conjunción, etc.)
- Inferir estructura de oraciones a partir de secuencias de tipos de palabras (Su oración fue: artículo, sustantivo, verbo, adjetivo / adverbio; se sabe que esta es una oración simple).
- Para oraciones simples, elija una palabra invertible e inviértala. Ya sea utilizando un antónimo, o negando el verbo.
Para oraciones más complejas, como las que tienen cláusulas subordinadas, tendrá que tener un análisis más complejo, pero para oraciones simples, esto no debería ser inviable.
Si bien no estoy al tanto de ningún trabajo que se centre específicamente en la generación automática de oraciones negadas, imagino que un buen lugar para comenzar sería leer sobre el trabajo de lingüística en semántica formal y pragmatics . Una buena introducción accesible sería el libro Pragmática de Steven C. Levinson .
Un problema con el que creo que se encontrará es que puede ser muy difícil negar toda la información que se transmite mediante una oración. Por ejemplo, tomar:
John fixed the vase that he broke.
Incluso si cambias esto a John, si no arreglaste el jarrón que rompió , existe el presupposition que hay un jarrón y que John lo rompió.
Del mismo modo, simplemente negando la oración, John no dejó de consumir drogas, ya que John dejó de usarlas, pero en un momento dado, John usó drogas. Una negación más completa sería que John nunca usara drogas .
Algunos trabajos de procesamiento de lenguaje natural (NLP) existentes que podría considerar son la lógica natural de MacCartney y Manning 2007 para la inferencia textual . En este artículo, utilizan la noción de George Lakoff de Natural Logic y el cálculo de monotonicidad de Sánchez Valencia para crear un software que determina automáticamente si una oración implica otra. Probablemente podrías usar algunas de sus técnicas para detectar la no vinculación para construir artificialmente oraciones negadas y contradictorias.