
전문가 시스템과 지식 공학 ― 생성 규칙·순방향 추론·확도 계수부터 진리 유지 시스템과 의료·화학·수식 처리·상용 생산 시스템까지
요약
기호주의 AI의 핵심인 전문가 시스템의 구조와 지식 공학의 원리를 다룹니다. 순방향·역방향 추론, 불확실성 처리 방식부터 의료, 화학 등 다양한 산업 분야의 실제 적용 사례를 정리합니다.
핵심 포인트
- 전문가 시스템의 4대 구성 요소(지식 베이스, 워킹 메모리, 추론 엔진, UI) 이해
- 순방향 및 역방향 추론과 확도 계수를 통한 불확실성 처리 방식 학습
- 지식 공학(Knowledge Engineering)의 개념과 지식 획득의 중요성
- 의료, 화학, 수식 처리 등 분야별 대표적인 전문가 시스템 사례 분석
규칙 기반의 전문가 시스템을 구성하는 지식 베이스(Knowledge Base)·워킹 메모리(Working Memory)·추론 엔진(Inference Engine)·사용자 인터페이스(User Interface)라는 기본 구조와, 순방향 추론(Forward Chaining)/역방향 추론(Backward Chaining), 확도 계수(Certainty Factor)/퍼지 추론(Fuzzy Inference)에 의한 불확실성 처리 방식을 Swift 샘플 코드로 확인한 후, 메타 지식(Meta-knowledge)·진리 유지 시스템(Truth Maintenance System, 의존 기록)·정성적 추론(Qualitative Reasoning)이라는 발전적인 화제, 지식 공학(Knowledge Engineering)이라는 활동, 그리고 의료·화학·수식 처리·상용 생산 시스템·자원 탐사·군사 물류라는 각 문제 영역에서 만들어진 대표적인 전문가 시스템군을 정리합니다.
- 서론
-
- 전문가 시스템의 기본 구조: 지식 베이스·워킹 메모리·추론 엔진·사용자 인터페이스
-
- 추론의 방향성: 순방향 추론과 역방향 추론(목적 지향 추론)
-
- 불확실성의 처리: 확도 계수와 퍼지 추론
-
- 지식 공학(Knowledge Engineering) ― 지식 획득의 병목 현상과 전문가 시스템 셸(Expert System Shell)
-
- 메타 지식·진리 유지 시스템·정성적 추론 ― 의존 기록·제약 보류에 의한 후보 생성·제약 네트워크
-
- 의료 진단 분야: MYCIN·EMYCIN·Digitalis Advisor·Caduceus·PUFF
-
- 화학·분자 구조 분야: DENDRAL·Meta-DENDRAL·CRYSALIS·LHASA·SECS·SYNCHEM
-
- 수식 처리 분야: SAINT·SIN·MATHLAB·MACSYMA·Maple·REDUCE·SMP·muMATH
-
- 프로덕션 시스템과 상용화: R1/XCON·OPS5·OPS83·OPS86
-
- 자원 탐사·지질 분야: PROSPECTOR·DIPMETER ADVISOR
-
- 군사·물류 분야: DART
- 요약
- 주석
- 참고 자료
전문가 시스템(Expert System)은 특정 전문가가 가진 지식을 컴퓨터로 옮겨 담아, 그 전문가를 대신해 조언이나 진단을 수행하게 하려는 기호주의 AI(Symbolic AI) 중에서도 가장 실용화에 가까워진 장르입니다.
전문가 시스템에는 공통된 특징이 있습니다. 그것은 다루는 대상을 일정한 분야(문제 영역, task domain)로 한정한다는 것입니다. "모든 문제를 푸는 똑똑한 프로그램"이 아니라, "혈액 감염증 진단" "질량 분석 데이터로부터의 분자 구조 추정" "VAX 컴퓨터의 부품 구성"과 같이 좁고 깊은 하나의 영역에 특화함으로써 비로소 실용적인 성능을 얻을 수 있다는 발상입니다. 이는 Edward Feigenbaum이 "knowledge is power(지식은 힘이다)"라고 부른 가설 그 자체이며, 범용 추론 기법을 세련되게 만드는 것보다 특정 영역의 전문 지식을 대량으로 쏟아붓는 편이 실제 문제를 해결할 수 있다는, 1970년대 AI 연구의 전환점을 상징합니다.
이 기사에서는 먼저 규칙 기반 전문가 시스템의 기본 구조를 Swift 샘플 코드로 확인하고, 그 위에 전문가로부터 지식을 끌어내어 시스템에 구현하는 **지식 공학(Knowledge Engineering)**이라는 활동과 메타 지식·진리 유지 시스템·정성적 추론과 같은 발전적인 화제를 정리합니다. 마지막으로 의료·화학·수식 처리·상용 생산 시스템·자원 탐사·군사 물류라는 각 문제 영역에서 실제로 만들어진 대표적인 전문가 시스템군을 살펴보겠습니다.
규칙 기반 전문가 시스템은 다음 4가지 부품으로 나누어 생각하면 이해하기 쉽습니다.
| 부품 | 역할 |
|---|---|
| 지식 베이스(Knowledge Base) | 전문 지식을 "만약 〇〇라면 △△"라는 **생성 규칙(production rule)**의 집합으로 축적한 것 |
| ... | |
| 이 4분할은 Newell과 Simon이 인간의 문제 해결 과정의 계산 모델로서 제안한 **프로덕션 시스템(production system)**의 구조를 그대로 계승하고 있습니다(주1). 중요한 것은, 지식 베이스와 추론 엔진이 분리되어 있다는 설계입니다. 추론 엔진은 영역에 의존하지 않는 범용 기계이며, 영역 고유의 지식은 모두 지식 베이스 측으로 외부화되어 있습니다. 이 분리가 4절에서 보는 "전문가 시스템 셸(Expert System Shell)"이라는 개념의 토대가 됩니다. |
추론 엔진의 핵심은 **match(규칙의 조건부와 워킹 메모리(working memory)를 대조) → resolve(발화시킬 규칙을 하나 선택) → act(결론을 워킹 메모리에 추가)**라는 「match-resolve-act 사이클」입니다. 워킹 메모리에 변화가 없을 때까지 이 사이클을 반복하는 방식을 **순방향 추론 (forward chaining)**이라고 부릅니다. 다음 샘플은 단순한 명제(진위만을 가지는 사실)를 조건부에 가진 생성 규칙을 사용하여, 순방향 추론의 절차를 구현한 것입니다 (역방향 추론의 구현은 2절에서 다룹니다).
final class WorkingMemory {
private(set) var facts: Set<String> = []
func assert(_ fact: String) { facts.insert(fact) }
...
let knowledgeBase = [
Rule(name: "R1", ifConditions: ["발열", "목의 통증"], thenFact: "상기도염 의심"),
Rule(name: "R2", ifConditions: ["상기도염 의심", "농성 콧물"], thenFact: "세균성 의심"),
...
trace
에서 사이클마다의 발화 기록을 남기는 것은 단순한 디버깅용 부산물이 아닙니다. 전문가 시스템의 사용자 인터페이스는 결론을 반환할 뿐만 아니라, 「왜 그 결론에 도달했는가 (WHY 명령)」, 「어떻게 그 사실을 알게 되었는가 (HOW 명령)」를 이용자에게 설명하는 **설명 기능 (explanation facility)**을 갖추는 것이 중시되었습니다. trace
는 그 최소한의 구현이라고 볼 수 있습니다.
참고로, 여기서의 forwardChain
은 사이클마다 모든 규칙을 선형적으로 재검토하는 소박한 구현입니다. 실제 프로덕션 시스템 언어(9절의 OPS5 등)는 사실이 변화한 차분(difference)만을 다루는 Rete 알고리즘 (Rete algorithm) (Charles Forgy, 1979년)에 의해, 규칙 수와 사실 수가 수천 개에 달해도 효율적으로 대조할 수 있도록 하고 있습니다 (주2).
전절의 forwardChain
은 「지금 알고 있는 사실에서 출발하여, 도출할 수 있는 결론을 모두 도출한다」는 데이터 주도(data-driven) 추론이었습니다. 이와 대조적으로, 「어떤 하나의 결론(goal)이 성립하는지 확인하고 싶다」는 경우에는 역방향 추론 (backward chaining), 다른 이름으로 **목적 지향 추론 (goal-directed reasoning)**이 더 효율적입니다. 골(goal)에서 출발하여, 이를 도출하기 위해 필요한 IF부를 서브 골(sub-goal)로서 재귀적으로 거슬러 올라가며, 말단에서는 이용자에게 직접 질문하여 사실을 확인합니다.
extension InferenceEngine {
// 역방향 추론 (목적 지향 추론): goal을 워킹 메모리가 이미 가지고 있으면 즉시 참.
// 가지고 있지 않으면 goal을 THEN부에 가진 규칙을 찾아, 그 IF부를 서브 골로서
...
let freshMemory = WorkingMemory()
freshMemory.assert("발열")
freshMemory.assert("목의 통증")
...
참고로, 이 구현은 간결함을 우선하여 골을 도출할 수 있는 규칙을 첫 번째 하나만 시도합니다. 동일한 결론을 도출하는 규칙이 여러 개인 실제 시스템에서는, 후보 규칙을 순차적으로 시도하고 실패하면 다른 규칙으로 전환하는 백트래킹 (backtracking) 기구가 필요합니다.
순방향 추론은 「지금 있는 사실로부터 무엇을 말할 수 있는지 전부 알고 싶다」는 상황(9절의 R1/XCON과 같은 구성·설정 문제)에 적합하고, 역방향 추론은 「특정 가설이 옳은지 효율적으로 검증하고 싶다」는 상황(6절의 MYCIN, 10절의 PROSPECTOR와 같은 진단·감정 문제)에 적합합니다. 동일한 생성 규칙의 집합이라 하더라도, 어느 방향으로 따라갈지는 시스템의 목적에 따라 구분하여 사용되었습니다.
현실의 전문 지식은 「발열이 있으면 반드시 감염병이다」와 같은 확실한 규칙만 있는 것이 아닙니다. 「발열이 있으면, 아마도 감염병일 것이다」라는 **정도 (degree)**를 다룰 필요가 있습니다. 1970~80년대의 전문가 시스템에서는 이를 엄격한 확률론 (베이즈 추정, Bayesian estimation)이 아니라, 전문가가 직관적으로 신고하기 쉬운 두 가지 휴리스틱(heuristic)한 프레임워크로 다루었습니다.
MYCIN(6절)이 도입한 **확도 계수(Certainty Factor, CF)**는 어떤 사실의 확실성을 -1(확실히 거짓) ~ +1(확실히 참)의 수치로 나타냅니다(주3). 베이즈 추정(Bayesian estimation)이 요구하는 방대한 양의 조건부 확률을 전문가로부터 모두 듣는 것은 비현실적이었기 때문에, Shortliffe와 Buchanan은 "전문가가 개별 규칙마다 '이 규칙을 얼마나 신뢰하는가'를 신고한다"는, 보다 다루기 쉬운 방식을 설계했습니다.
여러 규칙이 독립적으로 동일한 결론을 지지하는 경우, 그 확신도는 다음 결합 공식으로 하나로 합쳐집니다.
final class CertaintyMemory {
private var cfs: [String: Double] = [:]
func cf(of fact: String) -> Double { cfs[fact] ?? 0 }
...
let cfRules = [
CFRule(ifConditions: ["배양 양성"], thenFact: "그람 음성균 감염 의심", cf: 0.6),
CFRule(ifConditions: ["발열"], thenFact: "그람 음성균 감염 의심", cf: 0.3)
...
두 개의 독립적인 근거(배양 검사와 발열)가 모두 동일한 결론을 지지함으로써, 단독 값(0.48)보다 높은 확신도(0.636)로 수렴하고 있습니다. 이는 확률의 곱셈 정리와는 다른, 전문가의 직관에 맞춰 설계된 발견적(heuristic) 계산입니다. 또한, 근거가 결론을 부정하는 경우(음의 CF)에는 부호의 조합에 따라 상쇄되는 식으로 전환되지만, 여기서는 서로 지지하는 경우만을 구현했습니다(완전한 결합 공식은 주3의 문헌을 참조하십시오).
확도 계수가 "어떤 명제가 얼마나 확실한가(진위의 불확실성)"를 다루는 반면, Lotfi Zadeh가 1965년에 제안한 퍼지 집합(Fuzzy Set)과 그에 기반한 퍼지 추론(Fuzzy Inference)(주4)이 다루는 것은, 애초에 "고열", "젊음", "빠름"과 같은 개념 자체가 가진 **모호함(vagueness)**입니다. 어떤 값이 특정 집합에 속하는지 여부를 0 또는 1이 아니라, 0~1 사이의 **소속도(degree of membership)**로 나타냅니다.
// 퍼지 집합을 low에서 소속도 0 → peak에서 1 → high에서 다시 0이 되는 삼각형 함수로 표현
struct FuzzySet {
let low: Double
...
이 소속도를 그대로 IF-THEN 규칙의 결론 강도로 사용하는 것이, Ebrahim Mamdani가 1975년에 정식화한 대표적인 퍼지 추론 방식입니다(주5). 확도 계수와 퍼지 추론 모두 확률론처럼 방대한 조건부 확률이나 통계 데이터를 요구하지 않고, 전문가의 직관적인 신고나 언어화하기 쉬운 개념을 그대로 계산에 도입할 수 있다는 점에서 공통적이며, 당시 지식 공학이 안고 있던 "전문가로부터 어떻게 지식을 끌어낼 것인가"라는 과제에 대한 두 가지 서로 다른 해답이었다고 할 수 있습니다.
지금까지의 추론 엔진이나 CF 계산은 말하자면 "빈 그릇"입니다. 그릇에 무엇을 채울 것인가, 즉 해당 문제 영역에서의 생성 규칙을 어떻게 만들 것인가가 전문가 시스템 개발의 실질적인 난관이었습니다. 이 작업을 담당하는 전문직을 지식 공학(Knowledge Engineering), 담당자를 **지식 엔지니어(knowledge engineer)**라고 부릅니다(주6).
지식 엔지니어의 업무는 소프트웨어 개발의 요구사항 정의와 유사하지만, 대상이 프로그램의 사양이 아니라 **인간 전문가의 암묵지(tacit knowledge)**라는 점이 다릅니다. 전문가 자신도 자신이 어떤 판단 기준으로 결론에 도달하는지를 명확하게 언어화하지 못하는 경우가 많아, 면담·관찰·시행착오를 반복하며 규칙의 형태로 다듬어 나갈 필요가 있었습니다. 이처럼 전문 지식을 끌어내어 형식화하는 작업 자체가 개발 전체의 병목 현상이 되는 현상을 **지식 습득의 병목(knowledge acquisition bottleneck)**이라 부르며, 이는 전문가 시스템 실용화에 있어 최대의 과제로 남아 있었습니다.
1절에서 살펴본 「지식 베이스와 추론 엔진의 분리」는 이 과제에 대한 중요한 해답 중 하나였습니다. MYCIN에서 의료 지식만을 제거하고, 추론 엔진과 설명 기능을 가진 사용자 인터페이스만을 남긴 것이 **EMYCIN (Empty MYCIN)**입니다 (van Melle, 1979년) (주7). EMYCIN은 영역에 의존하지 않는 범용적인 「그릇」으로서 재사용할 수 있으며, 여기에 폐 기능 검사 지식을 부은 것이 6절의 PUFF이고, 구조 공학 지식을 부은 것이 SACON입니다. 이 「그릇과 내용물을 분리하고 그릇을 재사용한다」는 발상은 **에스퍼트 시스템 쉘 (expert system shell)**로 일반화되어, 1980년대의 KEE·ART와 같은 상용 쉘, 나아가 후대의 CLIPS·Jess·Drools와 같은 룰 엔진 (rule engine)으로 이어지고 있습니다.
또 다른 해답은 7절에서 다루는 Meta-DENDRAL입니다. 전문가와의 면담을 통해 규칙을 하나씩 듣는 대신, 실험 데이터 그 자체로부터 규칙을 자동으로 **귀납 (induction)**시키려는 시도로, 지식 획득의 병목 현상을 머신러닝 (machine learning)을 통해 우회하려고 했던 초기 사례로 위치할 수 있습니다.
지금까지의 추론 엔진은 「규칙을 어떻게 적용할 것인가」에 집중해 왔으나, 실제 에스퍼트 시스템은 더욱 고도화된 두 가지 과제에도 직면했습니다. 하나는 「어떤 규칙을 어떤 순서로 시도해야 하는가」라는 지식에 대한 지식을 어떻게 다룰 것인가 하는 과제이며, 다른 하나는 전제가 뒤집혔을 때나 여러 개의 경합하는 가설을 관리하며 결론을 도출할 때, 어떻게 효율적으로 정합성을 유지할 것인가 하는 과제입니다.
생성 규칙의 집합 (대상 레벨의 지식)과는 별개로, 「어떤 규칙을 우선적으로 시도해야 하는가」, 「어떤 경우에 이 규칙군을 무시해도 되는가」와 같은, 지식의 사용법에 대한 지식을 **메타 레벨 지식 (meta-level knowledge)**이라고 부릅니다. Randall Davis는 MYCIN의 지식 베이스를 대화적으로 확장·디버깅하기 위한 TEIRESIAS (1976년)를 개발하였으며, 그 안에서 메타 규칙 (meta-rule)이라는 개념을 도입했습니다 (주8). 메타 규칙은 예를 들어 「원내 감염이 의심되는 경우에는 먼저 녹농균에 관한 규칙군을 우선적으로 시도한다」와 같은 형태로, 대상 레벨의 규칙 그 자체가 아니라 규칙군을 시도하는 우선순위를 제어합니다.
이는 시스템이 자기 자신의 추론 과정을 대상으로 다루는 **반성 (reflection)**의 일종입니다. 4절의 Meta-DENDRAL이 질량 분석의 개별 규칙이 아니라 「규칙을 어떻게 찾을 것인가」라는 더 높은 레벨의 탐색 전략을 학습을 통해 획득하려 했던 것도 같은 의미에서 반성적·메타 레벨 학습이었다고 할 수 있습니다. 대상 레벨의 지식을 아무리 충실히 채워도 그것을 어떻게 사용할지에 대한 계층이 동반되지 않으면, 규칙 수가 늘어날수록 탐색이 비효율적으로 변해가는 문제에 대한 해답입니다.
순방향 추론 (forward reasoning)·역방향 추론 (backward reasoning)은 일단 도출한 결론을 워킹 메모리 (working memory)에 그대로 둡니다. 하지만 어떤 전제가 나중에 오류라는 것이 밝혀질 경우, 그 전제로부터 도출된 결론도 모두 오류가 되어야 합니다. 단순한 구현에서는 이를 탐지하기 위해 모든 결론을 처음부터 다시 도출해야 합니다.
Jon Doyle가 1979년에 제안한 진리 유지 시스템 (Truth Maintenance System, TMS) (주9)은 각각의 결론에 「왜 그것을 믿고 있는가」라는 근거를 **의존 기록 (dependency recording)**으로서 갖게 함으로써 이 재계산을 피합니다. 전제를 철회할 때는 의존 기록을 거슬러 올라가 그 전제에 의존하고 있던 결론만을 골라 제거하면 되며, 무관한 결론에는 손을 대지 않습니다.
// 진리 유지 시스템: 각 결론에 「어떤 사실로부터 도출되었는가」라는 의존 기록을 갖게 해두면,
// 전제를 하나 철회했을 때, 그에 의존하는 결론만을 골라 제거할 수 있다
final class TruthMaintenanceSystem {
...
}
let tms = TruthMaintenanceSystem()
tms.believe("그람 음성균 감염 의심", supportedBy: ["배양 양성"])
tms.believe("항균제 검토 권장", supportedBy: ["그람 음성균 감염 의심"])
...
de Kleer는 1986년, 이 사고방식을 발전시켜 결론을 단일한 신념으로 갖는 것이 아니라, 어떠한 가정의 조합(environment, 환경) 위에서 그 결론이 성립하는지를 태그하는 **가정에 기반한 진리 유지 시스템 (Assumption-based TMS, ATMS)**을 제안했습니다(주10). ATMS에서는 모순되는 여러 가설을 하나로 좁히지 않고 병렬적으로 유지할 수 있어, 진단과 같이 "여러 후보 가설을 비교하며 좁혀나가는" 문제와 궁합이 좋은 프레임워크입니다.
문제를 "변수와 그 취할 수 있는 값, 변수 간의 제약"으로 정식화한 것을 **제약 네트워크 (constraint network)**라고 부릅니다. David Waltz가 1975년, 선화(line drawing)로부터 3차원 물체를 해석하는 장면에서 정점별로 모순되는 해석을 제약 전파(constraint propagation)를 통해 깎아내는 수법을 보여준 것은, 제약 네트워크의 초기 대표적인 성공 사례로 알려져 있습니다(주11).
이 제약 네트워크와 앞서 언급한 의존 기록을 결합하여 장치의 고장 진단에 응용한 것이 Randall Davis 등의 **모델 기반 진단 (model-based diagnosis)**입니다(주12). 대상 장치(예를 들어 디지털 회로)를 부품 간의 제약 네트워크로 표현하고, 각 부품에는 "입력이 이러하면 출력은 이러하다"라는 정상 동작의 **시뮬레이션 규칙 (simulation rule)**을 부여하여 입력으로부터 기대되는 출력을 예측합니다. 예측 하나하나에는 "어느 부품이 정상이라고 가정한 결과인가"라는 의존 기록이 붙습니다. 실측값이 예측과 어긋났을 때, 의심스러운 부품의 제약을 하나씩 **보류 (suspension)**하며 모순이 해소되는지 조사하면, "이 부품이 고장 났다고 가정하면 모든 관측과 앞뒤가 맞는다"라는 고장 후보를 기계적으로 열거할 수 있습니다. 이것이 **제약 보류에 의한 후보 생성 (candidate generation by constraint suspension)**입니다. "이 증상이라면 대개 여기가 고장 난 것이다"라는 전문가의 경험칙을 규칙화하는 진단과 대조적으로, 장치의 구조와 정상 동작 모델만으로 진단을 도출할 수 있다는 점, 경험칙이 존재하지 않는 신제품 장치나 미지의 고장에도 대응할 수 있다는 점이 특징입니다.
물리적인 장치나 시스템의 거동을 정밀한 미분 방정식이 아니라 "증가·불변·감소"와 같은 **정성적인 값 (qualitative value)**의 조합으로 표현하고, 그 상태가 어떻게 전이될 수 있는지를 추적하는 수법을 **정성적 추론 (qualitative reasoning)**이라고 부릅니다. de Kleer의 정성 물리학, Kenneth Forbus의 정성 프로세스 이론 (Qualitative Process Theory), Benjamin Kuipers의 QSIM은 모두 이 사고방식을 대표하는 연구입니다(주13). "유입량이 유출량보다 많으면 수위는 증가한다"와 같은 정성적인 인과 관계를 규칙으로 기술하고, 가능한 정성적 상태의 전이를 모두 열거(envisioning)함으로써, 수치 모델을 구축할 수 없거나 구축할 필요가 없는 상황에서도 장치의 거동을 예측·진단할 수 있게 합니다. 앞서 언급한 모델 기반 진단에서 부품의 정상 동작을 정성적으로 기술하는 장면과도 이어져 있으며, 10절의 DIPMETER ADVISOR와 같이 물리량의 해석을 다루는 시스템과도 친화성이 높은 사고방식이었습니다.
의료 진단은 전문 지식이 고도로 체계화되어 있는 한편 인력 부족도 심각하다는 이유로, 전문가 시스템의 초기 주전장이 되었습니다.
MYCIN (Edward Shortliffe, Stanford, 1972~1980년)은 혈액 중의 세균 감염증을 진단하고 적절한 항생제와 그 투여량을 권장하는 시스템입니다(주3). 수백 개 규모의 생성 규칙을 가지며, 역방향 추론 (backward chaining, 목적 지향 추론)을 통해 "이 환자는 그람 음성균에 감염되었을 가능성이 높은가"와 같은 가설을 검증하면서, 3절의 확도 계수로 결론의 확실성을 다루었습니다. 전문의와 동등하거나 그 이상의 진단 정밀도를 보인 평가 실험으로 알려져 있지만, 오진 시의 책임 소재와 같은 법적·윤리적 이유로 실제 임상 현장에 투입되지는 않았습니다.
EMYCIN은 앞 절에서 보았듯이, MYCIN에서 의료 지식을 제외한 범용 쉘입니다.
Digitalis Therapy Advisor(MIT 그룹, 1970년대 중반)는 심부전 치료제인 디기탈리스(Digitalis)의 투여량 조절을 조언하는 매우 초기 단계의 의료 진단 지원 시스템 중 하나입니다. MYCIN이 확도 계수(certainty factor)를 사용한 것과 달리, 이 시스템은 결정 분석 (decision analysis)적인 발상을 도입하였으며, 이는 동일한 '의료 진단 지원'이라는 문제 영역에서도 불확실성을 다루는 서로 다른 방식이 병행하여 모색되고 있었음을 보여줍니다.
Internist-I과 그 후계인 Caduceus(Jack Myers, Harry Pople, University of Pittsburgh, 1970년대~1980년대)는 MYCIN이 단일 감염병에 초점을 맞춘 것과 대조적으로, 내과 영역 전반을 대상으로 하며 여러 질환이 동시에 존재하는 환자를 진단하려고 시도한 야심 찬 시스템입니다. 질환과 증상의 연관성을 가중치가 부여된 스코어 네트워크로 표현했으나, 질환의 조합이 늘어남에 따라 고려해야 할 가설이 폭발적으로 증가하는 조합 폭발 (combinatorial explosion) 문제에 직면했습니다. 이에 Caduceus에서는 이 문제를 완화하기 위해 영역 분할 알고리즘을 도입했습니다.
PUFF(스탠퍼드 대학교와 퍼시픽 의료 센터, EMYCIN 기반)는 폐 기능 검사 측정값으로부터 폐 질환을 진단하는 시스템으로, 4절에서 언급한 EMYCIN 쉘을 실제 의료의 다른 영역으로 전용한 구체적인 사례입니다. 연구실 데모에 그치지 않고, 실제 환자 데이터의 해석에 일상적으로 사용된 몇 안 되는 전문가 시스템 중 하나로 꼽힙니다.
DENDRAL(Edward Feigenbaum, Joshua Lederberg, Bruce Buchanan, Stanford, 1965년~ )은 질량 분석계의 데이터로부터 미지의 유기 화합물의 분자 구조를 추정하는 시스템으로, 흔히 최초의 본격적인 전문가 시스템으로 간주됩니다(주14). 화학 전문 지식을 대량으로 결합함으로써, 일반적인 탐색 알고리즘만으로는 실용적인 시간 내에 해결할 수 없었던 구조 추정 문제를 해결할 수 있게 했으며, 이는 서두에서 언급한 'knowledge is power' 가설의 실증 사례가 되었습니다.
Meta-DENDRAL은 DENDRAL이 사용하는 질량 분석 규칙 자체를 전문가와의 면담이 아닌 실측 데이터로부터 자동으로 학습하려고 시도한 프로그램입니다. 4절에서 언급했듯이, 지식 획득의 병목 현상을 머신러닝 (machine learning)으로 우회하려 했던 초기 시도로 평가됩니다.
CRYSALIS는 DENDRAL 패밀리 중 하나로, X선 결정 구조 해석의 전자 밀도 맵으로부터 단백질의 입체 구조를 해석하는 시스템입니다. 여러 가지 서로 다른 입도의 지식원(저수준의 영상 처리부터 고수준의 구조 가설까지)을 하나의 공유 데이터 구조 위에서 협조시키는 **흑판 아키텍처 (blackboard architecture)**를 채택하고 있으며, 이는 Hearsay-II의 음성 인식 연구에서 유래한 설계입니다.
유기 합성 분야에서는 목표로 하는 분자로부터 출발하여 '어떤 결합을 끊어야 더 단순한 출발 물질에 도달할 수 있는가'를 역방향으로 생각하는 역합성 분석 (retrosynthetic analysis) 개념이 중심적인 역할을 했습니다. LHASA(E. J. Corey, Harvard, 1969년~ )는 이 역합성 분석을 휴리스틱 (heuristic)하게 지원하는 시스템으로, Corey는 이 합성 전략을 고안하여 노벨 화학상을 수상했습니다. SECS(W. Todd Wipke) 또한 같은 계보에 속하는 역합성 분석 지원 시스템입니다. LHASA와 SECS는 모두 화학자가 화면상에서 대화하며 탐색 방향을 유도하는 대화형 설계였습니다. 반면, SYNCHEM(Herbert Gelernter, SUNY Stony Brook)은 인간의 유도 없이 시스템 자체의 탐색과 휴리스틱으로 합성 경로를 도출하려 했다는 점에서 대조적입니다. 즉, 동일한 유기 합성 계획이라는 문제 영역 내에 '전문가가 대화적으로 탐색을 유도하는' 노선과 '시스템이 자율적으로 탐색하는' 노선이라는 두 가지 설계 사상이 공존하고 있었던 것입니다.
수식 처리 (기호 수식 처리, Computer Algebra)의 계보 또한 '전문가의 해법 지식을 컴퓨터에 주입한다'는 점에서 전문가 시스템과 발상의 뿌리를 공유합니다. 대상이 의료나 화학이 아닌 수학 그 자체라는 점만 다를 뿐, '숙련된 수학자라면 이렇게 풀 것이다'라는 절차적 지식을 대량으로 결합함으로써 실용적인 성능을 얻었다는 구도는 동일합니다.
SAINT (James Slagle, MIT, 1961년)는 대학 1학년 수준의 기호 적분 (symbolic integration) 문제를 휴리스틱 (heuristic) 탐색을 통해 해결한 초기 AI 프로그램 중 하나입니다. SIN (Symbolic INtegrator, Joel Moses, MIT, 1967년)은 SAINT의 후속작으로, 임시방편적인 탐색 대신 적분의 종류별로 체계화된 알고리즘을 적용하는 방식으로 전환하여 훨씬 더 높은 신뢰성을 달성했습니다.
MATHLAB (Carl Engelman, MITRE사, 1964년~)는 초기 대화형 수식 처리 시스템 (formula manipulation system)입니다. MIT의 Project MAC에서는 이 MATHLAB과 앞서 언급한 SIN의 흐름을 잇는 MACSYMA (1968년1980년대)가 개발되었습니다. MACSYMA는 당시 기준으로 최대 규모의 LISP 프로그램 중 하나로 여겨졌으며, 기호 적분, 인수분해, 방정식의 단순화 등 폭넓은 수식 처리를 통합한 포괄적인 수식 처리 시스템의 원형이 되었습니다. MACSYMA가 대형 컴퓨터를 필요로 했던 것과 대조적으로, 더 작은 컴퓨터에서도 효율적으로 작동하는 수식 처리 시스템으로 개발된 것이 Maple (University of Waterloo, 1980년)이며, 현재도 계속해서 사용되고 있습니다.
REDUCE (Anthony Hearn, 1968년~)는 MACSYMA와는 독립적으로 개발된 또 다른 초기 수식 처리 시스템으로, 현재도 오픈 소스 (open source)로 개발이 이어지고 있습니다. SMP (Symbolic Manipulation Program, Stephen Wolfram, Caltech, 1981년)는 이후 Wolfram이 작업하게 될 Mathematica의 직접적인 전신에 해당합니다. muMATH (David Stoutemyer, Soft Warehouse)는 대형 컴퓨터를 필요로 했던 다른 수식 처리 시스템들과는 대조적으로, 태동기 개인용 컴퓨터 (personal computer) 상에서 동작하는 소형 수식 처리 시스템으로 설계되었으며, 수식 처리를 개인의 책상 위로 가져왔다는 점에서 독보적인 위치를 차지합니다.
OPS5 (Charles Forgy, Carnegie Mellon University, 1977년)는 1절에서 살펴본 프로덕션 시스템 (production system)의 구조를 그대로 프로그래밍 언어로 구현한 범용 생성 규칙 (production rule) 기반 언어입니다. 1절의 주석에서 언급한 Rete 알고리즘을 구현하고 있어, 규칙과 사실의 수가 수천 개에 달하더라도 실용적인 속도로 순방향 추론 (forward chaining)을 수행할 수 있었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기