08 mayo, 2004

Grafos de conocimiento

Representar el conocimiento de manera formal es uno de los desafíos de la inteligencia artificial que lleva mucho tiempo sin terminar de resolverse.

Uno desearía poder expresar cualquier idea de manera que pudiera ser procesada por una máquina (o por un humano) de manera sencilla y sin ambigüedades, y a lo largo del tiempo se han desarrollado sistemas de representación del conocimiento. Sin embargo, esto no es una tarea fácil. Piensa por ejemplo en las secciones de mi weblog. Hay una serie de categorías cerradas (matemáticas, computación, tecnología, etc) para las noticias. Cada vez que pienso en una idea para una noticia tengo que asignarle una sola categoría (o crear la categoría si no existía a priori) pero toda noticia pertenece a varias categorías simultáneamente porque hablo de distintos temas y quiero expresar distintas cosas, así que necesitaría un sistema más potente.

El modelo entidad-relación (cada cosa es una entidad con una serie de atributos, y cada cosa se relaciona con otra mediante una relación) se usa en bases de datos porque permite manejar el conocimiento con un álgebra muy estudiada y que se puede implementar en un computador.

El modelo orientado a objetos es similar al anterior, y aparecen los términos: clase, objeto, herencia.

Hay una infinidad de métodos y teorías para representar y procesar el conocimiento, pero hasta donde yo sé (que no es mucho) ninguna permite representar todo el conocimiento que un humano pueda tener.

Con todo esto llego a un par de conclusiones: el conocimiento es puñetero y sirve para hacer tesis doctorales. Hagámonos una idea de cómo funciona el único sistema que funciona actualmente sobre conocimiento puñetero: el cerebro humano. No sabemos cómo funciona, pero sabemos que se basa en un modelo de redes neuronales. Las estructuras neuronales tienden a ser aleatorias y caóticas, y son sobre todo un sistema de caja negra (desconocemos la estructura interna pero sabemos que funciona). Si no podemos estudiarlo por dentro de poco nos sirve para desarrollar un sistema formal. Así que es mejor partir desde 0.

Ahora intentaré crear un sistema de clasificiación de noticias para un weblog. El objetivo de este sistema es, por ejemplo, separar la parte personal de la parte técnica del contenido del weblog, distinguiendo las noticias de un tipo y de otro.

  1. Categorías sueltas. Es el modelo actual. Con este modelo se pueden seleccionar noticias eligiendo un conjunto de categorías.
  2. Árboles. Extiende el concepto de categoría, haciendo categorías de categorías, a varios niveles. Permite tener una supercategoría que englobe a todas las categorías técnicas, por ejemplo.
  3. Grafos. Volviendo al título del artículo, sostengo que el conocimiento se estructura de manera tan o más compleja que un grafo. El grafo es más potente y complejo que un árbol ya que permite ciclos. Los modelos ER y de objetos permiten modelar sistemas con ciclos y por tanto son grafos.
    Un sistema de weblog con categorías basadas en grafos relacionar categorías entre sí (facilitando la búsqueda de temas relacionados), y relacionar un artículo con varias categorías a la vez (incluso asignando distintos grados de relación a cada categoría), y veríamos que cada artículo tiene varios iconos de tema de distinto tamaño en función de la relación que tenga con el tema.
    En cualquier caso un modelo basado en grafos puede ser suficientemente potente para resolver el problema de las categorías, pero para llevarlo a cabo nos encontramos los siguientes problemas
    • Requiere un esfuerzo de diseño considerable. Hay que decidir que modelo implementar, y establecer con acierto las relaciones entre los elementos.
    • Puede requerir de un sistema experto para realizar la clasificación y las búsquedas, cosa que facilitaría el diseño, si bien estos sistemas suelen estar en el límite del tipo caja negra.
    • Surgen problemas con los multigrafos. Hay que establecer las diferentes relaciones que se pueden dar entre dos nodos. Por ejemplo, el nodo «yo» puede estar relacionado con el nodo «universidad» porque estudie allí, porque trabaje allí o porque sucediera algo estando yo allí. El sistema no deben devolver resultados de búsqueda relativos con estudios si están bucando temas laborales.

Experimento 1. Pensando en estos temas re-diseñé mi página web hace un tiempo. Enseguida me dí cuenta de que casa subpágina (que había hecho en distintas épocas y por distintas razones) podía pertenecer a una o más categorías.
Tenía una serie de objetivos en mente:

  • Clasficiación completa. Todas las subpáginas deben pertenecer a alguna categoría
  • Navegación directa. El usuario no entrará en una sección buscando algo que en realidad está en otra sección, evitar esos «callejones sin salida» muy frecuentes en muchas páginas.

