nlp dcg

nlp - ¿Cuáles son buenos puntos de partida para alguien interesado en el procesamiento del lenguaje natural?



dcg (10)

Cycorp tiene una breve descripción de cómo su base de conocimiento de Cyc deriva el significado de las oraciones.

Al utilizar una base de conocimiento masiva de hechos comunes, el sistema puede determinar el análisis más lógico de una oración.

Pregunta

Así que recientemente se me ocurrieron algunos nuevos proyectos posibles que tendrían que lidiar con la obtención de ''significado'' del texto enviado y generado por los usuarios.

El procesamiento del lenguaje natural es el campo que trata este tipo de problemas, y después de algunas investigaciones iniciales encontré el OpenNLP Hub y las colaboraciones universitarias como el proyecto Atteto . Y stackoverflow tiene esto .

Si alguien pudiera vincularme con algunos buenos recursos, desde papeles de investigación y textos introductorios a apis, ¡sería más feliz que un niño de 6 años abriendo sus regalos de navidad!

Actualizar

A través de una de sus recomendaciones, he descubierto opencyc ( ''la base de conocimiento general más grande y más completa del mundo y el motor de razonamiento de sentido común'' ). Aún más sorprendente aún, hay un proyecto que es una versión destilada de opencyc llamada UMBEL . Presenta datos semánticos en la sintaxis rdf / owl / skos n3.

También me encontré con antlr , un generador de analizadores para ''construir reconocedores, intérpretes, compiladores y traductores de descripciones gramaticales'' .

Y aquí hay una pregunta que enumera toneladas de datos libres y abiertos .

Gracias comunidad stackoverflow!


Podrías intentar leer un poco sobre las gramáticas estructuradas por frase , que son básicamente las matemáticas detrás del procesamiento de muchos lenguajes. En realidad no es tan pesado, ya que se basa principalmente en la teoría de conjuntos y gráficos. Lo estudié hace muchas lunas como parte de un curso discreto de matemáticas, y creo que hay muchas buenas referencias disponibles en esta etapa.

Editar: No tanto como esperaba en Google, aunque esta parece una buena fuente de aprendizaje.


Uno de los primeros exploradores en NLP es Noam Chomsky; Escribió pequeños libros sobre el tema en los años 50 a través de los años 70. Puede encontrar esa lectura interesante.


Tough call, NLP es un campo mucho más amplio de lo que la mayoría de la gente cree que es. Básicamente, el lenguaje se puede dividir en varias categorías, lo que requerirá que aprendas cosas totalmente diferentes.

Antes de comenzar, déjeme decirle que dudo que tenga un éxito notable (como profesional, al menos) sin tener un título en algún campo (estrechamente relacionado). Existe una gran cantidad de teoría involucrada, la mayor parte es seca y difícil de aprender. Necesitarás mucha resistencia y, sobre todo, tiempo.

Si te interesa el significado del texto, bueno, esa es la próxima gran cosa. Se predice que los motores de búsqueda semánticos inician la Web 3.0, pero aún estamos lejos de "llegar". Extraer lógica de un texto depende de varios pasos:

  • Tokenización, fragmentación
  • Desambiguación en un nivel léxico (el tiempo vuela como una flecha, pero la fruta vuela como un plátano).
  • Análisis sintáctico
  • Análisis morfológico (tiempo, aspecto, caso, número, etc.)

Una pequeña lista, fuera de mi cabeza. Hay más :-), y muchos más detalles para cada punto. Por ejemplo, cuando digo "análisis sintáctico", ¿qué es esto? Hay muchos algoritmos de análisis diferentes, y hay tantos formalismos de análisis. Entre los más poderosos están la gramática de árbol y la gramática de estructura de frase dirigida por la cabeza . Pero ambos apenas se usan en el campo (por ahora). Por lo general, tendrá que lidiar con un enfoque generativo a medias, y tendrá que realizar un análisis morfológico usted mismo.

Pasar de allí a la semántica es un gran paso. Una interfaz de sintaxis / semántica depende tanto del marco sintáctico como semántico empleado, y todavía no existe una solución de trabajo única. En el lado semántico, hay una semántica generativa clásica, luego está la Teoría de la Representación del Discurso , la semántica dinámica y muchas más. Incluso el formalismo lógico en el que todo está basado todavía no está bien definido. Algunos dicen que uno debería usar lógica de primer orden, pero eso apenas parece suficiente; luego hay una lógica intensional, tal como la usó Montague, pero eso parece demasiado complejo y computacionalmente inviable. También hay una lógica dinámica (Groenendijk y Stokhof han sido pioneros en este aspecto. ¡Muy bien!) Y muy recientemente, este verano en realidad, Jeroen Groenendijk presentó un nuevo formalismo, Semántica inquisitiva , también muy interesante.

