miércoles, 30 de mayo de 2007

Varios ejemplos de aplicaciones

Hakia
Hakia es un ejemplo de buscador. Este proyecto está siendo desarrollado por un equipo multinacional con sede en Nueva York. El objetivo es que el buscador entienda la cuestión que se le plantea. Es decir, a diferencia de Google, donde las consultas se basa en palabras clave, el objetivo de Hakia es responder a preguntas como: ¿cuál es el tiempo previsto en Ourense para mañana? y me responda con una serie de enlaces que responden (o ayudan a responder) a esa pregunta.



INFOGENMED

El objetivo del sistema INFOGENMED es facilitar la recuperación homogénea de información, a través de Internet, proporcionando un acceso unificado a múltiples y diversas bases de datos relacionales remotas ya existentes.

La investigación desarrollada parte de la idea de que un conjunto de bases de datos heterogéneas forma un espacio de información único.

La arquitectura del sistema trata de facilitar al usuario el acceso a toda la información disponible, a la que se tiene acceso a través de las bases de datos registradas en el sistema, de forma intuitiva y directa.

El sistema pretende, por un lado, permitir la integración de diferentes esquemas lógicos de bases de datos relacionales, y por otro, establecer una arquitectura distribuida estándar, no condicionada a productos propietarios, que facilite la conexión de cualquier base de datos.

Como infraestructura tecnológica se propone el uso de agentes inteligentes, que dan al sistema mayor flexibilidad y eficiencia, facilitando las tareas de integración y búsquedas.


JITIK

El sistema JITIK (Just-in-Time Information and Knowledge) es un sistema basado en tecnologías de Internet y de agentes inteligentes, orientado a hacer más efectivo el flujo de información y conocimiento de las organizaciones.

Contribuye integrando las diversas fuentes y destinatarios de la información para hacer llegar información altamente personalizada a los diversos integrantes de la organización.

JITIK se incorpora como un middleware que interactúa con los sistemas existentes en la organización para obtener la información de diversas fuentes, la procesa a fin de reconocer los perfiles de usuario más relevantes para la nueva información y la distribuye a través de diversos medios (correo electrónico, SMS, Web), según las preferencias del usuario.

Hasta el momento, el proyecto ha sido desarrollado por la Cátedra de Investigación en Tecnologías de Información “Tecnologías de Conocimientos Distribuidos y Agentes Inteligentes”, dirigida por el Dr. Ramón F. Brena, profesor del Centro de Sistemas Inteligentes, así como de estudiantes de posgrado a través del desarrollo de tesis relacionadas con el sistema. El proyecto ha sido utilizado en prototipos de aplicaciones para el Campus Monterrey y se está estudiando su implementación en empresas internacionales como CEMEX.


domingo, 27 de mayo de 2007

Ontologías y agentes en la web.

Actualmente, buscar información que nos pueda resultar útil sobre algún tema en la web puede resultar complicado y tedioso. El motivo es la cantidad de información mal estructurada que puebla la red debido al uso de html, un lenguaje más de maquetación que de definición de contenido.
Por esto actualmente se está apoyando el uso de XML que nos permitiría definir ontologías del tema o temas que trata nuestro sitio web. Así, con una web donde se haya codificado el significado de la información, será posible diseñar agentes que busquen y entreguen información más relevante para el usuario.
Esto es una aproximación a la llamada Web Semántica, en la que tendrán más importancia en la búsqueda de información los significados de los conceptos que las meras palabras o etiquetas que suelen usar los buscadores.
A los agentes que aprovechan las tecnologías de la web semántica como las ontologías se les suele denominar también agentes semánticos. Debido a que todavía no existe una web semántica general, los agentes semánticos no se pueden aprovechar aún en la web, pero sí en algunas intranets corporativas o como buscadores de información o asistentes personales como el que usa el navegador Amblit Navigator, al que se le puede enseñar que desea el usuario y cuando lo desea.



















Este agente permite preguntas y órdenes en lenguaje natural, apoyándose en una ontología y un software que traduce las frases en texto libre a conceptos de la ontología.

viernes, 25 de mayo de 2007

Proyectos llevados a cabo con ontologías y agentes.

El potencial de las ontologías en todos los campos de aplicación de los agentes software es evidente, por lo que el descubrimiento de información en Internet, con los problemas que plantea no podría ser una excepción.

