Introducción a la Inteligencia Artificial Curso 2005 2006 Tema 8: Procesamiento de lenguaje natural Miguel A. Gutiérrez Naranjo Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla IIA 2005 06 Procesamiento... 1
Lenguaje natural El lenguaje natural es el utilizado por los seres humanos para comunicarse Se le llama natural en contraposición a los lenguajes formales (programación, lógica,... ) Procesamiento: comprensión y generación Comprensión: a partir de una frase escrita o hablada, obtener una representacion formal que permita efectuar las acciones adecuadas a la información recibida Generación: transformación de una representación formal de algo que se quiere comunicar, a una expresión en algún lenguaje natural, escrita o hablada IIA 2005 06 Procesamiento... 2
Comprensión del lenguaje natural Fases en el proceso de comprensión: Percepción: reconocimiento del habla y/o escritura Análisis: sintáctico (obtener la estructura de una frase a partir de la secuencia de palabras) y semántico (obtener un signicado a partir de la estructura sintáctica) Eliminación de ambigüedades Incorporación a la base de conocimiento En lo que sigue, nos centraremos en el análisis sintáctico y semántico de frases escritas IIA 2005 06 Procesamiento... 3
Gramáticas formales Gramáticas formales: G = (N, T, P, S) N: símbolos no terminales (categorías sintácticas) T : símbolos terminales (palabras del idioma) con N T = P : conjunto de reglas de producción l r, donde l, r (N T ) S N: símbolo inicial En una gramática independiente del contexto (GIC) las reglas son de la forma A r con A N y r (N T ) Derivación xay xwy mediante la regla A w IIA 2005 06 Procesamiento... 4
Gramáticas formales Lenguaje definido por una gramática: L(G) = {x T : S x} El problema del reconocimiento de frases y del análisis sintáctico: Dado x T y una gramática G, decidir si x L(G), encontrando una derivación (árbol de análisis sintáctico) que conecta S con x. IIA 2005 06 Procesamiento... 5
Notación Prolog para gramáticas formales Ejemplo de gramática: oracion --> sintagma_nominal, sintagma_verbal. sintagma_nominal --> nombre. sintagma_nominal --> articulo, nombre. sintagma_verbal --> verbo, sintagma_nominal. articulo --> [el]. nombre --> [gato]. nombre --> [perro]. nombre --> [pescado]. nombre --> [carne]. verbo --> [come]. Uso de > Punto al final de cada regla Símbolos terminales entre corchetes IIA 2005 06 Procesamiento... 6
Por que escribir las gramáticas en notación Prolog? Porque pueden ser cargadas directamente en Prolog disponiendo de un analizador sintáctico ejecutable de manera inmediata e incluso de un generador de frases del lenguaje.?- [g1]....?- phrase(oracion,[el,gato,come,carne]). Yes?- phrase(oracion,[gato,come,pescado,carne]). No?- phrase(sintagma_verbal,[come,pescado]). Yes?- phrase(oracion,x). X = [gato, come, gato] ; X = [gato, come, perro] ;... IIA 2005 06 Procesamiento... 7
Reglas recursivas I Extender el ejemplo de GCD para aceptar oraciones como [el,gato,come,pescado,o,el,perro,come,pescado] Primera propuesta oracion --> oracion, conjuncion, oracion. oracion --> sintagma_nominal, sintagma_verbal. sintagma_nominal --> nombre. sintagma_nominal --> articulo, nombre. sintagma_verbal --> verbo, sintagma_nominal. articulo --> [el]. nombre --> [gato]. nombre --> [perro]. nombre --> [pescado]. nombre --> [carne]. verbo --> [come]. conjuncion --> [y]. conjuncion --> [o]. IIA 2005 06 Procesamiento... 8
Reglas recursivas I Pero...?- phrase(oracion,[el,gato,come,pescado, o,el,perro,come,pescado]). ERROR: Out of local stack Exception: (26,461) oracion([el, gato, come, pescado, o, el, perro, come...], _L502750)? Por qué? IIA 2005 06 Procesamiento... 9
Reglas recursivas II Segunda propuesta oracion --> sintagma_nominal, sintagma_verbal. oracion --> oracion, conjuncion, oracion. sintagma_nominal --> nombre. sintagma_nominal --> articulo, nombre. sintagma_verbal --> verbo, sintagma_nominal. articulo --> [el]. nombre --> [gato]. nombre --> [perro]. nombre --> [pescado]. nombre --> [carne]. verbo --> [come]. conjuncion --> [y]. conjuncion --> [o]. IIA 2005 06 Procesamiento... 10
Reglas recursivas II Pero...?- phrase(oracion,[el,gato,come,pescado, o,el,perro,come,pescado]). Yes?- phrase(oracion,[un,gato,come]). ERROR: Out of local stack Exception: (41,634) oracion([un, gato, come], _L499657)? Por qué? IIA 2005 06 Procesamiento... 11
Reglas recursivas III Tercera propuesta oracion --> oracion_simple. oracion --> oracion_simple, conjuncion, oracion. oracion_simple --> sintagma_nominal,sintagma_verbal. sintagma_nominal --> nombre. sintagma_nominal --> articulo, nombre. sintagma_verbal --> verbo, sintagma_nominal. articulo --> [el]. nombre --> [gato]. nombre --> [perro]. nombre --> [pescado]. nombre --> [carne]. verbo --> [come]. conjuncion --> [y]. conjuncion --> [o]. IIA 2005 06 Procesamiento... 12
Reglas recursivas III Ahora...?- phrase(oracion,[el,gato,come,pescado, o,el,perro,come,pescado]). Yes?- phrase(oracion,[un,gato,come]). No IIA 2005 06 Procesamiento... 13
Arbol de análisis oracion sintagma_nominal sintagma_verbal articulo nombre verbo sintagma_nomimal nombre el gato come pescado IIA 2005 06 Procesamiento... 14
Arbol de análisis Definición oracion(o(sn,sv)) --> sintagma_nominal(sn),sintagma_verbal(sv). sintagma_nominal(sn(n)) --> nombre(n). sintagma_nominal(sn(art,n)) --> articulo(art),nombre(n). sintagma_verbal(sv(v,sn)) --> verbo(v),sintagma_nominal(sn). articulo(art(el)) --> [el]. nombre(n(gato)) --> [gato]. nombre(n(perro)) --> [perro]. nombre(n(pescado)) --> [pescado]. nombre(n(carne)) --> [carne]. verbo(v(come)) --> [come]. Sesión:?- phrase(oracion(a),[el,gato,come,pescado]). A = o(sn(art(el), n(gato)), sv(v(come), sn(n(pescado)))) IIA 2005 06 Procesamiento... 15
Concordancia en género Definición: oracion --> sintagma_nominal, sintagma_verbal. sintagma_nominal --> nombre(_). sintagma_nominal --> articulo(g), nombre(g). sintagma_verbal --> verbo, sintagma_nominal. articulo(masculino) --> [el]. articulo(femenino) --> [la]. nombre(masculino) --> [gato]. nombre(femenino) --> [gata]. nombre(masculino) --> [pescado]. verbo --> [come]. Sesión:?- phrase(oracion,[el,gato,come,pescado]). ====> Yes?- phrase(oracion,[la,gato,come,pescado]). ====> No IIA 2005 06 Procesamiento... 16
Concordancia en número Definición: oracion --> sintagma_nominal(n), sintagma_verbal(n). sintagma_nominal(n) --> nombre(n). sintagma_nominal(n) --> articulo(n), nombre(n). sintagma_verbal(n) --> verbo(n), sintagma_nominal(_). articulo(singular) --> [el]. articulo(plural) --> [los]. nombre(singular) --> [gato]. nombre(plural) --> [gatos]. nombre(singular) --> [perro]. nombre(plural) --> [perros]. nombre(singular) --> [pescado]. nombre(singular) --> [carne]. verbo(singular) --> [come]. verbo(plural) --> [comen]. IIA 2005 06 Procesamiento... 17
Concordancia en número Sesión:?- phrase(oracion,[el,gato,come,pescado]). Yes?- phrase(oracion,[los,gato,come,pescado]). No IIA 2005 06 Procesamiento... 18
Gramática para lenguaje formal Lenguaje formal {a n b n ; n N} s --> []. s --> i,s,d. i --> [a]. d --> [b]. Sesión:?- phrase(s,[a,a,b,b]). Yes?- phrase(s,[a,a,b,b,b]). No?- phrase(s,x). X = [] ; X = [a, b] ; X = [a, a, b, b] ;... IIA 2005 06 Procesamiento... 19
Gramática para lenguaje formal Lenguaje formal {a n b n c n ; n N} s --> bloque_a(n), bloque_b(n), bloque_c(n). bloque_a(0) --> []. bloque_a(suc(n)) --> [a], bloque_a(n). bloque_b(0) --> []. bloque_b(suc(n)) --> [b], bloque_b(n). bloque_c(0) --> []. bloque_c(suc(n)) --> [c], bloque_c(n). Sesión:?- phrase(s,[a,a,b,b,c,c]). Yes?- phrase(s,x). X = []; X = [a,b,c];... IIA 2005 06 Procesamiento... 20
Gramática con llamadas a Prolog Lenguaje formal {a 2n b 2n c 2n ; n N} s --> bloque_a(n), bloque_b(n), bloque_c(n),{par(n)}. bloque_a(0) --> []. bloque_a(s(n)) --> [a],bloque_a(n). bloque_b(0) --> []. bloque_b(s(n)) --> [b],bloque_b(n). bloque_c(0) --> []. bloque_c(s(n)) --> [c],bloque_c(n). par(0). par(s(s(n))) :-par(n). IIA 2005 06 Procesamiento... 21
Gramática con llamadas a Prolog Sesión:?- phrase(s,[a,a,b,b,c,c]). Yes?- phrase(s,[a,b,c]). No?- phrase(s,x). X = [] ; X = [a,a,b,b,c,c] ; X = [a,a,a,a,b,b,b,b,c,c,c,c] ; X = [a,a,a,a,a,a,b,b,b,b,b,b,c,c,c,c,c,c] Yes IIA 2005 06 Procesamiento... 22
Separación de reglas y lexicón Reglas: oracion --> sintagma_nominal, sintagma_verbal. sintagma_nominal --> nombre. sintagma_nominal --> articulo, nombre. sintagma_verbal --> verbo, sintagma_nominal. articulo --> [Palabra], {lex(palabra,articulo)}. nombre --> [Palabra], {lex(palabra,nombre)}. verbo --> [Palabra], {lex(palabra,verbo)}. Lexicón: lex(el,articulo). lex(perro,nombre). lex(carne,nombre). lex(gato,nombre). lex(pescado,nombre). lex(come,verbo). IIA 2005 06 Procesamiento... 23
Lexicón con concordancia Reglas: oracion --> sintagma_nominal(n),sintagma_verbal(n). sintagma_nominal(n) --> nombre(n). sintagma_nominal(n) --> art~a?culo(n), nombre(n). sintagma_verbal(n) --> verbo(n),sintagma_nominal(_). articulo(n) --> [Palabra],{lex(Palabra,art~A?culo,N)}. nombre(n) --> [Palabra],{lex(Palabra,nombre,N)}. verbo(n) --> [Palabra],{lex(Palabra,verbo,N)}. IIA 2005 06 Procesamiento... 24
Lexicón con concordancia Lexicón: lex(el,articulo,singular). lex(los,articulo,plural). lex(gato,nombre,singular). lex(gatos,nombre,plural). lex(perro,nombre,singular). lex(perros,nombre,plural). lex(pescado,nombre,singular). lex(pescados,nombre,plural). lex(carne,nombre,singular). lex(carnes,nombre,plural). lex(come,verbo,singular). IIA 2005 06 Procesamiento... 25
Lexicón con género y número Reglas: oracion --> sintagma_nominal(n),verbo(n),complemento. complemento --> []. complemento --> sintagma_nominal(_). sintagma_nominal(n) --> nombre(_,n). sintagma_nominal(n) --> determinante(g,n),nombre(g,n). determinante(g,n) --> [P],{lex(P,determinante,G,N)}. nombre(g,n) --> [P],{lex(P,nombre,G,N)}. verbo(n) --> [P],{lex(P,verbo,N)}. IIA 2005 06 Procesamiento... 26
Lexicón con género y número Lexicón: lex(el,determinante,masculino,singular). lex(los,determinante,masculino,plural). lex(la,determinante,femenino,singular). lex(las,determinante,femenino,plural). lex(un,determinante,masculino,singular). lex(una,determinante,femenino,singular). lex(unos,determinante,masculino,plural). lex(unas,determinante,femenino,plural). lex(profesor,nombre,masculino,singular). lex(profesores,nombre,masculino,plural). lex(profesora,nombre,femenino,singular). lex(profesoras,nombre,femenino,plural). lex(libro,nombre,masculino,singular). lex(libros,nombre,masculino,plural). lex(lee,verbo,singular). IIA 2005 06 Procesamiento... 27
Bibliografía P. Blackburn, J. Bos y K. Striegnitz Learn Prolog Now! [http://www.coli.uni-sb.de/ kris/learn-prolog-now] I. Bratko Prolog Programming for Artificial Intelligence (Third ed.) (Prentice Hall, 2001) P. Flach Simply Logical (Intelligent Reasoning by Example) (John Wiley 1994) U. Nilsson y J. Maluszynski Logic, Programming and Prolog (2nd ed.) (Autores, 2000) [http://www.ida.liu.se/ ulfni/lpp] IIA 2005 06 Procesamiento... 28