Upload
ivy
View
98
Download
0
Embed Size (px)
DESCRIPTION
Изкуствен интелект Упражнение № 6. спец. Информатика, ФМИ 2004/2005. Семантични мрежи и фрейми. Семантични мрежи Фрейми. Семантични мрежи. Семантичните мрежи се състоят от обекти и релации между обектите - PowerPoint PPT Presentation
Citation preview
Изкуствен интелектИзкуствен интелект
Упражнение № 6
спец. Информатика, ФМИ
2004/2005
Семантични мрежи и фреймиСемантични мрежи и фрейми
Семантични мрежиФрейми
Семантични мрежиСемантични мрежи
Семантичните мрежи се състоят от обекти и релации между обектите
Обикновено се представят чрез граф, като възлите на графа съответстват на обектите, а релациите между обектите се представят чрез именувани дъги свързващи възлите на графа
СемантичнСемантичнaa мреж мрежaa
СемантичнСемантичнaa мреж мрежaa
СемантичнСемантичнaa мреж мрежaa
ОсновниОсновни типове връзки типове връзки
Т и п С е м а н т и к а П р и м е р
s u b s e t ( c a t s , m a m m a l s )
i s _ a ( b i l l , c a t s )
a g e ( t o m , 1 2 )
l e g s ( b i r d s , 2 ) .
p a r e n t ( t o m , a n )
BА Subset
BА Member
BА R
BА R
BА R
BА
BА
),( BАR
),( BxRАxx
),( yxRByАxyx
Семантична мрежаСемантична мрежаanimal
flybirddaylight
albatross kiwi brown
walk
night
Kimblack_&_white
Albert
Ross
isaactive_at moving_method
isa isa
isa
isa isa
moving_method
active_at
colour
colour
isa(bird,animal).isa(albatross,bird).isa(kiwi,bird).isa(ross,albatross).isa(albert,albatross).isa(kim,kiwi).moving_method(bird,fly).moving_method(kiwi,walk).active_at(bird,daylight).active_at(kiwi,night).colour(albatross,black_&_white).colour(kiwi,brown).
moving_method(X,Method):-isa(X,SuperX),moving_method(SuperX,Method).
(де)композиция на терм(де)композиция на терм+Term =.. ?List ?Term =.. +List List е списък, чийто първи елемент е функтор на Term, а останалите елементи на List са аргументите на този терм Term, т.е.
| ?- product(0, n, n-1) =.. L.L = [product,0,n,n-1]
| ?- n-1 =.. L.L = [-,n,1]
| ?- product =.. L.L = [product]
| ?- X=..[functor,arg1,arg2,arg3,arg4].X = functor(arg1,arg2,arg3,arg4) ?
Вместо този предикат може да се използват arg/3 и functor/3.
fact(Fact):-Fact,!.
fact(Fact):-Fact=..[Rel,Arg1,Arg2],isa(Arg1,SuperArg),SuperFact=..[Rel,SuperArg,Arg2],fact(SuperFact).
| ?- fact(moving_method(kim,Method)).| ?- fact(moving_method(kim,Method)).Method = walk ? Method = walk ?
| ?- fact(moving_method(albert,Method)).| ?- fact(moving_method(albert,Method)).Method = fly ? Method = fly ?
Съпоставяне на семантични Съпоставяне на семантични мрежимрежи
figure
oval polygon
4-side triangleellipsecircle
rectangle
square
trapezoid
Съпоставяне на семантични Съпоставяне на семантични мрежимрежи
% is_a hierarchy% is_a hierarchy
isa(square,rectangle).isa(square,rectangle).isa(rectangle,4-side).isa(rectangle,4-side).isa(trapezoid,4-side).isa(trapezoid,4-side).isa(parallelogram,4-side).isa(parallelogram,4-side).isa(circle,oval).isa(circle,oval).isa(ellipse,oval).isa(ellipse,oval).isa(triangle,polygon).isa(triangle,polygon).isa(4-side,polygon).isa(4-side,polygon).isa(polygon,figure).isa(polygon,figure).isa(oval,figure).isa(oval,figure).
c
Съпоставяне на семантични Съпоставяне на семантични мрежимрежи
a b
c
a b
c
a b
c
a b
Арка
support(a,c).
touch(a,b).
Съпоставяне на семантични Съпоставяне на семантични мрежимрежи
% Objects represented as facts in the format:
% object(Name,Parts,IsaRelations,MustRelations,MustNotRelations
object(arch,[a,b,c], [isa(a,4-side),isa(b,4-side), isa(c,polygon)], [support(a,c),support(b,c)], [touch(a,b)]).
Съпоставяне на семантични Съпоставяне на семантични мрежимрежи
% Test patterns
test1([X,Y,Z], [isa(X,rectangle),isa(Y,rectangle),isa(Z,triangle)], [support(X,Z),support(Y,Z)]).
test2([X,Y,Z], [isa(X,rectangle),isa(Y,rectangle),isa(Z,triangle)], [support(X,Z),support(Y,Z),touch(X,Y)]).
Съпоставяне на семантични Съпоставяне на семантични мрежимрежи
% Sample runs
?- match([X,Y,Z], [isa(X,rectangle),isa(Y,rectangle),isa(Z,triangle)], [support(X,Z),support(Y,Z)], Name).
Name=arch
?- test1(Parts,Isa,Rels),match(Parts,Isa,Rels,Name).
Name=arch
Съпоставяне на семантични Съпоставяне на семантични мрежимрежи
match(Parts,Isa1,Rels,Name) :-object(Name,Parts,Isa2,Must,MustNot),
match_isa(Isa1,Isa2), subset(Must,Rels), \+ intersect(Rels,MustNot).
Съпоставяне на семантични Съпоставяне на семантични мрежимрежи
match_isa([],[]).
match_isa([isa(X,P)|T],[isa(X,Q)|V]) :- parent(P,Q), match_isa(T,V).
Съпоставяне на семантични Съпоставяне на семантични мрежимрежи
subset([],_).subset([X|T],Y) :- member(X,Y), subset(T,Y).
intersect(L1,L2) :- member(X,L1), member(X,L2).
Съпоставяне на семантични Съпоставяне на семантични мрежимрежи
parent(X,X).
parent(X,Z) :-isa(X,Y),
parent(Y,Z).
OpusName: OpusOpus
Friend:
BirdsLegs: 22
Flies: TT
MammalsLegs: 44
PenguinsFlies: FF
Cats BatsLegs: 2
Flies: TT
PatName: PatPat
AnimalsAlive: TT
Flies: FF
BillName: BillBill
Friend:
Subset
Subset
Subset
Subset
Subset
Member Member Member
rel(alive,animals,t).
rel(flies,animals,f).
subset(birds,animals).
subset(mammals,animals).
rel(flies,birds,t).
rel(legs,birds,2).
rel(legs,mammals,4).
Фрейми
OpusName: OpusOpus
Friend:
BirdsLegs: 22
Flies: TT
MammalsLegs: 44
PenguinsFlies: FF
Cats BatsLegs: 2
Flies: TT
PatName: PatPat
AnimalsAlive: TT
Flies: FF
BillName: BillBill
Friend:
Subset
Subset
Subset
Subset
Subset
Member Member Member
rel(legs,mammals,4).
subset(penguins,birds).
subset(cats,mammals).
subset(bats,mammals).
rel(flies,penguins,f).
rel(legs,bats,2).
rel(flies,bats,t).
OpusName: OpusOpus
Friend:
BirdsLegs: 22
Flies: TT
MammalsLegs: 44
PenguinsFlies: FF
Cats BatsLegs: 2
Flies: TT
PatName: PatPat
AnimalsAlive: TT
Flies: FF
BillName: BillBill
Friend:
Subset
Subset
Subset
Subset
Subset
Member Member Member
is_a(opus,penguins).
is_a(bill,cats).
is_a(pat,bats).
name(opus,'Opus').
friend(opus,bill).
name(bill,'Bill').
friend(bill,opus).
name(Pat,'Pat').
ПримерПример
FRAME: bird
a_kind_of: animal
moving_method: fly
active_at: daylight
ПримерПримерFRAME: albatross
a_kind_of: bird
colour: black_and_white
size: 115 % 115 cm long
FRAME: kiwi
a_kind_of: bird
moving_method: walk
active_at: nightcolour: brown
size: 40
ПримерПримерFRAME: Albert
instance_of: albatross
size: 120
% A frame is represented as a set of% A frame is represented as a set of% Prolog facts:% Prolog facts:% frame_name(Slot,Value)% frame_name(Slot,Value)% where Value is either a simple value or % where Value is either a simple value or % a procedure% a procedure
% Frame bird: the prototypical bird% Frame bird: the prototypical birdbird(a_kind_of,animal).bird(a_kind_of,animal).bird(movin_method,fly).bird(movin_method,fly).bird(active_at,daylight).bird(active_at,daylight).
% Frame albatross: albatross is a typical bird% Frame albatross: albatross is a typical bird% with some extra facts: it is black and white,% with some extra facts: it is black and white,% and it is 115 cm long% and it is 115 cm longalbatross(a_kind_of, bird).albatross(a_kind_of, bird).albatross(colour,black_and_white).albatross(colour,black_and_white).albatross(size,115).albatross(size,115).
% Frame kiwi: kiwi is a rather untypical% Frame kiwi: kiwi is a rather untypical% bird in that it walks instead of flies,% bird in that it walks instead of flies,% and it is active at night% and it is active at nightkiwi(a_kind_of,bird).kiwi(a_kind_of,bird).kiwi(moving_method,walk).kiwi(moving_method,walk).kiwi(active_at,night).kiwi(active_at,night).kiwi(colour,brown).kiwi(colour,brown).kiwi(size,40).kiwi(size,40).% Frame albert: an instance of big albatross% Frame albert: an instance of big albatrossalbert(instance_of,albatross).albert(instance_of,albatross).albert(size,120).albert(size,120).% Frame ross: an instance of baby albatross% Frame ross: an instance of baby albatrossross(instance_ot,albatross).ross(instance_ot,albatross).ross(size,40).ross(size,40).
% Frame animal: slot relative_size % Frame animal: slot relative_size % obtains its value by executing% obtains its value by executing% procedure relative_size% procedure relative_sizeanimal(relative_size,animal(relative_size,
execute( execute(
relative_size(Object,Value),relative_size(Object,Value),
Object,Object,
ValueValue
))
).).
value(Frame,Slot,Value):-value(Frame,Slot,Value):-
Query=..[Frame,Slot,Value],Query=..[Frame,Slot,Value],
call(Query),!. call(Query),!.
value(Frame,Slot,Value):-value(Frame,Slot,Value):-
parent(Frame,ParentFrame),parent(Frame,ParentFrame),
value(ParentFrame,Slot,Value).value(ParentFrame,Slot,Value).
parent(Frame,ParentFrame):-parent(Frame,ParentFrame):-
(Query=..[Frame,a_kind_of,ParentFrame](Query=..[Frame,a_kind_of,ParentFrame]
;;
Query=..[Frame,instance_of,ParentFrame]),Query=..[Frame,instance_of,ParentFrame]),
call(Query). call(Query).
?-value(albert,active_at,AlbertTime).?-value(albert,active_at,AlbertTime).
AlbertTime=daylightAlbertTime=daylight
?-value(kiwi,active_at,KiwiTime).?-value(kiwi,active_at,KiwiTime).
KiwiTime=nightKiwiTime=night
% 40/115*100%=34.78%% 40/115*100%=34.78%?-value(ross,relative_size,R).?-value(ross,relative_size,R).R=34.78R=34.78
relative_size(Object,RelativeSize):-relative_size(Object,RelativeSize):-value(Object,size,ObjSize),value(Object,size,ObjSize),value(Object,instance_of,ObjClass),value(Object,instance_of,ObjClass),
value(ObjClass,size,ClassSize),value(ObjClass,size,ClassSize), RelativeSize is ObjSize/ClassSize*100.
animal(relative_size, execute(
relative_size(Obj,Val),Obj,Val)
).
value(Frame,Slot,Value):-value(Frame,Slot,Value):-value(Frame,Frame,Slot,Value).value(Frame,Frame,Slot,Value).
value(Frame,SuperFrame,Slot,Value):-value(Frame,SuperFrame,Slot,Value):-Query=..[SuperFrame,Slot,Information],Query=..[SuperFrame,Slot,Information],call(Query),call(Query),process(Information,Frame,Value).process(Information,Frame,Value).
value(Frame,SuperFrame,Slot,Value):-value(Frame,SuperFrame,Slot,Value):-parent(SuperFrame,ParentSuperFrame),parent(SuperFrame,ParentSuperFrame),value(Frame,ParentSuperFrame,Slot,Value).value(Frame,ParentSuperFrame,Slot,Value).
process(execute(Goal,Frame,Value),Frame,Value):-!,process(execute(Goal,Frame,Value),Frame,Value):-!,call(Goal).call(Goal).
process(Value,_,Value).process(Value,_,Value).