Técnicas y Lenguajes para la Representación del Conocimiento
Como expliqué en un artículo anterior introductorio, la web semántica se basa principalmente en mecanismos que permiten representar el conocimiento de un modo estandarizado, haciendo posible su tratamiento automático y la existencia por lo tanto, de numerosas nuevas aplicaciones que puedan beneficiarse de estas representaciones.
La representación del conocimiento como tal, es una materia en la que se lleva trabajando desde hace varias décadas, desde mucho antes de que surgiera la web semántica. Surgió en el ámbito de la Inteligencia Artificial al tratar de crear representaciones de conocimiento que pudieran ser utilizadas por mecanismos que simulasen el razonamiento humano. Para muchos la Inteligencia Artificial ha sido uno de los grandes fracasos de la historia informática, pero a pesar de todo, y se esté de acuerdo o no con esta afirmación, es cierto que ha dejado innumerables trabajos e investigaciones que han permitido avanzar en muy diferentes áreas. Un ejemplo significativo de esto es la web semántica, que pese a no ser por sí una rama de la Inteligencia Artificial, se sustenta sobre uno de los campos de actuación de ésta, como son las técnicas y lenguajes de representación del conocimiento.
En este artículo voy a hacer un resumen de diversas técnicas, formalismos y lenguajes que se han ido utilizando a lo largo de las últimas décadas para representar el conocimiento, con el objetivo de poder llegar a comprender mejor las tecnologías que se usan hoy en día en la web semántica.
Técnicas de Representación del Conocimiento
Antes de ver los diferentes tipos de formalismos y lenguajes de representación de conocimiento que se han ido creando a lo largo de los años, merece la pena enumerar algunas de las diferentes técnicas de representación del conocimiento que se han utilizado, y sobre las que se han sustentado estos lenguajes. Hay que tener en cuenta que no hay una técnica mejor que las demás, sino que cada una de ellas ha sido aplicada con más éxito que otras en determinados ámbitos, por lo que disponen de características que las hacen más apropiadas para determinados problemas.
- Tripletas Objeto-Atributo-Valor: se utilizan para representar hechos acerca de objetos y sus atributos, especificando el valor de un atributo para un determinado objeto. Por ejemplo, para representar que el coche es rojo, se tendría una tripleta Coche-Color-Rojo. Típicamente estas tripletas se representan en forma de grafos, utilizando una elipse para el objeto, un cuadrado para el valor, y una flecha o arco dirigido entre ambos elementos representando el atributo.
- Uncertain Facts o Hechos Inciertos: las tripletas O-A-V indican que un objeto tiene un valor asociado a un atributo de forma completa y con toda la certeza, es decir, un coche es rojo o no lo es. Sin embargo no permiten asignar graduaciones de certeza en estas asignaciones. Así por ejemplo, existen situaciones en las que podríamos necesitar representar que un determinado objeto posee un atributo con una determinada certeza, lo que se suele denominar
certainty factor
. Mediante esta técnica sería posible representar sentencias como «El coche es bastante potente», asignando una factor de certeza de 0.7 al atributo potente - Fuzzy Facts o Hechos Difusos: permiten representar conocimiento impreciso o ambiguo. Por ejemplo, la expresión «Juan es viejo», en comparación con «Juan es joven» o «Juan es de mediana edad», puede no ser sencilla de representar con otras técnicas, ya que la edad es algo gradual, no se pasa de ser joven un día a ser de mediana edad al siguiente. Esta ténica lo que permite es definir funciones de membresía que asignan un valor entre 0 y 1 a cada valor. Así por ejemplo, la función de membresía de edad, asignaría un 1 a joven si la persona tiene 10 años, pero este valor iría decreciendo conforme aumentase la edad hasta llegar a 0, pero teniendo en cuenta que antes de eso se habría ido incrementando el valor de membresía de «mediana edad» e incluso de «viejo», pudiendo haber edades como los 45, en los que se podría decir que con una persona es joven con un 0.2, vieja con un 0.2 y de mediana edad con un 0.6.
- Rules: esta técnica representa el conocimiento presentando unas premisas o condiciones y las conclusiones o acciones que de ellas se derivan. Se suelen representar de la forma
IF – THEN –. Las premisas se colocan a continuación del IF en forma normalmente de tripletas O-A-V y utilizando operadores booleanos, mientras que las conclusiones definirían nuevos hechos o realizarían acciones. Por ejemplo, podríamos tener la siguiente regla para representar que si hay que ir a trabajar y está lloviendo hay que coger el paraguas: IF «es hora de ir a trabajar» AND «está lloviendo» THEN «tengo que coger el paraguas». - Redes Semánticas o Mapas Conceptuales: se basa en la utilización de grafos que representan conceptos, objetos y relaciones entre ellos. Estas relaciones pueden ser de cualquier tipo, pero predominan las relaciones de tipo «kind-of», «part-of» y «is-a», que permiten representar estructuras jerárquicas de conocimiento. Están relacionadas también con las tripletas O-A-V, ya que en las redes semánticas se suelen incluir también estas estructuras para dar información sobre los atributos de los diferentes objetos.
- Frames o Marcos: es una técnica de representación muy similar a la utilizada en la programación orientada a objetos. Consta de class frames, similares a las clases, que representan conjuntos de objetos con características similares. A partir de ellas se crean las instance frames que representan elementos concretos de esa clase. Por ejemplo, podríamos tener el marco de clase «Persona» y la instancia «Juan». Cada frame dispone por otra parte de una serie de slots equivalentes a los atributos y propiedades en orientación a objetos. Existe también la posibilidad, a diferencia de en las redes semánticas, de definir lo que se llaman facets sobre estos slots, de forma que se les aporte comportamiento procedural. Por ejemplo, sobre un slot edad podríamos añadir el facet «if-changed», para comprobar el valor introducido.
Formalismos y Lenguajes de Representación del Conocimiento
A partir de las técnicas de representación del conocimiento del punto anterior, se han diseñado a lo largo de los años diversos formalismos y lenguajes que permiten modelar de un modo formal el conocimiento representado mediante ellas. Existen diversos formalismos para la representación del conocimiento, cada uno con sus propios lenguajes y cada uno con sus ventajas e inconvenientes. En esto, al igual que en la Ingeniería del Software, no existe la técnica ideal que nos permita resolver cualquier problema de la mejor manera. Dependerá del tipo de problema, del conocimiento que se quiera representar, de la expresividad que se necesite, y del uso que se le quiera dar, el que un formalismo y un lenguaje sea más conveniente que otro.
En los siguientes puntos voy a explicar algunos de los más destacados lenguajes que se han utilizado y que se siguen utilizando hoy en día en diferentes ámbitos.
Lenguajes basados en Lógica Formal
Muchos de los sistemas de representación del conocmiento de la actualidad se basan en algún tipo de lógica formal. La lógica formal aporta un buen número de ventajas para la representación del conocimiento y su manejo, partiendo de una sintaxis y semántica bien definidas que detallan perfectamente la forma de construir sentencias y razonamientos sobre ellas.
Lógica Proposicional
Una proposición es una sentencia que puede decirse que es falsa o verdadera. En la lógica proposicional se asigna símbolos a cada sentencia y se utilizan operadores lógicos sobre ellos para crear proposiciones más complejas. Los símbolos utilizados son AND (∧), OR (∨), NOT (¬), IMPLIES (→ o ⇒), y EQUIVALENCE (⇔). Partiendo de los símbolos y utilizando los diferentes operadores se construyen proposiciones complejas, las cuales es posible obtener si son ciertas o falsas operando a partir de los valores de verdad de cada uno de los símbolos iniciales, utilizando el cálculo proposicional.
Por ejemplo la sentencia si «El libro está en casa (A) y Juan está en el trabajo (B), Juan no puede leer el libro (C)», podría representarse como: A ∧ B → C
Lógica de Primer Orden
Es una ampliación de la lógica proposicional a partir de dos operadores más, el cuantificador universal ∀ y el existencial ∃. Utiliza también símbolos para representar conocimiento y operadores lógicos para construir sentencias más complejas, pero a diferencia de la lógica proposicional, los símbolos pueden representar constantes, variables, predicados y funciones.
Las constantes son símbolos que comienzan por minúsculas y las variables símbolos que empiezan por mayúsculas. Los predicados representan afirmaciones sobre objetos, por ejemplo, la afirmación «El libro está en casa» se representaría como un predicado de nombre in
:
in(libro, casa)
Se podría reescribir el predicado de forma más general sustituyendo las constantes por variables de la forma: in(X, Y). Con él podríamos representar diferentes proposiciones como «El libro está en casa», «El coche está en el garaje», «Juan está en el trabajo».
El último símbolo que queda por explicar son las funciones. Éstas permiten asociar elementos de un conjunto a un elemento de otro conjunto, por ejemplo: propietario(casa) = juan.
Con todo esto podríamos representar el mismo ejemplo que con lógica proposicional de la siguiente forma:
in(libro, casa) ∧ in(juan, trabajo) → ¬puedeLeer(juan, libro)
En cuanto a los dos nuevos operadores, ∀ y ∃, permiten delimitar el alcance de las variables en las sentencias, de forma que «∀X» se leería como «para toda x» y «∃X» como «existe un x tal que».
∃X puedeLeer(X, libro)
: alguien puede leer el libro
∀X puedeLeer(X, libro)
: todo el mundo puede leer el libro
KIF
KIF es un lenguaje lógico basado en lógica de primer orden que fue creado con el objetivo de actuar como interlingua
entre diferentes formalismos y lenguajes de representación, de forma que para pasar de un lenguaje A a B no hiciera falta crear un mapeo específico, sino que fuera suficiente con existir los mapeos A-Kif y Kif-B.
KIF dispone de su propia sintaxis y algunos añadidos semánticos sobre la lógica de primer orden.
Lógicas Descriptivas
Las lógicas descriptivas están muy relacionadas con el desarrollo de las ontologías tal como se usan en la actualidad en la web semántica. La lógica descriptiva se basa en representar el conocimiento utilizando por una una terminología o vocabulario del dominio (TBOX) y por otra un conjunto de afirmaciones (ABOX).
El vocabulario consiste en conceptos
y roles
. Los conceptos corresponden a conjuntos de elementos y los roles a relaciones binarias entre elementos. Existen conceptos y roles atómicos
y complejos
.
Por ejemplo, si tenemos como conceptos atómicos «Persona» y «Hembra» y como role atómico «tieneHijo», podríamos tener como TBOX representando las relaciones familiares algo como lo siguiente:
Mujer ≡ Persona ∩ Hembra
Hombre ≡ Persona ∩ ¬Mujer
Madre ≡ Mujer ∩ ∃tieneHijo.Persona
Padre ≡ Hombre ∩ ∃tieneHijo.Persona
Progenitor ≡ Madre ∪ Padre
Esposa ≡ Mujer ∩ tieneMarido.Hombre
Marido ≡ Hombre ∩ tieneEsposa.Mujer
La información recogida en la ABOX podría ser algo como:
tieneHijo(Juan, Miguel)
Padre(Juan)
Esposa(Juan, María)
Se pueden construir y existen razonadores que permiten razonar sobre las TBOX y ABOX, pudiendo determinar por ejemplo si el contenido de la TBOX es factible, o qué relaciones están incluidas en otras. Al trabajar sobre el ABOX, un razonador puede indicar que a partir de las afirmaciones existentes un determinado elemento es una instancia de un concepto y si las afirmaciones son consistentes con el modelo.
Lenguajes basados en Frames o Marcos
Estos lenguajes son similares a los lenguajes de programación orientados a objetos, en el sentido de que modelan el conocimiento utilizando clases (frames), atributos, objetos y relaciones, y utilizan relaciones de generalización y especialización para representar la organización jerárquica de los conceptos.
Uno de los posibles lenguajes basados en frames es KM. Mediante este lenguaje definimos a continuación que cada «venta» consta de un objeto que se vende y un vendedor y comprador:
(every Venta has (vendedor((a Agent))) (objeto((a Thing))) (comprador((a Agent))) ) |
Inicialmente se crearon multitud de lenguajes basados en marcos diferentes, la mayoría incompatibles entre si. En 1985 se creo KL-ONE que utilizando formalismos de lógica descriptiva aportó rigor a diferentes lenguajes que se crearon posteriormente basados en él.
Es importante mencionar que muchos de los lenguajes basados en marcos se pueden considerar como únicamente sintaxis diferentes de la lógica de primer orden y que por lo tanto no ofrecen más expresividad que ella. Esto hace también por otro lado que tengan representaciones equivalentes en el lengujaje KIF visto en un punto anterior.
Lenguajes basados en Reglas
Estos lenguajes han sido durante mucho tiempo posiblemente los más usados de todos, principalmente debido a su estrecha relación con los Sistemas Expertos utilizados en Inteligencia Artificial. Estos lenguajes son fáciles de entender debido a su sencillez conceptual y a su paralelismo con las estructuras de control más simples utilizadas en programación.
Existen diversos tipos de lenguajes basados en reglas, que se diferencian por el tipo de cosas permitidas en las reglas, como si permiten únicamente la definición de afirmaciones en la parte THEN o si tambíen permiten comportamiento procedural, el uso de lógica difusa en los hechos, etcétera. Una de las tendencias más recientes pasa por mezclar los conceptos de frames y reglas, como en el caso de Jess, para disponer de lenguajes que permitan reunir la información de cada concepto y asociar a alguno de sus slots conjuntos de reglas. Esto aporta orden a la información, que suele ser algo difícil de conseguir conforme la base de conocimiento crece y el número de reglas aumenta, al tener dispersa la información de cada concepto y mezclada con otros.
Este tipo de lenguajes han recibido también un fuerte impulso a partir de la aparición de la web semántica, ya que que se piensa en ellos como herramientas para definir servicios web, y como herramienta base que permita definir la forma en la que pueden interactuar las aplicaciones de comercio electrónico. Para ello se ha creado una iniciativa Rule Markup Initiative
que ha diseñado el lenguaje RuleML, basado en XML y que por lo tanto está pensado desde su concepción para garantizar la interoperabilidad necesaria en el web.
Este nuevo lenguaje incluye las siguientes características:
- Reglas de pruducción: reglas del tipo IF-THEN habituales en los sistemas expertos.
- Reglas de integridad: afirmaciones que se deben cumplir en cualquier estado del sistema
- Reglas reactivas: reglas que realizan acciones cuando se cumple un evento o se dan unas determinadas circunstancias
- Reglas de derivación: reglas para definir conceptos derivados a partir de otros
- Reglas de transformación: permiten crear reglas a partir de un llamador, una condición, y una transformación.
Podemos representar en RuleML la sentencia «Si a alguien le gusta la lectura, entonces a Juan le gusta esa persona» de la siguiente forma:
<rulebase label="gustaLectura"> <imp> <_head><atom> <rel>gustar</rel> <ind>Juan</ind> <var>x</var> </atom></_head> <_body><atom> <rel>gustar</rel> <var>x</var> <ind>lectura</ind> </atom></_body> </imp> </rulebase> |
Ontologías
El concepto de ontología en el ámbito de la informática se obtuvo del campo de la filosofía, con el objetivo de abarcar cualquier tipo de representación de conocimiento. Es por esto que el concepto de ontología es muy amplio y se ha venido usando prácticamente para cualquier tipo de modelado de dominio de conocimiento, y razón por la cual también, hay multitud de definiciones que intentan acortar formalmente qué es una ontología y qué no lo es.
Una de las definiciones más consensuadas es la proporcionada por Grubber, An ontology is a formal explicit specification of a shared conceptualisation
. En esta definición, explicit
se refiere a la necesidad de detallar los diferentes conceptos que forman la ontología, formal
indica que el conocimiento que modelemos debe representarse según un lenguaje formalizado e interpretable fácilmente y shared
indica que la ontología modela el conocimiento común sobre la materia, para las diferentes personas que deben usarla. Este último punto referido al conocimiento compartido es una de las principales diferencias sobre otros modelos de conocimiento, en los que muchas veces no se tenía en cuenta el concepto de concocimiento compartido.
Aún así, esta definición es muy amplia, y engloba el modelado de conocimiento con muy diferentes técnicas, formalismos y lenguajes. Dentro del ámbito de la web semántica hay un conjunto de lenguajes basados en XML que se han ido definiendo como estándares, como son el caso de RDF, RDFS o DAML+OIL. A partir de estos el W3C creo la propuesta de OWL, con sus 3 sublenguajes (OWL-Lite, OWL-DL y OWL-Full), como lenguaje para modelar ontologías en el entorno de la web semántica, aunque es posible utilizar este lenguaje para representar modelos de dominio en cualquier ámbito que sea necesario, como para la gestión de procesos, o incluso requisitos software, por poner un par de ejemplos.
En cuanto a la relación de OWL con los formalismos de representación que hemos visto, una característica importante es que el sublenguaje OWL-DL, es compatible con la lógica descriptiva, de donde obtiene su nombre, teniendo por tanto su mismo poder expresivo. Más en concreto, es OWL-DL es equivalente a un tipo de lógica descriptiva denominado SHOIN(D)
. OWL-Lite se corresponde también con una lógica descriptiva, pero de menor poder expresivo, denominada SHIF(D)
.
Bibliografía
- Dragan Gaevic, Dragan Djuric, Vladan Devedic, Bran Selic, «Model Driven Architecture and Ontology Development«, Springer, 2006.
Muchas gracias por el artículo, ya que la web semántica es lo que viene y quería estar seguro.
Un saludo desde la Enciclopedia de la Pequeña y Mediana Empresa:
http://www.powerpymes.com
http://www.clickbalance.com
estoy buscando un ejemplo de logicas descriptivas donde definan un enunciado con su respectivo Tbox y Abox
Muy bueno el articulo me saco de varias dudas los metodos que se utilizan para realizar diferentes cosas. Muchas gracias. Le agradeceria que publicara mas articulos con lo referente a la ia ya que no se encuentra en todas partes informacion de este genero.
Hola!, el articulo tmb me parecio interesante, pero me gustaria saber si me recomiendan alguna herramienta para representar el conocimiento, estoy por desarrollar una y kiero basarme en algo, thanks
Si quieres trabajar con Ontologías te recomiendo que pruebes con Protégé, es un entorno open source muy completo.
Ya había leído acerca de esa herramienta,voy a chekarla! muchas gracias, otra pregunta,kisiera tomar como referencia algunos datos que mencionas para mi tesis,tienes algun articulo publicado?