Software para mantener conversaciones

Viernes, 25 Abril 2008

Cómo recordareis, un día escribí un artículo hablando de si realmente piensan los ordenadores y la inteligencia artificial que hay detrás de un juego de ajedrez. Hoy voy a tomar el tema de la inteligencia artificial desde otra óptica: el lenguage natural.

Podemos decir que en el campo del lenguage natural la tecnología ha avanzado mucho. Hoy en día ya existen programas que son capaces de mantener una conversación y pasar desapercibidos como humanos, llamados chatbots. En la Web existen varios (doy links más abajo) y usted puede aprovechar para practicar su inglés.

En general podemos decir que estos programas si son inteligentes. Fue Alan Tuning el que dijo que la mejor manera de saber si una máquina es inteligente es poniendola delante de un humano y si este no sabe discernir si es una máquina o un humano, entonces el sistemas es inteligente, puesto que simula el comportamiento humano. En algunos casos se acompaña con gráficos faciales que dan un realismo fuera de lo común.

¿Cómo funcionan? : Bueno, no voy a entrar en muchos detalles, pero diré básicamente que consiste de varios campos:

  • Estudios gramaticales del lenguaje, para saber como formar oraciones y cómo interpretarlas. Esto puede cambiar de unos idiomas a otros.
  • Redes neuronales u otros sistemas de representación del conocimiento: son técnicas que especifican como almacenar el conocimiento y cómo hacerlo accesible, además de como relacionar unos conceptos con otros.
  • Módulos que analizan emociones: Algunos chatbots son capaces a identificar emociones y actuar en consecuencia, e incluso en algunos casos ellos simulan también emociones.
  • Sistemas de aprendizaje. Procesan el conocimiento, crean reglas de relaciones de conceptos y los almacenan en los sistemas de representación del conocimiento que ya he mencionado.

En algunos sitios, se usan chatbots para ofrecer sistemas de soporte y ayuda al usuario, por ejemplo en las páginas de soporte de compañias de telecomunicaciones, tiendas on-line, etc.

Algunos sitios donde puede charlar con algunas de estas máquinas: (nota: aviso antes de que probeis que no son perfectos, ser un poco receptivos)

  • http://www.icogno.com/joan.html
  • http://www.jabberwacky.com/
  • Este al parecer muy bueno, y hablar 20 idiomas: http://person.jabberwacky.com/george
  • Uno de los más clásicos y pioneros, ya con algunos año, fue E.L.I.Z.A., que emula a un psicoanalista. Tiene un ejemplo aquí: http://www.manifestation.com/neurotoys/eliza.php3
  • Uno en castellano buenísimo para descargar: http://alejote.com/alejote_tres_mash/descargas/Dr%20Abuse%20-%20Chatbot.exe
  • Otro en castellano: http://codony.vhost.pandorabots.com/pandora/talk?botid=e71c0d43fe35093a
  • Y aquí teneis una lista completa de bots: http://www.inteligenciaartificial.cl/chatbots/chatbots.htm
  • También existen programas que usando el “Microsoft Agent” permiten dominar el escritorio, la agenda, el email y diversas aplicaciones mediante conversaciones y con personajes gráficos y algunos están en castellano. Recomiendo que le echeis un vistazo para abrir boca, aquí. El MS-Agent incluso puede leer textos en voz alta.

Por último deciros a modo de curiosidad, que en muchas salas de chats e incluso en conversacions “messenger” privadas, se usan algunos de estos programas. También se hacen concursos y premios para ver cual es el chatbot más logrado.

Y para terminar, aquí teneis un juego en el que pensais algo, cualquier cosa, y este sistema de adivina lo que has pensado en tan solo 20 preguntas. Buenísimo !!!! : http://www.20q.net/


‘Keops’: un motor de ajedrez

Lunes, 10 Marzo 2008

Este fin de semana he retomado un proyecto que tenía abandonado ya varios años. Hace tiempo desarrolle en C un motor de ajedrez, es decir, solo la parte “que piensa”. A este motor lo llame ‘Keops’. Sobre el interfaz de usuario existen algunos ya programados, como Winboard, que cumpliendo unos requisitos de interfaz, nos ahorra tener quedesarrollar esta tediosa parte.

La primera versión del programa/motor de juego la base en código fuente de otros, concretamente en el “Tom Kerrigan Simple Chess Program.” y ciertamente fue una buena experienca. Ahora el objetivo es distinto: hacer todo el trabajo desde cero y utilizando las técnicas más punteras. En este blog voy a ir explicando como voy avanzando en esta tarea.

