Top Banner
„DOCTOR” SZAKÉRTŐ RENDSZER Készítette: Bakosi Balázs és Szűcs Ákos
55

„ Doctor ” szakértő rendszer

Feb 24, 2016

Download

Documents

bin

Készítette: Bakosi Balázs és Szűcs Ákos. „ Doctor ” szakértő rendszer. Eliza. Joseph Weizenbaum , 1966-ban tervezte az MIT-n . Eliza. Célja, hogy a program képes legyen részt venni emberrel vagy egy másik programmal folytatott beszélgetésben . Eliza. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: „ Doctor ” szakértő rendszer

„DOCTOR” SZAKÉRTŐ RENDSZER

Készítette: Bakosi Balázs és Szűcs Ákos

Page 2: „ Doctor ” szakértő rendszer

ElizaJoseph Weizenbaum, 1966-ban tervezte az MIT-n.

Page 3: „ Doctor ” szakértő rendszer

ElizaCélja, hogy a program képes legyen részt venni

emberrel vagy egy másik programmal

folytatott beszélgetésben.

Page 4: „ Doctor ” szakértő rendszer

Eliza„Mesterséges intelligencia” első próbálkozásai.

Egyszerű mintaillesztéses technika

Felhasználó válaszai scriptek

Page 5: „ Doctor ” szakértő rendszer

DoctorAz Eliza egyik implementációja

ijesztően emberiadatbázismintaillesztésember-ember dialógus illúziójaelső „chatbot”

Page 6: „ Doctor ” szakértő rendszer

Doctor1976-os könyv "Computer Power and Human Reason," /The New Media Reader/ Weizenbaum kifejtette milyen gyorsan és mélyen alakultak ki érzelmek az emberekben a program iránt.Nem szabad gépekre bízni a döntést.

Page 7: „ Doctor ” szakértő rendszer

DoctorEmber: Nos, a barátom miatt jöttem ide.ELIZA: A barátod miatt jöttél ide?Ember: Azt mondta, hogy sokat vagyok depressziós.ELIZA: Sajnálattal hallom, hogy depressziós vagy.Ember: Igen. Boldogtalan vagyok.ELIZA: Gondolod, hogy a jöveteled segít abban, hogy ne légy boldogtalan?

Page 8: „ Doctor ” szakértő rendszer

Célunk

Néhány tünet alapján a betegség megállapítása és javallott gyógymód kiírása

Page 9: „ Doctor ” szakértő rendszer

TervezésAz adatbázisban szereplő betegségek:

HimlőAllergiaInfluenza

Page 10: „ Doctor ” szakértő rendszer

TervezésTünetek meghatározása:

Testhőmérséklet (érték megadása) Foltok (igen vagy nem)Kiütés (igen vagy nem)Torokfájás (igen vagy nem)Volt himlős(igen vagy nem)

Page 11: „ Doctor ” szakértő rendszer

TervezésGyógymód:

PihenésAllergia injekcióMaradjon otthon

Nem lehetséges a diagnózis a tünetek alapján, konzultáljon orvosával

Page 12: „ Doctor ” szakértő rendszer

Tervezés

Page 13: „ Doctor ” szakértő rendszer

MegvalósításSzükség adatszerkezet definiálás

Deftemplate és slot-ok(deftemplate név (slot név [(típus)]

[(tartomány)]))Típus:

• NUMBER – lehet INTEGER vagy FLOAT is.• INTEGER – egész számok• FLOAT – lebegőpontos számok• STRING – karaktersorozat

Tartomány:• A mező által felvehető értékeket korlátozhatjuk

ezzel a funkcióval.

Page 14: „ Doctor ” szakértő rendszer

Megvalósítás(deftemplate Beteg (slot testho) (slot foltok) (slot kiutes) (slot torokfajas) (slot himlo_volt) (slot laz))

Page 15: „ Doctor ” szakértő rendszer

