Gramática de restrição - Constraint grammar

Gramática de restrição ( CG ) é um paradigma metodológico para processamento de linguagem natural (PNL). Regras dependentes de contexto escritas por linguistas são compiladas em uma gramática que atribui marcas gramaticais ("leituras") a palavras ou outros tokens no texto em execução. Tags típicas abordam lematização ( lexema ou forma de base ), inflexão , derivação , função sintática , dependência, valência , papéis de caso , tipo semântico etc. Cada regra adiciona, remove, seleciona ou substitui uma tag ou um conjunto de tags gramaticais em um determinado contexto da frase. As condições de contexto podem ser vinculadas a qualquer tag ou conjunto de tags de qualquer palavra em qualquer lugar da frase, localmente (distâncias definidas) ou globalmente (distâncias indefinidas). As condições de contexto na mesma regra podem ser vinculadas, ou seja, condicionadas umas às outras, negadas ou bloqueadas por palavras ou tags interferentes. CGs típicos consistem em milhares de regras, que são aplicadas em conjunto em etapas progressivas, cobrindo níveis cada vez mais avançados de análise. Dentro de cada nível, regras seguras são usadas antes das regras heurísticas, e nenhuma regra é permitida para remover a última leitura de um determinado tipo, proporcionando assim um alto grau de robustez.

O conceito de CG foi lançado por Fred Karlsson em 1990 (Karlsson 1990; Karlsson et al., Eds, 1995), e os identificadores e analisadores de CG foram escritos para uma grande variedade de idiomas, obtendo rotineiramente pontuações F de precisão para classes gramaticais. (classe palavra) de mais de 99%. Uma série de sistemas CG sintáticos relataram pontuações F de cerca de 95% para rótulos de função sintática. Os sistemas CG podem ser usados ​​para criar árvores sintáticas completas em outros formalismos adicionando pequenas gramáticas de estrutura de frase baseadas em não terminais ou gramáticas de dependência , e vários projetos de Treebank usaram CG para anotação automática. A metodologia CG também tem sido usada em várias aplicações de tecnologia de linguagem, como corretores ortográficos e sistemas de tradução automática .

Sintaxe e formato da regra

Um analisador de gramática de restrição espera como entrada um fluxo de tokens analisados ​​morfologicamente, normalmente produzidos por um analisador baseado em transdutor de estado finito (os mais comuns são as ferramentas da Xerox twolc / lexc / xfst, HFST ou lttoolbox de Apertium ). Cada token pode ser ambíguo e ter muitas leituras ; a forma de superfície com todas as suas leituras é chamada de coorte . Abaixo está um possível exemplo de análise de ", e X era como" "no formato de entrada esperado pelo VISL CG-3:

"<,>"
	"," cm
"<and>"
	"and" conj
"<X>"
	"X" num pl
	"X" noun prop
"<was>"
	"be" verb past p1 sg
	"be" verb past p3 sg
"<like>"
	"like" adj
	"like" subj
	"like" pr
	"like" verb inf
	"like" verb pres
	"like" verb imp
"<“>"
	"“" lquot

Este trecho mostra 5 coortes, cada uma com uma ou mais leituras. As formas de palavras da superfície estão em, "<anglequotes>"enquanto os lemas / formas de base estão em regular, "quotes"seguidos por um conjunto de tags sem aspas, e vemos que algumas coortes têm várias leituras, ou seja. são ambíguos ( "<like>"sendo ambíguos entre 6 leituras). O trabalho do analisador CG é agora 1) remover tantas leituras erradas quanto for seguro fazer, dado o contexto, 2) opcionalmente, aplicar um ou mais rótulos de função sintática a cada coorte (ou mesmo relações de dependência) e 3) eliminar a ambigüidade do rótulos / relações aplicadas.

Abaixo está uma regra de exemplo (novamente no formato VISL CG-3) para escolher a leitura da terceira pessoa de "era" (removendo a leitura da primeira pessoa), uma vez que não há pronome da primeira pessoa à esquerda:

REMOVE (verb p1) IF 
  (0C (verb))
  (NEGATE *-1 (prn p1)) ;

Aqui (verb p1)está um conjunto de tags (a ordem não importa) que deve corresponder à leitura que estamos removendo. Depois IFsegue uma lista de zero ou mais restrições , a primeira diz que nesta coorte (posição 0), todas as leituras (o qualificador C, para Cuidado) possuem a tag verb. A segunda restrição diz que se houver uma coorte que está pelo menos uma palavra à esquerda (posição *-1, o *significado que podemos ir além de uma palavra e o -significado à esquerda) e essa coorte é um pronome de primeira pessoa, então a restrição * não * match ( NEGATE).

No CG-3, as regras também podem receber nomes, por exemplo SELECT:somename (…) IF, que aparecem na saída do rastreamento.

Uma regra também pode escolher uma única leitura se tivermos certeza de que todas as outras leituras devem estar erradas devido às restrições:

SELECT:quoting ("like" subj) IF 
  (-1 ("<was>"))
  (1 (lquot) OR (":"))  ;

Nesta regra, vemos que podemos nos referir a formas de palavras e formas de base em conjuntos de tags (eles são tratados como qualquer outra tag, e uma leitura sempre corresponderá a sua forma de palavra). Aqui, a segunda restrição é usada ORpara combinar dois conjuntos de tags. Se este conjunto for comumente usado, podemos dar a ele um nome e usar o nome - sem os parênteses - assim:

LIST prequote = lquot ":" ; 
SELECT:quoting ("like" subj) IF 
  (-1 ("<was>"))
  (1 prequote) ;

Uma definição equivalente seria SET prequote = (lquot) OR (":") ; .

Depois de executar as regras acima, devemos terminar com o seguinte:

"<,>"
	"," cm
"<and>"
	"and" conj
"<X>"
	"X" num pl
	"X" noun prop
"<was>"
	"be" verb past p3 sg
"<like>"
	"like" subj
"<“>"
	"“" lquot

Se usássemos --trace, veríamos as leituras removidas com uma inicial ;e o nome e o número da linha da regra sempre que ela se aplicasse a uma leitura.


A sintaxe da regra para adicionar rótulos de função sintática segue um esquema semelhante de "faça isso se x, y e z":

LIST nominal = noun prn ;
ADD (@SUBJ) IF 
  (NEGATE *-1 nominal)
  (0C (prop))
  (1C finiteverb) ;

Isso é chamado de "regra de mapeamento" e podemos acabar com várias dessas tags de mapeamento por coorte, caso em que podemos eliminar a ambigüidade usando as mesmas regras SELECT / REMOVE.

Implementações

CG-1

A primeira implementação de CG foi CGP por Fred Karlsson no início de 1990. Era puramente baseado em LISP , e a sintaxe era baseada em expressões S de LISP (Karlsson 1990).

CG-2

A implementação CG-2 de Pasi Tapanainen mdis removeu alguns dos parênteses no formato de gramática e foi implementada em C ++, interpretando a gramática como um Transdutor de Estado Finito para velocidade.

CG-2 foi posteriormente reimplementado (com um método não-FST) pelo grupo VISL na Syddansk Universitet como o código aberto VISL CG [1] , mantendo o mesmo formato dos mdis de código fechado de Tapanainen .


CG-3

Uma captura de tela do cg3ide de VISL
Editando e executando um arquivo CG-3 em Emacs cg.el

O projeto VISL posteriormente se transformou em VISL CG-3, o que trouxe mais mudanças e adições ao formato gramatical, por exemplo:

  • suporte total a Unicode por meio de componentes internacionais para Unicode
  • interpretação diferente de negação (NÃO)
  • relações nomeadas além de relações de dependência simples
  • configuração variável
  • correspondência regex completa
  • tag / set unification - LIST gen = m f; SELECT (det) + $$gen IF (1 noun) (1 $$gen);selecionará o determinante que tem o mesmo gênero do substantivo seguinte
  • wrappers para leitura / gravação de formatos Apertium e HFST
  • suporte para sub-leituras (onde uma leitura tem várias "partes", usadas para expressões e compostos com várias palavras)
  • digitalizando além do ponto de origem ou até mesmo os limites da janela
  • usar como biblioteca e suporte para integração com processos externos

Também existe um IDE simples para CG-3 desenvolvido pela VISL, [2] que fornece realce de sintaxe e permite que você veja a entrada e a saída e possíveis erros conforme você escreve sua gramática. Também existe um modo Emacs cg.el[3] com recursos semelhantes e navegação de código simples.

Ao contrário da implementação Tapanainen, as implementações VISL não usam transdutores de estado finito. As regras são ordenadas em seções, o que dá mais previsibilidade ao escrever gramáticas, mas ao custo de uma análise mais lenta e da possibilidade de loops infinitos.

Houve reimplementações experimentais baseadas em FST de código aberto de CG-2 que para pequenas gramáticas atingem a velocidade de VISL CG-3, se não MDIS .

Lista de sistemas

Software grátis
Software não-livre

Referências

  1. ^ Para inglês, veja por exemplo Tapanainen e Voutilainen 1994.
  2. ^ Tapanainen, Pasi 1996: The Constraint Grammar Parser CG-2. Publicações da Universidade de Helsinque No. 27.
  3. ^ Nemeskey, DM, Tyers, FM e Hulden, M. (2014) "Why Implementation Matters: Evaluation of an Open-source Constraint Grammar Parser". Anais da 25ª Conferência Internacional de Linguística Computacional (COLING 2014) (a aparecer)
  • Bick, Eckhard. 2000. The Parsing System "Palavras": Automatic Grammatical Analysis of Portuguese in a Constraint Grammar Framework . Aarhus: Aarhus University Press. ISBN  87-7288-910-1 .
  • Karlsson, Fred. 1990. Gramática de restrição como estrutura para análise de texto irrestrito. H. Karlgren, ed., Proceedings of the 13th International Conference of Computational Linguistics , Vol. 3. Helsinki 1990, 168-173.
  • Karlsson, Fred, Atro Voutilainen, Juha Heikkilä e Arto Anttila, editores. 1995. Constraint Grammar: A Language-Independent System for Parsing Unrestricted Text . Processamento de linguagem natural, no 4. Mouton de Gruyter, Berlim e Nova York. ISBN  3-11-014179-5 .
  • Tapanainen, Pasi e Atro Voutilainen 1994: Marcando com precisão: não adivinhe se você sabe . ANLC '94 Anais da quarta conferência sobre processamento de linguagem natural aplicada.

links externos