INTELIGÊNCIA ARTIFICIAL Capítulo 5 Linguagem Natural Computacional MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP Linguagem Natural Computacional LINGUAGEM NATURAL (Aproximação Computacional) O quê ? Compreensão de frases isoladas Compreensão de texto (Ex:polaridade da opinião) Geração de texto (Ex: construção de histórias) Máquinas tradutoras “Text Mining” Aplicações mais Comuns Interface para Q.&A. Systems Acesso a Base de Dados Sistemas Periciais MIEIC/ Linguagem Natural Computacional Page 1 Eugénio Oliveira / FEUP Linguagem Natural Computacional Processo: Transformação Representação em LN Representação executável 1- Aproximação Estatística 2- Aproximação Linguística ANÁLISE SINTÁTICA Programa analisador faz corresponder a cada frase uma árvore de interpretação de acordo com uma gramática definida. Dificuldades A - Complexidade da representação das frases B - Tipo de mapeamento das frases em estruturas computáveis C - Nível de interacção entre os componentes da representação Fonte Eugénio Oliveira / FEUP MIEIC/ Linguagem Natural Computacional Representação A -Complexidade da Representação Análise Superficial ex: ELIZA Grau de dificuldade Semântica restrita ex: SHRDLU Compreensão profunda ex: CHAT-80 B -Tipo de mapeamento 1 --> 1 A:=B+C*D := A + B * C N1 ou 1 N - D Diga-me tudo sobre a última eleição presidencial. Quero conhecer todos os acontecimentos relacionados com a última eleição do presidente. (palavras chave: eleição presidente) MIEIC/ Linguagem Natural Computacional Page 2 Eugénio Oliveira / FEUP Eliza A Sample Dialogue with ELIZA USER: Men are all alike. ELIZA: In what way? USER: They’re always bugging us about something or other. ELIZA: Can you think of a specific example? USER: Well, my boyfriend made me come here. ELIZA: Your boyfriend made you come here. USER: He says I’m depressed much of the time. ELIZA: I am sorry to hear you are depressed. USER: It’s true, I am unhappy. ELIZA: Do you think coming here will help you not to be unhappy? USER: I need some help; that much seems certain. ELIZA: What would it mean to you if you got some help? USER: Perhaps I could learn to get along with my mother. ELIZA: Tell me more about your family. Eugénio Oliveira / FEUP MIEIC/ Linguagem Natural Computacional • • • • • • • • • • • • • • lSHRDLU • • • • • • • • • • . Here is an extract from a famous demonstration of SHRDLU: Person: PICK UP A BIG RED BLOCK. Computer: OK. Person: GRASP THE PYRAMID. Computer: I DON'T UNDERSTAND WHICH PYRAMID YOU MEAN. Person (changing their mind): FIND A BLOCK WHICH IS TALLER THAN THE ONE YOU ARE HOLDING AND PUT IT INTO THE BOX. Computer: BY "IT", I ASSUME YOU MEAN THE BLOCK WHICH IS TALLER THAN THE ONE I AM HOLDING. Computer: OK. Person: WHAT DOES THE BOX CONTAIN? Computer: THE BLUE PYRAMID AND THE BLUE BLOCK. Person: WHAT IS THE PYRAMID SUPPORTED BY? Computer: THE BOX. MIEIC/ Linguagem Natural Computacional Page 3 Eugénio Oliveira / FEUP lSHRDLU • Person: HOW MANY BLOCKS ARE NOT IN THE BOX? • Computer: FOUR OF THEM. • Person: IS AT LEAST ONE OF THEM NARROWER THAN THE ONE WHICH I TOLD YOU TO PICK UP? • Computer: YES, THE RED CUBE. • etc. MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP CHAT-80 • • • • • • • • • • Some yes or no queries Does America contain New_York? Does Mexico border the United_States? Is the population of China greater than 200 million? Does the population of China exceed 1000 million? Is the population of China 840 million? Does the population of China exceed the population of India? Is Spain bordered by the Pacific? Does the Atlantic border Spain? Is the Rhine in Switzerland? Is the United_Kingdom in Europe? MIEIC/ Linguagem Natural Computacional Page 4 Eugénio Oliveira / FEUP CHAT-80 Some more detailed queries What rivers are there? Does Afghanistan border China? What is the capital of Upper_Volta? Where is the largest country? Which countries are European? Which country's capital is London? Which is the largest african country? How large is the smallest american country? What is the ocean that borders African countries and that borders Asian countries? What are the capitals of the countries bordering the Baltic? Which countries are bordered by two seas? How many countries does the Danube flow through? What is the total area of countries south of the Equator and not in Australasia? • • • • • • • • • • • • • MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP CHAT-80 • • • • • • • • • • What is the average area of the countries in each continent? Is there more than one country in each continent? Is there some ocean that does not border any country? What are the countries from which a river flows into the Black_Sea? What are the continents no country in which contains more than two cities whose population exceeds 1 million? Which country bordering the Mediterranean borders a country that is bordered by a country whose population exceeds the population of India? Which countries have a population exceeding 10 million? Which countries with a population exceeding 10 million border the Atlantic? What percentage of countries border each ocean? What countries are there in Europe? MIEIC/ Linguagem Natural Computacional Page 5 Eugénio Oliveira / FEUP Representação C- Interacção entre componentes na Representação da Linguagem Fonte: S SN S SN SV Ana Ana SV V viu SN Ar o SP N SP esquilo V viu com um telescópio SN Ar o N esquilo no parque SP no parque com uma estátua MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP Processamento Processamento de Linguagem Natural Computacional: 1ª Etapa: definição do Léxico Lista das Palavras do vocabulário agrupadas em categorias: Nomes, Pronomes denotando objectos Verbos denotando eventos Adjectivos para modificar Nomes Advérbios modificando Verbos Artigos, Preposições, Conjunções 2ª Etapa: Combinação das Palavras em Frases Análise Sintáctica usando algoritmos de Análise (parsing) e recuperando a estrutura da frase dada uma gramática. MIEIC/ Linguagem Natural Computacional Page 6 Eugénio Oliveira / FEUP Processamento Compreensão de Frases isoladas 0) Análise lexicográfica i) Sintaxe ii) Semântica iii) Pragmática i) transformação da frase numa estrutura de relacionamento entre as palavras ii) mapear a estrutura nos objectos do domínio e nos procedimentos requeridos iii) inferência contextual ex: tem horas? Identificação de Padrões ex: ELIZA (programa simulando um Psiquiatra) frases por defeito quando não entende a anterior ex: ("Como?"; "Porquê?"; "Fala-me mais disso") usa Esqueletos de frases com variáveis preenchidas com palavras da frase anterior ex: P: "o meu livro é bom". D: "porquê o seu livro é bom?") Não há compreensão mas mapeamento directo Eugénio Oliveira / FEUP MIEIC/ Linguagem Natural Computacional Processamento PROCESSO DA COMPREENSÃO DA LINGUAGEM NATURAL FRASE LISTA DE PALAVRAS Reconhece PALAVRAS DICIONARIO ANÁLISE LEXICAL categorias morfológicas ANÁLISE SINTÁTICA rejeição REGRAS GRAMATICAIS rejeição ANÁLISE SEMÂNTICA FOCALIZAÇÃO (quantificadores) conhecimento rejeição de senso comum EXPRESSÃO LÓGICA EXECUÇÃO BASE DE DADOS RESPOSTA MIEIC/ Linguagem Natural Computacional Page 7 Eugénio Oliveira / FEUP Gramáticas Gramáticas Livres de Contexto: Cada regra gramatical BNF só tem um símbolo não terminal do lado esquerdo, implicando que a expansão desse não terminal não pode ser influenciado por quaisquer símbolos que lhe estejam adjacentes. Mas tal não acontece com as gramáticas das Linguagens Naturais. Daí que precisemos de mais Regras para a análise. Analisador Sintático implemanta a Gramática com a BNF: MAIÚSCULAS = símbolos não terminais; F SN SV minúsculas = símbolos terminais SN a SN1 SN SN SN1 SN1 SN1 FADJ N FADJ [ ] | ADJ FADJ N SV V SV V SN pedro N pedro | rapaz | bola ADJ pequeno | grande V chuta | corre Mapeamento de frase correcta em uma estrutura MIEIC/ Linguagem Natural Computacional F SV V chuta SN a SN1 FADJ N ADJ bola pequena Eugénio Oliveira / FEUP Gramáticas ANÁLISE SEMÂNTICA Programas para extraír significado da estrutura computacional obtida pelo “Parser”. Aproximações simplificadas: Gramáticas Semânticas: Combinam nas mesmas Regras Gramaticais Conhecimento sintático e Conhecimento semântico (i.e. o significado das palavras) Gramáticas de Caso: Aproveitam a funcionalidade do reconhecimento de “casos” em certas línguas naturais MIEIC/ Linguagem Natural Computacional Page 8 Eugénio Oliveira / FEUP Gramáticas ANÁLISE SEMÂNTICA Gramáticas SEMÂNTICAS: combinam nas regras gramaticais, conhecimento sintático e conhecimento semântico (o significado das palavras) ex: sistema LADDER que permite acesso a uma Base de Dados sobre a Marinha LADDER <FRASE> --> Qual é <PROPRIEDADE> do <NAVIO>? <FRASE> --> Quem é <AGENTE> do <NAVIO>? ... <PROPRIEDADE> --> o <PROP> | a <PROP> <PROP> --> comprimento | tipo | largura | tonelagem <AGENTE> --> o <AG> | <AG> <AG> --> comandante | imediato | construtor | dono . . . Vantagens deste processo restrito de interpretação de Linguagem Natural para aplicações simples: • feita a interpretação, o resultado pode ser usado sem mais processamento • as ambiguidades sintáticas desaparecem por não fazerem sentido semanticamente Inconveniente: poderão ser necessárias muitíssimas regras, o que torna a interpretação demorada. MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP Gramáticas Gramáticas de “Casos” (Case Grammars) As regras gramaticais descrevem a sintaxe da Linguagem mas as Estruturas entretanto criadas correspondem a relações semânticas Casos: ao Verbo estão associadas Regras que são relevantes para a interpretação Exs: (um Verbo terá associados) Agente (A) Instrumento (I) Dativo (D) (o que é afectado pela Acção) Objecto (O) ... ... ... MIEIC/ Linguagem Natural Computacional Page 9 Eugénio Oliveira / FEUP Gramáticas Duas Frases com a mesma semântica: 1) “Eva joga a bola” 2) A bola é jogada pela Eva Árvores sintácticas respectivas: F SN Eva F SV V joga Dificuldade: SN SN SV Ar Ar N a bola a N V bola SP é jogada P pela N Eva Estruturas sintácticas diferentes para o mesmo valor semântico é inconveniente Eugénio Oliveira / FEUP MIEIC/ Linguagem Natural Computacional Gramáticas - Em ambos os casos a tradução (interpretação) na Gramática de Casos é: (jogar(Agente(Eva)) Sujeito é Agente (Dativo(bola)) ). - Sejam agora as duas frases: 1) a mãe cozinhou por 3 horas; 2) a galinha cozinhou por 3 horas 1) (cozinhou(Agente(Mãe)) (tempo(3horas)) ). Sujeito é Agente F Ar SN N V SV a mãe cozinhou SP P por 1) F Ar SN N a galinha Qt N 3 horas cozinhou(Objecto(galinha)) Sujeito não é Agente mas Objecto! (tempo(3 horas)) ). SV V SP cozinhou P Qt N V: conhecido o Verbo conhecemos os casos por 3 horas D: A semântica não segue a sintaxe MIEIC/ Linguagem Natural Computacional Page 10 Eugénio Oliveira / FEUP Gramáticas Novas abordagens ao Processamento Computacional da LINGUAGEM NATURAL • BNF usa “strings” sem atender aos seus significados. • É estritamente Livre do Contexto • É necessário Formalismo que também atenda ao significado das “strings” e que descreva Gramáticas Sensíveis ao Contexto • Usar Lógica de 1ª Ordem para representar e manipular “strings” e seu SIGNIFICADO MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP Gramáticas Símbolos Não terminais tornam-se Predicados de um Argumento. Serão V ou F EX: BNF F SN SV Nbola|… LÓGICA DE 1ª ORDEM SN(s1) Λ SV(s2) F(append(s1,s2)) (s=“bola” V … V …) N(s) Resulta uma GRAMÁTICA LÓGICA •O Formalismo das DCGs (Definite Clause Grammars) representa Gramáticas Lógicas restritas às Cláusulas Definidas. •Mas a notação também é mais complicada. MIEIC/ Linguagem Natural Computacional Page 11 Eugénio Oliveira / FEUP D C Gs GRAMÁTICA DAS CLAUSULAS DEFINIDAS (Definite Clause Grammars DCG's) Seja o seguinte conjunto de regras gramaticais: frase--> sintagma_nominal, sintagma_verbal. sintagma_nominal --> artigo, nome. sintagma_verbal --> verbo, sintagma_nominal. sintagma_verbal --> verbo. artigo --> [a]. --> equivale a 'toma a forma de' artigo --> [o]. dentro de [ ] estão os nome --> [bola]. símbolos terminais nome --> [jogador]. verbo --> [chuta]. As regras verificam se uma frase pertence à Linguagem Eugénio Oliveira / FEUP MIEIC/ Linguagem Natural Computacional D C Gs Frase sintagma_nominal artigo a sintagma_verbal nome verbo mulher escreve sintagma_nominal artigo a MIEIC/ Linguagem Natural Computacional Page 12 nome carta Eugénio Oliveira / FEUP D C Gs Escrita do Analizador em Prolog Queremos verificar se a sequência de palavras X é uma frase da Linguagem : frase(X):- append(Y,Z,X), sintagma_nominal(Y), sintagma_verbal (Z). sintagma_nominal(X):- append(Y,Z,X), artigo(Y), nome(Z). sintagma_verbal(X):- append(Y,Z,X), verbo(Y), sintagma_nominal (Z). sintagma_verbal (X):- verbo (X). artigo ([a]). artigo ([o]). nome ([carta]). nome ([mulher]). verbo ([escreve]). verbo ([canta]). MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP D C Gs Mas o programa é ineficiente! ex: -frase ([a, mulher,escreve,a,carta]). Este é o objectivo a provar. O predicado "append" vai instanciar sucessivamente Y e Z devido ao retrocesso ("backtracking") por falhanço. Y= [ ] , Z=[a, mulher,escreve,a,carta] Y= [a], Z=[mulher,escreve,a,carta] Y=[a, mulher], Z=[escreve,a,carta] etc.... MIEIC/ Linguagem Natural Computacional Page 13 Eugénio Oliveira / FEUP D C Gs Passa a considerar-se em argumentos não só a lista das palavras entradas como também a lista das palavras que restam depois do predicado '“consumir" o nº de palavras necessárias. ex:sintagma_nominal( [a, mulher,escreve,a,carta], [escreve,a,carta] ). sintagma_nominal ( [a, carta, canta], [canta] ) . então a nova definição para sintagma_nominal é: sintagma_nominal (X,Y):- artigo (X,Z), nome (Z,Y). MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP D C Gs Reconhecimento dos símbolos terminais regras exprimindo o facto de um artigo poder estar à frente de um lista de palavras: artigo([o |X],X). artigo ([a|X],X). o que equivale a : artigo --> [o]. artigo --> [a]. Na nova gramática a pergunta a fazer será: ? - frase ([a,mulher,escreve,a,carta],[]). MIEIC/ Linguagem Natural Computacional Page 14 Eugénio Oliveira / FEUP D C Gs Regras Gramaticais em PROLOG (DCGs): Usa-se “-->" 'toma a forma de' que é um operador reconhecido pelo Prolog. Esta notação é traduzida para as cláusulas Prolog anteriores. ex: frase -->frase_nominal,frase_verbal. (argumentos desnecessários)!!! frase_nominal --> artigo, nome. frase_verbal --> verbo, frase_nominal. artigo --> [o]. artigo --> [a]. nome --> [rapaz]. nome --> [rapariga]. Dicionário nome --> [ana]. nome --> [bola]. nome --> [carta]. verbo --> [chuta]. verbo --> [escreve]. MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP D C Gs ?- frase([a, ana, escreve, a, carta],[]) resposta--> yes. MAS. . . ?- frase ([a, carta, escreve, a, ana],[]). resposta--> yes ?- frase ([a, carta, escreve, o, ana], []). resposta --> yes . Podemos juntar argumento extra! ex: frase--> frase_singular. frase--> frase_plural. equivale a: frase--> frase(X). em que X indica singular ou plural MIEIC/ Linguagem Natural Computacional Page 15 Eugénio Oliveira / FEUP D C Gs Nova Gramática mais completa (concordância do número) frase--> frase (X). frase(X)-->sintagma_nominal(X), sintagma_verbal(X). sintagma_nominal(x) --> quantificador(x), nome(X) sintagma_verbal(X) --> verbo(X). sintagma_verbal(X)-->verbo(X), sintagma_nominal(_). nome (singular) --> [ana]. nome (singular) --> [carta]. nome (plural) --> [raparigas]. nome (plural) --> [cartas]. quantificador (singular) --> [o]. quantificador (plural) --> [os]. quantificador (plural) --> [as]. quantificador (singular) --> [a]. verbo (singular) --> [escreve]. verbo (singular) --> [joga]. verbo (plural) --> [escrevem]. verbo (plural) --> [jogam]. Eugénio Oliveira / FEUP MIEIC/ Linguagem Natural Computacional D C Gs podem também introduzir-se argumentos para a concordância do género (além do número). Outro argumento "extra" muito importante será um contendo a árvore de análise com a estrutura da frase. ex: A ana escreve a carta gera a estrutura: frase ( sintagma_nominal( sintagma_verbal( ) ), quantificador (a), nome (ana) verbo (escreve), sintagma_nominal( ) ) MIEIC/ Linguagem Natural Computacional Page 16 quantificador(a), nome (carta) Eugénio Oliveira / FEUP D C Gs Para meter em argumento esta estrutura, estrutura além do número, número as primeiras regras viriam: frase(X, frase (SN, SV) )--> sintagma_nominal (X, SN), sintagma_verbal (X, SV). … … … sintagma_verbal(X, sintagma_verbal(V))-->verbo(X,V). sintagma_verbal (X, sintagma_verbal (V, SN,))--> verbo(X,V), sintagma_nominal(_,SN). nome (singular, nome(ana))-->[ana]. verbo (singular, verbo(escreve))--> [escreve]. Não esquecer que quando o Prolog interpreta "--> -->" adiciona automaticamente 2 argumentos mais. frase(X, frase(SN,SV)) --> sint_nom(X,SN), sint_verb(X, SV). Transforma-se em: frase(X, frase(SN,SV), S0, S) :- sint_nom(X, SN, S0, S1), sint_verb(X, SV,S1,S). Logo devemos escrever o objectivo : ?- f rase (X,Est X,Est,, [a, ana ana,, escreve, a, carta], [ ]). MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP D C Gs • “SobreSobre-Geração” Geração” das Gramáticas F SN SV | … SN Ar N | N | Prn SV V SN Prn “eu” | “tu” | …. | “me” | “te” | … | “mim” | “ti” |… Pode reconhecer frases incorrectas (overgeneration) como respeitando aquela Gramática: Ex: “tu lês livros” a Gramática reconhece e está correcto. Pronome é Sujeito ( Nominativo) “me lês livros” a Gramática reconhece e está incorrecto. Pronome é Objecto (Acusativo) Vamos AUMENTAR a Gramática (incluir parâmetros nos símbolos não-terminais): 1ª Hipótese: Maior número de Regras da Gramática: F SNS SV | … SNS Ar N | N | PrnS SND Prno PrnS “eu” | “tu” | …. Prno | “me” | “te” | … A Gramática G0 contendo: MIEIC/ Linguagem Natural Computacional Page 17 Eugénio Oliveira / FEUP D C Gs 2ª Hipótese: Regras da Gramática aumentadas (Formalismo Lógico mas não prolog): F SN (Sujeito) SV | … Ex: “ela leu para ti” SN(caso) Ar N | N | Prn(caso) F SV V SN(Objecto) | V SP SN(Sujeito) SV SP Prep SN(Dativo) Prn(Sujeito) V SP Prn(Sujeito) “eu” | “tu” | …. ela leu Prep SN(Dativo) Prn(Objecto) “me” | “te” | … para ti Prn(Dativo) “mim” | “ti” | … Prep “a” | “ante” | “após” |… |”para” |… V “leu” | … DCG MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP D C Gs Podemos ainda fazer testes semânticos extra ! Se quisermos adicionar sub-objectivos às regras gramaticais em prolog mas que não sejam "transformados", ou seja aos quais não vão ser automaticamente adicionados 2 argumentos extra então usam-se as "chavetas" { } (ajuda à sub-categorização dos verbos) ex: verbo (s, N, verbo(rematar)) --> [remata], { humano (N) }. humano (jogador). que é um teste semântico extra ... ... ... ou uma táctica para adicionar novas palavras ao dicionário: Se em vez de termos: nome (singular, nome (bola)) --> [bola]. %(etc) tivermos a regra mais geral: nome (Num, nome (N)) --> [N], {é_ nome(N, Num)}. podemos juntar: é_nome (bola, singular). é_nome (baliza, singular). é_nome (bolas, plural). . . . MIEIC/ Linguagem Natural Computacional Page 18 Eugénio Oliveira / FEUP D C Gs- Semântica Semântica em aritmética é composicional, i.e., depende só das subfrases: “10 + 10 “ significa resultado = 20. • Mas uma frase em Linguagem Natural como: “na base 2, 10+10” já teria outro significado, dado o contexto todo da frase. • Por vezes nem só a interpretação semântica da frase, desambigúa. EX: “Ela foi ao parque com a estátua…” • A semântica de “maria gosta de cinema” é fácil de construir através da composição semântica do predicado SV: gosta(X,cinema) e do sujeito SN: (maria). REGRA: Um SN com semântica Sujeito, seguido de SV com semântica Relação, dá uma Frase cuja semântica resulta de aplicar rel a suj F(rel(suj)) --> SN(suj) SV(rel) Ex: gosta(maria,cinema) Eugénio Oliveira / FEUP MIEIC/ Linguagem Natural Computacional D C Gs- Semântica F( Gosta(maria,cinema) ) F(rel(suj)) --> SN(suj) SV(rel) SV(rel(suj)) --> V(rel) SP(suj) SP(suj) -- > Pp SN(suj) SN(suj) --> N(suj) N(Maria) --> maria V(x y Gosta(x,y))-->gosta N(Cinema) --> cinema Pp(de) -- > de SN(maria) SV(x Gosta(x,cinema)) SP(cinema) N(maria) V(x y Gosta(x,y)) Pp(de) SN(cinema) N(cinema) de de maria gosta Os argumentos representam a semântica. cinema Aqui estamos a usar formalismos lógicos Árvore de Análise sintática com interpretação semântica mas não Prolog Tempo Ex: “eva gostou de adão” e “maria gosta de cinema” V(x y e Gostar(x, y) Λ Tempo(e, Agora) ) --> gosta V(x y e Gostar(x, y) Λ Tempo (e, Antes) ) --> gostou MIEIC/ Linguagem Natural Computacional Page 19 Eugénio Oliveira / FEUP D C Gs • Mas : “Todos os professores recebem salário” Vp Professor(p) →∃ Salário(s) ∩∃ e ∈ Recebem(p,s) ∩ Tempo(Agora,e) Representação: Sintática : SN , SV Semântica: Todos os professores SN (Vp Professor(p)→ ...) recebem salário SV (∃ Salário(s) ∩ ∃ e ∈ Recebem(...,s) ∩Tempo(Agora,e) semântica de F é a de SN com SV inserido, o qual tem uma variável do SN MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP D C Gs Não serve aquela composição semântica rel(suj). Talvez suj(rel) É complicado porque a estrutura semântica aparece como diversa da estrutura sintática. Para evitar essa confusão criam-se formas intermédias (entre a sintáxe e a semântica) de representação ditas quase-lógicas que posteriormente são traduzidas para a lógica. Ex: SV(sem) - -> V(sem) SV(rel(suj)) - -> SV(rel) SN(suj) SV(sem1(sem2)) - -> SV(sem1) Adjectivo(sem2) SV(sem1(sem2)) - -> SV(sem1) Preposição(sem2) MIEIC/ Linguagem Natural Computacional Page 20 Eugénio Oliveira / FEUP D C Gs Gramática com Semântica numa forma “quase-lógica” F(rel(suj)) --> SN(suj) SV(rel) F(conj(sem1,sem2)) --> F(sem1) Conjuntiva(conj) F(sem2) SN(sem) --> Pronome(sem) SN(sem) --> N(sem) SN(x y sem(x)) --> Artigo(x) N(sem) SN(x y suj Λ rel(x)) --> SN(x y suj) Pp(rel) SN(x y suj Λ rel(x)) --> SN(x y suj) Relativo(rel) SV(sem) - -> V(sem) SV(rel(suj)) - -> SV(rel) SN(suj) SV(sem1(sem2)) - -> SV(sem1) Adjectivo(sem2) SV(sem1(sem2)) - -> SV(sem1) Preposição(sem2) Relativo(sem) --> que SV(sem) Pp(x rel(x,suj)) --> Preposição(rel) SN(suj) Eugénio Oliveira / FEUP MIEIC/ Linguagem Natural Computacional D C Gs Transformações Semânticas Depois da compreensão sintáctica vem a execução que necessita da semântica A Técnica 3BQ "three branched Quantifiers" foi desenvolvida por V. Dahl e A. Colmerauer. (Quantificadores com 3 ramos) fórmula lógica --> Variável quantificador Sintagma Nominal Sintagma Verbal ex:O professor chumba os alunos que não aprendem todo (X, e (aluno(X), not(aprende(X)) ), chumba(professor, ) X) variável quantificador sintagma nominal MIEIC/ Linguagem Natural Computacional Page 21 sintagma verbal Eugénio Oliveira / FEUP D C Gs - Outra Técnica derivada: DCW "Definite Closed-World Clauses" D. Warren F. Pereira Faz-se a seguinte formalização (respostas a perguntas): H ⇐ G1 & G2... Literal (resposta) ⇐ condições ex:Quais os oceanos que banham pelo menos 3 países europeus? resposta(0) ⇐ oceano(O) & card(P: país (P) & europeu(P) & banha (O,P)) > 2 definem-se operadores e predicados a serem utilizados do lado direito da claúsula. MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP D C Gs OPERADORES: P&Q --> conjunção existe(X,P) --> quantificador existencial not (P) --> negação setof(X,P,S)-->conjuntos dos X's tais que P é verdadeiro findall/3 outros predicados "compostos": todo(X, P => Q) = not (existe(X, P & not(Q))) numero_de(X, P, N) = existe(S, setof(X,P,S) & card(S,N) & N>0) ("number of") Cada determinante dá origem a um quantificador com uma variável e 2 predicados relativos a essa variável: Domínio (D) e Âmbito (A) MIEIC/ Linguagem Natural Computacional Page 22 Eugénio Oliveira / FEUP D C Gs - Exemplos: - um, o, algum, nenhum --> existe (X, D, & A) > algum professor é português existe (X, professor (X), português (X)). > Não há rios no deserto not (existe(X, rio (X), em (X, deserto))) . - Todo, qualquer --> not (existe (X, D & not (A))) > o homem habita todos os continentes not (existe(X, continente(X), not(habita(homem, . X)))) > Quantos países exportam petróleo? resposta (N): - numero_de (X, (país (X), exportam (X, petróleo)), N). MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP Aplicação Da prática…… verifica_frase(frase(SN,SV)) --> sintagma_nominal(SN,N,Sujeito), %N é o número sintagma_verbal(SV,N,Sujeito,Accao,Objecto), { concorda_frase(Accao,Sujeito,Objecto),nl }. MIEIC/ Linguagem Natural Computacional Page 23 Eugénio Oliveira / FEUP Aplicação INTERFACE com um SUBSUB-CONJUNTO DE LINGUAGEM NATURAL (PORTUGUÊS) ESTRUTURA DO PROGRAMA ( FRASE gramport ) : LISTA DAS PALAVRAS REGRAS SINTÁTICAS RESPOSTA DICIONÁRIO REGRAS SEMÂNTICAS BASE DE DADOS MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP Aplicação Exemplos de predicados de um Programa (parcial) para análise de Frases de um sub-conjunto do Português (Atenção: faltam muitas cláusulas)!! frase --> sn_1(N), sv(_,N,N1,V), {write(concordo)}. frase --> frase_int(PI), frase_perg(PI). … sn_1([N1]) --> frase_n_1(N1). sn_1([N1|R]) --> frase_n_1(N1), [e], sn_1(R). /* a eva mora no paraíso*/ /* Quem mora no paraíso*/ /* a eva….*/ /* a eva e o adão …*/ frase_n_1(N) --> artigo(N,A), nome_adj(N). frase_n_1(N) --> artigo(N,A), nome_adj(N), relativo, sv([N],[N1],V), { analisa_af([N],[N1],V) }. /* a eva que conhece o adão …*/ … nome_adj(N) --> nome(N). /* eva */ nome_adj(N) --> nome(N), adj(N,Adj). /* mulher bonita */ MIEIC/ Linguagem Natural Computacional Page 24 Eugénio Oliveira / FEUP Aplicação frase-_int(que) --> [que]. frase-_int(que) --> [o,que,é,que]. frase-_int(quais) --> [quais]. frase-_int(quantos) --> [quantos]. frase_int(quem) --> [quem]. frase_perg(PI) --> sv(…),…, {analisa_int(V,N,L), resposta(L,PI)}. /*quantos são os alunos*/ sv(L,N,N1,V) --> frase_verbo(L,N,N1,V). /*ex:N=eva, N1=adão, V=conhece */ sv(L,N,N1,V) --> frase_verbo(L1,N,N1,V), [e], /* Quem mora e */ sv(L2,N,N2,V1), /* trabalha no porto */ {intersecta(L1,L2,L)}. frase_verbo(L,N,N1,V) --> v_adv(L,N,N1,Adv,V), sn_2(N1), {analisa_af(N,N1,V) ; write(“não concordo”)}. frase_verbo(L,N,N1,V) --> …. Eugénio Oliveira / FEUP MIEIC/ Linguagem Natural Computacional Aplicação /* Esta parte do Programa é Prolog normal! Usa o operador ‘:-’ */ resposta(L,PI):- PI = = quantos,!, contar(L,0,Q), write(Q). contar([],Q,Q). contar([P|R],S,Q):- nonvar(P), NS is S+1, contar(R,NS,Q),!. analisa_af(N,N1,_-_-mora):- vmora(N,N1,L). /* verificação de afirmação de morar*/ vmora([],_,L). vmora([_-_-X|R], _-_-Y, Z):- mora(X,Y), vmora(R,_-_-Y,[X|Z]). mora(X,Y):- humano(X), local(Y), l_mora(X,Y). l_mora(eva,paraíso). l_mora(adão,paraíso). analisa_int(_-_-V,_-_-X, L):- verifica_todos(V,X,L). verifica_todos(sao,X,L):- setof(X1,ser(X1,X),L). verifica_todos(mora,X,L):- setof(X1,l_mora(X1,X),L). MIEIC/ Linguagem Natural Computacional Page 25 % ser(rui,aluno). Eugénio Oliveira / FEUP Aplicação /*EXTRACTO DO DICIONÁRIO */ artigo(m-s-N, m-s-o) --> [o]. pronome(m-s-N, m-s-este) --> [este]. adj(m-s-N, m-s-branco) --> [branco]. preposição(_-_-V, m-s-N, m-s-no) --> {local_no(N), lista_no(V)}, [no]. nome(m-s-paraíso) --> [paraíso]. verbo(I,N,Vb) --> [Vbs], {numero(N,Nu), l_verbos(Nu,Vb,Vbs)}. Relativo --> [que]. lista_no(V):- (V= =mora; V= = moram). l_verbos(p,_-_-ser, são). l_verbos(s,_-_-morar, mora). l_verbos(p,_-_-morar, moram). MIEIC/ Linguagem Natural Computacional Eugénio Oliveira / FEUP Aplicação /*Exemplos de Frases que sucedem (são compreendidas) */ /* na gramática GRAMPORT */ Quem mora em Lisboa? Quem mora no Porto? Quem conhece a Ana? A Maria bebe chá. A Maria que mora em Lisboa bebe chá. O Rui mora em Liboa. Quantos são os alimentos? Quais são os alimentos? /*Exemplos de Frases que são detectadas como erradas*/ O Rui mora na Lisboa Maria bebe a chá. O navio bebe chá. /* Não existindo na BD, falham*/ A maria bebe vodka. MIEIC/ Linguagem Natural Computacional Page 26 Eugénio Oliveira / FEUP