# Columbo

La proliferación de Robots Sociales en la actualidad como sistemas de interacción hombre-máquina, con capacidades cada vez más semejantes a los humanos, está generando una gran variedad de puntos de vista y enfoques en la incorporación de agentes virtuales como parte del sistema de interacción.

## Introducción

En la actualidad el uso de los Agentes Conversacionales o chatbots es muy común, pues se han vuelto instrumentos de usos múltiples en disciplinas variadas desde simples supervisores de conversaciones o chat, atención al cliente, ayudantes, hasta mantener una conversación de cualquier tema específico con la capacidad de emular el diálogo que un usuario mantendría con un agente real. Los agentes son programas basados en Inteligencia Artificial, son entidades capaces de percibir su entorno, procesar lo que perciben y tener una reacción, es decir, una respuesta o actuar en su entorno de manera racional.

## Características

Cada agente, tiene sus propias características, pero las que diferencian a los agentes conversacionales son las siguientes:
* Autonomía.
Un agente es completamente autónomo si es capaz de actuar basándose en su experiencia. El agente es capaz de adaptarse aunque el entorno cambie severamente, puede brindar diferentes formatos (o estilos) de respuesta, dependiendo del tipo de usuario, del tipo de pregunta realizada, etc.
* Sociabilidad.
Este atributo permite a un agente comunicar con otros agentes o incluso con otras entidades, la cual sería la característica diferenciadora de los chatbots.
* Racionalidad.
El agente siempre realiza lo correcto a partir de los datos que percibe del entorno, sabe formular respuestas, analizando la frase introducida, son capaces de generar la respuesta más apropiada.
* Reactividad.
Un agente actúa como resultado de cambios en su entorno. En este caso, un agente percibe el entorno y esos cambios dirigen el comportamiento del agente. Pueden proporcionar respuestas de diversa naturaleza. Es decir, no tienen que limitarse a brindar frases como respuestas. Pueden proporcionar enlaces dentro de la web o incluso recursos electrónicos como respuesta.
* Pro-actividad.
Un agente es pro-activo cuando es capaz de controlar sus propios objetivos a pesar de cambios en el entorno. Pueden ser programados para comprender el contexto de la conversación y situar la pregunta en el mismo.
* Adaptabilidad.
Está relacionado con el aprendizaje que un agente es capaz de realizar y si puede cambiar su comportamiento basándose en ese aprendizaje. Se encuentra en fase de desarrollo, pero ya con avances promovedores.
* Movilidad.
Capacidad de un agente de trasladarse a través de una red telemática.
* Veracidad.
Asunción de que un agente no comunica información falsa a propósito.
* Personalidad.
Cada agente es único y depende del programador las características que quiera darle como emociones, comportamiento no verbal, entre otros.

## Aplicaciones

En la actualidad los agentes conversacionales se han diversificado y masificado en su uso, pues se están convirtiendo en herramientas de mucha utilidad en diversas áreas.
* Aplicaciones

## Arquitectura

La estructura básica de un chatbot, el proceso es:
* El conocimiento del experto humano debe introducirse en la base del conocimiento, en función a las plantillas, patrones y reglas. (Ingeniería del conocimiento).
* El usuario introduce la entrada mediante la interfaz, está la envía al motor de inferencia.
* El motor de inferencia analiza las situaciones, establece los objetivos y obtiene la respuesta de acuerdo a la base de conocimiento, enviándola de vuelta a la interfaz del usuario.
* Arquitectura

## Evaluación de Chatbots

El test de Turing se basa en la inferencia simple: un juez se sitúa en una habitación y comienza a realizar preguntas a un ser humano y un ordenador, ambos situados en otra habitación, y en caso de que el juez no sea capaz de distinguir con certeza cuáles son las respuestas de la máquina y cuáles las de la persona, entonces se puede considerar que la máquina del experimento es inteligente.
A día de hoy ninguna máquina ha conseguido superar el test de Turing, aunque de los resultados del premio Loebner podemos decir que vamos en buen camino, en el año 2010, por primera vez en los veinte años de historia del premio, un juez confundió al programa Suzette con una persona.

## Plataformas

