Transcript lec16

Modified from the slides
by SciTech Media
전문가 시스템 (Expert Systems)
(Lecture Note #16)
인공지능
2002년 2학기
이복주
단국대학교 컴퓨터공학과
1
Outline










Expert Systems
전문가 시스템의 배경
Basic Components of Expert Systems
Expert System Building Tool
Convectional Program vs. Expert Systems
Application Areas
구축 과정
지식베이스 구성과 표현
추론 기법
지식 공유 모델
2
전문가 시스템 활용

개발된 시스템 예
–
–
–
–
–
–
–
–
화학 분야: DENDRAL, MOLGEN
컴퓨터 시스템 디자인: XCON
전자 분야: ACE, EURISKO, SOPHIE
지질: PROSPECTOR
의학: MYCIN, ONCOCIN, GUIDON, PATHFINDER
군사: FLEAT
전화 통신 분야: COMPASS
기계: CHARLEY
3
전문가 시스템 구축 언어
일반적인 문제에 적용할 수 있도록 범용성을 가진 전
문가 시스템 구축을 위한 언어
 전문가 시스템 구축 언어 vs. 기존의 고급언어

– 개발 기간 단축 됨: 코딩, 디버깅, 유지 보수
– 개발 편리: 지식 표현 방법 등이 미리 내장됨
• Vs. LISP: 유연하지만 사용하기 어려움, 숙달된 프로그래머 필요

영역 지향적 (domain-specific) 전문가 시스템 구축
언어
– 특정 문제에 좀 더 나은 효율성
– 범용 전문가 시스템 구축 언어보다 많이 쓰임

종류
– EMYCIN, EXPERT, KAS, OPS5, NEXPERT, ART, KEE,
LOOPS, HEXPERT, CLIPS
– CLIPS 많이 쓰임
4
전문가 시스템 구축 과정

3 단계
– 초기 단계 (initial process)
• 문제 영역 선택, 개발 환경 구축 방법 결정
– 핵심 개발 단계 (core development phase)
• 전문가로부터 지식 습득
• 프로토타입 구현
– 최종 개발 및 운용 단계 (final development &
deployment)
• 사양 만족 확인, 테스트, 평가
• 문서 작성, 유지 보수 위한 관리자 지정

전문가로부터 지식 습득 방법
–
–
–
–
지식 공학자 (knowledge engineer)
지능적 편집 프로그램 (intelligent editing program)
귀납적 프로그램 (induction program)
전문 교재 이해 프로그램 (text understanding program)
5
전문가 시스템 구축 과정 (2)

습득된 지식 표현 방법
– 규칙 (rule): if <condition> then <execution> 형태
• 가장 많이 쓰임
– 의미망 (semantic network): 네트워크, 노드, 아크
• 지식의 인과 관계 표현 편리; 자연어 처리에 많이 쓰임
– 프레임 (frame): 표현 대상, 속성, 메소드
• 많은 양의 정보 처리; 시각 정보 처리, 음성 인식에 많이 활용
6
전문가 시스템 구축과정 (3)

전문가 시스템 구축과정
Domain
Expert
Toolbuilder
Builds
Expert
System
Building
Tool
Extends
and tests
Interviews
Uses
Knowledge
Engineer
Builds,
refines,
and tests
Expert
System
End-User
Uses
Adds
data
Clerical
Staff
7
지식 베이스 구성과 표현

지식 베이스 구성
– 1개의 지식베이스 vs. 여러 작업 단위 분할 방법
– 1개의 작업 단위 = 1개의 규칙 집합 (ruleclass)
– 각각의 작업 단위에서 병렬적으로 진행

지식원(knowledge source)으로 부터 문제 영역을 분할하여 여러 부
분 지식베이스 만들어 통합 (그림 6.5)
– 예: 자동차 ES: 엔진 지식베이스 + 브레이크 지식베이스
8
지식 베이스 구성과 표현

자동차 엔진 지식 베이스 예: 예제 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}
9
지식 베이스 구성과 표현 (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
; 전향 추론
}
10
지식 베이스 구성과 표현 (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 추론을 수행한다.
11
지식 베이스 구성과 표현

예제 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)
}
12
지식 베이스 구성과 표현

사실 클래스
–
–

여러 유사한 객체들에 대한 묘사, 자료 추상화
모든 사실은 하나의 사실 클래스에 속함
정의
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)”]
}
13
지식 베이스 구성과 표현

