PowerLoom Anderson Carlos D. Sanches www.ime.usp.br/~anderson anderson@ime.usp.br

  • View
    216

  • Download
    1

Embed Size (px)

Transcript

  • PowerLoomAnderson Carlos D. Sancheswww.ime.usp.br/~andersonanderson@ime.usp.br

  • IntroduoO que o PowerLoom? o sucessor do sistema de representao de conhecimento Loom. Ele uma linguagem e um ambiente para a construo de aplicaes inteligentes.http://www.isi.edu/isd/LOOM/PowerLoom/Foi escrito em STELLA (Strongly Typed, Lisp-like Language)

  • ProgramaoViso geralVocabulrioConceitos bsicosUma pequena aplicao

  • Viso GeralComandos bsicos do PowerLoomClasses primitivas e definidasAprendendo a responder questes probabilsticas por meio de redes neuraisUm Exemplo Simples

  • VocabulrioClassTipos de dadosSlotCada slot uma funo polimrfica (deffunction) ou relao binria (defrelation) que podem ser definidasAssert (afirmao)Cria instncias das classes

  • Os Fundamentos: definio simples, afirmao, recuperao, e retrao(in-package STELLA)Opcional e ignorada pelo PowerLoom. Apenas para dizer a interface do Emacs que pacote usar para este arquivo

  • Mdulos(defmodule /PL-KERNEL/PL-USER/BASICS)|MDL|/PL-KERNEL-KB/PL-USER/BASICSMdulos so usados para separar espaos de nomes (classes, funes)PL-USER o mdulo padro do PowerLoom.Cada mdulo pode ver todos os nomes e objetos associados de todos os seus ancestrais.Um mdulo pode herdar nomes e prover suas prprias definies para eles.

  • Herana Mltipla nos Mdulos(defmodule "BASICS :includes ("PL-USER"))|MDL|/PL-KERNEL-KB/PL-USER/BASICS

  • Comeando(in-module BASICS)Para comearmos a preencher o mdulo BASICS(clear-module BASICS)Remove qualquer informao acumulada de execues anteriores(reset-features)|i|(:EMIT-THINKING-DOTS :JUST-IN-TIME-INFERENCE)Reajustar as caractersticas para o comportamento padro

  • Selecionando o Dialeto(in-dialect KIF):KIFDeclara o dialeto de lgica assumido pelo interpretador. Podem haver vrios dialetos num mesmo arquivo.

  • Ajuda(help)Lista todos os comandos disponveis

    (help comando)Ajuda sobre determinado comando

    (demo)Alguns tutoriais

  • Definindo Novos Tipos (Conceitos ou Classes) (defconcept PERSON (?p):documentation "The class of human beings.")PERSONDiferenas entre classes e conceitos so mnimas.

  • Definindo Relaes e Funes(defrelation happy ((?p PERSON)))HAPPY(deffunction age ((?p PERSON)) :-> (?a INTEGER))AGE

  • Fazendo Afirmaes(assert (Person Fred))(PERSON FRED)(assert (Person Joe))(PERSON JOE)

  • Examinando a Base de ConhecimentoH duas formas:Fazendo perguntas com respostas verdadeiro ou falso com o comando askRecuperando as instncias que satisfazem um predicado particular com retrieve

  • Perguntando Base de Conhecimento(ask (happy Fred))Nada aparece. Por que?No dizer nada a frmula que o PowerLoom diz eu no sei.

  • Vamos dizer que Fred feliz(assert (happy Fred))(HAPPY FRED)Colocamos o slot happy da classe Person na instncia Fred como verdadeiro.(ask (happy Fred))TRUE

  • Retrieve(retrieve all (?x PERSON) TRUE)(FRED JOE)(retrieve all (?x PERSON))No necessrio escrever o TRUE(retrieve all ?x (Person ?x))Um pouco mais lento, pois retorna todas as instncias e filtra as que so da classes Person

  • Pegando apenas uma instncia(retrieve (?x PERSON)) ou (retrieve 1 (?x PERSON))(FRED)(retrieve)(FRED JOE)

  • Definindo uma idade para Fred(assert (= (age Fred) 35))(= (AGE FRED) 35)Vamos perguntar se ele tem 35 anos?(ask (= (age Fred) 35))TRUEQuantos anos Fred tem?(retrieve (?x INTEGER) (= ?x (age Fred)))(35)

  • Fred fez aniversrio, vamos retirar sua idade(retract (= (age Fred) 35))(= (AGE FRED) (AGE FRED))|= (retrieve (?x INTEGER) (= ?x (age Fred)))(= (AGE FRED) (AGE FRED))No sabemos mais quantos anos Fred tem.

  • Vamos por 36|= (assert (= (age Fred) 36))(= (AGE FRED) 36)|= (retrieve (?x INTEGER) (= ?x (age Fred)))(36)

  • Modificando diretamentePara funes com apenas um valor, possvel modificar diretamente.|= (assert (= (age Fred) 42))(= (AGE FRED) 42)|= (retrieve (?x INTEGER) (= ?x (age Fred)))(42)

  • Conhecendo tudo sobre Fred|= (all-facts-of Fred)|i|((PERSON FRED) (HAPPY FRED) (= (AGE FRED) 42))

  • Apagando todas as informaes sobre Fred|= (retract-facts-of Fred)|= (all-facts-of Fred)|i|()

  • Argumentando com classes primitivas e definidasAntes de trabalhar|= (in-package "STELLA")|= (defmodule "/PL-KERNEL/PL-USER/CLASSES")|MDL|/PL-KERNEL-KB/PL-USER/CLASSES|= (in-module "CLASSES")|= (clear-module "CLASSES")|= (reset-features)|i|(:EMIT-THINKING-DOTS :JUST-IN-TIME-INFERENCE)|= (in-dialect :KIF):KIF

  • Comeando|= (defconcept PERSON (?p) :documentation "The class of human beings.")PERSON|= (defrelation happy ((?p PERSON)))HAPPY|= (deffunction age ((?p PERSON)) :-> (?age INTEGER))AGE|= (deffunction friends ((?p PERSON)) :-> (?ps SET))FRIENDS

  • Instncias dos servios armados|= (defconcept ARMED-SERVICE (?s) :documentation "The class of armed services, for example, the US Navy.")ARMED-SERVICE|= (assert (Armed-Service US-Army))(ARMED-SERVICE US-ARMY)|= (assert (Armed-Service US-Navy))(ARMED-SERVICE US-NAVY)|= (assert (Armed-Service US-Airforce))(ARMED-SERVICE US-AIRFORCE)

  • Criando uma subclasseUma subclasse de PersonPodemos tambm documentar slots individuais.|= (defconcept WARFIGHTER (?p PERSON) :documentation "People involved in military operations.")WARFIGHTER|= (deffunction service ((?p WARFIGHTER)) :-> (?s ARMED-SERVICE) :documentation "The armed service to which a warfighter belongs.")SERVICE

  • Outra subclasse de PersonS possvel ser civil se no for militar|= (defconcept CIVILIAN (?p PERSON) :documentation "People who are not warfighters." : (and (PERSON ?p) (not (Warfighter ?p))))CIVILIAN|= (defconcept ARMY-PERSON (?p WARFIGHTER) : (and (WARFIGHTER ?p) (= (service ?p) US-Army)))ARMY-PERSON

  • Definindo NAVY-PERSON e Criando Algumas Instncias|= (defconcept NAVY-PERSON (?p WARFIGHTER) : (and (WARFIGHTER ?p) (= (service ?p) US-Navy)))NAVY-PERSON|= (assert (Warfighter Buck))(WARFIGHTER BUCK)|= (assert (= (service Buck) US-Army))(= (SERVICE BUCK) US-ARMY)|= (assert (Person John))(PERSON JOHN)

  • Podemos Usar um member-of para Compor a Lista de amigos|= (assert (member-of Buck (friends John)))(MEMBER-OF BUCK (FRIENDS JOHN))|= (assert (member-of John (friends Buck)))(MEMBER-OF JOHN (FRIENDS BUCK))|= (assert (Person Judy))(PERSON JUDY)

  • Perguntando sobre JudyComo at agora ns s informamos que Judy uma pessoa, as consultas seguintes no tem resposta.|= (ask (Warfighter Judy))|= (ask (Civilian Judy))

  • Informando sobre Judy|= (assert (Warfighter Judy))(WARFIGHTER JUDY)|= (assert (= (service Judy) US-Navy))(= (SERVICE JUDY) US-NAVY)Mas NAVY-PERSON no era um Warfighter com service = US-NAVY? Vamos perguntar se Judy NAVY-PERSON?|= (ask (NAVY-PERSON Judy))TRUE

  • Questes sobre JudyE se perguntarmos se ela CIVILIAN?|= (ask (Civilian Judy))Nada respondido. Mas e se perguntarmos a negativa?|= (ask (not (Civilian Judy)))TRUE

  • E Se Fizermos o Oposto?|= (assert (Civilian Blimpy))(CIVILIAN BLIMPY)|= (ask (Civilian Blimpy))TRUE|= (ask (Warfighter Blimpy))Nada respondido|= (ask (not (Warfighter Blimpy)))TRUE

  • Vamos Declarar Outro Warfighter|= (assert (Warfighter Fred))(WARFIGHTER FRED)|= (assert (= (service Fred) US-Airforce))(= (SERVICE FRED) US-AIRFORCE)

  • Vamos Consultar as Instncias|= (retrieve all (?p PERSON))(BUCK JUDY FRED BLIMPY JOHN)|= (retrieve all (?w WARFIGHTER))(BUCK JUDY FRED)|= (retrieve all (?p PERSON) (not (Civilian ?p)))(BUCK JUDY FRED)|= (retrieve all (?p PERSON) (not (Warfighter ?p)))(BLIMPY)|= (retrieve all (?p CIVILIAN))(BLIMPY)|= (retrieve all (?w ARMY-PERSON))(BUCK)|= (retrieve all (?w NAVY-PERSON))(JUDY)

  • Consultando as Instncias de Duas Classes na Mesma Consulta|= (retrieve all (?w WARFIGHTER) (or (= (service ?w) US-Navy) (= (service ?w) US-Airforce)))(JUDY FRED)Ou assim:|= (retrieve all (?w WARFIGHTER) (member-of (service ?w) (setof US-Navy US-Airforce)))(FRED JUDY)

  • Consultando Todas as Pessoas e seus amigos|= (retrieve all ((?p PERSON) (?f PERSON)) (member-of ?f (friends ?p))) ((BUCK JOHN) (JOHN BUCK))

  • Recuperando Todas as Foras Armadas em que Algum Membro Tenha Amigos|= (retrieve all (?s ARMED-SERVICE) (exists ((?p PERSON) (?w WARFIGHTER)) (and (member-of ?p (friends ?w)) (= (service ?w) ?s))))(US-ARMY)

  • Aprendendo a Responder Questes Probabilsticas|= (in-package "STELLA")|= (defmodule "/PL-KERNEL/PL-USER/LEARNING")|MDL|/PL-KERNEL-KB/PL-USER/LEARNING|= (in-module "/PL-KERNEL/PL-USER/LEARNING")|= (reset-features)|i|(:EMIT-THINKING-DOTS :JUST-IN-TIME-INFERENCE)|= (in-dialect KIF):KIF|= (set-partial-match-mode :basic)

  • Alguns Conceitos Bsicos e Relaes|= (defconcept person (?p thing))PERSON|= (defconcept gene (?g thing))GENERelao de parentesco|= (defrelation parent ((?x person) (?y person)))PARENTRelao de gentipo|= (defrelation genotype ((?x person) (?y gene)))GENOTYPE

  • Instanciando Algumas Pessoas|= (assert (person mary))(PERSON MARY)|= (assert (person joe))(PERSON JOE)|= (assert (person fred))(PERSON FRED)|= (assert (person martha))(PERSON MARTHA)

  • Criando o Gene Ruivo e Alguns Parentes|= (assert (gene red-hair))(GENE RED-HAIR)Mary parente de Joe, Fred e Martha|= (assert (parent mary joe))(PARENT MARY JOE)|= (assert (parent mary fred))(PARENT MARY FRED)|= (assert (parent mary martha))(PARENT MARY MARTHA)Mary ruiva|= (assert (genotype mary red-hair))(GENOTYPE MARY RED-HAIR)

  • Definindo uma regraDefinindo uma regra que infere que uma criana tem um gene se algum dos pais tem o gene|= (assert (forall ((?x person) (?y person) (?g gene)) (=> (and (parent ?x ?y) (genotype ?x ?g))