Declarativa Declarativa
 

 

Linguagem Natural por Menus

Miguel Calejo, Luís Moniz Pereira e António Porto

Núcleo de Inteligência Artificial
Departamento de Informática
Universidade Nova de Lisboa (UNL)
2825 Monte da Caparica

Resumo

Apresenta-se uma metodologia que serve simultâneamente para a obtenção expedita de interfaces em linguagem natural por menus, por um lado, e para o teste de interfaces em linguagem natural sem menus, por outro. O sistema opera como um analisador sintático descendente, que ao invés de consumir palavras consome as escolhas fornecidas nos sucessivos menus. As escolhas possíveis em cada menu são restringidas através dum "lookahead" (olhar à frente) na gramática de linguagem natural. Esta é especificada por um conjunto de cláusulas Prolog, as mesmas que servem para uma interface convencional. Um novo método de desambiguação permite acomodar uma grande classe de gramáticas.


1. Introdução

Desde sempre que as interfaces de linguagem natural (LN) constituem o veículo por excelência para comunicação com Bases de Conhecimento. Basta atentar na profusão de "expert system shells" no mercado internacional, que não dispensam o seu "natural language front end". Tais interfaces permitem ao utilizador escrever uma frase, na sua própria linguagem, duma forma mais ou menos natural conforme a cobertura linguística da interface. A frase poderá ser quer uma pergunta, quer a expressão de novo conhecimento a adquirir pelo sistema, e originará alguma resposta, possivelmente também em linguagem natural. Este diálogo poderá estender-se por mais dum par pergunta-resposta, permitindo ou não a referência a frases anteriores.

O nosso trabalho incide sobre novas formas de especificar e analisar as frases, deixando de parte os problemas de geração de respostas inteligíveis e da gestão do diálogo. Se as frases são perguntas ou novos conhecimentos, não nos interessa por agora , mas apenas a sua análise e tradução para uma representação (linguagem-objecto) entendida pelo sistema.

Distinguiremos dois tipos de interfaces em LN. O primeiro, "convencional", em que o utilizador escreve uma frase completa, sem restrições, que é em seguida submetida ao sistema, podendo este óbviamente não a entender. O segundo, "por menus", em que o utilizador escreve incrementalmente a frase, que vai aparecendo também incrementalmente parafraseada pelo sistema, sendo em cada ponto apresentado um menu com todas as continuações aceitáveis para a próxima palavra. É assim garantido que o sistema consegue entender a frase, não a rejeitando.

Esta segunda abordagem tem portanto várias vantagens, que passamos a enumerar:

A cobertura linguística da interface fica à vista, em cada menu, permitindo a um utilizador inexperiente explorar o sistema sem grandes frustrações (rejeições).

Pelo mesmo motivo, é útil durante a construção de gramáticas de interfaces convencionais, elucidando em cada etapa a cobertura linguística atingida.

Permite o uso duma filosofia mais moderna de interacção, na medida em que as escolhas por menu podem resumir-se a apontar com um "mouse" ou uma "track-ball", à semelhança do ambiente envolvente (por exemplo Apple Macintosh, Microsoft Windows, Digital Research GEM).

Permite misturar na mesma frase palavras e elementos não-verbais, como sejam selecções em mapas, diagramas, etc.

Pode obter economia de computação, se a gramática usada for suficientemente simples, ao não permitir ambiguidades de análise.

Engloba as interfaces convencionais, ao dar a possibilidade de fazer um typeahead de escolhas - a escrita sem restrições duma subfrase que normalmente seria uma sequência de escolhas em sucessivos menus, com a vantagem do sistema mostrar até onde foram aceites as escolhas caso haja rejeição da frase.

Vários trabalhos foram feitos nesta área por outros autores: [Filgueiras e outros 85; Filgueiras Silva 86]; [Tennant e outros 83], na Texas Instruments, Dallas; [Philips Nicholl 85] da Tektronix e da Universidade de Illinois. Deles e da sua comparação com o nosso nos ocuparemos abaixo, em secção dedicada.

