sábado, 17 de setembro de 2011

LINGUAGEM AIML APLICADA COM MECANISMO PARA TRATAMENTO DE INTENÇÕES EM CONVERSAÇÃO (poster apresentado no Salão de Ensino 2011)

Linguagem AIML

AIML (Artificial Intelligence Markup Language) é uma linguagem de marcação, baseada em XML (eXtensable Markup Language) e utilizada na base de conhecimento de robôs de conversação, e é baseado na técnica de casamento de padrões. O projeto ALICEBOT (WALLACE, 2001) é baseado nesta técnica.

A linguagem AIML descreve uma classe de objetos, conhecidos como objetos AIML, que são interpretados por um programa de computador que descreve o comportamento do robô de conversação.

Para o funcionamento do chatterbot é necessário um interpretador da linguagem AIML, esse interpretador, disponível em diversas linguagens reconhece as principais tags de AIML na versão 1.0.1, dentre as quais: topic, category, pattern, template, random, condition, srai entre outras.

Estrutura Padrão de uma Categoria AIML

Figura 1: Estrutura Padrão de uma Categoria AIML

A figura 1 mostra um exemplo de arquivo AIML contendo uma categoria que mostra um padrão de entrada digitado pelo usuário, pattern, e três possíveis saídas do robô de conversação, template, sendo que apenas uma das saídas é mostrada aleatoriamente com uso da tag random.

Fazer uso de curingas e variáveis, em AIML, pode melhorar as capacidades de entendimento do robô de conversação, tornando-o mais flexível quanto as possibilidades de escrita dos usuários e armazenamento de valores para simular a memória do chatterbot.

Uso de curingas e variáveis

Figura 2: Uso de Curingas e Variáveis

Mesmo com os recursos de variáveis, condições, recursividade, somente a linguagem AIML não é suficiente para tornar uma conversação flexível e coerente, podendo haver desvios na conversação, repetição de padrões de saída e trocas inesperadas de tópicos de conversação.

Para tratar esses problemas, é possível utilizar recursos de AIML em conjunto com a Teoria da Análise da Conversação (MARCUSCHI, 1991). Esse tratamento, proposto por NEVES (2005), consiste em fazer um controle da conversação com base no andamento global da conversa e variáveis de controle como sessão da conversação, intenção do robô e do usuário, impedindo que hajam trocas inesperadas de tópicos e repetições excessivas.

Teoria da Análise da Conversação

Conforme Dittmann apud Marcuschi (1991), uma conversação é uma interação verbal entre um ou mais interlocutores, havendo aceitação ao tema e o mínimo de conhecimento entre as partes.

Em uma conversação se toma como unidade o turno, sendo que em algum momento uma das partes envolvidas possui o turno de fala, então há uma troca de turno para o outro envolvido na conversação, isso simplificando ao máximo, sem levar em conta as interrupções e conversas simultâneas, pode-se dizer que a conversa é uma troca de turnos de um falante para o outro. Em um robô de conversação, chatterbot, pode-se afirmar que a troca de turnos é precisa, baseada em uma regra do tipo “fala um por vez”.

No que tange à organização local da conversação, Schegloff apud Marcuschi (1991, p.35) introduziu o termo “pares adjacentes”, referindo-se a sequências de turnos de uma conversação, quando há por exemplo: pergunta-resposta, ordem-execução, convite-aceitação/recusa.

Marcuschi (1991) destacou recursos para a organização global da conversação, apresentando que uma conversação pode possuir três seções distintas, uma de abertura, onde os envolvidos se apresentam, uma de desenvolvimento, onde o tema é apresentado e debatido e uma terceira de fechamento, onde ocorre a despedida dos envolvidos e término da conversa.

iAIML: AIML com Intenção

O modelo proposto por NEVES(2005), para o tratamento de intenções em conversação com a linguagem AIML, utiliza a linguagem sem a necessidade de instalação de programas ou recursos adicionais. O autor utiliza apenas os comandos padrões da linguagem AIML na versão 1.0.1, tags para condicionais, recursividade e variáveis, que vão guardar informações sobre as intenções da conversação e sessão da conversação.

NEVES (2005) utiliza três variáveis para o tratamento de intenção:

  • session: a variável session tem a função de guardar o andamento global da conversação, no caso ela que vai fazer o controle se a conversa está nas sessões de abertura, desenvolvimento ou fechamento.
  • user_intention: com essa variável é feito um controle de repetições baseado na intenção do usuário.
  • bot_intention: a variável bot_intention serve para tratar sentenças desconhecidas com base na última intenção do robô de conversação. Sendo assim, é possível utilizá-la também quando o chatterbot faz alguma pergunta e uma resposta é esperada.