사실의 표현
FACT <fact id> (<factclass id>)
{
<attr id>: <value> with <cf>
<attr id>:
}
– 예:
FACT mpi1(MPI)
{
IG_key: “on” with 1.0
}
14
추론 기법

추론의 3단계
– 규칙과 사실을 매칭하는 단계 (matching)
• 전체 시간의 90% 이상 차지
– 매칭된 규칙들 중 선택하는 단계 (selection)
– 선택된 규칙을 실행하는 단계 (execution)

n개의 규칙 m개의 사실
– n*m번의 매칭 필요
15
추론 기법

Rete 알고리즘
– Charles Forgey 제안, OPS5에서 쓰임
– 구조적 유사성 (structural similarity)와 시간적 중복성
(temporal redundancy) 이용

구조적 유사성
– 각 규칙의 조건이 같은 것이 있으면 공유
• 예: 그림 6.7: 조건 1이 공유되도록 규칙망 구성

시간적 중복성
– 작업 메모리의 변화 정보를 저장, 매칭된 사실등을 다음 번에 활용
하도록 함
– 예: 규칙 1에 조건 1, 2가 있는데 현재 사실이 조건 1만 만족하면
조건 1에 관한 정보만 저장
• 시간이 지나 조건 2를 만족하는 사실이 있으면 활용
16
추론 기법

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
–
(객체 애트리뷰트 값)의 토큰 형태로 노드망을 통과하면서 매칭
• 매칭 결과: 만족된 규칙들의 집합
17
추론 기법

예제 6.4: 사실 베이스와 규칙 주어졌
을 때 Rete 노드망 생성
1. Class C1: virtual public OBJECT
2. {
3.
string a11, a12, a13, a14,
a15;
4.
C1(char *v1, v2, v3, v4, v5);
5.
~C1();
6. };
7. Class C2: virtual public OBJECT
8. {
9.
string a21, a22, a23;
10.
C2(char *v1, v2, v3);
11.
~C2();
12. };
13. Class C3: virtual public OBJECT
14. {
15.
string a31, a32, a33;
16.
C3(char *v1, v2, v3);
17.
~C3();
18. };
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
… // 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
}
18
추론 기법
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
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”)
}
19
추론 기법

풀이: 그림 6.8
– 그림에서 왼쪽 알파 메모리 노드와 오른쪽 알파 메모리 노드는?

Rete 알고리즘
– 규칙의 개수가 많아질수록 효율성이 높은 것으로 알려짐
20
전문가 시스템의 전문가 유지

전문가 시스템이 운영되는 형태
– 서비스 형태: 시스템 운영 그룹이 중간에 있음
– 결과물 형태: 사용자가 직접 사용

전문가 시스템 인도 시스템에 포함되는 것들:
–
–
–
–
–

Product name
Knowledge base name
Initial ruleclass name: forward reasoning 경우
Initial query: backward reasoning 경우
Output directory
UI 에 포함되는 것들
– How 기능: 현재까지의 추론이 어떻게 이루어 졌는가에 대한 설명
– Why 기능: 전문가 시스템이 사용자에게 질문한 이유
– Inference browser: 추론에 대한 좀더 자세한 내막

전문가 시스템 유지 보수자
– 지식의 변경, 첨가, 확장
21
지식 공유 모델

전문가 데이터베이스 시스템
–
–
–
–
–
–
–

전문자 시스템 + 데이터베이스 시스템
전문가 시스템: 지식의 양이 많아짐
데이터베이스 시스템: 추론 기능 필요
지식베이스의 사실 베이스를 데이터베이스로 대체
데이터베이스 시스템 스스로가 추론 능력 가짐
데이터의 공유 및 지속성 유지 가능
전문가 시스템을 혼자가 아닌 여러 명이 사용, 지식 공유
연결 방법 4가지
–
–
–
–
Loosely coupling 방법: 서로 독립적으로 연결
Tightly coupling 방법: 통합
Intelligent interface 방법
Expert command language 방법
22
지식 공유 모델

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
23
Summary










Expert Systems
전문가 시스템의 배경
Basic Components of Expert Systems
Expert System Building Tool
Convectional Program vs. Expert Systems
Application Areas
구축 과정
지식베이스 구성과 표현
추론 기법
지식 공유 모델
24