18
Raúl Garreta @raulgarreta PyDay Uruguay 2011

Procesamiento de Lenguaje Natural, Python y NLTK

Embed Size (px)

Citation preview

Page 1: Procesamiento de Lenguaje Natural, Python y NLTK

Raúl Garreta

@raulgarreta

PyDay Uruguay 2011

Page 2: Procesamiento de Lenguaje Natural, Python y NLTK

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

Page 3: Procesamiento de Lenguaje Natural, Python y NLTK

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…

Page 4: Procesamiento de Lenguaje Natural, Python y NLTK

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.

Page 5: Procesamiento de Lenguaje Natural, Python y NLTK

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.

Page 6: Procesamiento de Lenguaje Natural, Python y NLTK

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

Page 7: Procesamiento de Lenguaje Natural, Python y NLTK

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.

Page 8: Procesamiento de Lenguaje Natural, Python y NLTK

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)

Page 9: Procesamiento de Lenguaje Natural, Python y NLTK

▪ 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…

Page 10: Procesamiento de Lenguaje Natural, Python y NLTK

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

Simple, extensible, modularizado, infraestructura: Expresiones Regulares

Gramáticas

Parsers

Modelos estadísticos

Clasificadores

Page 11: Procesamiento de Lenguaje Natural, Python y NLTK

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

Recomiendo tutoriales y demos de Jacob Perkins: streamhacker.com

text-processing.com

Page 12: Procesamiento de Lenguaje Natural, Python y NLTK

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…

Page 13: Procesamiento de Lenguaje Natural, Python y NLTK

Importo NLTK

Abro un archivo de texto

Tokenizar en oraciones

Tokenizar en palabras

Page 14: Procesamiento de Lenguaje Natural, Python y NLTK

Etiquetado gramatical

Chunking, extracción de entidades

Page 15: Procesamiento de Lenguaje Natural, Python y NLTK

Importo wordnet

Obtengo synset

Obtengo lemas de sinónimos

Obtengo hipérnimos

Obtengo hipónimos

Page 16: Procesamiento de Lenguaje Natural, Python y NLTK

Defino set de atributos

Obtengo ejemplos

Genero conjuntos de entrenamiento y testeo

Entreno un clasificador

Utilizo el clasificador

Page 17: Procesamiento de Lenguaje Natural, Python y NLTK

¿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

Page 18: Procesamiento de Lenguaje Natural, Python y NLTK