As raízes do nosso trabalho situam-se em trabalhos dum dos autores em conjunto com Miguel Filgueiras, então na UNL. Foi realizada uma base de dados em Prolog[M.Pereira Filgueiras 82], para uma aplicação solicitada pela Junta Nacional de Investigação Científica e Tecnológica. As suas "queries" formulavam-se por uma sequência de escolhas de palavras em menus, formando uma frase em linguagem pseudo-natural.

Actualmente existem vários projectos de Bases de Conhecimentos em curso na UNL, que incluem a realização de interfaces LN convencionais e por menus. Isso permitiu concentrarmo-nos sobre a interface própriamente dita, separadamente da Base de Conhecimentos e mesmo da gramática de LN.


Esta comunicação relata o estado actual do nosso trabalho em interfaces de linguagem natural por menus, anteriormente introduzido em [Calejo, M.Pereira 86] mas que desde então evoluiu qualitativamente. Começamos com uma descrição da nossa abordagem, seguindo-se um exemplo de utilização ilustrando o novo método de desambiguação de frases. Apresentamos o algoritmo principal, que "olha à frente" gerando os menus. Seguem-se uma descrição do protótipo, comparação com outros autores e perspectivas de trabalho a fazer.

2. Abordagem e problemas a resolver

A ideia geral é a seguinte: a análise da frase, num "parsing top-down", conduz a uma interacção que vai produzindo as palavras da frase. Isto é, enquanto num analisador gramatical normal os terminais (palavras) são consumidos duma lista préviamente fornecida, no nosso apresenta-se em cada ponto da frase um menu com todos os terminais seguidamente aceitáveis pela gramática. Em vez da análise ser feita duma vez só sobre a frase completa, é-o incrementalmente, terminal a terminal - menu a menu. No entanto, permite-se o "typeahead" de escolhas, consomindo-se estas neste caso directamente duma lista de "input", sem ser necessário gerar os menus.

A geração das palavras aceitáveis num dado ponto, com o fim de as apresentar num menu, é feita por um algoritmo que "olha à frente" na gramática, procurando os próximos terminais que esta espera reconhecer. Ou seja, usamos a gramática também "ao contrário", como geradora em vez de analisadora.

As gramáticas em vista são gramáticas lógicas (para uma introdução veja-se [Clocksin e Mellish 81]), escritas em Two-Level Prolog [Porto 84, Porto 85], produzindo a análise de cada fragmento sintáctico uma Representação Semântica Intermédia correspondente [Filgueiras Porto 84], [Porto 86]. Estas são produzidas por predicados semânticos chamados do corpo das regras. Os terminais que aparecem nas regras de gramática são 'tokens' lexicais, e não as próprias palavras. Assim torna-se mais fácil escrever as regras, relegando para um nível mais baixo, o do dicionário, a classificação das palavras em categorias lexicais. É pois o próprio dicionário que fornece as palavras que surgem como opções nos menus, e não a gramática.

Vários problemas se colocam, de que indicamos a solução adoptada. Voltaremos a alguns deles aquando da comparação com outros trabalhos.

a) Paráfrase

Como mostrar a pergunta parcial em cada menu? Optamos pela solução mais simples e que dispensa informação adicional: a paráfrase é simplesmente a sequência de palavras escolhidas até ao momento, ressalvando-se certas situações, em que existem ambiguidades - veja-se abaixo, e).

b) Portabilidade

Interessa óbviamente que o sistema seja facilmente portável entre domínios e entre línguas, pelo menos as indo-europeias. Para isso optámos por separar completamente o conjunto (gramática+dicionário+predicados semânticos) do resto do sistema. É usado um interpretador sobre o referido conjunto de cláusulas, que "olha à frente" e assim determina as opções de cada menu.

c) Demasiadas opções num menu

Sendo a LN muito rica em palavras e construcções gramaticais, é de esperar que sejam admissíveis num dado menu demasiadas palavras.

