2010-07-09 9 views
9

He estudiado algunas implementaciones simples de redes semánticas y técnicas básicas para analizar el lenguaje natural. Sin embargo, no he visto muchos proyectos que intenten cerrar la brecha entre los dos.Generación probabilística de redes semánticas

Por ejemplo, consideremos el diálogo:

"the man has a hat" 
"he has a coat" 
"what does he have?" => "a hat and coat" 

Una red semántica simple, basado en el análisis del árbol de la gramática de las oraciones anteriores, podría parecerse a:

the_man = Entity('the man') 
has = Entity('has') 
a_hat = Entity('a hat') 
a_coat = Entity('a coat') 
Relation(the_man, has, a_hat) 
Relation(the_man, has, a_coat) 
print the_man.relations(has) => ['a hat', 'a coat'] 

Sin embargo, esta implementación supone el conocimiento previo de que los segmentos de texto "el hombre" y "él" se refieren a la misma entidad de red.

¿Cómo diseñaría un sistema que "aprenda" estas relaciones entre segmentos de una red semántica? Estoy acostumbrado a pensar en problemas de LD/NL basados ​​en la creación de un conjunto sencillo de entrenamiento de pares de atributos/valores y en alimentarlo con un algoritmo de clasificación o regresión, pero tengo problemas para formular este problema de esa manera.

En última instancia, parece que tendría que superponer probabilidades sobre la red semántica, pero eso complicaría drásticamente una implementación. ¿Hay alguna técnica anterior en esta línea? He visto algunas librerías, como NLTK y OpenNLP, y si bien tienen herramientas decentes para manejar la lógica simbólica y analizar el lenguaje natural, ninguna parece tener ningún tipo de marco proabablilstic para convertir una a la otra.

Respuesta

3

Hay mucha historia detrás de este tipo de tareas. Tu mejor comienzo es probablemente mirando Question Answering.

El consejo general que siempre doy es que si tiene un dominio altamente restringido donde conoce todas las cosas que se pueden mencionar y todas las formas en que interactúan, entonces probablemente pueda tener bastante éxito. Si esto es más un problema de 'mundo abierto', entonces será extremadamente difícil encontrar algo que funcione aceptablemente.

La tarea de extraer relaciones del lenguaje natural se llama 'extracción de relaciones' (curiosamente) y, en ocasiones, extracción de hechos. Este es un campo de investigación bastante grande, this guy hizo una tesis de doctorado sobre ella, al igual que muchos otros. Aquí hay una gran cantidad de desafíos, como la detección de entidades, la resolución de anáforas, etc. Esto significa que probablemente haya mucho "ruido" en las entidades y relaciones que extraigas.

En cuanto a la representación de hechos que se han extraído en una base de conocimiento, la mayoría de las personas tienden a no utilizar un marco probabilístico. En el nivel más simple, las entidades y las relaciones se almacenan como triples en una tabla plana. Otro enfoque es usar una ontología para agregar estructura y permitir el razonamiento sobre los hechos. Esto hace que la base de conocimiento sea mucho más útil, pero agrega muchos problemas de escalabilidad. En cuanto a la adición de probabilidades, conozco el proyecto Prowl que tiene como objetivo crear una ontología probabilística, pero no me parece muy maduro.

Hay alguna investigación en modelado relacional probabilístico, principalmente en Markov Logic Networks en la Universidad de Washington y Probabilstic Relational Models en Stanford y otros lugares. Estoy un poco fuera de contacto con el campo, pero este es un problema difícil y, hasta donde yo sé, es una investigación en fase inicial.Hay muchos problemas, principalmente en torno a la inferencia eficiente y escalable.

En general, es una buena idea y algo muy sensato de querer hacer. Sin embargo, también es muy difícil de lograr. Si desea ver un buen ejemplo del estado del arte, (es decir, qué es posible con un grupo de personas y dinero) tal vez consulte PowerSet.

+0

PR-OWL parece interesante, ya que se han dado cuenta de que una red semántica utilizable debe manejar la incertidumbre. Sin embargo, nunca me gustó OWL porque nunca me quedó claro cómo reifican las entidades. Además, como mencionaste, el proyecto parece ser vapor en este punto sin código publicado. – Cerin

0

No estoy exactamente seguro de si esto es lo que quiere, pero eche un vistazo a la generación del lenguaje natural wikipedia, el "reverso" del análisis sintáctico, construyendo derivaciones que se ajusten a las restricciones semánticas dadas.

+0

Sí, gracias, pero técnicamente eso es exactamente lo contrario de lo que estoy buscando;) – Cerin

2

Interesante pregunta, he estado trabajando en un motor NLP fuertemente tipado en C#: http://blog.abodit.com/2010/02/a-strongly-typed-natural-language-engine-c-nlp/ y recientemente comencé a conectarlo a una tienda de ontología.

Para mí, parece que el problema aquí es realmente: ¿cómo se analiza el ingreso del lenguaje natural para descubrir que 'Él' es lo mismo que 'el hombre'? Para cuando está en la Red Semántica es demasiado tarde: has perdido el hecho de que el enunciado 2 sigue el enunciado 1 y la ambigüedad del enunciado 2 se puede resolver usando el enunciado 1. Agregar una tercera relación después del hecho para decir que "Él" y "el hombre" son lo mismo es otra opción, pero aún necesita comprender la secuencia de esas afirmaciones.

La mayoría de los analizadores sintácticos NLP parecen centrarse en analizar oraciones simples o grandes bloques de texto, pero con menos frecuencia en el manejo de conversaciones. En mi propio motor NLP hay un historial de conversación que permite entender una oración en el contexto de todas las oraciones que le precedieron (y también los objetos analizados y fuertemente tipados a los que se refieren). Entonces, la forma en que manejaría esto es darse cuenta de que "Él" es ambiguo en la oración actual y luego mirar hacia atrás para tratar de descubrir quién fue la última persona masculina que se mencionó.

En el caso de mi casa, por ejemplo, podría decirle que ha perdido una llamada de un número que no está en su base de datos. Puede escribir "Fue John Smith" y puede darse cuenta de que "Eso" se refiere a la llamada que se acaba de mencionar. Pero si escribió "Etiquetar como música de fiesta" justo después de la llamada, aún así se resolvería la canción que se está reproduciendo actualmente porque la casa está mirando hacia atrás para ver si hay algo que pueda modificar.

+1

El problema generalmente se llama resolución de anáforas. Si solo lo restringe para resolver 'él' y 'ella' se llama resolución de pronombre. Hay sistemas que pueden hacerlo, pero generalmente no muy bien. La última vez que usé uno, causó muchos errores porque no podía decir que Barack Obama era el nombre de un hombre. – Stompchicken

+0

La resolución de anaforas/pronombres es un problema, pero el problema es más general que eso. Si me refiero a "el hombre" en dos discursos diferentes, puede o no referirse a la misma entidad. En un dominio de mundo abierto, este problema potencialmente se aplica a cualquier palabra en una oración. – Cerin

+0

En ese caso, generalmente se denomina resolución de entidad (entre documentos). Hubo un concurso sobre eso hace un tiempo: http://www.kdnuggets.com/news/2007/n08/10i.html No estoy seguro de qué fue. – Stompchicken

Cuestiones relacionadas