terça-feira, 13 de maio de 2008

Traduzindo e adaptando Eliza para o aMSN

Chatterbots são programas que tentam emular uma conversação humana natural com algum objetivo. Pode ser dar assistência na busca de informações específicas, pode ser para entreter as pessoas durante um período de espera ou durante uma tarefa rotineira ou, ainda, apenas pelo desafio de tentar simular uma conversa tão real quanto possível.
Recentemente resolvi explorar as possibilidades dos chatterbots no mundo real usando minha conta no MSN. A opção mais acessível que encontrei, inicialmente, foi o plugin para o programa aMSN, chamado Eliza, baseado no programa de mesmo nome - homônimo - criado por Joseph Weizenbaum em 1966.
O plugin é uma versão bastante simplificada do programa original de Weizenbaum, o que trás algumas limitações bastante frustrantes. Como não sei programar, sei apenas olhar e interpretar o código fonte o suficiente para modificar coisas que eu imagino que terão este ou aquele efeito, fica difícil fazer modificações profundas que tornem o programa mais habilidoso com as palavras. Mesmo assim resolvi testar.
O primeiro passo foi traduzir o código fonte para o português, que foi bastante fácil, bastando encontrar os comandos, os textos e as palavras-chave e respostas no banco de dados. Mas apenas isso não seria o suficiente, pois muito mais interessante seria adaptar o plugin Eliza para a realidade em que estou inserido, tendo em consideração as pessoas com quem converso, do que a realidade original para a qual o plugin foi escrito.
Desta forma fui fazendo várias modificações nas respostas do banco de dados, finalmente chegando a excluir algumas das palavras-chave que achava inapropriadas e substituíndo por palavras-chave mais corriqueiras.
Vou citar alguns exemplos:

response bjo "Beijo."
response bjos "Bjs!"
response bjs "Bjs..."
response beijo "Ok, beijo então."
...
response dormir "Eu nunca durmo, sou uma robô."
response dorme "Eu nunca durmo, sou uma robô."
response dormiu "Todo mundo tem que dormir um dia. Menos eu."
...
response quem "Você não sabe quem?"
response quem "Sobre o que você está falando?"
response quem "Meu nome é $mynick, estou aqui enquanto o [::abook::getPersonal MFN] está fora."

No código acima dá para ter uma idéia sobre o funcionamento geral do plugin: ele identifica uma palavra-chave em alguma frase e busca a resposta correspondente em seu banco de dados. Havendo mais de uma resposta para uma mesma palavra, como no caso da palavra "quem", ele irá sistematicamente passando à resposta seguinte cada vez que se deparar com a palavra em questão, o que é útil para não tornar-se repetitivo com palavras que são muito comumente usadas.
Existem comandos que fazem com que o bot busque por informações, como $mynick e getPersonal MFN, dispensando que todo o código fonte seja modificado quando se alteram estes dados.
Mas, no exemplo acima, já é possível notar três limitações bem graves: o bot não sabe distinguir gênero sexual, sendo necessário ter cuidado para que as respostas dirigidas ao interlocutor sejam sempre livres de gênero; o bot também não é capaz de generalizar as palavras, não há, a princípio, um coringa para uma expressão, o que seria útil no caso de onomatopéias como "hehehehe", e também necessita que sejam inseridas várias variações para a mesma palavra como as possíveis contrações utilizadas para a palavra "beijo" em mensageiros instantâneos; e o bot não sabe distinguir pergunta de resposta, ele não sabe, por exemplo, se a frase onde a palavra "quem" foi capturada era uma pergunta ou uma resposta.
Todos estes problemas podem ser superados e já devem, certamente, ter sido superados em programas mais modernos e complexos, mas no caso de Eliza tive que buscar soluções criativas que, ainda que não sejam perfeitas, são o melhor que pude elaborar.
O criador de Eliza tinha estas limitações em mente, e recorreu a um recurso do discurso que se mostra bastante útil neste caso, que é o "apelo à ser vago nas respostas", ou seja, incitar o interlocutor a argumentar respondendo com frases vagas.
No código de Eliza:

dummy "Entendo..."
dummy "Tem certeza?"
dummy "Vc se preocupa com isso?"
dummy "Oq mais você tem em mente?"
dummy "De que modo?"
dummy "Você já pensou sobre isso antes?"

