Está en la página 1de 8

REDES SEMÁNTICAS

Inteligencia Artificial
Universidad de Talca, II Semestre 2005

Jorge Pérez R.

1
Redes Semánticas
Las redes semánticas son estructuras utilizadas para la re-
presentación de conocimiento en Inteligencia Artificial.
Son especialmente útiles para representar conocimiento de
taxonomı́as.
Una red semántica es un grafo dirigido en el cual los nodos
corresponden a:
• Constantes de relación tales como clases (como en los
lenguaje orientado a objetos) y propiedades.
• Instancias: objetos de alguna clase.
Las aristas en una red semántica están también etiquetadas y
representan relaciones entre clases, propiedades e instancias.
Un ejemplo:

Alas Plumas
tiene
tiene

Ave
Semillas
Deseos
come subclase
subclase
tiene

Canario Halcon
es un
es un

Piolin Pedro

Tenemos dos objetos, Piolin y Pedro. Intuitivamente pode-


mos inferir que Piolin es un ave dado que canario es una
subclase de ave y Piloin es un canario, podemos inferir tam-
bién que Piolin tiene alas.
No hay un significado preciso para una red semántica cual-
quiera, este dependerá de la aplicación y debe ser especifica-
do por el diseñador de la red.

2
Redes Semánticas en PROLOG

Para modelar redes semánticas en PROLOG, necesitamos


codificar el grafo que la representa. En nuestro ejemplo po-
demos utilizar los predicados:
• instancia(Objeto,Clase) utilizado para decir que el obje-
to Objeto pertenece a la clase Clase. En nuestro ejemplo
tendremos los hechos
instancia(piolin,canario).
instancia(pedro,halcon).
• subclase(Clase1,Clase2) para indicar que la clase Clase1
está contenida en, o forma parte de la clase Clase2. En
nuestro ejemplo tendremos:
subclase(canario,ave).
subclase(halcon,ave).
• tiene p(Clase1,Propiedad,Clase2) que representa una rela-
ción entre dos clases, indica que la clase Clase1 está relacio-
nada con la clase Clase2 mediante la propiedad Propiedad.
En nuestro ejemplo:
tiene_p(canario,come,semillas).
tiene_p(ave,tiene,alas).
tiene_p(ave,tiene,plumas).
tiene_p(halcon,tiene,deseos).
Como se ve en este ejemplo, un grafo cualquiera puede ser
codificado con un pequeño programa en PROLOG en el que
los nodos, y los arcos (junto con sus etiquetas) son modela-
dos como conjuntos de hechos.
Los ejemplos de árboles genealógicos que hemos visto son
una clase particular de red semántica en donde la mayorı́a de
los nodos son instancias que están relacionadas por propie-
dades como ’ser hijo de’.

3
Redes Semánticas: Ejemplo

Consideremos una red más rica de ejemplo


instancia(piolin,canario).
instancia(pedro,halcon).
instancia(juan,halcon).
instancia(juancho,cocodrilo).
instancia(marcela,pinguino).

subclase(ave,oviparo).
subclase(reptil,oviparo).
subclase(canario,ave).
subclase(halcon,ave).
subclase(ave,animal).
subclase(reptil,animal).
subclase(cocodrilo,reptil).
subclase(pinguino,ave).

tiene_p(canario,come,semillas).
tiene_p(ave,tiene,alas).
tiene_p(ave,tiene,plumas).
tiene_p(halcon,tiene,deseos).
tiene_p(ave,puede,volar).
tiene_p(reptil,tiene,escamas).
Dada una red semántica, uno desea ser capaz de realizar
consultas relativas a la red, por ejemplo ¿es Juan un ave? En
nuestro caso la respuesta deberı́a ser SI.
O bien, en forma más general, querremos responder pregun-
tas como ¿a qué clases pertenece Juancho?

4
Respondiendo Consultas

La siguiente regla nos permite consultar por las clases a las


que pertenece un objeto:
es(Clase,Obj):- instancia(Obj,Clase).
es(Clase,Obj):- instancia(Obj,Clasep),
subc(Clasep,Clase).