MegvalósításTények információ-darab tények listájára (fact list) helyezveszabályok által használt alapvető információ-egység 

Page 16: „ Doctor ” szakértő rendszer

MegvalósításTények tények hozzáadása a tény listához:(assert <tény>*)vagy(deffacts [<modul név>] <név> [„<megjegyzés>”]

<RHS pattern>*) 

Page 17: „ Doctor ” szakértő rendszer

MegvalósításDeffact vagy assert?

A programban olyan tényeket írhatunk elő ezzel, amelyek minden kiadott (reset) parancs hatására azt az eredményt adják, mintha az (assert (fact1))parancsokat adtuk volna ki.

Page 18: „ Doctor ” szakértő rendszer

Megvalósítás(deffacts Initial (Beteg ))

Miért Initial?(nil érték)

másként:(deffacts paciens (Beteg (foltok igen)

(kiutesek nem) (torokfajas nem)

Page 19: „ Doctor ” szakértő rendszer

MegvalósításA szabályok általános formája:

(defrule <szabálynév> [<megjegyzés>]<feltétel>* ; Left Hand Side (LHS) =><következmény>* ); Hand Side (RHS)

Page 20: „ Doctor ” szakértő rendszer

MegvalósításA szabályok működése:

• Szabály feltételinek párosítása a tényekkel• Teljesülnek Agenda

• Szünet ha nincs benne szabály• Automatikus

Page 21: „ Doctor ” szakértő rendszer

MegvalósításFutás követése:

• CLIPS> (watch rules)• CLIPS> (agenda)

• Vagy Windows Show Status Windows

Page 22: „ Doctor ” szakértő rendszer

Megvalósítás(defrule GetTestho (declare (salience 200)) ?p <- (Beteg (testho nil)) => (printout t "Adja meg a beteg hőmérsékletét: ") (bind ?valasz (read)) (modify ?p (testho ?valasz)))

Page 23: „ Doctor ” szakértő rendszer

A Rule-ok (szabályok)

Csoportosításuk: Adatok bekérésére szolgáló szabályok Adatok alapján a betegség

meghatározása A betegségek alapján a gyógymód

kiírása

Page 24: „ Doctor ” szakértő rendszer

A GetRule-ok

Általános jellemzőik: A felhasználónak felteszünk valamilyen

kérdést A kezdeti nil értékeket taralmazó

tényünket a válasz értékre módosítjuk Szükséges valamilyen prioritás, hogy a

rule-ok közül elsőként hajtódjanak végre

Page 25: „ Doctor ” szakértő rendszer

A GetRule-okRule-ok általános szerkezete:

(defrule <szabály név> [<comment>] [<declaration>] <conditional-element>* => <action>* )

Page 26: „ Doctor ” szakértő rendszer

GetTestho(defrule GetTestho (declare (salience 200)) ?p <- (Beteg (testho nil)) => (printout t "Adja meg a beteg hőmérsékletét: ") (bind ?valasz (read)) (modify ?p (testho ?valasz)))

Page 27: „ Doctor ” szakértő rendszer

A GetRule-ok

Declaration rész: itt állítjuk be a prioritást:

(declare (salience 200)) Értéke -10000 és +10000 között

mozoghat, alapértelmezetten 0 A nagyobb értékű rule lesz hamarabb

végrehajtva Az ugyanolyan értékűek közül a sorban

előrébb állóba lép be

Page 28: „ Doctor ” szakértő rendszer

A GetRule-okA tény módosítása:

<változó> <- <tény>.......(modify <tény címét tartalmazó változó> <RHS-slot>*)

• Működése: Az un. „pattern binding” operátorral (<-) egy változót összekapcsolunk a tényünk egy mezőjével

• A változó értékét a modify paranccsal módosítva változik a fact slotja is

Page 29: „ Doctor ” szakértő rendszer

A GetRule-ok?p <- (Beteg (testho nil)…….(modify ?p (testho ?valasz)))

Page 30: „ Doctor ” szakértő rendszer

A GetRule-ok• Kiíratás: (printout <logical-name>

<expression>*)• A „t” paraméter használva a képernyőre

írhatunk• A „crlf” kifejezést használhatjuk

sortörésre

Page 31: „ Doctor ” szakértő rendszer

A GetRule-ok• (printout t "Adja meg a beteg

hőmérsékletét: ")

Page 32: „ Doctor ” szakértő rendszer

A GetRule-ok• A beolvasás eredményét a „bind”

paranccsal menthetjük el egy változóba• (bind változó (read)) • A változó neve „valasz” lesz• Konkrét megvalósítás:

• (bind ?valasz (read))

Page 33: „ Doctor ” szakértő rendszer

A GetRule-ok• Egy változó értékét a „modify”

paranccsal módosíthatjuk• (modify ?p (testho ?valasz)))

Page 34: „ Doctor ” szakértő rendszer

A GetTestho(defrule GetTestho (declare (salience 200)) ?p <- (Beteg (testho nil)) => (printout t "Adja meg a beteg hőmérsékletét: ") (bind ?valasz (read)) (modify ?p (testho ?valasz)))

Page 35: „ Doctor ” szakértő rendszer

A GetFoltok• (defrule GetFoltok• (declare (salience 200))• ?p <- (Beteg (foltok nil)) • =>• (printout t "Jelentkeztek foltok a

betegen? (igen vagy nem): ")• (bind ?valasz (read))• (modify ?p (foltok ?valasz)))

Page 36: „ Doctor ” szakértő rendszer

A GetKiutes• (defrule GetKiutes• (declare (salience 200))• ?p <- (Beteg (kiutes nil)) • =>• (printout t "Jelenkeztek kiutesek a

betegen? (igen vagy nem): ")• (bind ?valasz (read))• (modify ?p (kiutes ?valasz)))

Page 37: „ Doctor ” szakértő rendszer

A GetTorokfajas• (defrule GetTorokfajas• (declare (salience 200))• ?p <- (Beteg (torokfajas nil)) • =>• (printout t "Faj a beteg torka? (igen

vagy nem): ")• (bind ?valasz (read))• (modify ?p (torokfajas ?valasz)))

Page 38: „ Doctor ” szakértő rendszer

A GetHimlo_volt• (defrule GetHimlo_volt• (declare (salience 200))• ?p <- (Beteg (laz magas) (foltok igen)

(himlo_volt nil))• =>• (printout t "Volt mar himloje a betegnek?

(igen vagy nem): ")• (bind ?valasz (read))• (modify ?p (himlo_volt ?valasz)))

Page 39: „ Doctor ” szakértő rendszer

A Laz1 és Laz2 rule• A fact „laz” mezőjének értékét mi

számítjuk ki a „testho” mező étéke alapján

• Laz1: magas laz: testho>=39• Laz2: enyhe laz: 37<= testho<39• Prioritása 0 lesz• Tesztelnünk kell, hogy a „testho” mező

értéke szám-e:

Page 40: „ Doctor ” szakértő rendszer

A Laz1 és Laz2 rule• „Test” függvény: true vagy false értéket ad

vissza• Általános alakja:(test <függvényhívás>)• Tesztelés numerikus tipusra:

(test (numberp <változó>)• Tesztelés a változó értékére: • (test (and (< <változó> x) (>=<változó> y)))

Page 41: „ Doctor ” szakértő rendszer

A Laz1 rule• (defrule Laz1• ?p <- (Beteg (testho ?t) (laz nil))• (test (numberp ?t))• (test (>= ?t 39))• =>• (modify ?p (laz magas))• (printout t "A betegnek magas laza van!"

crlf))

Page 42: „ Doctor ” szakértő rendszer

A Laz2 rule• (defrule Laz2• ?p <- (Beteg (testho ?t) (laz nil))• (test (numberp ?t))• (test (and (< ?t 39) (>= ?t 37)))• =>• (modify ?p (laz enyhe))• (printout t "A betegnek enyhe laza van!" crlf))

Page 43: „ Doctor ” szakértő rendszer

Betegséget meghatározó rule-ok

• Feltétel a rule-ban: A beteg fact slotjainak az értéke

• A rule-ban létrehozunk egy új fact-et (assert) diagnozis néven, ennek az értéke alapján választjuk majd ki a gyógymódot

• Kiíratjuk a képernyőre a diagnózist

Page 44: „ Doctor ” szakértő rendszer

Betegséget meghatározó rule-ok

• A himlőnek és az allergiának is lehet a tünete a „folt”->himlőnek magasabb prioritást adunk, vizsgáljuk volt-e már himlős

• Allergia tünete lehet a kiütés és a folt is

Page 45: „ Doctor ” szakértő rendszer

Himlo rule

• (defrule Himlo• (declare (salience 100))• (Beteg (foltok igen) (himlo_volt nem) (laz

magas))• =>• (assert (diagnozis himlo))• (printout t "A beteg himlos" crlf))

Page 46: „ Doctor ” szakértő rendszer

Allergia2 rule

(defrule Allergia2 (Beteg (kiutes igen)) => (assert (diagnozis allergia)) (printout t "A kiutesek alapjan a beteg allergias!" crlf))

Page 47: „ Doctor ” szakértő rendszer

Allergia1 rule

• (defrule Allergia1• (declare (salience -100))• (and (Beteg (foltok igen))• (not (diagnozis himlo))) • =>• (assert (diagnozis allergia))• (printout t "A beteg valoszinuleg allergias!"

crlf))

Page 48: „ Doctor ” szakértő rendszer

Influenza rule (defrule Influenza (Beteg (torokfajas igen) (laz enyhe | magas)) => (assert (diagnozis influenza)) (printout t "A beteg influenzas!" crlf))

Page 49: „ Doctor ” szakértő rendszer

Gyógymód Rule-ok Feltétel a rule-ba: a „diagnozis” fact

értéke Ha feltétel igaz akkor kiíratjuk a

betegségnek megfelelő gyógymódot Létrehozunk egy „Hiba” nevű rule-t: ha a

„diagnozis” fact értéke nem meghatározott, akkor hiba üzenetet iratunk ki

Page 50: „ Doctor ” szakértő rendszer

Otthon_marad rule

(defrule Otthon_marad (diagnozis himlo) => (printout t "A beteg maradjon otthon, amig szervezete legyozi a himlot!" crlf))

Page 51: „ Doctor ” szakértő rendszer

Allergia_gyogyszer rule(defrule Allergia_gyogyszer (diagnozis allergia) => (printout t "A betegnek egy allergia injekcio javasolt!" crlf))

Page 52: „ Doctor ” szakértő rendszer

Agy_pihenes rule(defrule Agy_pihenes (diagnozis influenza) => (printout t "A betegnek pihenes javasolt!" crlf))

Page 53: „ Doctor ” szakértő rendszer

Hiba rule

(defrule Hiba (declare (salience -100)) (not (diagnozis ?)) => (printout t "A diagnozis nem lehetseges! Kerjuk keresse fel orvosat!" crlf))

Page 54: „ Doctor ” szakértő rendszer

Prioritás táblázat:

Himlo 100

Rule SalienceGetTestho 200GetFoltok 200GetKiutes 200

GetTorokfajas 200GetHimlo_volt 200

Laz1 0Laz2 0

Allergia2 0Influenza 0

Ottthon_ marad 0Allergia_gyogyszer 0

Agy_pihenes 0Allergia1 -100

Hiba -100

Page 55: „ Doctor ” szakértő rendszer

Futtatás: A Clips figyeli, hogy a tények aktuális

értékei alapján melyik rule hajtható végre

Mindig a nagyobb prioritású rule-ba lép bele

Ha a feltételek alapján már egy rule se hajtható végre, befejeződik a futás