Primeiro, fazemos o possível por que isso não aconteça. Sendo o nosso "olhar à frente" sobre cláusulas que não só traduzem a estrutura gramatical mas também incluem predicados semânticos, regras de concordância (via unificação de argumentos), etc., a restrição é muito maior do que se fosse apenas sobre a sintaxe. Em concreto, evitam-se naturalmente sequências como "rio de oceano" (exemplo de [Filgueiras e outros 85]) ou "todas as mulheres feio".

Segundo, caso isso aconteça, recorremos à nossa divisão de níveis acima referida, palavras/terminais-lexicais. Como existem muito poucas categorias lexicais face ao número de palavras, caso um menu "transborde" ao ser gerado substituímos previamente todas as palavras da categoria lexical com mais "representantes" nesse menu por uma só opção: a designação dessa categoria lexical. Caso o utilizador a escolha, é então apresentado um menu com as palavras. No caso mais geral, seguido nos substantivos, há um processo de interacção que inclui "browsing" duma hierarquia de tipos, até à especificação duma instância da categoria (substantivo). Note-se que caso haja palavras produzidas por "typeahead" tudo isto é desnecessário. Em vez duma sucessão de escolhas em menus ("<SUBSTANTIVO>", "animal", "pássaro", "pinguim"), bastará uma só, escrita no teclado ("pinguim").


d) Integração de elementos não-verbais

A integração numa frase de elementos "não-verbais" como uma selecção num mapa ou uma escolha num menu hierárquico coloca fundamentalmente duas questões: como manter a possibilidade de fazer um "typeahead" e como os mostrar na paráfrase da frase até ao momento. Também aqui a divisão terminais-lexicais/palavras fornece um enquadramento simples e eficaz.

Note-se que no caso dum menu hierárquico especializado como o referido em c) (tendo eventualmente uma "categoria lexical" própria), a sua finalidade é sempre produzir uma ou mais palavras. Ou seja, se o utilizador fizer um "typeahead" em que já figurem essas palavras, não será importunado com o menu. Pelo mesmo motivo, a paráfrase não é problema.

O caso duma selecção num mapa ou diagrama será um caso particular do anterior. Usam-se "categorias lexicais" especiais, que não têm tradução para palavras, cuja escolha num menu força uma interacção especial. Mas óbviamente não é possível o "typeahead", e a paráfrase mostrará apenas uma designação parametrizada da "categoria lexical" correspondente.

e) Ambiguidades

Ao construir uma frase podem surgir ambiguidades de análise, de escopo de quantificadores, etc. Por exemplo, "O animal que come carne que cheira mal": deverá entender-se como "{O animal que come carne} que cheira mal" ou como "O animal que come {carne que cheira mal}" ?

Para resolver este problema desenvolvemos um método, independente da aplicação em causa, que se baseia no seguinte: a existência de várias análises por uma dada gramática implica que a mesma palavra possa ser aceite (reconhecida) em dois pontos diferentes da gramática. Caso esses pontos da árvore sintáctica da frase se situem de forma favorável, às várias instancias da mesma palavra corresponderão as delimitações de entidades sintácticas diferentes.

O nosso método consiste em apresentar as várias instâncias da mesma palavra no menu, mas precedidas de parêntises enquadrando diferentes entidades sintácticas ao emparelhar com outros automáticamente presentes na paráfrase da pergunta até ao momento. Beneficiamos assim do facto de em geral uma entidade sintáctica, ou seja um não-terminal da gramática, "ficar bem" se delimitada por parêntises.

Caso isso não seja possível, por as várias instâncias da mesma palavra não estarem situadas favorávelmente, prosseguem-se as várias análises simultâneamente. As opções no próximo menu serão a junção de todas as originadas por cada análise. Note-se portanto que convém desambiguar o mais cedo possível, e não apenas no fim da frase, no intuito de diminuir o número de opções possíveis nos menus seguintes. É no entanto possível chegar ao fim com várias análises possíveis. É nossa convicção que tais frases são ambíguas por natureza, e consequentemente a linguagem-objecto para que se traduzem deverá reflectir essa ambiguidade.

Na próxima secção apresenta-se um exemplo do funcionamento do método, mostrando-se o que entendemos por "situação favorável" das várias instâncias da palavra, e na seguinte o algoritmo que o implementa.


f) Pronomes