Los principales roles que pueden desempeñar las ontologías son:

  • Como repositorios para la organización de conocimientos e información, tanto de tipo corporativo como científico.
  • Como herramienta para la adquisición de información, en situaciones en la que un equipo de trabajo la utiliza como soporte común para la organización del dominio.
  • Como herramienta de referencia en la construcción de sistemas basados en el conocimiento, ya que la utilización consistente de los términos que supone es básica en la ingeniería del conocimiento.
  • Para permitir la reutilización del conocimiento ya existente, en la creación de nuevas aplicaciones.
  • Como base para la construcción de lenguajes de representación del conocimiento, acompañada de la formalización del cálculo que tenga lugar entre los términos.
Han sido numerosos los proyectos y experiencias que se han desarrollado en Internet, utilizando ontologías, o lo están siendo en este momento.

Uno de los más conocidos de estos proyectos es el servidor Ontolingua, fruto del KSE, que ofrece las herramientas necesarias para crear ontologías, integrarlas con otras ya existentes e incorporarlas en nuevos proyectos.

Otro enfoque diferente es el aportado por Luke, Spector y Rager (1996), que han desarrollado SHOE (Simple HTML Ontology Extensions), que es un complemento semántico a HTML, el cual refleja el contenido de la página web, y que puede ser utilizado por agentes para el descubrimiento de información. Posteriormente, SHOE ha evolucionado hacia RDF y CG, siendo más reciente la especificación OML (Ontology Markup Language).

Otro proyecto fue el llevado a cabo por Gerry M. Kierman, con el nombre de CyberStacks. Se pretendía ofrecer al usuario un listado de recursos de información en internet, organizados según una clasificación, subclases y descripciones particulares. Sin embargo, por el momento no ha integrado completamente ontologías en su servidor, y tampoco dispone de agentes capaces de aprovechar esas ontologías.

En el ámbito de la medicina, cuya necesidad de normalización y rigor semántico es crucial, debe destacarse el proyecto UMLS (Unified Medical Language System) desarrollado por la National Library of Medicine, que utiliza las ontologías como una herramienta más para la recuperación y acceso a la información biomédica.

Actualmente en AgentCities, existe un grupo de trabajo centrado en el desarrollo de Ontologías. Nuestros compañeros del grupo LIMIA nos explican en su blog un poco más de este proyecto.

También se están llevando a cabo otros proyectos como el Knowledge Sifter, que es un sistema escalable basado en agentes que permite el acceso a fuentes de información heterogéneas como pueden ser la Web, repositorios open-source, bases de datos XML y la emergente web semántica, de la cual podemos encontrar más información en el blog de nuestros compañeros del grupo LONIA.

Referencias : Agentes y ontologías para el tratamiento de información. Dr. Jesús Tramullas.

viernes, 11 de mayo de 2007

Cómo hace JADE para codificar y decodificar mensajes ACL creados a partir de una ontología.

Una vez definidas las clases que representan la ontología del dominio del problema, éstas pueden ser usadas para intercambiar mensajes entre agentes; siempre y cuando ambos utilicen la misma ontología.
Dado que los agentes se comunican mediante ACL Messages, estándar FIPA para el intercambio de mensajes entre agentes, JADE tiene que proporcionar un mecanismo que dé soporte a las ontologías para realizar la transformación entre mensajes ACL y objetos Java de fácil manipulación (nuestra ontología), y viceversa.
El siguiente gráfico muestra dicho mecanismo de soporte (JADE support for content languages and ontologies). Este mecanismo proporcionado por JADE utiliza un lenguaje de contenido (Content Language. Jade proporciona dos codecs para dos lenguajes de contenido diferentes: Lenguaje SL y Lenguaje LEAP. Éstos están disponibles en el paquete jade.content) encargado de realizar la traducción a un string según las reglas sintácticas del lenguaje, y por otro lado una ontología que realiza la validación semántica del mensaje.

En posteriores entradas se hablará más en detalle sobre los lenguajes de contenido y sobre la utilización de éstos y las ontologías, aunque se puede encontrar información detallada y ejemplos prácticos en el trabajo sobre JADE realizado en 2007 por los alumnos de la asignatura "Sistemas Multiagente" impartida por el profesor Pedro Cuesta Morales de la Escuela Superior de Ingeniería Informática de la Universidad de Vigo.

viernes, 4 de mayo de 2007

Porqué usar ontologías

Existen muchos motivos por los cuales es útil y conveniente usar ontologías. En el caso concreto de JADE, los principales motivos son los siguientes:

(Información obtenida del trabajo sobre JADE realizado en 2007 por el 5º curso de la Escuela Superior de Ingeniería Informática de la Universidad de Vigo)

  • Se buscaba uno de los principales objetivos de las ontologías, compartir el conocimiento de la estructura de la información entre los agentes. Supongamos que un grupo de sitios webs contienen información médica o proporcionan servicios médicos. Si estos sitios compartieran y publicaran la misma ontología subyacente, los agentes podrían acceder y agregar esta información para responder a preguntas y servir de datos a otras aplicaciones.
  • Otra razón importante ha sido la ventaja que ofrece la reutilización del conocimiento del dominio. Por ejemplo, muchos modelos de dominio necesitan representar la noción de tiempo. Esta representación incluye las nociones de intervalo de tiempo, puntos del tiempo,… Si un grupo de investigadores desarrollara una ontología detallada sobre esto, otros desarrolladores podrían reutilizarla en su beneficio dentro de su dominio. Esta característica permite la creación de una ontología grande integrando otras ontologías existentes.
  • La creación de un estructura explicita para nuestro dominio de aplicación facilita enormemente la adaptación a cambios en nuestro dominio. A parte de esto, estas especificaciones explícitas son útiles para los nuevos usuarios que deban aprender que significan los términos del dominio que se usa.
Uno de los principales objetivos de las ontologías es facilitar la comunicación de tal forma que dos entidades diferentes se entiendan entre si y asegurarse que hablan dentro del mismo contexto. Si no se utilizaran ontologías que aseguren el entendimiento sucedería algo como esto.

sábado, 28 de abril de 2007

Vamos a ver un poco más en profundidad que son cada uno de los principales elementos que conforman una ontología. Para ello nos basaremos en un ejemplo simple que nos permita entender mejor dichos conceptos.

Supongamos que tenemos un sistema de venta de libros en el cual un agente quiere comunicar a otro los libros que oferta. El segundo a su vez quiere ordenar a un tercer agente que compre los libros que elija.

Veamos entonces que elementos compondrán la ontología:

• Conceptos: representas las entidades que forman parte de la ontología, en esta caso la ontología tendrá un concepto que será “Libro”.

• Predicados: son expresiones que relacionan a los conceptos para decir algo. Son necesarios porque un mensaje nunca podremos enviar conceptos, sino que tendremos que enviar predicados o acciones. En el ejemplo usaremos un predicado “Oferta” que indicará que un agente oferta un determinado libro.

• Acciones: son acciones que pueden llevar a cabo los agentes. Para la ontología de libros una acción será “Comprar” que indicará a un agente que debe comprar un determinado libro.

Una vez explicados los distintos elementos, veamos entonces como se implementaría la ontología descrita en JADE:

package librosOntology;

import jade.content.onto.*;
import jade.content.schema.*;

public class librosOntology extends Ontology {
   // Nombre de la ontología
   public static final String ONTOLOGY_NAME = "ontología de libros";

  // Vocabulario de la ontología
  public static final String LIBRO = "Libro";
  public static final String LIBRO_TITULO = "titulo";
  public static final String LIBRO_AUTOR = "autor";
  public static final String LIBRO_PRECIO = "precio";

  public static final String OFERTA = "Oferta";
  public static final String OFERTA_LIBRO = "Oferta_libro";

  public static final String COMPRAR = "Comprar";
  public static final String COMPRAR_LIBRO = "Comprar_libro";

  // Instancia de la ontología
  private static Ontology instancia = new librosOntology();

  // Método para acceder a la instancia de la ontología
  public static Ontology getInstance() {
     return instancia;
   }

   // Constructor privado
   private librosOntology() {
     // librosOntolgy extiende la ontología básica
     super(ONTOLOGY_NAME, BasicOntology.getInstance());

     try {
       // Añade los elementos
       add(new ConceptSchema(LIBRO), Libro.class);
       add(new PredicateSchema(OFERTA), Oferta.class);
       add(new AgentActionSchema(COMPRAR), Comprar.class);

       // Estructura del esquema para el concepto LIBRO
       ConceptSchema cs = (ConceptSchema) getSchema(LIBRO);
       cs.add(LIBRO_TITULO, (PrimitiveSchema) getSchema(BasicOntology.STRING));
       cs.add(LIBRO_AUTOR, (PrimitiveSchema) getSchema(BasicOntology.STRING));
       cs.add(LIBRO_PRECIO, (PrimitiveSchema) getSchema(BasicOntology.INTEGER));

       // Estructura del esquema para el predicado OFERTA
       PredicateSchema ps = (PredicateSchema) getSchema(OFERTA);
       ps.add(OFERTA_LIBRO, (ConceptSchema) getSchema(LIBRO));

       // Estructura del esquema para la acción COMPRAR
       AgentActionSchema as = (AgentActionSchema) getSchema(COMPRAR);
       as.add(COMPRAR_LIBRO, (ConceptSchema) getSchema(LIBRO));
     }
     catch (OntologyException oe) {
       oe.printStackTrace();
     }
   }
}

