„ doctor ” szakértő rendszer
DESCRIPTION
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 PresentationTRANSCRIPT
![Page 1: „ Doctor ” szakértő rendszer](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/1.jpg)
„DOCTOR” SZAKÉRTŐ RENDSZER
Készítette: Bakosi Balázs és Szűcs Ákos
![Page 2: „ Doctor ” szakértő rendszer](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/2.jpg)
ElizaJoseph Weizenbaum, 1966-ban tervezte az MIT-n.
![Page 3: „ Doctor ” szakértő rendszer](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/4.jpg)
Eliza„Mesterséges intelligencia” első próbálkozásai.
Egyszerű mintaillesztéses technika
Felhasználó válaszai scriptek
![Page 5: „ Doctor ” szakértő rendszer](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/5.jpg)
DoctorAz Eliza egyik implementációja
ijesztően emberiadatbázismintaillesztésember-ember dialógus illúziójaelső „chatbot”
![Page 6: „ Doctor ” szakértő rendszer](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/9.jpg)
TervezésAz adatbázisban szereplő betegségek:
HimlőAllergiaInfluenza
![Page 10: „ Doctor ” szakértő rendszer](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/12.jpg)
Tervezés
![Page 13: „ Doctor ” szakértő rendszer](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/21.jpg)
MegvalósításFutás követése:
• CLIPS> (watch rules)• CLIPS> (agenda)
• Vagy Windows Show Status Windows
![Page 22: „ Doctor ” szakértő rendszer](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/25.jpg)
A GetRule-okRule-ok általános szerkezete:
(defrule <szabály név> [<comment>] [<declaration>] <conditional-element>* => <action>* )
![Page 26: „ Doctor ” szakértő rendszer](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/29.jpg)
A GetRule-ok?p <- (Beteg (testho nil)…….(modify ?p (testho ?valasz)))
![Page 30: „ Doctor ” szakértő rendszer](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/31.jpg)
A GetRule-ok• (printout t "Adja meg a beteg
hőmérsékletét: ")
![Page 32: „ Doctor ” szakértő rendszer](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/33.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/34.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/36.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/37.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/38.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/39.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/40.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/41.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/42.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/43.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/44.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/45.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/46.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/47.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/48.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/49.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/50.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/51.jpg)
Allergia_gyogyszer rule(defrule Allergia_gyogyszer (diagnozis allergia) => (printout t "A betegnek egy allergia injekcio javasolt!" crlf))
![Page 52: „ Doctor ” szakértő rendszer](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/52.jpg)
Agy_pihenes rule(defrule Agy_pihenes (diagnozis influenza) => (printout t "A betegnek pihenes javasolt!" crlf))
![Page 53: „ Doctor ” szakértő rendszer](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/53.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/54.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062315/568165d2550346895dd8e1ba/html5/thumbnails/55.jpg)
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