Um pronome pode referir-se a várias entidades possíveis, sendo necessário descobrir qual. Poderia adoptar-se um esquema de numeração de entidades referenciáveis (por exemplo, sintagmas nominais), que depois permitiria optar por uma delas. Fácilmente o podemos fazer, o que implica colocar informação especial na gramática a usar. Preferimos manter esta intacta, separada da interface.

Caso os pronomes sejam analisáveis pela gramática dada, devem óbviamente aparecer como seus terminais, e portanto são tratados normalmente.


3. Exemplo de interacção

Seja a frase "Qual o campeonato do mundo de futebol ...". Vamos debruçar-nos apenas sobre "campeonato do mundo de futebol". Supunhamos que para uma dada gramática, eram possíveis as duas análises "{campeonato do mundo} de futebol" e "campeonato do {mundo de futebol}", a que corresponderiam as árvores sintácticas seguintes:


A interacção para escrever este fragmento começaria por:


(Nota: poderíamos ter usado um typeahead para encurtar: TYPEAHEAD - "campeonato do mundo")

Até este ponto as duas análises foram prosseguidas simultâneamente. Só agora as várias instâncias duma mesma palavra estão em posição "favorável" na árvore sintáctica: marcam o fim de dois não-terminais diferentes e distinguiveis um do outro pela sua palavra mais à esquerda. O sistema faz o utilizador decidir-se por uma delas, através da escolha de "}de" ou de apenas "de" no menu seguinte, mostrando-se ao lado as correspondentes árvores sintácticas:


Cada uma das regiões assinaladas compreende o último não-terminal fechado pela escolha de "de". Note-se que na da direita, correspondente a "campeonato do {mundo de futebol}", esse não-terminal só tem de facto uma palavra ("mundo") debaixo dele, apesar de ter dois terminais lexicais ("o","mundo"). Por isso não faz sentido enquadrá-lo entre parêntises - veja-se a descrição do algoritmo na secção seguinte.

Pretendemos com este exemplo, talvez pouco realista, ilustrar a operação do sistema e o método de desambiguação, que como se começa a ver é independente do domínio por se basear em critérios sintácticos. Na verdade, é mais provável que a desambiguação fosse feita mais cedo, visto que "campeonato" normalmente apareceria precedido dum determinador ("o", "um", etc). Nesse caso já "o/um campeonato" formaria um não-terminal com mais do que uma palavra, e faria sentido o sistema enquadrá-lo entre parêntises.


4. O algoritmo que "olha à frente"

Vamos agora expôr o algoritmo, dividido em três partes, que computa o conjunto de palavras a apresentar num menu, e as correspondentes resolventes Prolog de continuação, que definem as várias análises possíveis após a escolha no menu. É dada uma lista de resolventes que determina o ponto actual das análises possíveis. Esta lista tem mais do que um elemento sse alguma escolha anterior permitiu várias análises possíveis, correspondendo a cada uma destas um elemento; tivemos então uma ambiguidade.

A interface opera da seguinte forma: é dado o primeiro não-terminal da gramática como resolvente. São computadas por este algoritmo as opções a apresentar no 1º menu, que é apresentado ao utilizador. Este escolhe, e assim determina a nova resolvente de continuação, ou caso seja uma escolha ambígua, a nova lista de resolventes. E assim sucessivamente, até fechar o primeiro não-terminal - o fim da frase.

Dados:

um conjunto de cláusulas em que foram traduzidas previamente as regras de gramática, bem como todos os predicados que nelas são referidos;

um predicado 'passo'(R,NR,NA,NX,T) que sucede sse for possível, pesquisando da esquerda para a direita e em profundidade a partir da resolvente R, encontrar o 'token' T a que corresponde o número de ordem actual na frase NA, sendo a continuação a nova resolvente NR. NX é o número de ordem da primeira palavra, a mais à esquerda, do último não-terminal fechado antes do consumo (reconhecimento) de T. Caso esse número não seja inferior a NA-1 (isto é, caso o referido não-terminal só tenha uma palavra), NX='nenhum'.

o número de ordem na frase da próxima palavra a escolher, N;

