Procesamiento de Lenguaje Natural, Python y NLTK

Preview:

Citation preview

Raúl Garreta

@raulgarreta

PyDay Uruguay 2011

Subárea de Inteligencia Artificial, Ciencias de la Computación.

Estudia métodos que permitan a las máquinas interactuar con las personas mediante lenguaje natural.

Poder extraer significado, información, manipular texto.

Área interdisciplinaria: Lingüística + Ciencias Computación + Estadística

Traducción automática Systran, Google Translate

Clasificación de texto: Spam filtering (spam/ham)

Topic classification (política, negocios, tecnología, deportes, ...)

Sentiment analysis (pos/neg/neutral)

Recuperación de Información Search engines: Google Search, Lucene

Text databases: MongoDB, CouchDB

Extracción de Información Resúmenes automáticos, palabras clave, categoría, entidades, fechas,

direcciones, emails. Scraping

Entendimineto / Generación de lenguaje natural: Question & Answering, Chatbots

Corrección Automática Compiladores / Intérpretes Mucho más…

50’s - Alan Turing “Computing Machinery and Intelligence” “Turing Test”

60’ – Noam Chomsky “Syntactic Structures” Sistemas basados en reglas. Traducción automática

70’s – Ontologías, Chatbots 80’s – Sistemas basados en

Aprendizaje Automático. 90’s – Mayor poder de cómputo.

Teorías Lingüísticas de Chomsky pierden fuerza. Modelos estadísticos.

Subárea dentro de Inteligencia Artificial.

Estudia algoritmos que tienen la capacidad de aprender a realizar una tarea automáticamente.

Mejoran su performance con la experiencia.

Permiten resolver tareas complejas, cuya solución es muy difícil o imposible de realizar manualmente.

Segmentación de Oraciones Un “.” puede ser decimal, suspensivos, abreviación, etc.

Segmentación de Palabras (Tokenización) En algunos lenguajes no es simple

Análisis Lexicográfico (segmentación de morfemas) Stemming / Lemmatizing: Obtener forma canónica, lexema, raíz

Ej: run, runs, ran, running -> run

Afijos: prefijos, infijos, sufijos (modifican significado de la palabra)

Etiquetado Gramatical (POS Tagging) Asignar una etiqueta gramatical a una palabra, ej: sustantivo, adjetivo, verbo, etc.

Ej: “La (art) pelota(sust) es(verbo) redonda(adj)”

Reconocimiento de Entidades (NER) Identificar entidades: personas, organizaciones, lugares, etc.

Análisis Sintáctico (Parsing) Identificar estructuras gramaticales en una oración.

Obtener árbol de parsing a partir de una gramática formal.

Análisis Semántico

Ambiguedades lexicas ej:

“banco” (financiero, plaza)

“planta” (industrial, natural).

Ambiguedades sintácticas ej: “Vi un hombre con un telescopio” Múltiples idiomas, traducción Semántica, lógica, metáforas,

ironías, anáforas, etc.

Baterías incluidas para procesamiento de texto:

Soporte nativo de Unicode

Muchas funciones para procesamiento de texto

Baja barrera de entrada, prototipado rápido

Open source (éxito en el mundo académico y por lo tanto en PLN)

▪ startswith/endswith

▪ strip

▪ split

▪ upper, lower

▪ find, replace, count

▪ join

▪ Slicing

s[0] s[2:7] s[6:] s[:5] s[-1]

▪ String = list, set

contar vocabulario: len(set(text))

ordenar vocabulario: sorted(set(text))

▪ módulo re para expresiones regulares

▪ parsers de fechas (dateutil)

▪ y mucho mas…

Para realizar cosas mas complejas, necesitamos más librerías.

Simple, extensible, modularizado, infraestructura: Expresiones Regulares

Gramáticas

Parsers

Modelos estadísticos

Clasificadores

Comunidad grande, académica, tanto de desarrolladores y usuarios.

Recomiendo tutoriales y demos de Jacob Perkins: streamhacker.com

text-processing.com

Tokenizador de palabras Tokenizador de oraciones Etiquetador gramatical Chunkers Reconocedor de entidades Expresiones regulares Gramáticas Parsers Stemmers/Lemmatizers Wordnet Algoritmos de Aprendizaje Automático Corpus, grandes colecciones de texto Más…

Importo NLTK

Abro un archivo de texto

Tokenizar en oraciones

Tokenizar en palabras

Etiquetado gramatical

Chunking, extracción de entidades

Importo wordnet

Obtengo synset

Obtengo lemas de sinónimos

Obtengo hipérnimos

Obtengo hipónimos

Defino set de atributos

Obtengo ejemplos

Genero conjuntos de entrenamiento y testeo

Entreno un clasificador

Utilizo el clasificador

¿Qué más se puede hacer?

Mucho…

Dificultades

Requiere cierto conocimiento de la “teoría”

Recursos para otros idiomas, ej: Español

Ventajas

Simple, rápido, poderoso, extensible

Recommended