Cada categoria (padrão com entrada de dados e saídas possíveis) de AIML deverá conter as variáveis de controle de sessão, e intenção, bem como as devidas verificações, sobre o posicionamento global e local da conversação.

figura3

Figura 3: Exemplo de categoria com a intenção de Saudar

Fonte: (NEVES, 2005)

Na figura 3 há um teste para cada sessão de conversação e um teste para a intenção do usuário, que servirá para tratar a repetição da intenção de saudar. Primeiramente ele testa a sessão de abertura, e ajusta as variáveis user_intention e bot_intention. Caso a sessão seja de desenvolvimento ou fechamento, o chatterbot questiona ao usuário sobre a saudação repetida, uma vez que eles já estavam interagindo.

A condição sobre a variável user_intention verificará se o usuário está repetindo a saudação.

NEVES (2005) efetuou um experimento, onde 87 pessoas utilizaram um chatterbot baseado em AIML e outro baseado em iAIML (com tratamento de intenções). Após, elas responderam um questionário contendo três questões de múltipla escolha, avaliando a qualidade geral do diálogo, andamento da conversa e coerência das réplicas utilizadas pelos chatterbots.

Tabela 1: Resultados obtidos na comparação de chatterbots

 

AIML Padrão

iAIML

  Média Desvio Média Desvio
Qualidade Geral do Diálogo 1,55 0,10 1,77 0,05
Andamento da Conversa 1,93 0,05 2,12 0,08
Coerência das réplicas 1,82 0,18 2,42 0,30
Adaptado de NEVES, 2005.
 

Com a proposta de NEVES, para o tratamento de intenções, se resolve um problema relativo a coerência das conversas entre usuário e robô de conversação, também o problema do tratamento de sequências desconhecidas e controle de repetições.

Pode-se usar, ainda, nos padrões de saída, várias formas de uma mesma sentença, e colocá-las para serem recuperadas de forma aleatória. Assim uma questão feita duas vezes pode ter duas ou mais formas de respostas diferentes.

 

Referências

