sexta-feira, 19 de agosto de 2011

Simulando Capacidades Linguísticas

Na Inteligência Artificial, é comum identificarmos duas formas principais de se trabalhar: tentar simular o funcionamento da inteligência humana ou apenas focar na realização de uma tarefa de forma inteligente.



Imitar o funcionamento do cérebro humano pode não ser tão útil quanto parece à primeira vista. Vejamos a aritmética. Imagine, se em vez de realizar todos os bilhões de cálculos por segundo de que é capaz, um computador emulasse uma mente humana calculando. Não parece uma boa ideia, mesmo que o procedimento de multiplicação para um computador envolva decompor um número em sinais binários e calcular funções lógicas em cima deles.


Quando tratamos de coisas relacionadas à língua, simular o pensamento humano parece bem interessante... mas normalmente é inviável: simplesmente não sabemos explicar como nós mesmos, seres humanos, realizamos a maioria das tarefas linguísticas.


Por exemplo: escrever um pequeno resumo de um texto longo. Você saberia explicar precisamente suas decisões sobre o que mencionar num resumo? Descrever as informações mais relevantes parece óbvio para nós, mas a questão continua: como achar a informação relevante?

Responder como funcionam os mecanismos mentais que tomam esse tipo de decisão vai bem além da Inteligência Artificial e da Linguística; é principalmente um problema de Neurociência. Apesar de achar um tema fascinante, conheço muito pouco a respeito, por isso vou deixá-lo de lado.


Voltemos ao problema do resumo de um texto. Trabalhos que automatizam essa atividade podem ser guiados por algumas heurísticas - isto é, chutes sobre o que pode ser importante - e observações estatísticas sobre a distribuição das palavras no texto. Palavras que ocorrem com muita frequência (sem contar artigos, preposições, verbos comuns como ser e ter, etc.) tendem a ser mais relacionadas com o assunto tratado, e possivelmente as frases em que aparecem são mais importantes.


Essa abordagem parece razoável do ponto de vista humano. Mas mesmo assim, pode cometer erros que um humano dificilmente cometeria (como falar de detalhes do texto sem trazer a informação principal).


Até mesmo algo que parece regido por regras sólidas, como a gramática, não é tão simples assim. Exemplifico. A identificação de classes gramaticais (dizer se uma palavra é um substantivo, verbo, adjetivo, etc.) é uma tarefa importante para o PLN, que ajuda na realização de outras coisas mais complexas, mas que computadores realizam de forma mirabolante.


O que se costuma fazer para tratar de classes gramaticais é treinar um sistema com os chamados n-gramas. Funciona basicamente assim: o programa é treinado com um texto onde todas as palavras têm suas classes gramaticais já previamente informadas. Quando for identificar as classes das palavras num texto novo, o programa olha as palavras de duas em duas ou de três em três, e tenta prever as classes delas baseado nas sequências de palavras que viu durante seu treinamento. Se ele encontra muitas palavras novas, tende a errar mais. 


Essa abordagem que pode parecer super esquisita (o que diria um aluno do ensino fundamental sobre esse método numa aula de português??) funciona muito bem na prática. Sistemas em várias línguas conseguem acertar as classes gramaticais de mais de 95% das palavras de um texto com este método.


Por fim, um caso particular que acho excelente. Nesse trabalho, de 2005, os autores mostram o desenvolvimento de um sistema que gera textos sobre a previsão do tempo automaticamente, a partir de dados meteorológicos. Se você acha que o resultado seria estranho de se ler, errou: os autores reportam que usuários tendem a preferir os textos gerados automaticamente a outros escritos manualmente para a mesma previsão. Em algum nível, num domínio limitado, já se consegue fazer sistemas que igualam ou superam uma capacidades linguística humana em particular - a escrita.


Em suma, o PLN busca maneiras de utilizar recursos computacionais em conjunto com conhecimento linguístico, numa tentantiva desesperada de fazer uma máquina entender uma língua humana, normalmente de formas que provavelmente nunca passaram pela cabeça de um linguista. E é isso que acho intressante nessa área.

Um comentário:

  1. "mas normalmente é inviável: simplesmente não sabemos explicar como nós mesmos, seres humanos, realizamos a maioria das tarefas linguísticas." - até porque desconfio que cada um crie suas próprias estratégias... claro que dentro de um determinado (ou não) número de possibilidades.

    ResponderExcluir