She Said – It Said: Talking With Computers

Propaganda
Ela disse – a máquina disse: falando com computadores
Helga Waage
Os aplicativos de reconhecimento de fala, os NPCs (Non Playing Characters ou
Personagens do Mestre) de jogos e os assistentes de conversação da Web são
exemplos de sistemas de diálogo nos quais a linguagem escrita ou falada é utilizada
para interagir com o sistema, em vez do pressionamento de um botão ou da seleção
de um ícone.
Em sua forma mais simples, um sistema de diálogo utiliza texto como entrada ou
saída. No caso dos aplicativos de reconhecimento de fala ou multimodais, o comando
ou a onda de áudio sempre pode ser transformado em um texto equivalente.
As características a seguir definem os sistemas de diálogo: são abertos (o usuário
pode falar qualquer coisa que desejar), de iniciativa mista (o usuário pode interromper
ou não responder ao agente a qualquer momento, quando for a sua vez); e com
propensão a erros (o agente deve ser capaz de gerenciar problemas com soletração,
pronúncia, entrada desconhecida e rudeza em geral em nome do respectivo usuário).
A maioria desses sistemas utiliza o inglês como único idioma e somente alguns são
multilíngües. Muitos desses sistemas nem mesmo são desenvolvidos como sistemas de
diálogo; são projetados como aplicativos para solucionar um problema específico. Isso
é particularmente verdadeiro para os aplicativos de reconhecimento de fala, que são
comumente estruturados como aplicativos da Web habilitados por voz. Isso está
sujeito a alterações à medida que forem sendo efetuadas mais pesquisas sobre os
sistemas de diálogo por reconhecimento de fala.
O sistema de diálogo mais antigo foi a Eliza, uma terapeuta Rogeriana criado por
Joseph Weizenbaum nos anos 60. Eliza não tinha qualquer conhecimento por si só; o
sistema participava do diálogo transformando a entrada do usuário em uma pergunta.
Usuário: Os homens são todos iguais.
Eliza: De que forma?
Usuário: Eles estão sempre nos importunando com alguma coisa.
Eliza: Pode me dar um exemplo específico?
Usuário: Bem, meu namorado me fez vir aqui.
Eliza: O seu namorado fez você vir aqui?
Usuário: Ele diz que eu estou deprimida a maior parte do tempo.
Eliza: Sinto muito por saber que você está deprimida.
Usuário: É verdade. Eu não estou feliz.
Eliza: Você acha que vir aqui lhe ajudará a não se sentir infeliz?
Usuário: Eu preciso de ajuda, disso tenho certeza.
Eliza: O que significaria para você se obtivesse ajuda?
Usuário: Talvez eu pudesse aprender a conviver com a minha mãe.
Eliza: Conte-me mais sobre a sua família.
[INSERIR 69Eliza-Page.jpg]
Uma conversa on-line com a ELIZA de Weizenbaum
Mesmo que as deficiências do diálogo sejam óbvias e este não seja muito útil, o
programa é conhecido até os dias de hoje, e vários exemplos de clones seus podem
ser encontrados na Internet.
O desenvolvimento de um sistema de diálogo envolve três grandes preocupações
arquiteturais: como o sistema deve gerenciar o fluxo de diálogos? Que nível de
entendimento da linguagem o sistema deve gerenciar? Como o diálogo deve ser
desenvolvido e escrito no sistema? Todas essas questões são relevantes tendo em
vista o projeto multilíngüe.
Gerenciador de diálogos
O gerenciador de diálogos lida com o fluxo de diálogos no sistema. Em uma visão
muito simplificada, cada parte pode, em sua vez de falar, continuar a linha do diálogo
atual ou introduzir um novo tópico. Esse modelo é comumente representado como
uma árvore no gerenciador de diálogos.
O sistema reconhece a entrada do usuário comparando-a com modelos, que são
palavras ou expressões regulares de algum tipo. Após a entrada ter sido combinada, a
resposta adequada será selecionada ou gerada e enviada ao usuário como texto ou por
meio de texto para reconhecimento de fala. As linhas de diálogos são organizadas
através das ramificações da árvore e cada nova linha obtém um novo nó na raiz.
[INSERIR 69DialogueTree.gif]
Uma árvore de diálogos em um caractere de jogo iniciado com a instrução “you are
program”
Na figura acima, os modelos são indicados por um T e as respostas por um A. O
circuito de disparo da árvore é uma instrução próxima às linhas de “you are program”
(você é programa). O programa de controle de diálogos pode selecionar quatro
respostas diferentes. Algumas delas — como a resposta: I don’t see how you come up
with all those ideas. Of course I’m not a program. Are you? (Eu não sei de onde você
tira essas suas idéias. Claro que eu não sou um programa; você é?) — levam a uma
resposta sim/não. A árvore de diálogos ouve as respostas sim/não possíveis e, desse
modo, suporta um sub-diálogo breve sobre essa pequena crise de identidade dos
participantes. Se o usuário disser mais alguma coisa, o gerenciador de diálogos
descartará esse sub-diálogo, por não ter mais importância, e quaisquer respostas
sim/não serão consideradas no contexto atual.
Esse procedimento é muito direto. A parte complicada é gerenciar respostas
inesperadas do usuário. Em um sistema de diálogo não existe uma maneira de
encurralar o usuário. Se a interface for baseada em texto, o usuário poderá ler e
possivelmente reler as respostas antes de responder; em um aplicativo de
reconhecimento de fala, o usuário poderá perder detalhes importantes, simplesmente
porque deu um espirro. Ao gerenciar a entrada do usuário, devemos,
conseqüentemente, prever várias formas de palavras que esperamos que sejam ditas
pelo usuário — além de sinônimos comuns. Também devemos estar preparados para
gerenciar entradas inesperadas como a expressão oh, ajuda, problemas comuns de
ortografia (no caso de uma entrada com base em texto) e assim por diante. Na
ilustração “you are program”, os modelos sim/não não especificam realmente quais
palavras o modelo deve comparar. Os modelos usam uma referência para um conjunto
de palavras que significam sim ou não respectivamente — palavras como sim, claro e
certamente ou não, negativo ou de forma alguma.
A estrutura de diálogos não varia muito entre os idiomas. Por exemplo, a estrutura em
um aplicativo com base em voz para instituições bancárias é semelhante,
independentemente do idioma utilizado. Na figura abaixo, temos uma parte de um
sub-diálogo na qual o usuário está recarregando um cartão de telefone pré-pago para
um telefone especificado. A transação permite que o usuário digite o número do
telefone no teclado do telefone. O agente transfere o valor especificado (padrão $10)
de uma conta bancária determinada. A rota ideal através do diálogo é realçada, mas
rotas alternativas suportam valores diferentes, contas diferentes, assistência ao
usuário e gerenciamento de erros. cmdNoInput e cmdNoMatch são usados para
gerenciar a situação cenário na qual o usuário não fala nada ou fala algo
incompreensível para o agente.
[INSERIR 69SubDialogue.gif]
Um sub-diálogo em um aplicativo para instituições bancárias
O diálogo seria o mesmo para outros idiomas. De fato, esse diálogo foi traduzido do
islandês; e ainda que o texto em inglês pudesse ser um pouco melhorado, a estrutura
é a mesma para os dois idiomas. O formato do número de telefone provavelmente será
diferente em países distintos (em vez dos idiomas) e também precisa ser levado em
conta.
Nesse exemplo, utilizamos o teclado para digitar o número telefônico e apenas
suportamos poucas opções para o recarregamento, ou melhor, $5, $10, $15 e $20.
Esses números são falados diferentemente. Se precisarmos suportar todos os
números, teríamos que alterar um pouco a estrutura para idiomas como o inglês, no
qual seria necessário verificar cuidadosamente a entrada numérica extra porque
muitos números são foneticamente semelhantes, como thirteen (13) e thirty (30). Em
muitos outros idiomas isso não é importante.
As diferenças culturais podem também afetar a estrutura do diálogo. Por exemplo, se
estivermos criando um sistema de auxílio à lista telefônica, será necessário levar em
conta o gerenciamento de nomes em uma listagem. Na maioria dos países, a lista
telefônica é classificada pelo sobrenome seguido do nome ou possivelmente por
apenas uma inicial. Na Islândia, as listas telefônicas são classificadas pelo nome
seguido pelo sobrenome e finalmente por quaisquer nomes ou iniciais intermediários. A
estrutura dos diálogos precisa refletir essas questões e, em alguns casos, o aplicativo
precisa ser personalizado pelo menos para os idiomas que divergem do caso comum.
Entendimento do idioma
A parte de entendimento do idioma do sistema depende muito, é claro, do próprio
idioma — especificamente se o sistema deve ser multilingüe ou suportar apenas um
idioma.
Um programa de computador hoje não tem um entendimento real de um idioma. Na
melhor das hipóteses, ele pode mapear uma frase recebida de acordo com alguma
representação interna de sua visão de mundo e responder de uma forma que possa ser
compreendida como inteligente.
Qual o nível de entendimento necessário é uma decisão importante do projeto para
qualquer sistema que lida com linguagem natural. Um corretor ortográfico, por
exemplo, precisa ter um léxico abrangente do idioma suportado. Ele fica ainda mais
eficiente quando adicionamos um corretor gramatical, no qual o sistema pode
distinguir verbos e substantivos e nos informar sobre sentenças incompletas, formas
incorretas de palavras e assim por diante.
[INSERIR 69EnglishNumbVer.gif]
Um exemplo de verificação de números em inglês
É relativamente simples ter um léxico como um componente no sistema de controle de
diálogos; entretanto, quanto mais regras — como regras de sintaxe — forem
adicionadas, mais complexo se tornará o sistema. É mais fácil criar um sistema
independente de idiomas que utiliza uma gramática simples do que criar um sistema
que utiliza uma gramática complexa para entender o que o usuário quis dizer.
Se levarmos em conta a situação nos sistemas de reconhecimento de voz, veremos
que isso também ocorre com eles: os sistemas de reconhecimento de palavras
distintas estão disponíveis para diversos idiomas. Sistemas de reconhecimento de
palavras distintas bem projetados possuem o modelo de idioma como um componente
independente, ao passo que os sistemas de reconhecimento de fala contínuos, além de
dependerem muito da sintaxe do idioma, são menos comuns e mais difíceis de trocar
de idioma.
O tom de voz nos sistemas de diálogo pode variar muito, mas em geral as pessoas
esperam um tom polido porém mais informal, afinal de contas, elas estão tendo uma
conversa e não fazendo uma correspondência formal. A natureza das conversações é
que elas tendem a ser gramaticalmente informais; as pessoas usam sentenças
incompletas, abreviações e gírias em vez de um estilo formal de escrita. Portanto, não
há necessidade de muita análise gramatical e, de fato, isso pode não ser apropriado.
Ainda que valorizemos as ferramentas usadas em um editor de texto, não ficaríamos
contentes com um aplicativo por voz que nos corrigisse continuamente e nos
lembrasse do uso de frases gramaticalmente corretas quando tudo o que queremos
saber é o saldo da nossa conta bancária.
Portanto, os sistemas de diálogo não precisam de uma base sintática complexa e
podem, em muitos casos, depender exclusivamente de um léxico. No caso dos
aplicativos por voz, isso mapeia bem as formas gramaticais das palavras, conforme
usado pelos padrões comuns, como VoiceXML.
A desvantagem é que o sistema de diálogo não reconhecerá a diferença entre o termo
casa em Quando você casa? e casa de bonecas. O sistema não perceberá que uma
sentença é uma pergunta e a outra é uma afirmação. Na maioria dos casos, nós
apenas selecionaríamos um significado do homônimo e pronto. Se esse artifício não
fosse possível, precisaríamos de um esclarecimento do usuário, como fizemos antes
com os números foneticamente semelhantes.
Um outro problema com um enfoque baseado puramente no léxico é que não
reconhecemos negações. Não temos uma forma fácil de diferenciar Eu tenho um
cachorro de Eu não tenho um cachorro. Pronomes pessoais são difíceis também de
gerenciar, pois se estivermos observando apenas a palavra, não teremos como saber,
por exemplo, a quem o pronome ela está se referindo. Por fim, os verbos são bastante
ignorados nos sistemas de diálogo baseados em léxico, a não ser que sejam os únicos
fatores de diferenciação entre duas perguntas, como Quando o vôo sairá? e Quando o
vôo saiu?
Em uma solução com base em sintaxe esses problemas são reduzidos, porém, quando
mais estruturas de sintaxe forem colocadas no sistema de diálogo, mais dependente
de idiomas ele se tornará. Um sistema de diálogo com base em léxico pode solucionar
problemas específicos, conforme necessário; fornecendo modelos para negações, por
exemplo, se forem importantes para o aplicativo. É possível solicitar esclarecimentos
para pronomes pessoais e incluir diversas formas de verbos. Podemos também
adicionar uma sintaxe simples para auxiliar no processo de combinação de modelos,
desde que possamos manter as partes dependentes de idioma independentes do resto
do sistema.
Escrevendo o diálogo
A maioria dos sistemas de controle de diálogos possui um sistema de edição
proprietário, no qual o diálogo pode ser configurado como uma árvore ou como
perguntas e respostas. Algumas versões primitivas usam bancos de dados de arquivos
de texto ou estruturas em XML.
A diferença principal entre os sistemas monolíngües e os sistemas multilíngües é o fato
de a dependência ao idiomas ter sido desenvolvida no sistema principal, se o sistema
foi desenvolvido de modo que o pacote de idiomas possa ser substituído por outro
idioma ou se o idioma utilizado foi tratado como conteúdo no sistema.
Embora um sistema de diálogo possa ser escrito de forma multilíngüe desde o início, é
geralmente mais fácil escrever o diálogo primeiro em um idioma e, em seguida,
traduzir o sistema modificando a estrutura para os novos idiomas. Se o
desenvolvimento do aplicativo baseou-se na premissa de que ele necessitaria suportar
vários idiomas, a tradução deveria ser um processo simples e as modificações
estruturais deveriam limitar-se a pequenos trechos acerca das verificações ou
diferenças de formatos.
Esse enfoque funciona muito bem para aplicativos simples, nos quais a maioria dos
dados é conhecida de antemão e as partes variáveis das respostas são bem
estruturadas. Isso é mais difícil quando uma parte significativa do conteúdo é de
origem externa, como um provedor de notícias. Mesmo que a origem do conteúdo
esteja geralmente em um único idioma, vários problemas podem surgir quando
integramos texto desestruturado de terceiros a um sistema de controle de diálogos. A
maioria desses problemas se relaciona ao “se” e “como” reformular as sentenças,
como gerenciar números e assim por diante, e estão fora do âmbito deste artigo.
Conclusão
Os sistemas de diálogo, como os aplicativos por voz e os caracteres de jogos artificiais,
em geral podem ser desenvolvidos em um núcleo baseado em léxico — possivelmente
com uma gramática simples — em vez de um núcleo baseado em sintaxe. A maioria
desses sistemas não precisa depender da análise semântica da entrada;em vez disso,
o autor do aplicativo escreve o conteúdo ou a estrutura do conteúdo. Se o idioma e a
estrutura do idioma forem abstraídos em um componente modular dentro do sistema,
como é o caso dos sistemas com base em léxico, o aplicativo poderá ser traduzido para
outros idiomas com uma certa facilidade.
O próprio diálogo é escrito ou configurado em um sistema externo, em vez de ser
programado como parte do aplicativo. Certamente, é muito mais complexo escrever
um sistema de gerenciamento de diálogos do que uma instância de um aplicativo de
diálogos. Mas após o esforço inicial, a escrita de novos aplicativos ou traduções de
aplicativos antigos torna-se muito simples.
Helga Waage é diretora técnica da Hex Software na Islândia.
Download