um conjunto de 1 ou mais resolventes Prolog e respectivas listas de input, representado numa lista LR com elementos Ri+Ti;

um predicado, aspecto(T,P), onde T é a lista de classificações lexicais das palavras na lista P; é o dicionário, que assim acomoda também palavras múltiplas e contracções. É aqui empregue "ao contrário", para obter o aspecto externo correspondente a uma dada categoria lexical.

Pretende-se:

um conjunto O de tuplos <Pi,Ni,NLRi> (<palavra,número de ordem, novo conjunto de resolventes>), tal que:

-cada par Pi,Ni presente em cada tuplo seja único em O, pois são as opções a apresentar no próximo menu;

-Ni seja o número de ordem, na frase já escrita, da primeira palavra do último não-terminal reconhecido antes do consumo do 'token' lexical correspondente a Pi, ou seja da entidade gramatical que foi delimitada pela palavra Pi; essa entidade deverá abarcar mais do que uma palavra, para fazer sentido ter parêntises a enquadrá-la. Caso contrário que Ni seja ='nenhum', em vez dum número.

-um conjunto D de números de ordem na frase; indicará quais os parêntises necessários na paráfrase no menu.

-NLRi contenha todas as resolventes e respectivas listas de input, correspondentes a todas as análises possíveis da frase, já incluindo a escolha Pi.

Algoritmo:

1º. "OLHAR À FRENTE"

1.1. Para cada Ri+[T1|Tn]i em LR determine-se a lista Lxi com todos os tuplos <Pj,Nj,Rxj+NTnj> obedecendo às condições:

passo( Ri, Rxj' , N, N',T1),