subc(C1,C2):- subclase(C1,C2).
subc(C1,C2):- subclase(C1,C3),
subc(C3,C2).
El predicado es(Clase,X) se satisface cuando X pertenece a
la clase Clase. Para responder esta pregunta estamos supo-
niendo que un objeto es una instancia de una clase C si es
una instancia de C o de cualquier subclase de C.
La relación subc nos entrega todos los pares de subclases
generadas por transitividad (si C1 es subclase de C2 y C2 es
subclase de C3, entonces C1 es subclase de C3 ).
Con las reglas anteriores y la red del ejemplo, obtenemos:
?- es(reptil, juancho). ?- es(canario, marcela).
Yes No

?- es(X,juan). ?- es(animal,X).
X = halcon ; X = piolin ;
X = ave ; X = pedro ;
X = oviparo ; X = juan ;
X = animal ; X = juancho ;
No X = marcela;
No

5
Respondiendo Consultas (cont.)

Suponga ahora que queremos preguntar qué propiedades tie-


nen objetos cualesquiera, la siguiente regla cumple este ob-
jetivo:
propiedad(Obj,Prop):- es(Clase,Obj),
tiene_p(Clase,Fun,Arg),
Prop =.. [Fun,Arg].
Ası́ obtenemos:
?- propiedad(piolin,X).
X = come(semillas) ;
X = tiene(alas) ;
X = tiene(plumas) ;
X = puede(volar) ;
No
Ahora, supongamos que queremos establecer que los pingüinos
no pueden volar y para esto agregamos entonces:
tiene_p(pinguino,no_puede,volar).
Con lo cual observamos:
?- propiedad(marcela,X).
X = no_puede(volar) ;
X = tiene(alas) ;
X = tiene(plumas) ;
X = puede(volar) ;
No
Obtenemos que Marcela puede y no puede volar. Esto ocurre
pues no hemos incorporado información de incompatibilidad
entre puede y no puede.

6
Información Incompatible

Para agregar información de incompatibilidad, podemos in-


ventar un nuevo predicado incompatible(Prop1,Prop2) para
representar que un objeto nunca tiene simultáneamente las
porpiedades Prop1 y Prop2. En el ejemplo podemos escribir:
incompatible(puede(X),no_puede(X)).
De modo que ahora ‘puede volar’ y ‘no puede volar’ son
propiedades incompatibles.
De manera más general podrı́amos incluir incompatibilidad
de propiedades si una es igual a la otra pero comienza con
‘no ’
incompatible(X,Y) :-
X =.. [Pred,Arg], Y =.. [No_Pred,Arg],
name(No_Pred,[110,111,95|L]), name(Pred,L).
Ahora debemos manejar esta información de incompatibilidad
al responder consultas, para esto redefiniremos la consulta
propiedad y los demás predicados incorporando un concepto
de distancia en la herencia.
Por ejemplo si un objeto O pertenece a una clase C1 que
es subclase de C2 y hereda propiedades incompatibles desde
ellas, la propiedad que permaencerá en O será la heredada
desde C1 (la más cercana).
Resumiendo, si un objeto hereda dos propiedades incompa-
tibles, entonces se acepta como cierta aquella que es más
especı́fica, o sea, heredada desde la clase más cercana.

7
Información Incompatible (cont.)

Los predicados agregados y modificados resultan entonces:

es(Clase,Obj,0):- instancia(Obj,Clase).
es(Clase,Obj,Dist):- instancia(Obj,Clasep),
subcn(Clasep,Clase,Dist).

subcn(C1,C2,1):- subclase(C1,C2).
subcn(C1,C2,N):- subclase(C1,C3),
subcn(C3,C2,M), N is M+1.

propiedad(Obj,Prop,Dist):-
es(Clase,Obj,Dist),
tiene_p(Clase,Fun,Arg),
Prop =.. [Fun,Arg].

propiedad(Obj,Prop):- propiedad(Obj,Prop,Dist),
\+ incomp(Obj,Prop,Dist).

incomp(Obj,Prop,Dist):- propiedad(Obj,Prop2,Dist2),
(incompatible(Prop,Prop2);
incompatible(Prop2,Prop)),
Dist2 =< Dist.

Ası́, en el caso de Marcela, observaremos:


?- propiedad(marcela,X).
X = no_puede(volar) ;
X = tiene(alas) ;
X = tiene(plumas) ;
No
Nótese que el manejo de incompatibilidades no funciona cuan-
do se heredan propiedades de clases a igual distancia. ¿Qué ocu-
rre en nuestra implementación?