ALICE (2007) é um chatterbot com interface em linguagem natural baseado na experiência especificada por Alan M. Turing, composto por módulos de conversação categorizando os usuários por idade, gênero, localização geográfica e profissão, com um grande poder de comunicação, além de uma interface gráfica que estimula o diálogo (Figura 10). Leonhardt (2005) afirma que:
Sua inovação está na forma como é apresentada: além de muita documentação, apresenta uma saudação sonora ao visitante. Criada por Richard S. Wallace na Lehigh University e ativada em 1995, ALICE tem um grande poder de comunicação, além de uma interface gráfica que estimula o diálogo. É programada para dar muitas informações a seu respeito e pode sugerir até que o usuário a veja cantar, além de atuar como uma secretária que lembra as pessoas de seus compromissos. Sua irreverência vai ainda mais longe já que ela é capaz de espalhar fofocas e contar piadas.
ALICE tem se destacando em relação aos chatterbots de primeira e segunda geração, sendo bastante utilizado por projetos para o desenvolvimento de outros chatterbots com finalidades específicas. Este destaque pode ser constatado através do concurso anual “Loebner Prize” onde foi premiado nos anos de 2000, 2001 e 2004.
O software ALICE é disponibilizado através da licença pública geral GNU (General Public License), mesma usada pelo sistema operacional Linux e toda a Fundação de Software Livre. A fundação ALICE possui os direitos autorais do projeto e o disponibiliza livremente através de três produtos:
· Especificação técnica da linguagem AIML.
· Um conjunto de interpretadores AIML.
· Base de conhecimento do ALICE, e de outras personalidades já criadas, escritas na linguagem AIML.
Wallace (2007) descreve que ALICE é composto por um módulo de software chamado de interpretador AIML, que é usado para ler os objetos AIML e fornecer ao nível de aplicação as funcionalidades baseadas em sua estrutura. Um interpretador AIML pode usar os serviços de um processador XML, ou pode fazer o lugar de um, mas não deve violar os princípios definidos para os processadores de XML.
ALICE implementa o modelo de aprendizagem supervisionado, no qual o papel do botmaster (administrador da base de conhecimentos do bot) é fundamental. O botmaster analisa os
históricos dos diálogos, identificando as melhorias necessárias e criando novas informações para serem anexadas a base de conhecimento na forma de arquivos AIML, de tal forma que, as próximas respostas sejam mais apropriadas.
Para o desenvolvimento de chatterbots baseados no projeto ALICE é necessário o desenvolvimento da base de conhecimento através da linguagem AIML e também definir o interpretador que será utilizado. Na Seção 2.3.1 é apresentada a linguagem AIML, onde são armazenadas o conhecimento do chatterbot. Na Seção 2.3.2 são apresentados os interpretadores AIML, disponibilizados pelo projeto ALICE.
2.3.1 AIML
Segundo Wallace (2007) AIML (Artificial Intelligence Markup Language) é uma linguagem de marcação que descreve uma classe de objetos de dados e também descreve parcialmente o comportamento dos programas que processam estes dados. AIML é derivada da linguagem XML (eXtensible Markup Language, linguagem de marcação extensível) e atualmente encontrase na versão 1.0.1.
XML é um formato de texto simples e muito flexível, derivado de SGML (Standard Generalized Markup Language Linguagem Padronizada de Marcação Genérica), projetado originalmente com o desafio de publicar documentos eletrônicos em grande escala na Internet (W3C, 2007). Diferentemente da maioria das linguagens de marcação, inclusive a própria HTML (HyperText Markup Language linguagem de marcação de hipertexto), XML não apresenta um conjunto limitado de tags a serem utilizadas. Sua característica flexível permite aos usuários a definição de suas próprias tags e a criação de suas próprias linguagens de marcação.
A linguagem AIML define um padrão, baseado em XML, para representação do conhecimento que será utilizado pelo chatterbot, sendo baseada em categorias.
Segundo ALICE (2007) uma categoria é a unidade básica do conhecimento em AIML, que consiste em uma pergunta de entrada e uma resposta da saída, podendo ter um contexto opcional. A pergunta, ou estímulo, é chamado de pattern e a resposta é chamada de template. Os dois tipos de contexto opcional são chamados de that e o topic.
letras e números, porém sem caracteres especiais. Os espaços devem ser únicos entre as palavras e os caracteres “_” e “*” funcionam como palavras. Estes caracteres especiais que podem ser substituídos por qualquer expressão, de acordo com a entrada informada pelo usuário.
Geralmente as tags AIML transformam as respostas em um pequeno programa de computador que pode salvar dados, ativar outros programas, dar respostas condicionais e chamar recursivamente perguntas similares para inserir respostas de outras categorias.
A linguagem AIML disponibiliza um conjunto completo de tags que podem compor a base de conhecimento, cada uma com funcionalidades definidas. Segundo ALICE (2007) as principais tags AIML são:
· <aiml>: delimitador de bloco, indicando o início e o fim do arquivo AIML.
· <topic name=“X”>: permite que seja definido o assunto (tópico) que está sendo tratado no momento, para selecionar respostas que tratam deste tópico, permitindo que para uma mesma entrada existam respostas diferenciadas.
· <category>: unidade básica de conhecimento, contendo exatamente uma pergunta de entrada (<pattern>) e uma resposta de saída (<template>).
· <pattern>: é o estímulo ou entrada que compõe uma categoria. É permitido somente um
<pattern> por categoria, sendo incluído logo após a tag <category>.
· <that>: referente a resposta anterior a entrada do usuário, utilizado para realizar a combinação da reposta com o contexto. Deve ser incluído após a tag <pattern> e anteceder a tag <template>.
· <template>: é a fórmula para construir as respostas ou saídas de uma entrada. Para constituir esta resposta podem ser utilizadas funções disponibilizadas pela linguagem AIML.
· <srai>: informa ao interpretador que avalie novamente a resposta recebida, como se fosse uma nova entrada fornecida pelo usuário, criando um modelo recursivo para que várias entradas sejam direcionadas a uma única saída. Caso esta tag esteja incluída em uma entrada, ele não retorna a resposta imediatamente, mas procura a resposta mais apropriada em outras respostas de maneira recursiva.
· <condition name=“XX” value=“YY”>: tem a função de definir, entre diferentes respostas, qual a melhor a ser retornada em função do valor de uma variável, baseada em informações que são registradas ao longo da conversa entre o usuário e o chatterbot.
· <system>: é possível incluir um comando ou código para que o interpretador execute na máquina local em tempo de execução. O comando é executado como uma chamada do sistema operacional.
· <star>: substitui o valor capturado na entrada que é representado pelos caracteres especiais “*” e “_”.
Alem das tags citadas anteriormente existem outras tags com funções para:
· Substituir informações de entrada e/ou saída.
· Retornar informações como nome do usuário, data, versão.
· Redução simbólica das expressões.
· Formatação de textos.
· Funções randômicas para seleção de respostas.
· Inclusão de instruções para serem executadas pelo interpretador em formato de linguagem de programação.
Na Figura 11 é representada a estrutura básica de uma categoria AIML.
<category>
<pattern> Texto de entrada </pattern>
<template> Resposta </template>
</category>
Figura 11. Estrutura básica da linguagem AIML
Cada categoria contém um padrão de entrada, onde a entrada informada pelo usuário através de uma frase será comparada a este padrão, através de um sistema de seleção, que será o responsável pela construção das respostas que irão ser retornadas.
Para o desenvolvimento de chatterbots utilizando a linguagem AIML, a parte que necessita maior análise e modelagem é justamente a logística de disposição das questões e a forma como é informado o conhecimento cadastrado.
2.3.2 Inter pr etador es
Também chamados de Programs, os interpretadores são responsáveis por manipular os dados da base de conhecimento. No projeto ALICE estes interpretadores estão disponibilizados em diferentes linguagens de programação, como Java, PHP (Hypertext Preprocessor), C/C++, Lisp entre outras, o que torna o chatterbot disponível para diferentes plataformas, sem a necessidade de recursos extras para seu funcionamento.
A primeira edição do ALICE foi implementada em 1995 usando SETL (Set Theory and Mathematical Logic), que é uma linguagem pouco conhecida baseada na teoria dos conjuntos e em lógica matemática (ALICE, 2007). Esta implementação ficou conhecida como “Program M”, porém é mais uma especificação formal para AIML do que uma aplicação prática e funcional, pois a linguagem SETL é limitada a execução em sistema operacional Linux.
Embora originalmente o ALICE estivesse disponível como o software livre, atraiu poucos colaboradores até migrar para a linguagem Java, que é independente de plataforma, em 1998. A primeira implementação de ALICE e de AIML em Java foi denominada de “Program A” (ALICE, 2007).
Lançado em 1999, o “Program B” transformou o ALICE em desenvolvimento de software livre. Mais de 300 desenvolvedores contribuíram para o Program B e também para a completa transição do AIML em uma gramática compatível com XML (ALICE, 2007).
Jacco Bikker, no ano 2000, criou o primeiro interpretador AIML na linguagem C/C++, sendo conhecida como “Program C” (ALICE, 2007).
O “Program B” foi baseado na tecnologia anterior ao Java 2. Embora o programa funcionasse bem em muitas plataformas, teve incompatibilidades com a interface gráfica. Foi então que Jon Baer reescreveu o “Program B” utilizando a tecnologia Java 2, e adicionou muitas características novas. Com esta nova tecnologia, Jon nomeou seu primeiro bot de DANY, criando assim o novo program, chamado de “Program D”. Iniciado em novembro de 2000, o “Program D”
transformouse na implementação referência utilizada pela fundação de ALICE (ALICE, 2007).
Com o crescimento da comunidade AIML, outros programs foram desenvolvidos em diferentes linguagens, sendo facilitados pela adaptação de um padrão AIML 1.0.1 no fim do ano 2000. O interpretador desenvolvido na linguagem PHP denominouse de “Program E”, já o desenvolvido em linguagem Lisp foi nomeado de “Program Z” (ALICE, 2007).
Wallace (2007) liberou uma versão híbrida dos programs B e D em 2001, nomeando de
“Program dB”, a qual foi o vencedor do prêmio Loebner em outubro 2001. A maioria destas características hoje encontramse agregadas no “Program D”
Segundo Wallace (2007) os interpretadores manipulam a base de conhecimento na linguagem AIML, gravando os <patterns> em uma estrutura de árvore gerenciada por um objeto chamado Graphmaster. Este objeto fica residente em memória de maneira compacta, possibilitando uma rápida e eficiente busca dos <patterns> para garantir um bom desempenho.
Com a utilização deste sistema de árvore de entradas com prefixos semelhantes sobrepostos e um algoritmo de busca nessa árvore, permitem que a base de conhecimento do chatterbot seja diferenciada de um simples banco de dados. O Graphmaster procura a categoria com um <pattern>
que se encaixa no contexto e responderá com o <template> associado. A recursividade também contribui para que a base de conhecimentos tenha inúmeras vantagens em relação a um banco de dados, devido ao fato de a saída não depender apenas da categoria correspondente, mas também de todas as recursões realizadas por outras categorias.