„Doctor” szakértő rendszer

Slides:



Advertisements
Hasonló előadás
Tananyag: konzultáció
Advertisements

Statisztika 2008 Az elektronikus program használata.
MESTERSÉGES INTELLIGENCIA (ARTIFICIAL INTELLIGENCE)
SStat - Statisztika 2014.
KLINIKAI ALAPISMERETEK
Recovery (helyreállítás) feladatok gyakorlatra
Active Directory.
Az integrált áramkörök (IC-k) tervezése
Tömbök C#-ban.
Programozás III KOLLEKCIÓK 2..
A NEPTUN.NET (a hallgatói felület) KEZELÉSE
Funkcionális programozás F#-ban
Történelmi hősök Edward Jenner 1749-ben született. Már kis srácként is érdekelte a tudomány és a természet, órákat töltött a Severn folyó partján fosszíliákat.
Vírusok Kanyaró Mumpsz Rubeola.
Adatbázis alapú rendszerek
Gyakori hibák C# programozásban
Programozás alapjai A programozás azt a folyamatot jelenti, melynek során a feladatot a számítógép számára érthető formában írjuk le. C++, Delphi, Java,
Táblázat kezelő programok
Turbo Pascal Változók.
Adatmodellezés: E-K modell
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
Mutatók, tömbök, függvények
Tudásalapú rendszerek
Készítette: Sárközi Anikó
Gázkeverékek (ideális gázok keverékei)
A FOLYAMATOK AUTOMATIKUS ELLENŐRZÉSE Készítette: Varga István VEGYÉSZETI-ÉLELMISZERIPARI KÖZÉPISKOLA CSÓKA
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Vizuális és web programozás II.
AKUT BETEGSÉGEK ELLÁTÁSA
Szoftvertechnológia Rendszertervezés.
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Microsoft Excel Függvények VIII.
Asztma Asztmás állapotban a légutakat a hörgő-nyálkahártya speciális gyulladása miatti duzzanat és a hörgők simaizomzatának görcsös összehúzódása beszűkíti.
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Programozás Az adatokról C# -ban.
Anyagadatbank c. tárgy gyakorlat Féléves tematika Adatbázis alapfogalmak, rendszerek Adatmodellek, adatbázis tervezés Adatbázis műveletek.
Üdvözlöm a DrDiag rendszer bemutatóján A DrDiag rendszer szakmai információkat ad az orvosok egészségügyi szakemberek, gyógyszerészek, ápolók számára.
Access XP Kifejezés-szerkesztő Összehasonlító operátorok:
Összetett adattípusok
Alapszint 2.  Készíts makrót, ami a kijelölt cellákat egybenyitja, a tartalmat vízszintesen és függőlegesen középre igazítja és 12 pontos betűméretűre.
Az egységes tervezési gyakorlat kialakításának eszközei Készítette: Szentirmai Róbert (minden jog fenntartva)
Ismétlés A pascal program szerkezete: program programnev; Programfej
Szintaktikai, szemantikai szabályok
Űrlapok.
Operátorok Értékadások
1 Támad az influenza! Hogyan védekezzünk? Margit Kórház Pásztó Egészségpercek Prevenció és egészségmegőrzés.
Program kamat Készítette: Rummel Szabolcs Elérhetőség:
Innovációk a szervezetekben. A., Alapok I. A szervezet fontossága II. Az átvétel eredménye B., Az innováció-döntési folyamat típusai I. Opcionális innovációs.
Személyes akcióterv.
Európai Scleroderma Nap június 29. Hogyan lehet együtt élni a sclerodermával? Mottó: Nem vagyok beteg, csak sclerodermával élek!
Visual Basic 2008 Express Edition
Logikai programozás 6.. Problémafelvetés: diak(jani, 3.3, pecs). diak(laci, 3.7, kaposvar). diak(matyi, 4.1, pecs). diak(kati, 2.3, barcs). diak(jeno,
Nem más csak egyszerü logika!
Webprogramozó tanfolyam
A vöröshagyma titka Kattins kényelmed szerint.
Ismerkedjünk tovább a számítógéppel
Programozás, programtervezés
1 „Még korunk szélhámosainak is tudósnak kell magukat színlelni, mert különben senki sem hinne nekik.” C.F. Weizsacker.
Ebola [Ebola vérzéses láz]. Előfordulása Általános tudnivalók  1976  Yumbuku, Kongó  90%  Gyümölcsevő denevér  Nincs ellenszer.
Előadó:Forgács Zoltán Számvitel-szervezési és Ellenőrzési Osztály - osztályvezető Raiffeisen Bank Zrt Számviteli Tudástár kialakítása a Raiffeisen.
Készítette: Rummel Szabolcs Elérhet ő ség: Linux kezelése.
Lekérdezések Adott tulajdonságú adatok listázásának módja a lekérdezés. A lekérdezések segítségével az adatbázisból megjeleníthetjük, módosíthatjuk, törölhetjük.
Szakértő redszerek készítése CLIPS-ben
Tudásalapú rendszerek
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
A CLIPS keretrendszer
Mesterséges intelligencia
Informatikai gyakorlatok 11. évfolyam
A világ sarkából is elérhető könyvtár, a könyvtár sarkából is elérhető világ Winkler Bea.
Előadás másolata:

„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 „Mesterséges intelligencia” első próbálkozásai. Egyszerű mintaillesztéses technika Felhasználó válaszai  scriptek

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

Doctor 1976-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.

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?

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

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

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)

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

Tervezés

Megvalósítás Szü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.

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

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

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

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.

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)

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

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

Megvalósítás Futás követése: CLIPS> (watch rules) CLIPS> (agenda) Vagy Windows  Show Status Windows

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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:

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

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

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

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

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

Himlo rule (defrule Himlo (declare (salience 100)) (Beteg (foltok igen) (himlo_volt nem) (laz magas)) => (assert (diagnozis himlo)) (printout t "A beteg himlos" crlf))

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

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

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

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

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

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

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

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

Prioritás táblázat:

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