|
|
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.
Conjunto de predicados semânticos, independente
da língua.
Por fim, não pertencendo à interface:
A base de conhecimento.
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
[Clocksin e Mellish 81] William Clocksin, Chris Mellish [Filgueiras 86] Comunicação pessoal, Junho 1986
[Filgueiras e outros 85] Miguel Filgueiras,
[Filgueiras e Pereira 83] Miguel Filgueiras e Luís
Moniz Pereira,
[Filgueiras e Porto 84] Miguel Filgueiras e António
Porto,
[Filgueiras e Silva 86] Miguel Filgueiras e Fernando Silva,
[Gilfoil 82] D.M. Gilfoil,
[M.Pereira Filgueiras 82] Luís Moniz Pereira e Miguel Filgueiras,
[Philips Nicholl 85] Brian Philips, Sheldon Nichol
[Porto 84] António Porto,
[Porto 85] António
Porto,
[Porto 86] António Porto
[Tennant e outros 83] Harry R. Tennant, K.M. Ross e C.W. Thompson
|
Declarativa - Serviços de Informática, Lda. |