* AIML.
Como ya hemos hablado tenemos el lenguaje de programación AIML, es una adaptación de una gramática XML y formó la base para el primer Alicebot, ALICE. AIML, describe una clase de objetos de datos llamados objetos AIML y describe parcialmente el comportamiento de los programas de ordenador que los procesan. AIML objetos se componen de unidades llamadas temas y categorías, que contienen datos analizados o no analizados. AIML es concebido como un lenguaje de scripts que define una base de conocimiento de pregunta-respuesta, la cual es utilizada como software para chatbots basados en texto. En AIML, una interacción entre el agente y su usuario se define dentro de la unidad categoría (category), mientras las posibles expresiones del usuario se encuentran definidas en las etiquetas de patrones (pattern) y la respuesta del agente se encuentra definida dentro de las etiquetas de plantillas (template).
* RiveScript.
RiveScript comenzó originalmente como un módulo de Perl llamado Chatbot :: Alfa en 2004, programado por Casey Kirsle, quien durante años había estado trabajando con chatterbots en RunABot.com en AIML y al ver que este no brindaba la posibilidad de integración a MSN Messenger comenzó a desarrollar RiveScript en Perl, siendo un nuevo lenguaje, basado en texto plano. No mucho después, Chatbot :: Alfa fue abandonada en favor de un sustituto, programado desde cero. La nueva versión del lenguaje de scripting se parecía a código Alfa, que se convirtió en un módulo Perl llamado Chatbot :: RiveScript. El desarrollo de Chatbot :: RiveScript es continuo, ha sido renombrado como "RiveScript". El módulo se estabilizó en la versión 1.03 en julio de 2006. En 2008 se ha creado un nuevo estándar para RiveScript en la versión 2.0 con un aumento la potencia y flexibilidad.
* Aerolito.
Aerolito es un lenguaje de marcas basado YAML con una fuerte influencia de AIML y RiveScript. La motivación es tener un lenguaje más limpio y fácil que AIML sin crear un nuevo formato de archivo, como RiveScript. Su autor es Renato de Pontes Pereira. Pero cuenta con muy poco desarrollo y en la actualidad se puede decir que casi esta extinto pues no cuenta con mejoras, un grupo ni página oficial.

## Comparación de plataformas de desarrollo de chatbot

Los lenguajes de programación de las bases de conocimientos de los chatbots, son muy similares, ya que los unos han sido desarrollados en base a los otros, siempre buscando una estructura más sencilla o su integración en otras plataformas.
* Comparación

## En el mercado

Dentro de cada grupo, por supuesto, existen multitud de alternativas, por lo que no es posible analizarlas todas; sin embargo, se ha utilizado ciertos criterios para seleccionar algunos representantes de entre las distintas opciones disponibles, con el fin de estudiar más en profundidad un grupo menos numeroso y determinar qué hace mejores a unos respecto a otros, sus utilidades reales y las tecnologías que han sido utilizadas para su construcción.
* Jabberwacky.
Jabberwacky es un chatterbot creado por el programador Britanico Rollo Carpenter. Su objetivo declarado es "simular charla natural del ser humano en una forma interesante, entretenida y divertida". Es un primer intento de crear una inteligencia artificial a través de la interacción.
* Cleverbot.
Fue creado por el científico de IA Rollo Carpenter como una nueva variante de Jabberwacky como base, con lógica difusa y con un contexto más profundo, bajo el nombre de Cleverbot, es considerado una inteligencia artificial conservadora adaptiva.
* Akinator.
Es un juego de Internet, mediante un test de veinte preguntas puede determinar qué personaje está pensando el jugador. Indudablemente es un chatbot, pues cuenta con todas las características necesarias. Fue creado por tres programadores franceses en 2007, los que fundaron Elokence.com empresa francesa de ingeniería informática.
* Lingubot.
En la actualidad la Empresa Artificial Solution brinda servicios a en todo el mundo, en áreas como Banca y Seguros (La Cooperativa Banking Group, Credit Suisse, BBVA, etc), Telecomunicaciones (Vodafone, MÁSmovil, Orange, etc), Otras Industrias (Sant Joan de Deu Hospital, Novartis, Stralfors TradCom Solutions), Sector Público (Forbruger Europa, Brent Council, Ronneby Kommun, etc.), Transporte y Ocio (Scandinavian Airlines, Airbus, RATP Moby, etc), Venta al por menor Epson, IKEA, Yello Strom GmbH). El asistente interactivo en la Web lingubot que cuenta con más de 250.000 conversaciones, todos los días de las principales organizaciones mundiales, como IKEA, Lloyds TSB, BT, BBC, Daimler Chrysler, y más de 150 otras empresas, está disponible en los EE.UU. a partir de Creative virtual”
* Pandorabots.
El Dr. Richard S. Wallace, en 2002 inició una importante colaboración con Franz, Inc. para crear Pandorabots, un servidor AIML e intérprete implementado en Common Lisp. En 2008 el proyecto se partió como una empresa independiente, Pandorabots Inc. donde Wallace sirve como Director de Ciencia. La visión de Pandorabots es brindar un servicio web de código abierto,que permite de manera gratuita desarrollar y publicar chatbots a cualquier persona.
* BotGenes.
Es una de las empresas pioneras en Procesamiento del Lenguaje Natural en idioma Español. Ofrece Agentes Virtuales capaces de actuar en un amplio número de situaciones típicas de las organizaciones. Botgenes es una empresa que cuenta con diversidad de chatbots, con diversas características, con los cuales se puede interactuar sin ningún problema.