( aspecto([T1],Pj ), Rxj =Rxj', Nj=N', NTnj=Tn ou

aspecto([T1,T2],Pj ), Tn=[T2|NTnj], passo(Rxj', Rxj , N,Nj,T2) )

1.2. Concatenar todas as listas Lxi , obtendo-se a lista Lx

O algoritmo começa por (1.1.) simular todos os 'parsings' possíveis, até encontrar o próximo 'token' lexical, ao que corresponde um 'passo' dum interpretador especial ; caso exista no dicionário uma palavra que seja uma contracção cuja representação lexical comece pelo 'token' encontrado, verifica-se se ela é compatível com o 'token' seguinte na gramática, como se vê no segundo ramo do 'ou'.

2º. AGRUPAMENTO

2.1. O' <- Ø.

2.2. Para cada elemento <Pi,Ni,Rxi+NTni> em Lx, até esta estar vazia:

2.2.1. Se não existir outro elemento com o mesmo par <Pi, Ni> retirá-lo de Lx e adicionar o tuplo <Pi,Ni,[Rxi+NTni]> a O'.

2.2.2. Caso exista(m), retirá-los todos de Lx, formar a lista Lyi com todos os respectivos pares Rxj+NTnj, e acrescentar a O' o tuplo <Pi,Ni,Lyi>.

Caso os pares <palavra,delimitador_esquerdo> encontrados sejam únicos (2.2.1.), a sua escolha determina uma só resolvente de continuação possível. Caso contrário (2.2.2.), determinará várias resolventes de continuação. Como se vê pela primeira parte do algoritmo, isso implica que as opções do menu seguinte serão a junção de todas as compatíveis com cada resolvente.

3º. DETERMINAÇÃO DE PARENTISES

3.1. D <- Ø, O<-Ø.

3.2. Para cada elemento <Pi,Ni,Rxi+NTni> retirado de O', até este estar vazio:

3.2.1. Se existirem em O' outros elementos com a mesma palavra Pi, retirá-los e juntá-los a O, bem como este elemento. Juntar a D todos os seus números de ordem, excepto o que eventualmente fôr ='nenhum'.

3.2.2. Caso não existam, juntar o elemento a O, mas com Ni='nenhum'.

Em função de Ni, e da existência ou não de outras instancias Pi com N diferente, decide-se se é ou não necessário fazer aparecer os parêntises no menu (o esquerdo na paráfrase, o direito antes duma das instancias Pi). Eventualmente vários parêntises serão necessários na paráfrase, e nesse caso aparecem com um número de ordem.

O interpretador, 'passo', a que aqui faltam argumentos para não obscurecer a explicação, determina a profundidade na árvore sintáctica das regras de gramática usadas. Caso um "olhar à frente" o leve fundo de mais, ele falhará esse ramo mais profundo da gramática, não gerando o respectivo terminal (se é que ele existe - até pode ser um 'bug' na gramática !). Com isto evita-se o efeito de "olhar para a frente" infinito causado por recursões à esquerda na gramática. Atendendo a que a LN não admite de facto sequencias infinitas, mas que a sua gramática o faz apenas por isso facilitar a sua própria escrita, parece-nos uma solução racional.

Reservamos para publicação posterior a análise da complexidade deste algoritmo.


5. Descrição dum protótipo

Como já foi dito, o projecto da interface por menus conjuga-se com outros projectos, aproveitando assim componentes da interface LN convencional e naturalmente a Base de Conhecimentos.

Primeiro as partes independentes da aplicação:

Um só módulo com predicados de baixo nível, o único que depende do sistema onde se encontra a implementação; este e o seguinte são os únicos módulos em Prolog, sendo os restantes em Two-Level Prolog.

Pré-processador especial de Two-Level Prolog, que pré-processa também as regras de gramática e as cláusulas do dicionário.

A parte de controle do 'lookahead' sobre a gramática e chamada dos menus.

Seguem-se as partes que definem uma aplicação:

Dicionário reversível, comum à interface convencional; vários podem coexistir, um para cada língua. Como já foi dito, é uma relação entre listas de palavras e 'tokens' lexicais; listas, para possibilitar o tratamento de contrações e palavras múltiplas. Caso uma palavra tenha várias classificações lexicais, existirão várias entradas (cláusulas) no dicionário.

Conjunto de regras de gramática, para uma determinada língua.
O mesmo da interface convencional. Os terminais que figuram nestas regras são os 'tokens' lexicais reconhecíveis pelo dicionário.

Conjunto de predicados semânticos, independente da língua.
Os mesmos usados pela interface convencional. São chamados das regras de gramática e produzem as Representações Semânticas Intermédias correspondentes [Filgueiras Porto84].

Por fim, não pertencendo à interface:

A base de conhecimento.
Aceita perguntas expressas sob a forma duma Representação Semântica Intermédia e fornece a resposta.

Estes componentes traduzem a informação entre vários níveis, como se mostra na figura seguinte:





6. Comparação com outros trabalhos

Passamos agora em revista os trabalhos referidos, contrapondo-os ao nosso.

a) Tennant

Trata-se dum sistema para consulta a bases de dados relacionais, em linguagem pseudo-natural, não muito distante da 'query language' para que é traduzida. As escolhas nos menus são por vezes segmentos de frase pré-definidos. À custa dessa simplicidade da linguagem abrangida não parecem sequer surgir ambiguidades de análise. Dentro dessa simplicidade permite boa "naturalidade" das frases. Tem uma óptima portabilidade entre aplicações mercê dum meta-sistema de geração de interfaces. O mesmo não se poderá dizer da portabilidade entre línguas, que julgamos não ter sido um objectivo de projecto. A paráfrase apresentada é a simples sequência das escolhas anteriores.

Foi implementado numa "LISP-machine", tendo sido depois instalado no TI-PC, constituindo um produto comercial.

b) Philips

Trata-se também dum sistema para consulta a bases de dados, em linguagem mais natural que a do anterior. A gramática acha-se completamente separada do sistema, tornando-o muito portável. Tal como o sistema anterior, pressupõem-se que a gramática não permite ambiguidades. Dispõe de boas facilidades de interacção, como possibilidade de "typeahead", com "spelling-correction" e "command completion" para cada palavra, e desenho da árvore sintáctica.

Foi implementado em Smalltalk, em "workstations" Tektronix Magnolia e 4404, tendo sido o protótipo ("INGLISH") experimentado com vários domínios e utilizadores.

c) Filgueiras

