Entre os dias 14 e 16 de fevereiro de 2011, o sistema de respostas à perguntas IBM Watson venceu o desafio “Homem x Máquina” do Jeopardy!, derrotando dois ex-grandes campeões: Ken Jennings e Brad Rutter. Para ter sucesso no Jeopardy!, Watson precisou responder questões complexas em linguagem natural sobre inúmeras área de conhecimento. Ele ainda precisou computar respostas precisas e confiantes e ainda completar esse processo muito rapidamente.
O problema do sistema de ‘perguntas-respostas” requer que o computador vá além de apenas encontrar palavras-chaves em documentos, que é o que os sites de busca fazem. Ele realmente precisa interpretar a pergunta para compreender o que está sendo perguntado. Esse sistema precisa, também, encontrar a resposta mais precisa sem o auxílio de um ser humano para ler e selecionar a resposta.
Para endereçar esses desafios, o time de pesquisa da IBM desenvolveu uma arquitetura de software chamada DeepQA, na qual o Watson é implementado. A arquitetura DeepQA assume e persegue múltiplas interpretações da questão, gera diversas respostas, ou hipóteses, plausíveis, coleciona evidências para essas hipóteses e avalia a evidência para determinar se ela suporta ou refuta a hipótese. O Watson contém centenas de diferentes algoritmos que avaliam a evidência em diferentes dimensões.
O Watson utiliza tecnologia de processamento de linguagem natural (em inglês: NLP) para interpretar as perguntas e extrair elementos-chaves, tais como os tipos de respostas e relacionamentos entre entidades. Além disso, o NLP foi usado para analisar (antes da competição) grandes quantidades de texto não-estruturado (enciclopédias, dicionários, artigos, etc) que poderiam prover as evidências no suporte de respostas às questões. Alguns dos algoritmos de Watson avaliam se os relacionamentos entre entidades na questão combinam com os da evidência.
O sistema NLP do Watson inicia aplicando um analisador (“parser”) que converte cada frase de texto em uma forma mais estruturada: uma árvore que mostra tanto a estrutura superficial, quanto a mais profunda e lógica. Por exemplo, nesta questão de Jeopardy!:
POETAS e POESIA: Ele foi funcionário de banco no Yukon antes de publicar “Songs of a Sourdough” em 1907.
A saída do analisador inclui, junto com muitas outras informações, que “publicado” tem relação com o verbo “publicar”, que o sujeito é “ele” e que o objeto é “Songs of a Sourdough”.
Depois, o Watson aplica numerosas regras de detecção que selecionam os padrões na saída do analisador. Essas regras detectam elementos tais como o foco da questão (as palavras que se referem à resposta, no caso “ele”), o tipo léxico de resposta (temos na pegunta ou categoria que indica o tipo de entidade que está sendo perguntado, no caso, “poeta”), e o relacionamento entre as entidades tanto na pergunta, quanto nas passagens de texto.
Precisávamos de uma linguagem na qual poderíamos expressar convenientemente as regras padrão de correspondência sobre as árvores de análise e outras anotações (como resultados de reconhecimento das entidades mencionadas), e uma tecnologia que possa executar essas regras de forma muito eficiente. Nós chegamos à conclusão que PROLOG era a linguagem ideal devido a sua simplicidade e capacidade expressiva. A informação analisada é facilmente convertida para termos PROLOG, por exemplo (os números representam identificadores únicos para os nós analisados):
lemma(1, "ele").
partOfSpeech(1,pronoun).
lemma(2, "publicar").
partOfSpeech(2,verb).
lemma(3, "Songs of a Sourdough").
partOfSpeech(3,noun).
subject(2,1).
object(2,3).
Esses dados são consultados dentro de um Sistema Prolog e vários grupos de regras são executados para detectar o foco das perguntas, o tipo léxico de respostas e diversos relacionamentos entre os elementos da análise. Uma regra simplificada, para detectar a relação “AuthorOf” pode ser escrita em Prolog da seguinte maneira:
authorOf(Author,Composition) :-
createVerb(Verb),?subject(Verb,Author),?author(Author),?object(Verb,Composition),?composition(Composition).
createVerb(Verb) :-
partOfSpeech(Verb,verb),?lemma(Verb,VerbLemma),member (VerbLemma, ["escrever", "publicar",...]).
O autor e o predicado da composição, não mostrados, aplicam restrições aos nós (“ele” e “Songs of a Sourdough”, respectivamente) para extirpar nós que não são filtros válidos para “autor” e “composição” na relação.
Essa regra, aplicada ao exemplo, resulta em uma nova regra authorOf(1,3) que é gravada e repassada aos outros componentes descendo a árvore dentro da série de regras do Watson. Agora, suponha a quantidade de evidências que Watson consegue enquanto tenta responder a esta questão no texto:
“Songs of a Sourdough: por Robert W. Service”
Isso está fraseado de forma diferente da pergunta e não combina com o exemplo da relação “AuthorOf ruleAuthorOf”, mostrada acima. Entretanto, nós temos várias outras cláusulas que combinam diferentes expressões na mesma relação semântica, incluindo esta que se aplica em casos como o mostrado abaixo:
authorOf(Author,Composition) :-
composition(Composition),?argument(Composition,Preposition),?lemma(Preposition, "por"),?objectOfPreposition(Preposition,Author),?author(Author).
Desde que as perguntas e a passagem de texto têm uma relação em comum, Watson pode determinar que a passagem prove bom suporte para a resposta “Robert W. Service”.
Este é um exemplo simples que ilustra apenas um tipo de combinação de padrões que o Watson faz. Ele utiliza muitas técnicas diferentes para detectar e selecionar a ocorrência de conceitos e relacionamentos no texto, incluindo métodos estatísticos e baseados em regras.
Na prática, a linguagem natural é complexa e ambígua, e as regras de combinação de padrões que são requeridas são bem mais complexas que esses exemplos simples. O problema é resolvido com regressão sobre combinação de padrões porque é necessário checar por muitas condições recebidas do analisador e é necessária uma linguagem de programação que permita incluir/excluir essas condições dependendo do contexto. A linguagem Prolog é reconhecida por ser uma excelente solução para o problema de combinação de padrões e todos os outros problemas que envolvem uma primeira busca profunda e regressão. Apesar de simples, a linguagem Prolog é bastante expressiva permitindo regras recursivas para represententar um alcance em árvores analisadas e as operações de negação-como-falha para checar a ausência de condições.
Antes da nossa decisão de usar Prolog para esta tarefa, nós tínhamos implementado um framework de combinações de padrões sobre as análises. Esses frameworks tendem a replicar algumas das funcionalidades do Prolog, mas perdem todas as outras uncionalidades do Prolog, bem como a eficiência de uma boa implementação. Usar o Prolog nesta tarefa aumentou significantemente nossa produtividade no desenvolvimento de novas regras de combinação de padrões e entregou a eficiência de execução necessária para ser competitivo no jogo Jeopardy!
Referências:
- Michael A. Covington. Natural Language Processing for Prolog Programmers. Prentice Hall, 1994.
- David Ferrucci, Eric Brown, Jennifer Chu-Carroll, James Fan, David Gondek, Aditya A. Kalyanpur, Adam Lally, J. William Murdock, Eric Nyberg, John Prager, Nico Schlaefer, and Chris Welty. Building Watson: An Overview of the DeepQA Project. AI Magazine, 31(3), 2010.
- Adam Lally, John Prager, Michael McCord, Branimir Boguraev, Siddharth Patwardhan, James Fan, Paul Fodor, and Jennifer Chu-Carroll. Question Analysis: How Watson Reads a Clue. IBM Journal of Research and Development, submitted.
- Michael McCord, Branimir Boguraev, John Prager, , and J. William Murdock. Parsing and Semantic Analysis in DeepQA. IBM Journal of Research and Development, submitted.
- Michael C. McCord. Using Slots and Modifiers in Logic Grammars for Natural Language. Artificial Intelligence, 18(3):327–367, 1982.
- Leon Sterling and Ehud Y. Shapiro. The Art of Prolog – Advanced Programming Techniques. MIT Press, 2 edition, 1993.
***
Texto original disponível em: http://www.cs.nmsu.edu/ALP/2011/03/natural-language-processing-with-prolog-in-the-ibm-watson-system/