Si quieres empezar en un nivel muy simple, lee Blackburn y Bos (2005) , ¡es una gran cosa y la introducción de facto a la semántica computacional! Recientemente extendí su sistema para cubrir la partición-teoría de preguntas (¡la respuesta a preguntas es una bestia!), Como lo proponen Groenendijk y Stokhof (1982), pero desafortunadamente, la teoría tiene una complejidad de O (n²) sobre el dominio de individuos . Mientras hacía eso, encontré que la implementación de B & B era un poco, erh ... hackish, en lugares. Aún así, realmente te ayudará a sumergirte en la semántica computacional, y sigue siendo un escaparate impresionante de lo que se puede hacer. Además, merecen puntos extra interesantes para implementar una gramática que se resuelve en Pulp Fiction (la película).

Y mientras estoy en eso, elige Prolog. Una gran cantidad de investigaciones en semántica computacional se basa en Prolog. ¡Aprenda Prolog ahora! es una buena introducción. También puedo recomendar "The Art of Prolog" y "Prolog Programming in Depth" de Covington y "Natural Language Processing for Prolog Programmers", el primero de los cuales está disponible de forma gratuita en línea.


Esto es realmente duro. Comenzaría obteniendo al menos una Maestría en Lingüística, y luego trabajaría para obtener mi doctorado en ciencias de la computación, concentrándome en la PNL.

El problema es que la mayoría de nosotros no comprende qué es el lenguaje. Y sin esa comprensión, es realmente difícil implementar una solución.

Otros comentarios dan algunas lecturas, que probablemente estén bien si quieres empezar a jugar con un pequeño subconjunto del problema, pero para encontrar una solución realmente sólida, no hay atajos. Necesitas la formación académica en ambas disciplinas.


Un lugar más simple para comenzar con los bloques de construcción es mirar la documentación de un paquete que intenta hacerlo. Recomendaría el Python [Natural Language Toolkit (NLTK) 1 , particularmente por su libro bien escrito y gratuito , que está lleno de ejemplos. No te llevará a lo que deseas (que es un problema difícil para la IA), pero te dará una buena base. NLTK tiene analizadores, fragmentadores, gramáticas libres de contexto y más.


Una introducción muy agradable y legible es The Language Instinct por Steven Pinker. Entra en el material de Chomsky y también cuenta historias interesantes desde el ángulo de la biología evolutiva. Puede valer la pena comenzar con algo así antes de sumergirse en los trabajos de Chomsky y el trabajo relacionado, si es nuevo en el tema.


¡Si pasa a través de Prolog hasta el capítulo de DCG en Learn Prolog Now! mencionado anteriormente por el Sr. Dimitrov, tendrá un buen comienzo para obtener algo de semántica en su sistema, ya que Prolog le ofrece una forma muy simple de mantener una base de datos de conocimiento y creencia, que puede actualizarse mediante preguntas y respuestas.

En cuanto a la literatura, tengo una recomendación importante para usted: agotar y comprar el procesamiento del habla y el lenguaje por Jurafsky y Martin. Es más o menos el libro sobre PNL (el primer capítulo está disponible en línea); utilizado en cursos universitarios frillion pero también muy legible para los no lingüistas y orientados a la práctica, mientras que al mismo tiempo se adentra bastante en los problemas lingüísticos. Realmente no puedo recomendarlo lo suficiente. Los capítulos 17, 18 y 21 parecen ser lo que estás buscando (14, 15 y 18 en la primera edición); te muestran una notación simple de lambda que se traduce bastante bien en Prolog DCG con características.

Oh, por cierto, en obtener los maestros en lingüística; si te gusta la semántica de NL, prefiero recomendarte tomar todos los cursos relacionados con AI que puedas encontrar (aunque cualquier curso sobre semántica lingüística "simple", lógica, semántica lógica, DRT , LFG / HPSG / CCG, NL análisis sintáctico, teoría lingüística formal, etc. no dañaría ...)

Leer la literatura original de Chomsky no es realmente útil; por lo que yo sé, no hay implementaciones actuales que correspondan directamente a sus teorías, todas las cosas útiles de él están casi subsumidas por otras teorías (y cualquiera que permanezca cerca de los lingüistas por cualquier cuestión de tiempo absorberá el conocimiento de Chomsky por ósmosis) .


Recomiendo jugar con el NLTK y leer el libro NLTK . El NLTK es muy poderoso y fácil de ingresar.


Chomsky es una fuente totalmente equivocada para buscar PNL (y él mismo lo diría, enfáticamente) - ver: " Métodos estadísticos y lingüística " por Abney.

Jurafsky y Martin, mencionados anteriormente, son una referencia estándar, pero yo prefiero Manning y Schütze . Si habla en serio sobre PNL, probablemente quiera leer ambos. Hay videos de uno de los cursos de Manning disponibles en línea .