Determinando que modelo usar en mi página.
Tras seguir un razonamiento similar al del artículo, llegué a la conclusión de que lo óptimo sería establecer grafos que representarían las secciones y las páginas y las relaciones (enlaces) entre ellas:

  1. Categorías. Me dí cuenta de que la categorías eran aproximadamente: personal, linux, programación y humor. El problema es que algunos conceptos pertenecen a linux y programación, otros a personal y humor, etc.
  2. Árboles. En este caso no me solucionan ninguno de mis problemas.
  3. Grafos. Necesitaba realizar un diseño complejo basado en grafos para después representarlo de manera limitada (2 dimensiones) en pantalla.
    Primero tomé las categorías e hice un grafo con las relaciones entre ellas. Me pareció correcto, pero me dí cuenta de que no servía de mucho, ya que no incluía la relación entre artículos que pertenecen a varias categorías y que complican bastante el grafo.
    Después intenté ampliar el grafo añadiendo unos artículos directamente en las categorías (artículos puros), y otros artículos como relación entre varias categorías (artículos multicategoría). Tras esto tenía ya un grafo de mi web válido.

Representando un grafo en html
Tenía un grafo de unos 15 nodos (entre categorías y artículos), cada uno con entre 1 y 4 relaciones (relaciones entre categorías y artículos multicategoría). Mi intención era simplificarlo lo más posible perdiendo la mínima información, facilitando así su interpretación visual. Podía valerme de 2 dimensiones, y opcionalmente 3 (proyectando un grafo 3D en un plano y facilitando la navegación con el manejo interactivo usando un applet java). El problema de esta «vacilada» es que requieren más esfuerzo para captar la estructura tridimensional, y no se puede usar la memoria visual 2D para navegar (ya que el aspecto de la proyección es variable), obligando al usuario a usar la visión espacial contínuamente (y a instalar el plugin de java ;). Para hacerlo en 2D era una tarea difícil ya que aquello no era un grafo plano y siempre había algún nodo descolocado. Tras varias simplificaciones opté, muy a mi pesar, por usar una sola dimensión. Así que de todo lo propuesto el resultado es bastante más simple: una lista ordenada de categorías, con varios artículos en cada una.
Eso sí, me hice la promesa de interenlazar aquellos artículos que, aun siendo de diferentes categorías, estaban relacionados, de manera que se podría navegar con cierta libertad sin necesidad de ir hacia atrás.
Otra idea que apliqué es que cuando yo diera enlaces directos a mi web, crear un index.html que mantenga el frame de navegación de la izquierda y muestre en la derecha la página en cuestión.
El resultado: http://www.latinsud.com

Experimento 2
Un día pensé en una especie de Wiki, pero como no tenía ganas de montar uno en php lo hice estático (se editan las plantillas, se procesan con un script y si se edita hay que volver a procesarlo). La ventaja del Wiki es que genera los enlaces entre artículos de manera automática, permitiendo una navegación directa (sin necesidad de echar marcha atrás) cuando hay suficientes enlaces.
Quería plasmar en ese wiki un montón de conceptos de todo tipo de manera ordenada y de manera que cualquiera pudiera navegar intuitivamente desde un concepto hasta otro relacionado. Nada más lejos de la realidad, el resultado es un ente caótico donde uno no sabe qué páginas encontrará al pinchar dos veces en un enlace, y donde (por falta de enlaces) es difícil encontrar lo que se busca.
El resultado: http://unia.ual.es/socios/sud/index2.html

Conclusiones finales

  • Estamos en una época en la que queremos que las máquinas piensen por nosotros. El esfuerzo que debe realizar la máquina (y su diseñador) es infinitamente superior a la cantidad de trabajo que alivia a cada usuario. Esta tarea de investigación es, sin embargo, necesaria para el desarrollo de la sociedad de la información.
  • La complejidad del conocimiento crece de manera exponencial a medida que vamos incorporándolo a nuestro saber. Por esto necesitamos aislar un conocimiento de otro y trabajar con cada uno de manera separada y eficiente. Podemos ayudarnos de las máquinas para procesar este conocimiento por nosotros.

1 comentario:

Anónimo dijo...

Wordpress permite asignar varias categorías a un post. Aún estás a tiempo :)

Chewie