introduccion a la inteligencia artificial´ curso 2009–2010
TRANSCRIPT
Introduccion a la Inteligencia Artificial Curso 2009–2010
Tema 8: Procesamiento de lenguaje natural
Miguel A. Gutierrez Naranjo
Dpto. de Ciencias de la Computacion e Inteligencia Artificial
Universidad de Sevilla
IIA 2009–10 Procesamiento . . . 1
Lenguaje natural
⊲ El lenguaje natural es el utilizado por los seres humanos paracomunicarse
⊲ Se le llama natural en contraposicion a los lenguajes formales(programacion, logica, . . . )
⊲ Procesamiento: comprension y generacion
Comprension: a partir de una frase escrita o hablada, obteneruna representacion formal que permita efectuar las accionesadecuadas a la informacion recibida
Generacion: transformacion de una representacion formal dealgo que se quiere comunicar, a una expresion en algun len-guaje natural, escrita o hablada
IIA 2009–10 Procesamiento . . . 2
Comprension del lenguaje natural
⊲ Fases en el proceso de comprension:
Percepcion: reconocimiento del habla y/o escritura
Analisis: sintactico (obtener la estructura de una frase a par-tir de la secuencia de palabras) y semantico (obtener un sig-nicado a partir de la estructura sintactica)
Eliminacion de ambiguedades
Incorporacion a la base de conocimiento
⊲ En lo que sigue, nos centraremos en el analisis sintactico ysemantico de frases escritas
IIA 2009–10 Procesamiento . . . 3
Gramaticas formales
⊲ Gramaticas formales: G = (N, T, P, S)
N : sımbolos no terminales (categorıas sintacticas)
T : sımbolos terminales (palabras del idioma) con N ∩ T = ∅
P : conjunto de reglas de produccion l → r, donde l, r ∈ (N∪T )∗
S ∈ N : sımbolo inicial
⊲ En una gramatica independiente del contexto (GIC) las reglasson de la forma A → r con A ∈ N y r ∈ (N ∪ T )∗
Derivacion xAy ⇒ xwy mediante la regla A → w
IIA 2009–10 Procesamiento . . . 4
Gramaticas formales
⊲ Lenguaje definido por una gramatica:
L(G) = {x ∈ T ∗ : S∗⇒ x}
⊲ El problema del reconocimiento de frases y del analisis sintacti-co:
Dado x ∈ T ∗ y una gramatica G, decidir si x ∈ L(G), encontran-do una derivacion (arbol de analisis sintactico) que conectaS con x.
IIA 2009–10 Procesamiento . . . 5
Notacion Prolog para gramaticas formales
⊲ Ejemplo de gramatica: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 2009–10 Procesamiento . . . 6
¿Por que escribir las gramaticas en notacion Prolog?
⊲ Porque pueden ser cargadas directamente en Prolog disponiendode un analizador sintactico ejecutable de manera inmediata eincluso 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 2009–10 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 2009–10 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 que?
IIA 2009–10 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 2009–10 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 que?
IIA 2009–10 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 2009–10 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 2009–10 Procesamiento . . . 13
Arbol de analisis
pescado
nombre
sintagma_nomimal
comegato
verbo
sintagma_verbal
nombrearticulo
el
sintagma_nominal
oracion
IIA 2009–10 Procesamiento . . . 14
Arbol de analisis
⊲ Definicion
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].
⊲ Sesion:
?- phrase(oracion(A),[el,gato,come,pescado]).
A = o(sn(art(el), n(gato)), sv(v(come), sn(n(pescado))))
IIA 2009–10 Procesamiento . . . 15
Concordancia en genero
⊲ Definicion:
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].
⊲ Sesion:
?- phrase(oracion,[el,gato,come,pescado]). ====> Yes
?- phrase(oracion,[la,gato,come,pescado]). ====> No
IIA 2009–10 Procesamiento . . . 16
Concordancia en numero
⊲ Definicion:
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 2009–10 Procesamiento . . . 17
Concordancia en numero
⊲ Sesion:
?- phrase(oracion,[el,gato,come,pescado]).
Yes
?- phrase(oracion,[los,gato,come,pescado]).
No
IIA 2009–10 Procesamiento . . . 18
Gramatica para lenguaje formal
⊲ Lenguaje formal {anbn ; n ∈ N}
s --> [].
s --> i,s,d.
i --> [a].
d --> [b].
⊲ Sesion:
?- 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 2009–10 Procesamiento . . . 19
Gramatica para lenguaje formal
⊲ Lenguaje formal {anbncn ; 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).
⊲ Sesion:
?- phrase(s,[a,a,b,b,c,c]).
Yes
?- phrase(s,X).
X = []; X = [a,b,c]; ...
IIA 2009–10 Procesamiento . . . 20
Gramatica con llamadas a Prolog
⊲ Lenguaje formal {a2nb2nc2n ; 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 2009–10 Procesamiento . . . 21
Gramatica con llamadas a Prolog
⊲ Sesion:
?- 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 2009–10 Procesamiento . . . 22
Separacion de reglas y lexicon
⊲ 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)}.
⊲ Lexicon:
lex(el,articulo). lex(gato,nombre).
lex(perro,nombre). lex(pescado,nombre).
lex(carne,nombre). lex(come,verbo).
IIA 2009–10 Procesamiento . . . 23
Lexicon con concordancia
⊲ Reglas:
oracion --> sintagma_nominal(N),sintagma_verbal(N).
sintagma_nominal(N) --> nombre(N).
sintagma_nominal(N) --> art~Aculo(N), nombre(N).
sintagma_verbal(N) --> verbo(N),sintagma_nominal(_).
articulo(N) --> [Palabra],{lex(Palabra,art~Aculo,N)}.
nombre(N) --> [Palabra],{lex(Palabra,nombre,N)}.
verbo(N) --> [Palabra],{lex(Palabra,verbo,N)}.
IIA 2009–10 Procesamiento . . . 24
Lexicon con concordancia
⊲ Lexicon:
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 2009–10 Procesamiento . . . 25
Lexicon con genero y numero
⊲ 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 2009–10 Procesamiento . . . 26
Lexicon con genero y numero
⊲ Lexicon: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 2009–10 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 (Thirded.) (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 2009–10 Procesamiento . . . 28