De momento, el trabajo que he hecho este fin de semana, además de tocar el piano, es implementar un “sistema estático” de movimientos. ¿qué significa esto? pues sencillo……….. la parte de la velocidad de calculos y rendimiento es crítica para competir con otros motores bien preparados, es decir, cuando más rápido hagamos las cosas en un mismo periodo de tiempo, mas posibilidades tenemos de que el motor sea más fuerte. Es por esto de la velocidad, por lo que precalculamos muchas cosas “estáticas”. Vamos a verlo con un ejemplo:

………. imaginaos que tenemos un caballo en la casilla c3. Cuando queremos calcular a dónde puede ir el caballo, restamos a la casilla c3 (la no.18 de un total de 64) 17, 10,6, etc…. en total 8 operaciones aritméticas para hallar las 8 casillas posibles del movimiento del caballo. Si este tipo de calculos los realizamos cada vez que queramos ver donde puede ir el caballo perdemos mucho tiempo y calculo en realizar esta tarea. Para ello, cada vez que arrancamos el motor guardamos ya precalculadas las casillas a las que puede ir el caballo desde esta casilla. Así ahorramos tiempo de computo para luego.

La menera más eficiente de guardar este tipo de información no es, como le cabría pensar a muchos, un array de enteros en el que cada uno fuera las casillas posibles. Si esto fuera así, en tiempo de ejecución el procesador tendría que ir calculando la posición del array mediante sumas. La mejor manera es guardar la información en los conocidos BitBoards.

Un bitboard es un entero de 64 bits, curiosamente el número de casillas de ajedrez en un tablero. Esta coincidenca nos sirve para que con un simple entero, poder almacenar la información de a que casillas puede ir un caballo desde la casilla c3. Tendrá todos los bits a cero menos las casillas posibles que estarán a uno. Así, con un array de 64 posiciones de bitboards, tenemos guardados todos los movimientos posibles del caballo desde todas las casillas del tablero.

El concepto de bitboard es muy útil. Supongamos que tenemos otro bitboard con la posición de las piezas enemigas. Solo tendríamos que hacer una operación AND entre el anterior bitboard y este ultimo para saber que capturas puede hacer el caballo, y tan solo en un ciclo de reloj!! (si fuera arquitectura i64, siendo i32 cuesta algún ciclo más). (Nota: una operación AND es una operacion entre dos bits en los cuales solo se pone el resultado a bit 1 cuando los otros dos valen también 1. Para el resto de situaciones el resultado es 0)

Esto de los bitboards es un concepto sobre que hablaré más adelante, según avance en el desarrollo. Como digo ahora estoy pre-calculando muchos bitboards de aspectos variados que nos permiten no tener que realizar calculos para obtenerlos posteriormente. Consiguientemente se obtienen mejoras considerables en el rendimiento que después se podrán usar en temas más delicados como el calculo de variantes o el análisis de posiciones.

Espero que hayais pillado el truco….. ya os iré contanto más. Irme comentado si queda claro y así puedo ir mejorando las explicaciones en los puntos más oscuros.

Saludos

FS


¿Piensan los ordenadores?

Miércoles, 19 Diciembre 2007

“Sólo la inteligencia se examina a sí misma”. (Luciano Balmes (1810-1848) Filósofo y sacerdote español.)

La pregunta de hoy tiene cierto interés filosófico. ¿Hasta que punto podemos considerar si una máquina piensa o no? ¿Cuáles son los mecanismos que hacen que un ordenador tome determinadas decisiones? ¿serán en el futuro los ordenadores extremadamente inteligentes? Ya el matemático Alan Turing, padre de la inteligencia artificial, se hacia esta pregunta, allá a mediados del siglo XX. Sus teorías ayudaron a capturar las reglas que rigen sistemas formales “comprensibles y humanos”, y trasladar esas reglas a una máquina capaz de gestionar estas reglas y los estados asociados. Es lo que se conoce como “La Máquina de Turing”.

En base a lo que Turing aportó, deberíamos cambiar la pregunta original “¿piensan las máquinas?” por “¿puede una máquina imitar el comportamiento humano?” Al final, la respuesta será ambigua: habrá situaciones en las que si, y otras en las que no…… y habría que matizar, que en las situaciones en las que si sucede, suele ser más un proceso de calculo, imitación y reacciones prefijadas que de un proceso de meditación, conciencia o pensamientos.

