Gramáticas de Cláusulas Definidas

20
Gramáticas de Cláusulas Gramáticas de Cláusulas Definidas Definidas Jacques Robin CIn-UFPE

description

Gramáticas de Cláusulas Definidas. Jacques Robin CIn-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) um Formalismo de Representação do Conhecimento (FRC) lingüístico para PLN - PowerPoint PPT Presentation

Transcript of Gramáticas de Cláusulas Definidas

Page 1: Gramáticas de Cláusulas Definidas

Gramáticas de Cláusulas DefinidasGramáticas de Cláusulas Definidas

Jacques RobinCIn-UFPE

Page 2: Gramáticas de Cláusulas Definidas

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

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

Exemplo mínimo de Prolog DCG: Exemplo mínimo de Prolog DCG: 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

Exemplo mínimo de Prolog DGC: Exemplo mínimo de Prolog DGC: 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], []). 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

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

Regras genéricas com restriçõesRegras genéricas com restrições

Regras de sintaxe: const(sn,G,N) --> const(det,G,N), const(subs,G,N). Dicionário:const(subs,menino,masc,sing).const(det,o,masc,sing). Regras de morfologia:const(Cat,LexMS,masc,sing) --> [LexMS], {member(Cat,[subs,adj,det])}.const(Cat,LexMS,masc,plur) --> [LexMP], {member(Cat,[subs,adj,det]), plur(LexMP,LexMS)}.const(Cat,LexMS,fem,sing) --> [LexFS], {member(Cat,[subs,adj,det]), fem(LexFS,LexMS)}.const(Cat,LexMS,fem,plur) --> [LexFP], {member(Cat,[subs,adj,det]), plur(LexFP,LexFS), fem(LexFS,LexSM). Predicados de restrições:plur(LexMP,LexMS) :- concatom(LexMS,s,LexMP).fem(LexFS,LexMS) :- concatom(LexRad,a,LexFS), concatom(LexRad,o,LexMS).concatom(A,B,AB) :- name(A,Sa), list(La,Sa), name(B,Sb), list(Lb,Sb),

append(La,Lb,Lab), list(Lab,Sab), name(AB,Sab).

Page 8: Gramáticas de Cláusulas Definidas

Argumentos para mapeamento frase, Argumentos para mapeamento frase, estrutura sintática, conteúdo semânticoestrutura sintática, conteúdo semântico

sn(sn(Det,Subs),G,N) --> det(Det,G,N), subs(Subs,G,N).

det(det(o),masc,sing) --> const(det,o,masc,sing).subs(subs(menino),masc,sing). --> const(subs,livro,masc,sing).

const(Cat,LexMS,masc,sing) --> [LexMS], {member(Cat,[subs,adj,det])}.

const(Cat,LexMS,masc,plur) --> [LexMP], {member(Cat,[subs,adj,det]), plur(LexMP,LexMS)}.const(Cat,LexMS,fem,sing) --> [LexFS], {member(Cat,[subs,adj,det]), fem(LexSF,LexMS)}.const(Cat,LexMS,fem,plur) --> [LexFP], {member(Cat,

[subs,adj,det]), plur(LexFP,LexFS), fem(LexFS,LexSM).

Page 9: Gramáticas de Cláusulas Definidas

DCG: interpretador ou gerador de frasesDCG: interpretador ou gerador de frases

?- sn(ParseTree,G,N,[o,menino],[]).ParseTree = sn(det(o),subs(menino)), G = masc, N =

sing.yes?- sn(sn(det(o),subs(menino)),G,N,WordList,[]).WordList = [o, menino], G = masc, N = plur.yes?- sn(sn(det(o),subs(menino)),_,_,[o,menino],[]).yes

Page 10: Gramáticas de Cláusulas Definidas

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

LIFE DCGsLIFE DCGs 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 12: Gramáticas de Cláusulas Definidas

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 13: Gramáticas de Cláusulas Definidas

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 14: Gramáticas de Cláusulas Definidas

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 15: Gramáticas de Cláusulas Definidas

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

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

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

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

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

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}))?