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!
Download

pln-interp.lf