## Caso Práctico: Chatterbot "suitable for framing" de Columbo
### Elección del chatterbot

Para este proyecto hemos seleccionado el chatterbot de www.daleaceptar.gob.ar, que permite interactuar a cualquier usuario, con una pregunta, y con una serie de posibles variantes de dicha pregunta y finalmente emitir una o varias respuestas condicionadas.
Este chatterbot permite el uso reglas, reglas con variables, reglas condicionales y categorías, esta última se utiliza para preferir que una regla se enmarque dentro de una categoría. Asimismo, permite normalizar y lematizar (variantes de un verbo) las oraciones.

### Elección de tema para interactuar con el chatterbot.

De otro lado tenemos el capítulo “suitable for framing – listo para enmarcar” de la serie de investigación “Columbo”, el resumen del capítulo es:
“los sueños de riqueza de un crítico de arte son aplastados cuando él oye la voluntad del testamento de su tío”, el tío es asesinado por el sobrino al inicio de la serie.
En términos estadísticos esta serie cuenta con 1.152 líneas de guion – conversaciones que expresan cada uno de los personajes en toda la serie -. Asimismo, hemos enlazado cada línea de guion con un personaje, lugar y trama obteniendo un total de 70 secuencias, y 17 mini tramas.
Hemos seleccionado para el proyecto la mini trama que hemos denominado “la escena del crimen” que empieza en el 13:28 minuto y termina en el 21:28 minuto. Estos 8 minutos de transmisión cuenta con 176 líneas de guion. De las cuales hemos acondicionado en el chatterbot 29 reglas con 71 variantes de dichas reglas y 40 respuestas.
Los datos del guion con un personaje, lugar y trama lo podemos apreciar en el fichero chatterbot.pdf.
* chatterbot

## Conclusiones

* El usuario no disfruta en una conversación mantenida con una máquina. Por tanto, los chatbots han de desarrollarse de tal modo que sean capaces de imitar el comportamiento humano, dando la impresión de ser inteligentes y hacer creer a su interlocutor que está hablando con otra persona. En caso contrario, el usuario desespera por no ser comprendido y no haber podido resolver sus dudas.
* El mejor método de comprensión empleado por un chatbot es el análisis de los patrones de diálogo empleados por su interlocutor humano. Existen chatbots que obligan a la inserción textual de una serie de términos en la entrada para su comprensión, lo cual, ofrece una gran ventaja y dos grandes desventajas. La ventaja es la completa ausencia de error en la respuesta ofrecida, dado que, si reconoce de manera literal la entrada del usuario, se le devolverá una respuesta predeterminada. Una desventaja, naturalmente, aparece cuando el usuario no introduce textualmente la cadena que el bot reconoce, impidiéndole, así, la comprensión del texto. La segunda desventaja atañe al gran tamaño que debe presentar su base de datos en caso de querer atender positivamente el mayor número de solicitudes posible. El análisis por patrones independientes, tiene un mayor riesgo de fallo en la contestación, pero se ve compensado por la flexibilidad para la formulación de preguntas y la minimización de la capacidad de almacenamiento requerida que ofrece.
* Cuanto más te aproximas, más te puedes equivocar. Un análisis minucioso y detallado de la entrada del usuario conlleva una mayor probabilidad de fallo en la respuesta ofrecida. Conviene, por tanto, establecerse en un nivel que equilibre la capacidad de comprensión con la correcta resolución de lo preguntado.