Como conozco el tema, voy a hablar de uno de lo que durante decadas, ha sido el estandarte de los avances de la inteligencia artificial: el juego del ajedrez.

Hoy en día, cualquier programa de ordenador que tenga un nivel alto de juego, podrá ganar en un 95% a cualquier jugador de élite. ¿cómo es esto posible?. Simplemente, los ordenadores de hoy en día son capaces de calcular jugadas, en el arbol de variantes, entre 10 y 20 jugadas más allá de la posición inicial. Es decir: ven casi todo a corto y medio plazo, usando la fuerza bruta. Al final de cada variante, el programa realiza un cálculo para evaluar la posición resultante en el tablero (ventaja para el blanco, igualdad, contraprestación, etc.). Esta evaluación es sumamente importante pues en ella se basa la elección de qué variante es la más prometedora. No suele ser precisa, pero si lo suficiente para que junto a la fuerza bruta suponga un sistema eficiente.

Por lo tanto, una maquina calcula casi todo a corto y medio plazo, por fuerza bruta. Cualquier fallo minúsculo que un humano haga a corto o medio plazo, la máquina se encarga de castigarlo muy bien. Es en el largo plazo donde los humanos pueden triunfar sober las máquinas, pero es sumamente difícil, ya que para que un plan a largo plazo sea exitoso, los pasos intermedios de acciones a corto y medio plazo deben ser perfectos, cosa que como decimos es dificil y en donde las máquinas no flojean.

Es por esta razón, que en el ajedrez por correspondencia (aquel donde los contrincantes tienen varios días para realizar una jugada), las máquinas no triunfan ante jugadores experimentados, ya que los jugadores analizan muy bien todas las consecuencias de su jugada, tanto a corto, medio y largo plazo.

Para acabar, hago un simple esquema de como piensan las maquinas y los humanos en cada fase de la partida. Podrá comprobar el lector que una máquina de ajedrez “no piensa”, “no razona”, solo “calcula” :

  • Aperturas: La máquina tiene una base de datos enorme, realizada por un jugador profesional, donde tienen grabadas todas las jugadas que le dan la mejor valoración posible en cada posicion. Esta base de datos es elaborada en base a todas las partidas jugadas hasta la fecha en la historia del juego. Si la jugada no existe, entonces la máquina pasa a pensar en modo “medio juego” (el siguiente que explico). Por el contrario, un humano, aunque conoce algunas determinadas posiciones de memoria, juega la apertura en base a razonamientos lógicos y su conocimiento de las posiciones (experiencia) que tiene de otras partidas y de su preparación en casa. Como podemos ver, la máquina no piensa, sino que elije un dato de la Base de Datos, y el humano razona.
  • Medio Juego: El ordenador calcula millones de variantes y posiciones. Basa su calculo en “lo que ve”al final de las variantes. Aquí podriamos decir que si existe cierta inteligencia. Por el contrario, el humano solo puede calcular hasta dos o tres movimientos más allá de la posición que tiene delante, y debe usar su razonamiento logico e intuitivo para elegir el mejor movimieto. De nuevo, al igual que la apertura, el ordenador “no piensa”, simplemente elige la que por fuerza bruta, es la variante mejor. El humano, por el contrario, razona, y tiene que no cometer fallos a corto o medio plazo (que es campo de visión de la máquina) para poder triunfar a largo plazo.
  • El final de partida: Es exactamente igual que el medio juego (con algunos matices), aunque hay casos concretos en los que hay una diferencia notable. El programa o máquina de ajedrez, tiene una base de datos con todas las posiciones posibles en las que queden en el tablero cinco piezas o menos. En esta base de datos hay asignada a cada posición la mejor jugada. Esta base de datos ha sido creada por humanos. De nuevo vemos que la máquina “no piensa”, sino que simplemente recurre a esta biblioteca. Por el contrario, el humano no puede memorizar estas tablas, y debe basar su juego en el razonamiento lógico y la intuición.

Resumiendo: no es posible hacer pensar a una máquina igual que lo hace un humano (aunque tampoco está demostrado que no puedan llegar a hacerlo), al menos en teoría de juegos.

También existen otras ramas de inteligencia artificial, entre ellas la denominada “lenguaje natural”, donde se investiga como hacer que una máquina mantenga una conversación y que parezca un humano. Aquí ha habido notables progresos en la última década. Prometo hablar de ello en un próximo artículo.
Espero que el lector haya pillado la idea.
Saludos
Fer