Trata-se dum sistema para consulta a bases de conhecimentos, traduzindo as frases para uma linguagem objecto semelhante à usada por nós. Trata-se duma versão diferente da já referida Representação Semântica Intermédia, depois traduzida para a representação semântica final (um golo Prolog).

Tem pré-definidos dois não-terminais da gramática de interacção, correspondentes à especificação de sintagmas nominais e verbais respectivamente, que depois se podem combinar numa "meta-gramática" (a designação é nossa), combinando-os com pronomes interrogativos, etc. Para evitar ambiguidades de análise obriga-se o utilizador a "fechar" com um "parêntises direito" os não-terminais, à excepção dos que garantidamente não precisem, como por exemplo os nomes próprios. É pois necessário, para cada gramática (mas não para cada "meta-gramática"), decidir previamente onde obrigar a fechar um "parêntises". Por tudo isto nos parece um sistema pouco portável, quer entre línguas como entre aplicações, pelo menos enquanto não dispuser dum meta-sistema de geração de interfaces. Contudo, pelos mesmos motivos é mais económico em computação, um dos objectivos do seu projecto. Também por objectivo de projecto não dispõe de "typeahead". A paráfrase é simplesmente a sequência de escolhas anteriores.

Foi implementado em C-Prolog num Stride 400, estando neste momento [Filgueiras 86] a ser aumentada a cobertura linguística da gramática pré-definida.


d) O nosso - sua comparação

É um sistema genérico e completamente portável, dada a total separação da gramática, dicionário e predicados semânticos, e ainda por o nosso método de desambiguação ser todo ele independente da aplicação. O tipo de gramáticas utilizável é o mais vasto dos 4 sistemas, pois abarca os seus métodos de desambiguação: o "fechar parêntises" usado por Filgueiras, mas duma forma automática e independente.

Tal como o de Philips, o nosso "typeahead" permite a transição de interacção "menu-driven" para "command language driven" [Gilfoil 82], à medida que o utilizador se familiariza com a interface. Por outro lado serve de "banco de ensaios" a uma interface convencional. Como já foi dito, a nossa paráfrase é simplesmente a sequência de escolhas anteriores, tal como a de Filgueiras e Tennant, ressalvando-se as ocasiões em que nela aparecem um ou mais parêntises esquerdos.

Como já foi dito, foi implementado um protótipo em C-Prolog e Two-Level Prolog, numa VAXStation II.


7. Perspectivas

O trabalho mais próximo será de experimentação com várias gramáticas, para detectar eventuais limitações do método. Nada dissemos sobre o controle das regras, o mesmo do Two-Level Prolog, mas que em certos casos é relaxado para podermos "olhar à frente" também nas regras seguintes. Isso pode originar ambiguidades, dada a ausência da informação de "se e só se" (corte): um terminal admitido numa regra com corte pode também ser admitido numa regra a seguir; o corte deveria impedir que isso acontecesse, mas ele foi retirado para se poder "olhar à frente". Poderemos evitar isto, atendendo a que a semântica do corte se reduz aqui a uma semântica de conjuntos (de terminais/palavras possíveis). Resta saber se o esforço compensa na prática.

A opção tomada de obter velocidade à custa de espaço, guardando resolventes de continuação em vez de as redescobrir após cada menu, poderá não compensar ao passar para máquinas mais pequenas, como o Macintosh ou o PC-AT. Haverá que escolher a opção mais conveniente. Também admitimos neste momento um "voltar atrás" ilimitado, até ao início da frase se se desejar, usando simplesmente o mecanismo de "backtracking" do Prolog. Eliminando esta facilidade, poder-se-á recuperar o espaço gasto atrás, falhando até ao princípio após cada menu.

Alguns "acabamentos", usando toda a maquinaria já disponível, poderão ser muito úteis. Por exemplo, a possibilidade de em qualquer ponto duma frase se poder iniciar recursivamente uma nova frase, prosseguindo depois com a anterior; a referência a frases anteriores, já num contexto de diálogo; ou ainda a possibilidade de fazer (meta)perguntas sobre a própria interface ou sobre a Base de Conhecimentos.