Como se observa en el código, cada campo de un esquema debe ser de un tipo predefinido, en este caso se usan los tipos primitivos STRING y INTEGER.

Además, cada esquema esta asociado a una clase JAVA, dichas clases se podrían definir tal y como se muestra a continuación:
La clase Libro que implementa el concepto “Libro”, por lo que hereda de Concept:


package librosOntology;

import jade.content.Concept;

public class Libro implements Concept {

   private String titulo;
   private String nombre;
   private int precio;

   public String getTitulo() {
     return titulo;
   }

   public void setTitulo(String t) {
     titulo = t;
   }

   public String getNombre() {
     return nombre;
   }

   public void setNombre(String n) {
     nombre = n;
   }

   public int getPrecio() {
     return precio;
   }

   public void setPrecio(int p) {
     precio = p;
   }
}

La clase Oferta, que implementa un predicado heredando de Predicate:


package librosOntology;

import jade.content.Predicate;

public class Oferta implements Predicate {

   private Libro libro;

   public Libro getLibro() {
     return url;
   }

   public void setLibro(Libro l) {
     libro = l;
   }
}

Y por ultimo la clase Comprar que implementa una acción heredando de AgentAction:

package librosOntology;

import jade.content.AgentAction;

public class Comprar implements AgentAction {

   private Libro libro;

   public libro getLibro() {
     return libro;
   }

   public void setLibro(Libro l) {
     libro = l;
   }
}

Con esto tendríamos definida nuestra ontología para trabajar con ella en JADE. Más adelante veremos como usarla.

viernes, 20 de abril de 2007

Ontologías en JADE

Las ontologías, tal y como se explicó en la anterior entrada, son un mecanismo para representar conceptos que permiten el entendimiento entre dos agentes que establecen una comunicación.

Centrándonos en la comunicación entre agentes de JADE, podríamos pensar que dicha comunicación estaría solucionada con simples intercambios de datos de tipo string. Por ejemplo: si quisiera comunicarle a otro agente que la reunión es "el jueves a las 12:00h en el Hotel Ritz", podría crear un mensaje ACL representado con un string: (Reunion :dia jueves :hora 12:00 :lugar Hotel Ritz).
El verdadero problema de este tipo de comunicación tan simple, es que si quisiéramos obtener directamente la hora o el lugar de la reunión tendríamos que tokenizar el string y recorrerlo de un lado a otro hasta obtener el dato que nos interesa.
Sería más interesante tener la información anterior encapsulada en un objeto Java dentro de un Agente. Posteriormente habría que convertir dicha información en formato de mensaje ACL y a su vez, el agente receptor, debería poder realizar la conversión inversa del mensaje ACL para obtener la información en el formato original. De igual forma, el agente receptor, tiene que poder realizar comprobaciones semánticas para verificar la corrección de dicho contenido con respecto a las reglas de ontología por las cuales los agentes le atribuyen un significado al mensaje intercambiado.

Jade proporciona un soporte para representar lenguajes de contenido y ontologías. Una ontología en Jade no es más que "una colección de esquemas que no cambian durante la vida de un agente". (ref.: Pedro Cuesta Morales; Escola Superior de Enxeñería Informática (Universidade de Vigo); SMProgramacionJADE3.pdf, pág. 6; curso 2006-2007).
Los elementos o esquemas que contiene una ontología en JADE son: los tipos de predicados (Predicates), acciones de los agentes (Agent Actions) y conceptos del dominio de la aplicación (Concepts). Definir una ontología y sus elementos no es más que definir instancias de las clases jade.content.onto.Ontology, para crear un ontología; jade.content.schema.PredicateSchema, para crear un esquema con los tipos de predicado; jade.content.schema.AgentActionSchema, para crear el esquema con las acciones de los agentes; y jade.content.schema.ConceptSchema, para crear el elemento de la ontología que encapsula los conceptos del dominio de la aplicación.

Básicamente esta es la estructura de una ontología en JADE. Queda por explicar con más detalle qué es y cómo se implementa cada elemento de una ontología y el mecanismo para convertir la representación interna de la ontología a la correspondiente expresión de contenido ACL que intercambian los agentes. Esto último es realizado por los códecs, pero será explicado en posteriores entradas del blog.