270 likes | 982 Views
Modified from the slides by SciTech Media. 전문가 시스템 (Expert Systems) (Lecture Note #16). 인공지능 2002 년 2 학기 이복주 단국대학교 컴퓨터공학과. Outline. Expert Systems 전문가 시스템의 배경 Basic Components of Expert Systems Expert System Building Tool Convectional Program vs. Expert Systems Application Areas
E N D
Modified from the slides by SciTech Media 전문가 시스템 (Expert Systems)(Lecture Note #16) 인공지능 2002년 2학기 이복주 단국대학교 컴퓨터공학과
Outline • Expert Systems • 전문가 시스템의 배경 • Basic Components of Expert Systems • Expert System Building Tool • Convectional Program vs. Expert Systems • Application Areas • 구축 과정 • 지식베이스 구성과 표현 • 추론 기법 • 지식 공유 모델
전문가 시스템 활용 • 개발된 시스템 예 • 화학 분야: DENDRAL, MOLGEN • 컴퓨터 시스템 디자인: XCON • 전자 분야: ACE, EURISKO, SOPHIE • 지질: PROSPECTOR • 의학: MYCIN, ONCOCIN, GUIDON, PATHFINDER • 군사: FLEAT • 전화 통신 분야: COMPASS • 기계: CHARLEY
전문가 시스템 구축 언어 • 일반적인 문제에 적용할 수 있도록 범용성을 가진 전문가 시스템 구축을 위한 언어 • 전문가 시스템 구축 언어 vs. 기존의 고급언어 • 개발 기간 단축 됨: 코딩, 디버깅, 유지 보수 • 개발 편리: 지식 표현 방법 등이 미리 내장됨 • Vs. LISP: 유연하지만 사용하기 어려움, 숙달된 프로그래머 필요 • 영역 지향적 (domain-specific) 전문가 시스템 구축 언어 • 특정 문제에 좀 더 나은 효율성 • 범용 전문가 시스템 구축 언어보다 많이 쓰임 • 종류 • EMYCIN, EXPERT, KAS, OPS5, NEXPERT, ART, KEE, LOOPS, HEXPERT, CLIPS • CLIPS 많이 쓰임
전문가 시스템 구축 과정 • 3 단계 • 초기 단계 (initial process) • 문제 영역 선택, 개발 환경 구축 방법 결정 • 핵심 개발 단계 (core development phase) • 전문가로부터 지식 습득 • 프로토타입 구현 • 최종 개발 및 운용 단계 (final development & deployment) • 사양 만족 확인, 테스트, 평가 • 문서 작성, 유지 보수 위한 관리자 지정 • 전문가로부터 지식 습득 방법 • 지식 공학자 (knowledge engineer) • 지능적 편집 프로그램 (intelligent editing program) • 귀납적 프로그램 (induction program) • 전문 교재 이해 프로그램 (text understanding program)
전문가 시스템 구축 과정 (2) • 습득된 지식 표현 방법 • 규칙 (rule): if <condition> then <execution> 형태 • 가장 많이 쓰임 • 의미망 (semantic network): 네트워크, 노드, 아크 • 지식의 인과 관계 표현 편리; 자연어 처리에 많이 쓰임 • 프레임 (frame): 표현 대상, 속성, 메소드 • 많은 양의 정보 처리; 시각 정보 처리, 음성 인식에 많이 활용
전문가 시스템 구축과정 (3) • 전문가 시스템 구축과정 Toolbuilder Domain Expert Extends and tests Builds Interviews Expert System Building Tool Knowledge Engineer End-User Expert System Uses Builds, refines, and tests Uses Adds data Clerical Staff
지식 베이스 구성과 표현 • 지식 베이스 구성 • 1개의 지식베이스 vs. 여러 작업 단위 분할 방법 • 1개의 작업 단위 = 1개의 규칙 집합 (ruleclass) • 각각의 작업 단위에서 병렬적으로 진행 • 지식원(knowledge source)으로 부터 문제 영역을 분할하여 여러 부분 지식베이스 만들어 통합 (그림 6.5) • 예: 자동차 ES: 엔진 지식베이스 + 브레이크 지식베이스
지식 베이스 구성과 표현 • 자동차 엔진 지식 베이스 예: 예제 6.1 • 자동차 엔진 ECU (Electronic Control Unit), AFS (Air Flow Sensor), Fpump (Fuel Pump) 3 구성 요소 • Vengine.kb = Vengine.rb + Vengine.fb • Vengine.rb = {Vengine, ECU, AFS, Fpump} • Vengine.fb = {Vengine, ECU, AFS, Fpump}
지식 베이스 구성과 표현 (2) • 지식베이스의 표현 • 규칙 클래스와 사실 클래스 • 규칙 클래스를 먼저 만듦 • 규칙 클래스의 선언 형태 RULECLASS <ruleclass id> (<SUPER ruleclass id>) ; 속성 유전은 되지 않음 { comment: <string> | <empty> direction: forward | backward | mixed | <empty> } • 예: RULECLASS ECU_rules(Engine) { comment: “This ruleclass is for testing ECU.” direction: forward ; 전향 추론 }
지식 베이스 구성과 표현 (3) • 규칙 작성 Rule <rule id> (<ruleclass identifier>) { for: (?<variable identifier> in <factclass identifier>) | <empty> if: <(condition list>) do: (<action list>) } • 예: Rule symp_3(SYMPTOM_m) { for: (?s in SYMPTOM) ; s: SYMPTOM 사실 클래스의 변수 if: (?s symptom = “start_off”) ; 징후가 start_off (ENGINE start_motor_motion = “yes”) ; 엔진 start motor는 잘 돌아감 do: (activate FUEL_PUMP_m) ; 가설 FUEL_PUMP_m을 설정 } • FUEL_PUMP_m 확인 위해 다음 규칙을 살핀다. Rule symp_27(SYMPTOM_m) { for: (?f in FUEL_PUMP) if: (?f control_relay_fuel_pump_wire = “broken”) do: (assert FUEL_PUMP_m = TRUE) (print “FUEL_PUMP_m control_relay_fuel_pump_wire is broken.\n”) (halt) } • FUEL_PUMP_m 확인 위해 조건부 부분을 subgoal로 놓고 backward 추론을 수행한다.
지식 베이스 구성과 표현 • 예제 6.2 • “AFS의 connector를 분리하였을 때도 자동차의 시동이 걸리면 connector를 연결하여 시동이 꺼지는지를 검사하라.”라는 규칙 • 풀이: Rule afs_3 (AFS) { for: (?a in AFS) if: (?a connector = “off”) ; AFS의 사실 클래스에 connector라는 속성 있음 (검사차 connector_분리_시동 = “on”) ; (object attr 연산자 value) do: (print “> connector 연결하여 엔진 꺼지는지 검사하라. (Yes: Off / No: On)\n”) ; 사용자에게 질문 (modify ?a connector = “on”) (read en_st) ; 사용자 입력 받아들임 (modify 검사차 connector_연결_시동 = en_st) }
지식 베이스 구성과 표현 • 사실 클래스 • 여러 유사한 객체들에 대한 묘사, 자료 추상화 • 모든 사실은 하나의 사실 클래스에 속함 • 정의 FACTCLASS <factclass id> (<SUPER factclass ids>) { <attr id>: <value expr> with <cf> [valuetype <attr value type>] [inherit <inheritance spec>] [prompt <string>] [comment <string>] [rdaemon <object id>::<method id> (<args>)] [wdaemon <object id>::<method id> (<args>)] <attr id>: … … } • 사실 클래스 예: 자동차 사실 클래스 FACTCLASS CAR() { start: [valuetype string {“on”, “off”, “on-off”, difficult”}] [inherit class] [prompt “Does the car start? (Yes: On / No: Off / On-Off / Difficult)”] IG_key: [valuetype string {“on”, “off”}] [inherit class] [prompt “Is the state of IG_key good? (Yes: On / No: Off)”] }
지식 베이스 구성과 표현 • 사실의 표현 FACT <fact id> (<factclass id>) { <attr id>: <value> with <cf> <attr id>: } • 예: FACT mpi1(MPI) { IG_key: “on” with 1.0 }
추론 기법 • 추론의 3단계 • 규칙과 사실을 매칭하는 단계 (matching) • 전체 시간의 90% 이상 차지 • 매칭된 규칙들 중 선택하는 단계 (selection) • 선택된 규칙을 실행하는 단계 (execution) • n개의 규칙 m개의 사실 • n*m번의 매칭 필요
추론 기법 • Rete 알고리즘 • Charles Forgey 제안, OPS5에서 쓰임 • 구조적 유사성 (structural similarity)와 시간적 중복성 (temporal redundancy) 이용 • 구조적 유사성 • 각 규칙의 조건이 같은 것이 있으면 공유 • 예: 그림 6.7: 조건 1이 공유되도록 규칙망 구성 • 시간적 중복성 • 작업 메모리의 변화 정보를 저장, 매칭된 사실등을 다음 번에 활용하도록 함 • 예: 규칙 1에 조건 1, 2가 있는데 현재 사실이 조건 1만 만족하면 조건 1에 관한 정보만 저장 • 시간이 지나 조건 2를 만족하는 사실이 있으면 활용
추론 기법 • Rete 알고리즘 구성 • Root 노드, test 노드, 메모리 노드, And 노드, 부정 (negated) 노드, 실행 (production) 노드 • Root 노드: entry 노드, 사실을 token으로 만들어 뿌릴 때 입구 역할 • Test 노드: 클래스 test 노드, 속성 test 노드 • 클래스 test 노드: 사실 토큰이 정의한 클래스를 만족하는지 검사 • 속성 test 노드: 5개의 속성이 있다면 5개의 속성 test 노드 생김 • 메모리 노드: 알파/베타 메모리 노드 • 알파 메모리 노드: 왼쪽/오른쪽 알파 메모리 노드 (And 노드의 왼쪽/오른쪽) • 베타 메모리 노드: And 노드 통과한 토큰 저장 • And 노드: 왼쪽/오른쪽 알파 메모리 노드의 토큰이 만족해야 할 성질 검사 • 부정 노드: 어떤 조건을 만족하지 않는 토큰이 있는지 검사 • 실행 노드: 규칙의 이름 가짐 • 매칭 과정 • 각 규칙의 조건부를 컴파일하여 노드망 생성 • 사실 데이터: working memory element로 표현 • 각 working memory element • (객체 애트리뷰트 값)의 토큰 형태로 노드망을 통과하면서 매칭 • 매칭 결과: 만족된 규칙들의 집합
예제 6.4: 사실 베이스와 규칙 주어졌을 때 Rete 노드망 생성 Class C1: virtual public OBJECT { string a11, a12, a13, a14, a15; C1(char *v1, v2, v3, v4, v5); ~C1(); }; Class C2: virtual public OBJECT { string a21, a22, a23; C2(char *v1, v2, v3); ~C2(); }; Class C3: virtual public OBJECT { string a31, a32, a33; C3(char *v1, v2, v3); ~C3(); }; … // constructors of C1, C2, C3 … // destructors of C1, C2, C3 Application(int argc, char **argv) { C1 a(“a”, “b”, “c”, “d”, “e”); C2 b(“a”, “b”, “c”); C3 c(“a”, “b”, “c”); } RULECLASS test() { comment: example direction: FORWARD } 추론 기법
추론 기법 • RULE R1 (test) • { • for: (?obj1 in C1) • (?obj2 in C2) • (?obj3 in C3) • if: (?obj1 a11 = “a” a12 = “b” a13 = ?x) • (?obj2 a21 = “a” a22 = “b” a23 = ?x) • (?obj3 a31 = “a” a32 = “b” a33 = ?x) • do: (modify ?obj1 a14 = “f”) • } • RULE R2 (test) • { • for: (?obj1 in C1) • (?obj2 in C2) • if: (?obj1 a12 = “a” a14 = “f” a13 = ?x) • (?obj2 a21 = “a” a22 = “b” a23 = ?x) • do: (modify ?obj1 a15 = “g”) • }
추론 기법 • 풀이: 그림 6.8 • 그림에서 왼쪽 알파 메모리 노드와 오른쪽 알파 메모리 노드는? • Rete 알고리즘 • 규칙의 개수가 많아질수록 효율성이 높은 것으로 알려짐
전문가 시스템의 전문가 유지 • 전문가 시스템이 운영되는 형태 • 서비스 형태: 시스템 운영 그룹이 중간에 있음 • 결과물 형태: 사용자가 직접 사용 • 전문가 시스템 인도 시스템에 포함되는 것들: • Product name • Knowledge base name • Initial ruleclass name: forward reasoning 경우 • Initial query: backward reasoning 경우 • Output directory • UI 에 포함되는 것들 • How 기능: 현재까지의 추론이 어떻게 이루어 졌는가에 대한 설명 • Why 기능: 전문가 시스템이 사용자에게 질문한 이유 • Inference browser: 추론에 대한 좀더 자세한 내막 • 전문가 시스템 유지 보수자 • 지식의 변경, 첨가, 확장
지식 공유 모델 • 전문가 데이터베이스 시스템 • 전문자 시스템 + 데이터베이스 시스템 • 전문가 시스템: 지식의 양이 많아짐 • 데이터베이스 시스템: 추론 기능 필요 • 지식베이스의 사실 베이스를 데이터베이스로 대체 • 데이터베이스 시스템 스스로가 추론 능력 가짐 • 데이터의 공유 및 지속성 유지 가능 • 전문가 시스템을 혼자가 아닌 여러 명이 사용, 지식 공유 • 연결 방법 4가지 • Loosely coupling 방법: 서로 독립적으로 연결 • Tightly coupling 방법: 통합 • Intelligent interface 방법 • Expert command language 방법
지식 공유 모델 • Loosely coupling 방법: 서로 독립적으로 연결 • Communication link 에 의해 • Database 시스템은 data bank 역할 만 • 종류: • Database 시스템이 ES의 지식을 저장하는 경우: database 입장에서 ES는 하나의 사용자, ES 입장에서는 database가 사실베이스. Goal이 새워질 때마다 database 접근 • reasoning 을 수행하는 데 필요한 데이터 저장하는 경우 • 장단점: 많은 양의 데이터 쉽게 가져옴; 데이터 전송 시간 김 (database open/close 시간); ES와 DB가 N 대 1로 연결될 때 데이터 consistency (DB가 해결) • Tightly coupling 방법 • Integrated system 방법: database 가 ES에서 라이브러리처럼 구현됨; 별도 구현해야 하므로 부담; 속도 빠름; 많은 데이터 처리 못함 • Embedded system 방법: database 시스템을 확장하여 추론 기능 첨가; database 시스템에서 특정 질의에 답할 수 있도록 기능 확장 • Intelligent interface 방법 • Database 시스템의 사용자 interface 를 지능적으로 개선 한 것 • Expert command language 방법 • Database 시스템의 명령어에 추론 명령어가 macro 형태로 제공된 것 • 실 예: 객체 지향 데이터베이스 ORION + 전문가 시스템 구축 언어 PROTEUS
Summary • Expert Systems • 전문가 시스템의 배경 • Basic Components of Expert Systems • Expert System Building Tool • Convectional Program vs. Expert Systems • Application Areas • 구축 과정 • 지식베이스 구성과 표현 • 추론 기법 • 지식 공유 모델