introduccion a la inteligencia artificial´ curso 2009–2010

28
Introducci ´ on a la Inteligencia Artificial Curso 2009–2010 Tema 8: Procesamiento de lenguaje natural Miguel A. Guti´ errez Naranjo Dpto. de Ciencias de la Computaci´on e Inteligencia Artificial Universidad de Sevilla IIA 2009–10 Procesamiento . . . 1

Upload: others

Post on 27-Jun-2022

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 2: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 3: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 4: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 5: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 6: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 7: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

¿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

Page 8: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 9: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 10: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 11: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 12: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 13: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 14: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

Arbol de analisis

pescado

nombre

sintagma_nomimal

comegato

verbo

sintagma_verbal

nombrearticulo

el

sintagma_nominal

oracion

IIA 2009–10 Procesamiento . . . 14

Page 15: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 16: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 17: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 18: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

Concordancia en numero

⊲ Sesion:

?- phrase(oracion,[el,gato,come,pescado]).

Yes

?- phrase(oracion,[los,gato,come,pescado]).

No

IIA 2009–10 Procesamiento . . . 18

Page 19: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 20: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 21: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 22: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 23: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 24: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 25: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 26: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 27: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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

Page 28: Introduccion a la Inteligencia Artificial´ Curso 2009–2010

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