1 / 20

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

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)

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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 • 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

  3. DCGs: 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

  4. 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). Exemplo mínimo de DCG Prolog: conversão regra DCG / cláusula Prolog

  5. 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 Exemplo mínimo de DCG Prolog: execução

  6. 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). Regras com argumentos de concordância

  7. 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 = ?? , ??, ??}. Regras com restrições

  8. LIFE 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,...)

  9. 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. Exemplo de LIFE DCG

  10. 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]. Acumuladores em LIFE

  11. 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. Gramáticas EDCG

  12. Análise Morfológica em LIFEVerbos (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"]?

  13. Aná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))?

  14. Análise Sintática de Superfície em LIFE Clause Nominal Nominal VG Pronoun Verb NP PerPron Det Noun Article I see a glitter

  15. Análise Sintática de Superfície em LIFE nominal := {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"]?

  16. Aná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)) --> []?

  17. Aná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))

  18. Aná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))?

  19. Frases 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))?

  20. Frases 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}))?

More Related