Interpretação de Mensagens entre Agentes Exploradores no Mundo do Wumpus Paulo B. Oliva, DI-UFPE www.di.ufpe.br/~pbo 11 de fev. de 1999 Conteúdo Introdução • Gramáticas DCG • Acumuladores Arquitetura de Sistemas PLN • Processamento morfológico • Processamento sintático de superfície • Processamento sintático profundo Conclusão • Dificuldades Demo ao vivo Gramáticas DCG Definite Clause Grammar • Formalismo built-in de Prolog e LIFE para representação de estruturas lingüisticas. • Pode ser usado diretamente para os processamentos morfológico e sintático no parsing de linguagens naturais. • Também pode ser utilizado para os processamentos semântico e pragmático. Gramáticas 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,...) Gramáticas 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 sublinguagem “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. Acumuladores em LIFE Ferramenta poderosa para Programa é traduzido para: simplificar o desenvolvimento de grandes programas loop(0, in_myacc=>A, São usados como difference out_myacc=>A) :- !, succeed. lists. loop(N, in_myacc=>B, Exemplo de uso não lingüístico: out_myacc=>C) :- D=[N|B], loop(N-1, > import(“accumulators”)? in_myacc=>D, > acc_info(myacc, X, In, Out, acc_pred=>(Out=[X|In]))? out_myacc=>C). > pred_info(loop, myacc)? main(N, L) :- loop(N, > loop(0) :-- !? in_myacc=>[], > loop(N) :-- N + myacc, loop(N-1)? out_myacc=>L). > main(N, L) :- loop(N) with myacc([], L)? Gramá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. Arquitetura de Sistemas de PLN Morfologia: flexão e derivação Flexão: • Palavra = lexema + morfema sintático • Análise morfológica baseada em dicionário fornece: categoria sintática das palavras (Parts-Of-Speech Tagging) algumas propriedades do uso sintático da palavra na frase Conjugação, concordância, caso, ex, “Eles deram” x “Ele deu” x “Lhe deram” Derivação: • Palavra = lexema + morfema sintático para mudança de categoria sintática com mesma semântica ex, descobriram x descobrimento • ou palavra = lexema + morfema(s) semânticos aglutinado(s), ex, redesfazer = re+des+fazer? • ou palavra = vários lexemas aglutinado(s) ex, otorino-laringologista = oto+rino+laringo+logista Análise Morfológica em LIFE 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"]? Análise Morfológica em LIFE Verbos (Formação do Particípio) const (syntr(syntcat => main, conjug => @(tense => {past;pastPart}), lex => Lex), semr(semcat=>Semcat)) --> [PVerb], {rverb(lex=>Lex, semcat=>Semcat), PVerb=strcon(Lex,"ed")}? rverb(lex=>"smell", semcat=>percep) --> ["smell"]? rverb(lex=>"walk", semcat=>action) --> ["walk"]? Análise Morfológica em LIFE Flexão dos Substantivos const (syntr(syntcat=>commonN, num=>plural, lex=Lex)) --> [Plural], {Lex = lexNoun1, Plural = strcon(Lex,"s")}? const (syntr(syntcat=>commonN, num=>plural, lex=Lex)) --> [Plural], {Lex = lexNoun2, Plural = strcon(Lex,"es")}? lexNoun1 -> {"pit"; "breeze"; "smell"; "monster"; "gold"; "glitter"}. lexNoun2 -> {"wumpus"; "stench"}. Sintaxe de Superfície: palavras de categorias aberta e fechada Especifica combinação de símbolos em orações Categorias sintáticas dos lexemas • Lexemas classificadas em função das sua distribuição nas orações gramaticais • Categorias abertas: substantivos, verbos, adjetivos, alguns advérbios milhares de membros e constantemente estendidas por neologismos membros com papel essencialmente semântico • Categorias fechadas artigos, pronomes, preposições, conectivas, verbos auxiliares, alguns advérbios, cardinais, ordinais, etc. dezenas de membro e quase nunca estendido membros com papel essencialmente sintático Sintaxe de Superficie: constituintes sintáticos Constituintes sintáticos (ou sintagmas): • orações não são constituídas diretamente de lexemas, • mas de sintagmas que são pelas suas vez constituídas de subsintagmas (ou sub-constituintes) etc. até os lexemas • Sintagmas também tem categorias sintáticas baseadas nas suas distribuições em orações gramaticais • Em termos de teoria das linguagens: categorias sintáticas dos sintágmas = símbolos não terminais lexemas = símbolos terminais Sintaxe de Superficie: propriedades da cláusula tempo: presente, pretérito, imperfeito, futuro etc. modo: • indicativo/subjuntivo/condicional • declarativo/interrogativo/imperativo • principal/subordinada/embutida voz: ativo, passivo com agente, passivo sem agente • ex, “Matei o wumpus”, “O wumpus foi morto (por mim)” extraposição: • ex, “Foi eu quem matou o wumpus”, “Quem matou o wumpus foi eu” polaridade: • ex, “”(Não) matei o wumpus (de jeito nenhum)” Sintaxe de Superficie: propriedades dos nominais referência: • definita/indefinita, genérica/específica • ex, “{um;o;esse;este;aquele} wumpus” numero, gênero: ex, “{um;uns;uma;umas} wumpus{Ø;es;a;as}” contabilidade: ex, * “o wumpus comprou uma gasolina” * “o wumpus comprou carro” 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))? Análise Sintática de Superfície em LIFE Clause Nominal VG Nominal Pronoun Verb NP PerPron Det Noun Article I see a glitter 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"]? 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)) --> []? Sintaxe Profunda: papeis sintáticos x papeis temáticos Algumas alternativas sintáticas mudam o mapeamento entre um elemento de conteúdo C e função sintática (ou papel sintático) S que o expressa, ex, passivo: • []@subj Cheiro@GV [um fedor]@dirObj • [Um fedor]@subj [é cheirada]@GV [por mim]@passiveObj Capturar sistematicamente e abstratamente tais paráfrases sintáticas requer introdução de papeis temáticos associados a um tipo dado de elemento de conteúdo independentemente das alternativas sintáticas, ex, passivo: • []@agent Cheiro@perception [um fedor]@percept • [Um fedor]@percept [é cheirada]@perception [por mim]@agent Sintaxe Profunda: Papeis temáticos Pre-semânticos, ie, • Motivados por regularidades “cross-linguistic” • Independente do domínio enciclopédico (ontologia) de aplicação 5 tipos: • tipo de situação: relação (entidade-propriedade, entidadeentidade), acontecimentos sem agentes, ações (físicas, de percepção, de raciocínio, de sentir emoção) • participantes da situação: agente, paciente, entidade, atributo, • modificadores qualificando a situação: maneira, instrumento, • circunstâncias da situação: lugar, tempo, causa, resultado, • conectores com outras situações: causa, efeito, lista, • Apenas participantes diretamente dependentes do tipo de situação Sintaxe profunda: hierarquia de situações e participantes associados relações: • • • • atribuição: [O wumpus]@carrier é perigoso@attr identidade: [Você]@ided é [quem matou o wumpus?]@ided locativa: [O wumpus]@located está [em [3.2]]@location possessiva: [O ouro]@possessed será [nosso]@possessor eventos: • acontecimento: [A porta da caverna]@paciente fechou • • • • []@paciente Tomei [um susto!]@emoção ação física: []@agente Atirei [minha flecha]@paciente ação de percepção: []@agente Cheiro [um fedor]@percept ação de raciocínio: []@agente Conclui [que o wumpus está em [1,2]]@conhecimento ação de comunicação: []@agente avisei [agente 2]@ouvinte [da morte do wumpus]@mensagem Representação 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)) Representação 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))? 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))? 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}))? Dificuldades, dúvidas, demos,.... That’s all folks!