인공지능 마크업 언어

인공지능 마크업 언어(AIML, Artificial Intelligence Markup Language)는 자연어 소프트웨어 에이전트 개발을 위한 XML 방언이다.

 역사 
AIML이라는 XML 방언은 1995년부터 2002년 사이에 리처드 월리스와 전 세계 자유 소프트웨어 커뮤니티에 의해 개발되었다. AIML은 처음에는 크게 확장된 엘리자였던 "A.L.I.C.E."("Artificial Linguistic Internet Computer Entity")의 기반이 되었고, 이는 매년 열리는 뢰브너 인공지능 대회에서 세 번 우승했으며, 2004년에는 Chatterbox Challenge의 챔피언이기도 했다.

A.L.I.C.E. AIML 세트가 GPL로 배포되었고, 대부분의 AIML 인터프리터가 자유 또는 오픈 소스 라이선스로 제공되기 때문에, 원래 프로그램 구현과 AIML 지식 기반을 바탕으로 많은 "앨리스봇 클론"이 만들어졌다. 여러 언어로 된 자유 AIML 세트가 사용자 커뮤니티에 의해 개발되어 제공되었다. 자바, 루비, 파이썬, C++, C 샤프, 파스칼 및 기타 언어(아래 #자유/오픈 소스 AIML 구현 참조)에서 사용할 수 있는 AIML 인터프리터가 있다.
AIML에 대한 준정식 사양 및 W3C XML 스키마를 사용할 수 있다.

2013년 초부터 A.L.I.C.E. 재단은 AIML 2.0 사양 초안을 작업 중이다.

 AIML 요소 
AIML은 여러 요소를 포함한다. 이 중 가장 중요한 것들은 아래에서 더 자세히 설명한다.

 카테고리 
AIML의 카테고리는 지식의 기본 단위를 형성한다. 카테고리는 적어도 두 가지 추가 요소인 패턴 및 템플릿 요소로 구성된다. 다음은 간단한 카테고리이다.

<category>
  <pattern>WHAT IS YOUR NAME</pattern>
  <template>My name is Michael N.S Evanious.</template>
</category>

이 카테고리가 로드되면 AIML 봇은 "What is your name"이라는 입력에 "My name is Michael N.S Evanious."라고 응답할 것이다.

 패턴 
패턴은 하나 이상의 사용자 입력을 일치시키기 위한 문자열이다. 다음과 같은 리터럴 패턴은

 WHAT IS YOUR NAME

대소문자를 무시하고 "what is your name"이라는 단일 입력만 일치시킬 것이다. 그러나 패턴은 하나 이상의 단어를 일치시키는 와일드카드를 포함할 수도 있다. 다음과 같은 패턴은

 WHAT IS YOUR *

"what is your name", "what is your shoe size", "what is your purpose in life" 등 무한한 수의 입력을 일치시킬 것이다.

AIML 패턴 구문은 정규 표현식보다 훨씬 덜 복잡하고 따라서 촘스키 위계에서 레벨 3보다 낮은 매우 간단한 패턴 언어이다.
간단한 패턴 매칭 기능를 보완하기 위해 AIML 인터프리터는 약어를 확장하고, 오타를 제거하는 등의 전처리 기능을 제공할 수 있다.

AIML 구문 자체는 유한 상태 기계만큼 복잡하며 따라서 촘스키 위계에서 최소 레벨 3이다. 이는 상태가 하나의 주제와 관련되기 때문이다. 이러한 동작을 구현하려면 상태가 우연히 벗어나지 않도록 주제가 "*" 패턴을 가져야 한다. 상태 전환은  태그로 구현된다. 이러한 방식으로 봇은 대화 중인 주제 또는 대화 중에 얻은 사용자 권한을 "기억"할 수 있다.

 템플릿 
템플릿은 일치하는 패턴에 대한 응답을 지정한다. 템플릿은 다음과 같은 간단한 리터럴 텍스트일 수 있다.

 My name is John.

템플릿은 다음과 같은 변수를 사용할 수 있다.

 My name is .

이는 봇의 이름을 문장에 대체하거나,

 You told me you are  years old.

이는 (알려진 경우) 사용자의 나이를 문장에 대체할 것이다.

템플릿 요소에는 기본 텍스트 서식, 조건부 응답(if-then/else) 및 무작위 응답이 포함된다.

템플릿은 또한  (인공지능의 상징적 축소)라는 요소를 사용하여 다른 패턴으로 리디렉션할 수 있다. 이는 이 예제와 같이 동의어를 구현하는 데 사용될 수 있다(CDATA는 XML 이스케이프의 필요성을 피하기 위해 사용됨):
<category>
  <pattern>WHAT IS YOUR NAME</pattern>
  <template><![CDATA[My name is <bot name="name"/>.]]></template>
</category>
<category>
  <pattern>WHAT ARE YOU CALLED</pattern>
  <template>
    <srai>what is your name</srai>
  </template>
</category>

첫 번째 카테고리는 단순히 "what is your name"이라는 입력에 봇의 이름을 나타내는 문장으로 응답한다. 그러나 두 번째 카테고리는 "what are you called"라는 입력이 "what is your name"이라는 입력과 일치하는 카테고리로 리디렉션되어야 한다고 말한다. 즉, 두 문구가 동등하다는 것을 의미한다.

템플릿은 봇이 대화하는 사용자 인터페이스에 의해 처리될 수 있는 다른 유형의 콘텐츠를 포함할 수 있다. 예를 들어, 템플릿은 서식을 위해 HTML 태그를 사용할 수 있으며, HTML을 지원하지 않는 클라이언트는 이를 무시할 수 있다.

 각주 

분류:XML 마크업 언어