Como aplicações para além das interfaces LN em consulta e em aquisição, vemos aqui um bom enquadramento para Ensino Auxiliado por Computador: primordialmente em linguística, quer para a experimentação de sintaxes quer para o ensino de outras línguas. Mas se a gramática descrever artefactos físicos, o nosso sistema pode facilmente mostrar como eles se podem construir. A integração de menus com elementos gráficos trará um novo mundo de possibilidades, assim que dispusermos duma implementação Prolog que o permita.

Concluindo, julgamos ser este mais um bom exemplo duma abordagem geral e independente do domínio possibilitada pela Programação em Lógica, aqui consubstanciada na total independencia dos métodos propostos.


Agradecimentos

A Miguel Filgueiras por discussões e informações esclarecedoras.

Este trabalho integra-se em contratos com o Ministério da Indústria e Energia, Junta Nacional de Investigação Científica, Instituto Nacional de Investigação Científica e Gabinete de Filosofia do Conhecimento. O primeiro autor é bolseiro do Instituto Nacional de Investigação Científica.


Referências

[Calejo e Pereira 86] Miguel Calejo e Luís Moniz Pereira
"Uma metodologia para interfaces de linguagem natural usando menus"
Actas do 4º Congresso Português de Informática,
Associação Portuguesa de Informática 1986

[Clocksin e Mellish 81] William Clocksin, Chris Mellish
"Programming in Prolog"
Springer Verlag, 1981

[Filgueiras 86] Comunicação pessoal, Junho 1986

[Filgueiras e outros 85]  Miguel Filgueiras,
Fernando Silva, Mª Eduarda Pinto e Ana Mª Pinheiro,
"Menus Naturais", Encontro Português de Inteligência Artificial 1985, Associação Portuguesa Para a Inteligência Artificial

[Filgueiras e Pereira 83] Miguel Filgueiras e Luís Moniz Pereira,
"Relational Databases à la carte", Actas do Logic Programming Workshop'83, Albufeira 1983, UNL

[Filgueiras e Porto 84]  Miguel Filgueiras e António Porto,
"Natural Language Semantics: a Logic Programming approach", Proceedings of the 1984 International Symposium on Logic Programming, IEEE Computer Society Press

[Filgueiras e Silva 86] Miguel Filgueiras e Fernando Silva,
"Natural Menus",
Relatório interno, Centro de Informática da Universidade do Porto 1986

[Gilfoil 82] D.M. Gilfoil,
"Warming Up to Computers: A Study of Cognitive and Affective Interaction Over Time",
Proceedings of the Human Factors in Computer Systems Conference 1982

[M.Pereira Filgueiras 82] Luís Moniz Pereira e Miguel Filgueiras,
"Manual de Utilização da Base de Dados FACC"
Departamento de Informática, UNL 1982

[Philips Nicholl 85] Brian Philips, Sheldon Nichol
"INGLISH: A Natural Language Interface"
cedido por Miguel Filgueiras

[Porto 84]  António Porto,
"Two-Level Prolog",
Proceedings of the International Conference on Fifth Generation Computer Systems, Tokyo 1984, ICOT

[Porto 85]          António Porto,
"User's Guide to Two-Level Prolog",
Departamento de Informática, UNL 1985

[Porto 86] António Porto
"A deduction mechanism based on semantic unification",
UNL Junho 1986 (submetido para publicação)

[Tennant e outros 83] Harry R. Tennant, K.M. Ross e C.W. Thompson
"Usable Natural Language Interfaces through Menu-based Natural Language Understanding"
Proceeedings of the Conference on Human Factors in Computing Systems, Cambridge, Mass. 1983








 Declarativa - Serviços de Informática, Lda.
  www.declarativa.com, info@declarativa.com  fax: +351-22-610 9574  tel: +351-22-610 9516
*Sede social (correio):
R. Cerca 88 4150-200 Porto Portugal
 *Centro de Desenvolvimento:
UPTEC - Parque de Ciência e Tecnologia da Universidade do Porto
Rua Actor Ferreira da Silva 100 4200-298 Porto Portugal