Gramáticas de Cláusulas Definidas (DGC -- Definite Clause Grammars)

20
Gramáticas de Cláusulas Gramáticas de Cláusulas Definidas Definidas (DGC -- Definite Clause Grammars) (DGC -- Definite Clause Grammars) Jacques Robin DI-UFPE

description

Gramáticas de Cláusulas Definidas (DGC -- Definite Clause Grammars). Jacques Robin DI-UFPE. Porque LIFE para Processamento de Linguagem Natural (PLN)?. Como linguagem de programação em lógica, inclui built-in: Gramáticas de Cláusulas Definidas (DCGs) - PowerPoint PPT Presentation

Transcript of Gramáticas de Cláusulas Definidas (DGC -- Definite Clause Grammars)

Page 1: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Gramáticas de Cláusulas Definidas Gramáticas de Cláusulas Definidas (DGC -- Definite Clause Grammars)(DGC -- Definite Clause Grammars)

Jacques RobinDI-UFPE

Page 2: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Porque LIFE para Processamento de Porque LIFE para Processamento de Linguagem Natural (PLN)?Linguagem Natural (PLN)?

Como linguagem de programação em lógica, inclui built-in: • Gramáticas de Cláusulas Definidas (DCGs)• um Formalismo de Representação do Conhecimento (FRC)

lingüístico para PLN A maioria dos sistemas de PLN profundo modernos:

• usam como estrutura de dados termos de traços tipados• muito semelhantes aos termos LIFE

Sistemas de PLN requer conhecimento:• muito heterogêneo porém altamente interdependente, como• morfo-sintaxe da língua, semântica do domínio, estrutura do

discurso, objetivos dos agentes comunicativos, etc.• que só pode ser adequadamente codificado• por um FRC flexível, integrando vários paradigmas

Page 3: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

DCGs: Gramáticas de Cláusulas DefinidasDCGs: Gramáticas de Cláusulas Definidas

Pré-processador built-in da programação em lógica:• convertendo regras de gramáticas em cláusulas lógicas, e assim• re-aproveitando o provador de teorema da programação em

lógica para implementar “de graça” parser ou gerador de frases

Usa diferença de listas como estrutura de dados: • frase da linguagem cuja gramática é representada pela DCG - lista de palavras ainda a ser processadas = listas de palavras já processadas

Cada regra DCG: • associada a uma categoria sintática genérica cat• instancia 2 argumentos adicionais implícitos:

1. lista de palavras do constituinte const da frase de catégoria cat 2. lista de palavras do resto da frase na direita de const

Page 4: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Exemplo mínimo de DCG Prolog: Exemplo mínimo de DCG Prolog: conversão regra DCG / cláusula Prologconversão regra DCG / cláusula Prolog

Regras de gramáticas: sn --> det, subs.

Entradas do dicionário:det --> [o].det--> [a].det --> [os].det --> [as].subs --> [menino].subs --> [meninos].subs --> [menina].subs --> [meninas].

Conversão para cláusulas Prolog:

sn(Csn,Rsn) :- det(Csn,Rdet), subs(Rdet,Rsn).

det([o|Rdet], Rdet).det([a|Rdet], Rdet).det([os|Rdet], Rdet).det([as|Rdet], Rdet).subs([menino|Rsubs], Rsubs).subs([meninos|Rsubs], Rsubs).subs([menina|Rsubs], Rsubs).subs([meninas|Rsubs], Rsubs).

Page 5: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Exemplo mínimo de DCG Prolog: Exemplo mínimo de DCG Prolog: execuçãoexecução

sn(Csn,Rsn) :- det(Csn,Rdet), subs(Rdet,Rsn).

det([o|Rdet], Rdet).det([a|Rdet], Rdet).det([os|Rdet], Rdet).det([as|Rdet], Rdet).subs([menino|Rsubs], Rsubs).subs([meninos|Rsubs], Rsubs).subs([menina|Rsubs], Rsubs).subs([meninas|Rsubs], Rsubs).

?- sn([o,menino],[]).call sn([o,menino],[]). call det([o,menino],Rdet). exit det([o,menino],[menino]). call subs([menino], Rsubs). exit subs([menino], []).exit sn([o,menino],[]).yes?- subs([menino],[]).yes?- det([o, menino],[menino]).yes?- sn([minha, menina],[]).no?- sn([o,meninas],[]).yes

Page 6: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Regras com argumentos de concordânciaRegras com argumentos de concordância

Regras de gramáticas: sn(G,N) --> det(G,N), subs(G,N).

Entradas do dicionário:det(masc,sing) --> [o].det(fem,sing) --> [a].det(masc,plur) --> [os].det(fem,plur) --> [as].subs(masc,sing) --> [menino].sub(masc,plur) --> [meninos].subs(fem,sing) --> [menina].subs(fem,plur) --> [meninas].

Conversão para cláusulas Prolog:sn(G,N,Csn,Rsn) :- det(G,N, Csn,Rdet), subs(G,N, Rdet,Rsn).

