[인공지능] 프롤로그(Prolog)

Updated:

Prolog

Prolog는 자연어 처리 시스템 구축을 위해 개발된 언어이며, 사실(fact)이나 규칙(rule) 등을 기술하는 언어입니다. 대상(Object)과 대상 간의 관계(Relationship)를 포함하고 있는 문제를 해결하는 데 사용됩니다. 대상과 그들 간의 관계에 대한 사실(Facts) 을 선언해야 하고, 관계에 대한 규칙(Rules) 을 정의해야 합니다. 예를 들면 likes(john, mary)라는 사실은 john과 mary가 대상(인수, Arguments)이고, likes가 대상 간의 관계(술어, Predicate)를 의미합니다.

전문가 시스템

29-1

전문가시스템은 특정 분야에 대해 가지고 있는 전문적인 지식을 정리하고 표현하여 컴퓨터에 기억시킴으로써, 일반인도 이 전문지식을 이용할 수 있도록 하는 시스템입니다. 규칙 기반 전문가 시스템의 핵심적인 구성요소는 기반 지식, 데이터베이스, 추론 엔진, 사용자 인터페이스 등이 있습니다.

동물원 만들기

Prolog 언어로 전문가시스템으로 어떤 동물인지 식별하는 프로그램을 구현하였습니다. 프로그램을 개발하기에 앞서 다이어그램으로 간단한 동물원 프로그램 프로토타입을 설계해 보았습니다.

29-2

그 후, 각 동물들에 대한 특징을 정리 하였습니다.


코드

what_animal(X,Y,Z,W,V):-
    is_a(X,Y),
    characteristic(Y,Z,W),
    point(X,V).

mammal_is(X):-
    is_a(X, mammal).

birds_is(X):-
    is_a(X,birds).

reptile_is(X):-
    is_a(X,reptile).

characteristic(mammal, hair, give_milk).
characteristic(birds, wings, lay_eggs).
characteristic(reptile, scales, lay_egg).

is_a(kangaroo, mammal).
is_a(elephant, mammal).
is_a(rabbit, mammal).

is_a(eagle, birds).
is_a(penguin, birds).
is_a(parrot, birds).

is_a(turtle, reptile).
is_a(snake, reptile).
is_a(crocodile, reptile).

point(kangaroo, babypouch).
point(elephant, long_nose).
point(rabbit, long_ear).

point(eagle, sharpbeak).
point(penguin, can_swim).
point(parrot, lmitate_sound).

point(turtle, hardshell).
point(snake, no_legs).
point(crocodile, long_snout).


실제 프로그램에서는 프로토타입에 메모장에 정리한 각 동물의 특징을 추가하여주었습니다. 규칙을 먼저 기술해 준 후, 사실들을 정의하였습니다. 무슨 동물인지에 대해 나타내는 규칙(what_animal(X, Y, Z, W, V))은 총 3개의 사실이 모두 일치해야 true가 반환됩니다. 3개의 사실은 is_a(X, Y), characteristic(Y, Z, W), point(X, V)입니다. X는 동물 이름이고, Y는 어떤 종인지에 대한 속성입니다. Z와 W는 종에 대한 특징이고, V는 그 동물에 대한 특징을 나타내는 속성입니다.


결과

29-5

위 실행 결과는 동물의 특징으로 그 동물의 이름과 종, 종의 특징 두 가지를 찾아내는 것을 보여줍니다.

29-6

위 실행 결과는 동물의 이름으로 그 동물이 포유류인지, 조류인지, 파충류인지를 판별해주는 규칙에 대한 테스트 결과입니다. 캥거루는 포유류인 것이 사실이므로 true를 반환해주고, 독수리는 포유류가 아니고 조류이기 때문에 포유류인지 확인하는 규칙에 대해서는 사실이 아니므로 false가 출력됩니다.

Prolog라는 언어를 처음 사용해 보아서 규칙 기반 전문가 시스템 동물원을 구현하는데 어려웠고, 검색해보아도 자료가 충분하지 않아서 이해하고 응용하는 데 오래 걸렸다.

Leave a comment