Как да вкараме знание в компютъра
В урок 2 видяхте двата пътя към „умна“ програма: да ѝ дадем правила или да ѝ дадем данни. Днес тръгваме по първия. Той е по-старият и, което е по-важно за нас, можете да го извървите докрай сами: с лист хартия днес и с C# след два урока.
Помислете как работи лекар, автомонтьор или ботаник. Задава въпроси, събира факти и от тях стига до заключение. Голяма част от знанието му може да се опише с изречения от вида „ако това и това, тогава онова“. Идеята на експертните системи (expert systems) от 70-те и 80-те години е точно тази: да запишем такива изречения в компютъра и да оставим машината да ги свързва.
Експертна система
Програма, която решава задачи в тясна област, като прилага записано знание на специалист — факти и правила — и може да обясни защо е стигнала до извода си.
Факти и правила
Нужни са ни само два вида неща.
- Факт — твърдение за конкретния случай: „листата са иглички“, „температурата е 38,5“. Фактите идват от потребителя (отговори на въпроси) или от измервания.
- Правило „ако – тогава“ —
условие(може да са няколко, свързани с „и“) иизвод. Правилата ги записва специалистът веднъж, преди системата да се ползва.
| № | Ако (условие) | Тогава (извод) |
|---|---|---|
| 1 | листата са иглички | дървото е иглолистно |
| 2 | иглолистно и игличките са по две в снопче | бор |
| 3 | иглолистно и игличките са единични и плоски | ела |
| 4 | листата са широки и плодът е жълъд | дъб |
| 5 | листата са широки и кората е бяла с черни ивици | бреза |
Забележете нещо: изводът на правило 1 („иглолистно“) е условие в правила 2 и 3. Правилата се закачат едно за друго. Именно това ги прави повече от обикновен списък.
Машината за извод
Машина за извод (inference engine)
Частта от програмата, която избира кое правило да приложи и в какъв ред. Тя не знае нищо за растения или болести — знае само как да сравнява условия с факти.
Извеждане напред
- Записваме известните факти.
- Търсим правило, чиито условия всички са налице сред фактите.
- Добавяме извода му към фактите.
- Повтаряме, докато получим краен извод или нито едно правило вече не сработва.
Извеждане назад
Обратният ред: тръгваме от хипотеза — „бор ли е?“ — и търсим правило с такъв извод. Правило 2 иска „иглолистно“ и „по две в снопче“. „Иглолистно“ пък идва от правило 1, което иска „иглички“. Стигнали сме до факти, които не следват от нищо — тях питаме потребителя.
Така системата задава само въпросите, които са ѝ нужни за текущата хипотеза. Затова съветниците, които „разпитват“, обикновено работят назад.
База от знания срещу програма
Най-важното в експертните системи не е нито едно правило, а разделянето: правилата — базата от знания — са данни, а машината за извод е програма, която не зависи от областта.
| Обикновена програма | Експертна система | |
|---|---|---|
| Къде е знанието | в кода, като условия if | отделно, като списък от правила |
| Ново знание | препрограмиране и ново компилиране | добавя се още едно правило |
| Кой го променя | програмист | и специалистът, ако форматът е прост |
| Обяснение „защо“ | трябва да се напише отделно | идва наготово — списъкът от сработилите правила |
Една и съща машина за извод може да работи с правила за растения, за диагнози или за избор на лаптоп — сменя се само базата. Ще го видите на C# в урок 7: първо правилата като if, после като масив от обекти, който цикъл обхожда.
Къде работят и къде се провалят
MYCIN
Класическият пример е MYCIN — система от 70-те години, разработена в Станфордския университет. По резултати от изследвания тя предлага диагноза при бактериални инфекции на кръвта и подходящ антибиотик. Знанието ѝ е няколкостотин правила „ако – тогава“, записани с помощта на лекари, а всяко правило носи и степен на увереност. MYCIN може да обясни всяко свое предложение, като покаже правилата, които е приложила.
Тя никога не влиза в реална болнична употреба — отчасти заради въпроса кой носи отговорност при грешка, отчасти защото въвеждането на всички данни отнема повече време, отколкото лекарят има. Това е поука, която важи и за днешните системи.
Къде правилата са на място
- Диагностика на техника — списъци с проверки „ако лампата мига два пъти, тогава…“.
- Проверка на формуляри, конфигурации и настройки.
- Данъчни, административни и банкови правила, които са записани в закон.
- Филтри за нежелана поща по правила и поведение на противници в игри.
Общото: знанието е ясно, ограничено и рядко се променя. Там правилата са бързи, евтини и — най-важното — обясними.
Защо се провалят
- Непълно знание — за факти, които не покрива нито едно правило, системата няма какво да каже. Няма „горе-долу“: правилото или сработва, или не.
- Крехкост — една стъпка извън предвиденото и отговорът е безсмислен, а системата не усеща, че въпросът е странен.
- Знанието трудно се измъква — специалистът често „просто вижда“ отговора и не може да каже кое правило е приложил.
- При хиляди правила две от тях започват да си противоречат и никой не забелязва, а всяка промяна в областта значи ръчно пренаписване.
Какво трябва да запомниш
- Експертната система = факти + правила „ако – тогава“ + машина за извод.
- Изводът на едно правило може да е условие в друго — така се получава верига от разсъждения.
- Извеждане напред: от фактите към извода. Извеждане назад: от хипотезата към нужните факти.
- Базата от знания е отделена от програмата — ново знание е нов ред, не ново компилиране.
- Силна страна: обяснява защо. Слаба: при непълно знание мълчи, при много правила се обърква.