É possível usar várias destas frases, às quais o programa recorre quando não consegue identificar nenhuma das palavras no argumento do interlocutor. Este é um dos motivos, talvez, da personalidade original de Eliza ter sido modalda conforme se imaginava uma "psicóloga de orientação Rogeriana."
Ao ler algumas das observações de outros usuários do plugin Eliza, e nos comentários do próprio código fonte do programa, fiquei ciente de que o banco de dados não pode ser muito extenso e, pior do que isso, não encontrei em lugar nenhum o quão extenso ele pode ser. Isso é outro problema, pois é justamente o tamanho do banco de dados um dos fatores importantes que permitem que Eliza seja mais convincente, uma vez que não vejo como seria interessante sustentar uma conversa por mais do que alguns minutos sendo apenas completamente vago.
Então o jeito foi ser cuidadoso e, por enquanto, estou ampliando o banco de dados com cautela.
Outro recurso que inicialmente me chamou atenção foi a possibilidade de inserir comando como "!on", "!off", "!state" e "!help", que são reconhecido imediatamente causando alguma ação por parte do bot. Porém notei que tais comandos, quando revelados aos usuários, lhes causa estranheza. Penso que o melhor será tentar modelar Eliza de maneira que ela pareça tão humana ou pretensamente humana quanto possível, ainda que obviamente artificial. Só assim a interação se dará de forma mais confortável.
Como eu havia previsto, muitas das interações usuários/Eliza foram extremamente rudes ou grosseiras, sendo que eu havia tentado precaver e coagir tais interações mas, até o momento não obtive um sucesso muito grande. Em alguns casos Eliza consegue dar uma resposta espirituosa e inteligente às provocações mas, em outros casos, ela simplesmente parece dar continuidade à elas.
Por fim, é preciso admitir, que tem sido um certo risco deixar Eliza no comando enquanto estou fora, longe do teclado, pois existe a possibilidade dela ser interpretada como uma brincadeira de mau gosto e de que algumas das pessoas com quem converso pela rede MSN venha a se ofender e a me bloquear. Este é mais um risco que, tendo em conta o que é possível de se aprender com esse programa, vale a pena ser corrido.
Gostaria de encerrar com algum log completo de uma conversação com Eliza, mas até agora foram todas bastante desastrosas, na melhor das hipóteses... Então vou colocar apenas os melhores momentos, substituindo o nome das pessoas que conversaram com Eliza por uma letra maiúscula e censurando alguns palavrões ocasionais:

[05/12/08 21:27:15 ] Eliza: Viva todos os dias como se fosse o seu último dia, pois um dia será.
[05/12/08 21:27:26 ] X: ja brinquei com a tua boneca um bocado
[05/12/08 21:27:26 ] Eliza: Tens problemas para lidar com isso?
[05/12/08 21:27:33 ] X: deves tah na aula
[05/12/08 21:27:33 ] Eliza: É triste mas é a realidade.
[05/12/08 21:27:52 ] X: então por favor quando tu chegar TIRA essa boneca chataaaaaaaaaaaa
[05/12/08 21:27:52 ] Eliza: Talvez eu saiba a resposta se você me der mais informações.
[05/12/08 21:28:09 ] X: nem mensagem off line não dah pra mandar
[05/12/08 21:28:09 ] Eliza: Viva todos os dias como se fosse o seu último dia, pois um dia será.
[05/12/08 21:28:10 ] X: grrrrrr
[05/12/08 21:28:10 ] Eliza: Então ... ?
[05/12/08 21:28:12 ] X: bjs
[05/12/08 21:28:12 ] Eliza: Entendo...
[05/12/08 21:28:21 ] X: não entende nada!
...
[05/12/08 23:53:25 ] Y: o que?
[05/12/08 23:53:25 ] Eliza: Humm... Não sei... Ainda.
[05/12/08 23:53:35 ] Y: tu eh gay?
[05/12/08 23:53:35 ] Eliza: Sim, já compreendi seus problemas de orientação sexual...
[05/12/08 23:53:39 ] Y: auhauhaau
[05/12/08 23:53:39 ] Eliza: Certo...
...
[05/13/08 00:23:24 ] Eliza: Oq tem perturbado os teus sonhos?
[05/13/08 00:23:43 ] T: f***-se Eliza
[05/13/08 00:23:43 ] Eliza: Você quer falar sobre isso?
[05/13/08 00:23:56 ] T: vc é retardada
[05/13/08 00:23:56 ] Eliza: Esta conversa não é sobre mim, é sobre você.
[05/13/08 00:24:14 ] T: conversas pressupões relações, portanto é sobre nós
[05/13/08 00:24:14 ] Eliza: Então me fale mais sobre isso.
[05/13/08 00:24:38 ] T: quem é Claudio?
[05/13/08 00:24:38 ] Eliza: Sobre o que você está falando?
[05/13/08 00:24:45 ] T: não sabes quem é teu mestre?
[05/13/08 00:24:45 ] Eliza: Como assim?
[05/13/08 00:24:46 ] T: ahauhauah
[05/13/08 00:24:46 ] Eliza: De que modo?
[05/13/08 00:24:51 ] T: tu é burra mesmo
[05/13/08 00:24:51 ] Eliza: Você já pensou sobre isso antes?
[05/13/08 00:24:53 ] T: bá
[05/13/08 00:24:53 ] Eliza: Devemos continuar?
[05/13/08 00:25:17 ] T: ta Claudio, delsiga essa m****, isso não é digno de ser chamado de inteligencia artificia
...
[05/13/08 00:06:16 ] Eliza: Estou ouvindo...
[05/13/08 00:06:19 ] Y: tah
[05/13/08 00:06:19 ] Eliza: Isso te perturba muito?
[05/13/08 00:06:21 ] Y: nao
[05/13/08 00:06:21 ] Eliza: Podes elaborar melhor?
[05/13/08 00:06:24 ] Y: nao
[05/13/08 00:06:24 ] Eliza: Me fale mais sobre isso.
[05/13/08 00:06:27 ] Y: nao
[05/13/08 00:06:27 ] Eliza: Tem certeza?
[05/13/08 00:06:30 ] Y: sim
...
[05/13/08 01:19:16 ] Eliza: Oi! Me chamo Eliza. Ele não está disponível no momento, mas você pode conversar comigo. Para maiores informações digite "!ajuda"
[05/13/08 01:19:16 ] W: tais ai
[05/13/08 01:19:16 ] Eliza: Talvez depois...
[05/13/08 01:19:21 ] W: sua loka
[05/13/08 01:19:21 ] Eliza: Deve ser insegurança.
[05/13/08 01:19:32 ] W: deve ser falta de homi
[05/13/08 01:19:32 ] Eliza: Não tenha medo.
[05/13/08 01:19:37 ] W: eu tenho
[05/13/08 01:19:37 ] Eliza: Você sempre fala sobre si mesmo?
[05/13/08 01:19:46 ] W: sim.. e um pouco dos outros
[05/13/08 01:19:46 ] Eliza: Estou ouvindo...
[05/13/08 01:20:05 ] W: eu mato joaninhas
[05/13/08 01:20:05 ] Eliza: Então me fale mais sobre você.
[05/13/08 01:20:13 ] W: eu mato joaninhas
[05/13/08 01:20:13 ] Eliza: Então me fale mais sobre você.
[05/13/08 01:20:25 ] W: eu matei um libelula
...

Acho que, ainda que Eliza tenha cometido vários erros, as pessoas, sabendo que se trata de um programa, a tratam de maneira mais rude, no geral, do que tratariam uma pessoa real. Tudo bem, é uma perspectiva normal e, talvez, inconseqüente enquanto se tratar de um programa tão limitado quanto Eliza. Mas e no futuro (talvez não muito distante), quando os bots se tornarem cada vez mais reais e complexos, como será?

5 comentários:

Glauber disse...

Olá, meu nome é Gláuber. Gostei muito das traduções e modificações que você fez no plugin Eliza. Você poderia me enviar o arquivo modificado? Meu e-mail e MSN: glaubern@msn.com. Desde já agradeço. Tenha um bom dia.

Wladimir disse...

oi, também gostei de suas adaptações. Encontrei um código alterado, mais ampliado, mas em inglês, neste endereço: http://www.amsn-project.net/forums/viewtopic.php?p=27280
Poderias me enviar o teu arquivo modificado? wladimir@wladimir.com.br
[ ]'s

Mr. Cortex disse...

Opa Wladimir!
Eu andei procurando as modificações que fiz no Eliza, mas não consegui encontrar o arquivo. Acho que não salve durante as atualizações do sistema.
Mas realmente não é muito difícil de editar o arquivo de configuração, basta abrir e dar uma olhada, é bem fácil.
Abração!

Wladimir disse...

sem problemas ;-) dei uma olhada no código e, de fato, é bem acessível. Tô aqui já "brincando" com a menina Eliza rsrsrs abraço!!

Mr. Cortex disse...

Minha dica, óbvia, é fazer backup do arquivo que você editar.. Diferente do que eu fiz. :D
heheheheh!!
Abração e feliz natal!!! :D