KRAUS, H., FERNANDES, A. Desenvolvimento de um Chatterbot para Área Imobiliária Integrando Raciocínio Baseado em Casos. 2007. Disponível em: [http://revistaseletronicas.pucrs.br/fo/ojs/index.php/hifen/article/view/3857/2928]. Acesso em: 09/06/2010.

LEONHARDT, M. D., CASTRO, D. D., DUTRA, R. L. S., TAROUCO, L. M. R. ELEKTRA: Um Chatterbot para Uso em Ambiente Educacional. Artigo Publicado na Revista Renote. V.1 n.º 2, Setembro de 2003. Disponível em: [http://seer.ufrgs.br/renote/article/view/14336]

LEONHARDT, M. D., Doroty: Um Chatterbot para Treinamento de Profissionais Atuantes no Gerenciamento de Redes de Computadores. Dissertação apresentada como requisito parcial para obtenção do grau de Mestre em Ciências da Computação. Maio de 2005.

MARCUSCHI, Luiz Antônio. Análise da Conversação. 1991. Editora Ática. 2ª Edição.

NETO, A. et al. Chatterbot em AIML para o Curso de Ciência da Computação. Artigo Publicado nos Anais do I Workcomp-Sul. Maio/2004. Florianópolis - SC Disponível em: [http://inf.unisul.br/~ines/workcomp/cd/pdfs/2312.pdf] Acesso em: 04/05/2010.

NEVES, A. M. M., BARROS, F. A. iAIML: Um Mecanismo para Tratamento de Intenção em Chatterbots. Artigo publicado nos anais do V ENIA (Encontro Nacional de Inteligência Artificial) – Sociedade Brasileira de Computação (SBC). Julho/2005 Disponível em [http://www.unisinos.br/congresso/sbc2005/]

WALLACE, R. ALICEBOT. 2003. Disponível em: [http://alicebot.blogspot.com/] Acesso em 16/06/2010.

WALLACE, R. Artificial Intelligence Markup Language (AIML) Version 1.0.1. 2001. Disponível em: [http://www.alicebot.org/TR/2001/WD-aiml/] Acesso em: 16/06/2010.

WALLACE, R. A.L.I.C.E. Artificial Intelligence Foundation, Inc. 2009. Chapter 13 The Anatomy of A.L.I.C.E. Disponível em: [http://www.alicebot.org/anatomy.html] Acesso em 16/06/2010.

quarta-feira, 7 de setembro de 2011

AIML–Artificial Intelligence Markup Language

Bom, meu segundo tópico e vamos falar sobre a linguagem de marcação de inteligência artificial, utilizada para criar a base de conhecimento de chatterbots ou robôs de conversação.
Os robôs de conversação podem ser utilizados para lazer, educação na forma de tutores inteligentes, FAQs (frequently asqued questions) entre outras utilidades.
Pode-se definir três gerações de chatterbots:
  1. deu origem ao chatterbot Eliza, baseado em regras gramaticais e não armazenava conversas anteriores.
  2. baseada em regras de produção e redes neurais, deu origem ao Robo Julia de Michael Mauldin.
  3. baseada na linguagem AIML para construção da base de conhecimento, deu origem ao ALICEBOT de Richard Wallace.
AIML é uma linguagem baseada em XML, utiliza tags para definição dos padrões de entrada e padrões de saída do robô de conversação. Mais detalhes sobre o trabalho desenvolvido durante a pós podem ser vistos no site: http://chasqueweb.ufrgs.br/~abelcorrea, inclusive um bom detalhamento sobre AIML.
Sendo baseado em XML, a linguagem AIML necessita de um interpretador que possa entender e tratar as diferentes tags, dentre esses interpretadores temos:
  • PyAIML – interpretador em linguagem Python. É o que está sendo utilizado para a implementação do chatterbot proposto na monografia, o único problema é que ele não entende a tag gossip, mas isso pode ser facilmente implementado com o devido entendimento da linguagem Python.
  • ProgramD – interpretador em linguagem Java, pode ser utilizado para web, prompt de comando, programas de mensagem instantânea e com função para registro de conversação.
  • ProgramE – interpretador em linguagem PHP, utiliza banco de dados e faz a primeira leitura no arquivo AIML, passando os valor das tags para o banco de dados MySQL. O interpretador infere diretamente sobre o banco de dados.
  • ProgramP – interpretador em Delphi, também conhecido como PascALICE.
  • ProgramZ – baseado em CommonLisp e desenvolvido pela PandoraBots. Para quem não possui muita intimidade com linguagens de programação e quer aprender AIML, esta é uma boa pedida, visto que pode desenvolver um chatterbot e hospedá-lo no próprio site, bastando criar uma conta no site http://www.pandorabots.com/botmaster/en/home.
Não pretendo aprofundar em um tópico a linguagem AIML, ainda mais uma vez que já fiz isso na minha monografia (capítulo 4), a qual eu disponibilizo em texto integral na biblioteca da UFRGS e também na minha página web em: http://chasqueweb.ufrgs.br/~abelcorrea/
No link acima você pode conferir o texto na íntegra, bem como todas as referências.
No próximo tópico vou comentar sobre a conversação com intenções, e alguns exemplos de categorias ajustadas para o tratamento de intenções, com base no texto de NEVES, 2005 e a teoria da análise da conversação de MARCUSCHI, 1991.
Um bom feriado a todos.

domingo, 4 de setembro de 2011

O Retorno

Até que enfim tomei coragem para retornar com o blog. Para quem não acompanhava, eu possuía um blog no endereço http://abelcorreadias.spaces.live.com, só que havia parado de inserir novas postagens em virtude da minha pós - graduação que estava concluindo.
Após o término fui tentar fazer novas postagens e descobri, tristemente que a Microsoft havia descontinuado o serviço de blog e apagou todo o conteúdo dos blogs que não efetuaram a migração para o serviço do wordpress.
Tentei entrar em contato e recuperar o conteúdo para colocar no novo blog, mas nada, e também não possuía cópia das postagens no computador. Infelizmente ficamos de certa forma dependentes da tecnologia e cada vez que nos submetemos a confiar na rede, ficamos dispostos a enfrentar esse tipo de situação.
Enfim, tinha um bom conteúdo para quem queria conhecer inteligência artificial, mas não é por isso que desanimei e agora estou aqui novamente para contribuir com vocês que gostam de computação e inteligência artificial.
Começo então esse blog de cara nova, com novo conteúdo e sempre com o referencial, como era de meu costume, assim os leitores poderão conferir as fontes e tirar as suas próprias conclusões, e neste espaço, contribuir que o blog produza um bom arquivo sobre o assunto.
Apesar do título do blog ser Inteligência Artificial, pretendo não ficar só neste assunto. Também vou colocar alguma coisa sobre métodos de programação, padrões de desenvolvimento, desenvolvimento web, plone CMS, que é uma ferramenta que venho usando muito, e lógico inteligência artificial.
Recentemente conclui uma especialização em Informática na Educação, no qual defendi um trabalho sobre Robôs de Conversação, Agentes Inteligentes, popular chatterbots, e com certeza algumas postagens serão fruto desse trabalho que foi apresentado.
Espero que o blog receba bastante visualizações, e que vocês contribuam e comentem.

No más, é isso aí.