1 / 55

„ Doctor ” szakértő rendszer

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.

bin
Download Presentation

„ Doctor ” szakértő rendszer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Készítette: Bakosi Balázs és Szűcs Ákos „Doctor” szakértő rendszer

  2. Eliza Joseph Weizenbaum, 1966-ban tervezte az MIT-n.

  3. Eliza Célja, hogy a program képes legyen részt venni • emberrel vagy egy • másik programmal folytatott beszélgetésben.

  4. Eliza „Mesterséges intelligencia” első próbálkozásai. Egyszerű mintaillesztéses technika Felhasználó válaszai  scriptek

  5. Doctor Az Eliza egyik implementációja • ijesztően emberi • adatbázis • mintaillesztés • ember-ember dialógus illúziója • első „chatbot”

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

  7. Doctor Ember: 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?

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

  9. Tervezés • Az adatbázisban szereplő betegségek: • Himlő • Allergia • Influenza

  10. Tervezés • Tü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)

  11. Tervezés • Gyógymód: • Pihenés • Allergia injekció • Maradjon otthon • Nem lehetséges a diagnózis a tünetek alapján, konzultáljon orvosával

  12. Tervezés

  13. Megvalósítás • Szükség adatszerkezet definiálás • Deftemplate és slot-ok • (deftemplate név (slotné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.

  14. Megvalósítás • (deftemplate Beteg (slottestho) • (slot foltok) • (slotkiutes) • (slottorokfajas) • (slothimlo_volt) • (slotlaz))

  15. Megvalósítás • Tények • információ-darab  tények listájára (factlist) helyezve • szabályok által használt alapvető információ-egység

  16. Megvalósítás • Té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>*)

  17. Megvalósítás Deffact 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.

  18. Megvalósítás (deffactsInitial (Beteg )) Miért Initial?(nil érték) másként: (deffacts paciens (Beteg (foltok igen) (kiutesek nem) (torokfajasnem)

  19. Megvalósítás A szabályok általános formája: (defrule <szabálynév> [<megjegyzés>] <feltétel>* ; LeftHand Side (LHS) => <következmény>* ); Hand Side (RHS)

  20. Megvalósítás • A 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

  21. Megvalósítás • Futás követése: • CLIPS> (watchrules) • CLIPS> (agenda) • Vagy Windows  Show Status Windows

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

  23. 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

  24. 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-okközül elsőként hajtódjanak végre

  25. A GetRule-ok Rule-ok általános szerkezete: (defrule <szabály név> [<comment>] [<declaration>] <conditional-element>* => <action>* )

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

  27. 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

  28. A GetRule-ok A 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. „patternbinding” 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 factslotja is

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

  30. 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

  31. A GetRule-ok • (printout t "Adja meg a beteg hőmérsékletét: ")

  32. 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))

  33. A GetRule-ok • Egy változó értékét a „modify” paranccsal módosíthatjuk • (modify ?p (testho ?valasz)))

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

  35. A GetFoltok • (defruleGetFoltok • (declare (salience 200)) • ?p <- (Beteg (foltok nil)) • => • (printout t "Jelentkeztek foltok a betegen? (igen vagy nem): ") • (bind ?valasz (read)) • (modify ?p (foltok ?valasz)))

  36. A GetKiutes • (defruleGetKiutes • (declare (salience 200)) • ?p <- (Beteg (kiutesnil)) • => • (printout t "Jelenkeztekkiutesek a betegen? (igen vagy nem): ") • (bind ?valasz (read)) • (modify ?p (kiutes ?valasz)))

  37. A GetTorokfajas • (defruleGetTorokfajas • (declare (salience 200)) • ?p <- (Beteg (torokfajasnil)) • => • (printout t "Faj a beteg torka? (igen vagy nem): ") • (bind ?valasz (read)) • (modify ?p (torokfajas ?valasz)))

  38. A GetHimlo_volt • (defruleGetHimlo_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)))

  39. 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:

  40. 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)))

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

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

  43. Betegséget meghatározó rule-ok • Feltétel a rule-ban: A beteg factslotjainak 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

  44. 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

  45. Himlorule • (defruleHimlo • (declare (salience 100)) • (Beteg (foltok igen) (himlo_volt nem) (laz magas)) • => • (assert (diagnozishimlo)) • (printout t "A beteg himlos" crlf))

  46. Allergia2 rule (defrule Allergia2 (Beteg (kiutes igen)) => (assert (diagnozis allergia)) (printout t "A kiutesekalapjana beteg allergias!" crlf))

  47. Allergia1 rule • (defrule Allergia1 • (declare (salience -100)) • (and (Beteg (foltok igen)) • (not (diagnozishimlo))) • => • (assert (diagnozis allergia)) • (printout t "A beteg valoszinulegallergias!" crlf))

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

  49. 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

  50. Otthon_marad rule (defrule Otthon_marad (diagnozishimlo) => (printout t "A beteg maradjon otthon, amig szervezete legyozi a himlot!" crlf))

More Related