miércoles, septiembre 16, 2009

El genio de la inteligencia colectiva

Ya en su momento hablé sobre un libro llamado Sistemas Emergentes (más información sobre el libro en aNobii) en que se presentaba el concepto de emergencia y comentaba cómo este principio parecía haberse aplicado, en primer lugar, a la programación de colonias virtuales de hormigas y más adelante a Internet, dentro de comunidades de noticias que los usuarios se encargaban de filtrar tan solo dejando constar sus gustos.

En ese post, bastante ingenuo e inocente por otra parte, comentaba mi inclinación hacia la idea de emergencia. Después de eso logré hacer el PFC "simulando" la Evolución, que me costó un año y medio más, y ahora me encuentro camino de una tesis que pretende aprovechar esas mismas ideas y en un área de investigación donde la emergencia se presenta como posible solución a muchos problemas.

En esas estamos cuando hace un par de meses me compré un libro titulado Inteligencia colectiva, Desarrollo de aplicaciones web 2.0 . No me suele gustar leer libros de programación (demasiado concreto y poco paja mental para mi) y creo que el último que había leído había sido en 2º de carrera y no era propiamente programación.

Sin embargo, este libro venia precedido por las críticas de gente sabia y parecía tocar uno de mis temas preferidos desde un punto de vista más realista y que, a medio plazo, podré aprovechar para los asuntos que tengo abiertos con algún grupo de investigación además de para adquirir algo más de conocimiento básico para un desarrollador web de hoy en día. Así que tras unas cuantas dudas me lo compré.

El libro está muy muy bien. Comienza con una presentación de O'Reilly (un gurú en el mundo de la web y uno de los coinventores del famoso término 'Web 2.0') que muestra el libro como el primero (o al menos de los primeros) que toca realmente el tema de 'cómo programar en la web 2.0' no desde la perspectiva del dinamismo y la fanfarria, sino desde el punto de vista de la generación de información.

Por poner un ejemplo, la parte más importante de sitios como Last.Fm no es tanto su aspecto, usabilidad y dinamismo (que de hecho cambió en alguna ocasión sin mayor repercusión) como la capacidad que tiene para extraer relaciones inexistentes a priori entre los distintos elementos (usuarios, músicos y canciones) que componen la comunidad. Es de esas relaciones inexistentes a priori, pero implícitamente creadas por los usuarios, de lo que va este libro.

El libro tiene implementaciones de cada una de las técnicas que explica y va haciendo crecer los ejemplos de una manera muy coherente para que, de repente, te encuentres con un algoritmo bastante potente ya implementado. En este aspecto solo podría estar mejor si al libro lo acompañara un CD con los códigos ya escritos (no soy de los que creen que copiar código de un papel te enseñe algo).

Por supuesto, los ejemplos están implementados de la manera más simple posible, huyendo de cualquier otra complicación que no sea el propio algoritmo. Así, los ejemplos suelen alimentarse a base de arrays, los servicios web se consumen sin tolerancia a fallos ni caché y, en general, sabes que las implementaciones se tendrían que optimizar mucho antes de poder ponerlas en producción en cualquier entorno (más aún si hablamos de entornos en tiempo real).

Eso no quita para que algunas partes del libro se hagan densas y difíciles. Particularmente densa se me hizo la parte relativa a redes neuronales (quizás el ejemplo menos claro del libro). Y en otras ocasiones la complejidad no se explicaba al escaparse de los objetivos del libro (como ocurrió con las SVM) dejándote con sabor a poco (en el caso de las SVM tenía ganas de una buena introducción).

Estaba cerca de terminar la lectura del libro cuando en el trabajo un compañero descubrió Akinator, el genio de la web en su versión de aplicación para iPhone.

Akinator es una aplicación web que asegura adivinar tus pensamientos y juega contigo una partida de "¿Quién es quién?" en la que a base de preguntas, a veces un tanto atípicas, es capaz de adivinar en qué personaje estás pensando.

Akinator consiste en una base de datos de preguntas y respuestas sobre personajes bastante grande (tiene muchos personajes) y adivino que utiliza algún tipo de algoritmo emergente para conseguir extraer la identidad del personaje sin tener que realizar todas las preguntas posibles.

El efecto que consigue está muy bien en algunos casos, pero en otros casos resulta sorprendente cómo a partir de aspectos aparentemente triviales puede conseguir adivinar la identidad.

Evidentemente no conozco los detalles de implementación internos pero no me sorprendería ver que utiliza algún tipo de modelo en forma de árbol de decisión o algunas otras de las técnicas que se explican en el libro.

Si no fuera por los tiempos en que vivimos no sería extraño que una "adivinación" del tipo que se presenta en esta aplicación fuera visto como algo mágico, poderoso. Sin embargo, hoy el conocimiento está más cercano a nosotros y podemos saber de qué manera una máquina que nada tiene que ver con nuestro pensamiento puede adivinar lo que pensamos a partir de preguntas aparentemente inconexas y contradictorias.

Aunque claro, por otra parte, ahí siguen los adivinos y los horóscopos...