det(masc,sing,[o|Rdet], Rdet).det(fem,sing,([a|Rdet], Rdet).det(masc,plur,[os|Rdet], Rdet).det(fem,plur,[as|Rdet], Rdet).subs(masc,sing,[menino|Rsubs], Rsubs).subs(masc,plur,[meninos|Rsubs], Rsubs).subs(fem,sing,[menina|Rsubs], Rsubs).subs(fem,plur,[meninas|Rsubs], Rsubs).

Page 7: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Regras com restriçõesRegras com restrições

Regras de gramáticas: sn(G,N) --> det(G,N), subs(G,N). subs(Lex,masc,sing) --> [Lex].subs(Lex,plur,reg,L) --> [Lexi]. {Lexi = ?? , ??, ??}. det(Lex,masc,sing) --> [Lex].det(Lex,plur,reg,L) --> [Lexi]. {Lexi = ?? , ??, ??}.

Page 8: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

LIFE DCGLIFE DCG Sintaxe: const(...,X:, ...,Y:, ...) --> subconst1(...,X,...) , ... , subconstM(...,Y,...) {pred1(...,X,...,Y,...), ..., predN(...,X,...,Y,...)} Expansão em LIFE const(...,X:, ...,Y:, ..., in_dcg=>_A, out_dcg=>_Z) :- subconst1(...,X,..., in_dcg=>_A, out_dcg=>_B), ... , subconst25(...,Y,..., in_dcg=>_Y,

out_dcg=>_Z), pred1(...,X,...,Y,...), ..., predN(...,X,...,Y,...)

Page 9: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Exemplo de LIFE DCGExemplo de LIFE DCG

Exemplo:frase --> sn, gv?sn --> nome?sn --> det, subs?nome --> [“Ana”]?det --> [“a”]?subs --> [“pera”]?gv --> verb?verb --> [“come”]?verb --> [“canta”]?

gramática para parsing da sub-linguagem“Ana canta”“Ana come a pera”

Em LIFE:frase(in_dcg => _A,out_dcg => _B) :- sn(in_dcg => _A,out_dcg => _C), gv(in_dcg => _C,out_dcg => _B).

nome(in_dcg => ["Ana"|_A],out_dcg => _A)

:- succeed.

Page 10: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Acumuladores em LIFEAcumuladores em LIFE

Ferramenta poderosa para simplificar o desenvolvimento de grandes programas

São usados como difference lists.

Exemplo de uso não lingüístico:

> import(“accumulators”)?> acc_info(myacc, X, In, Out, acc_pred=>(Out=[X|In]))?> pred_info(loop, myacc)?> loop(0) :-- !?> loop(N) :-- N + myacc, loop(N-1)?> main(N, L) :- loop(N) with myacc([], L)?

Programa é traduzido para:loop(0, in_myacc=>A, out_myacc=>A) :- !, succeed.loop(N, in_myacc=>B, out_myacc=>C) :- D=[N|B], loop(N-1, in_myacc=>D, out_myacc=>C).main(N, L) :- loop(N, in_myacc=>[], out_myacc=>L).

Execução:> main(9,L)?L = [1,2,3,4,5,6,7,8,9].

Page 11: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Gramáticas EDCGGramáticas EDCG

Extended Definite Clause Grammar

sn --> det(@(agreeFt=>Agf)), sub(@(agreeFt=>Agf))?

det(@(syntcat=>defArt, agreeFt=>@(gen=>fem, num=>sing)) --> [“a”]?sub(@(syntcat=>comNoun,

agreeFt=>@(gen==>fem, num=>sing)) --> [“pera”]?

Tradução em LIFE:

det(@(syntcat => defArt, agreeFt => @(gen => fem, num =>

sing)), in_dcg => ["a"|_A], out_dcg => _A) :- succeed.

sub(@(syntcat => comNoun, agreeFt => @(gen => fem, num =>

sing)), in_dcg => ["pera"|_A], out_dcg => _A) :- succeed.

Page 12: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Análise Morfológica em LIFEAnálise Morfológica em LIFEVerbos (3a. Pessoa do Sing)Verbos (3a. Pessoa do Sing)

const (syntr(syntcat => main,

agreeFt => @(num=>sing, pers=>3),

conjug => @(tense => present),

lex => Lex),

semr(semcat=>Semcat)) --> [PVerb],

{rverb(lex=>Lex,

semcat=>Semcat),

PVerb=strcon(Lex,"s")}?

rverb(lex=>"smell",

semcat=>percep) --> ["smell"]?

rverb(lex=>"walk",

semcat=>action) --> ["walk"]?

Page 13: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Análise Sintática de Superfície em LIFEAnálise Sintática de Superfície em LIFE% “I see a glitter at 1 2”

const (syntr(syntcat => clause,

conjug => Conjug:@(mood=>declar, voice=>active),

syntRoles =>

@(pred => Pred,

args => @(subj => Subj, dobj => DObj))

mods => @(frtAd1 => FAd1, endAd1 => EAd1))))

--> const(FAd1:syntr(syntcat=>pp, optional=>yes)),

const(Subj:syntr(syntcat=>nominal, funct=>subj,

optional=>no, agreeFt=>Sva)),

const(Pred:syntr(syntcat=>vg, optional=> no,

conjug=>Conjug, agreeFt=>Sva),

semr(semcat=>percep)),

const(DObj:syntr(syntcat=>nominal, funct=>dobj,

optional=>no))

const(EAd1:syntr(syntcat=>pp, optional=>yes))?

Page 14: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Análise Sintática de Superfície em LIFEAnálise Sintática de Superfície em LIFE

ClauseClause

NominalNominal VGVG NominalNominal

I see a I see a glitterglitter

VerbVerb

DetDet NounNoun

PronounPronoun NPNP

PerPronPerPron

ArticleArticle

Page 15: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Análise Sintática de Superfície em LIFEAnálise Sintática de Superfície em LIFEnominal := {np; pronoun}.

pronoun := {perPron; indPron; demPron}.

const (syntr(syntcat => np,

det => Det,

agreeFt => @(pers => 3, num => Num),

head => Noun,

preMod => PMod)) -->

const(Det:syntr(syntcat=>determ,

optional=>no, num=>Num)),

const(PMod:syntr(syntcat=>ap, optional=>yes)),

const(Noun:syntr(syntcat=>noun,

optional=>no, num=>Num))?

const (syntr(syntcat=>perPron,

func=>subj,

agreeFt=> @(pers => 1,

num => sing))) --> ["I"]?

Page 16: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Análise Sintática de Superfície em LIFEAnálise Sintática de Superfície em LIFE

const (syntr(syntcat => vg, conjug => Conjug,

agreeFt=>Agree, head => Main),

semr(semcat=>Sem))

--> const(Main:syntr(syntcat=>verb, agreeFt=>Agree

conjug=>Conjug),

semr(semcat=>Sem))?

determ := {article}.

const (syntr(syntcat=>article, lex=>"a", ref=>indef,

num=>sing)) --> ["a"]?

const (syntr(optional=>yes)) --> []?

Page 17: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Análise Sintática Profunda em LIFEAnálise Sintática Profunda em LIFE

% “I see the gold”

const (syntr(conjug => @(mood => declar, voice => active),

semr(themRoles =>

@(situation => Pred,

partic => @(agent => Subj,

percept => DObj)

--> const(Subj:syntr(syntcat=>nominal, funct=>subj,

optional=>no, agreeFt=>Sva)),

const(Pred:syntr(syntcat=>vg, optional=> no,

conjug=>Conjug, agreeFt=>Sva),

semr(semcat=>percep)),

const(DObj:syntr(syntcat=>nominal, funct=>dobj,

optional=>no))

Page 18: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Análise Sintática Profunda em LIFEAnálise Sintática Profunda em LIFE

% “the gold is seen by me”

const (syntr(conjug => @(mood => declar, voice => active)

semr(themRoles =>

@(situation => Pred,

partic => @(agent => Comp,

percept => Subj))))

--> const(Subj:syntr(syntcat=>nominal, funct=>subj,

optional=>no, agreeFt=>Sva)),

const(Pred:syntr(syntcat=>vg, optional=>no,

conjug=> Conjug, agreeFt=>Sva),

semr(semcat=>percep)),

const(Comp:syntr(syntcat=>pp, optional=>no))?

Page 19: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Frases interrogativasFrases interrogativas% “do you smell a stench?”

const (syntr(syntcat => clause,

conjug => Conjug:@(mood=>inter, voice=>active),

syntRoles =>

@(pred => Pred,

args => @(subj => Subj, dobj => DObj))),

semr(themRoles =>

@(situation => Pred,

partic => @(agent=>Subj,percept => DObj))))

--> const(QAux:syntr(syntcat=>auxiliar)),

const(Subj:syntr(syntcat=>nominal, agreeFt=>Sva)),

const(Pred:syntr(syntcat=>vg,

conjug=>Conjug,

agreeFt=>Sva, aux => QAux)

semr(semcat=>percep)),

const(DObj:syntr(syntcat=>nominal))?

Page 20: Gramáticas de Cláusulas Definidas  (DGC -- Definite Clause Grammars)

Frases imperativasFrases imperativas% “shoot the wumpus”

const (syntr(syntcat => clause,

conjug => Conjug:@(mood=>imper, voice=>active),

syntRoles =>

@(pred => Pred,

args => @(subj =>

Ocult:@(syntr(syntcat=>nominal,

agreeFt=>

Sva:@(num=>sing, pers=>2))

obj => Obj))),

semr(themRoles =>

@(situation => Pred,

partic => @(agent => Ocult, comp => Comp))))

--> const(Pred:syntr(syntcat=>vg,

conjug=>Conjug, agreeFt=>Sva)

const(Obj:syntr(syntcat=>{pp;adv;nominal}))?