Façade 이후 : 자연어 어플리케이션을 위한 패턴 매칭
브루스 윌콕스(Bruce Wilcox) 가마수트라 등록일(2011. 03. 15)
http://www.gamasutra.com/view/feature/6305/beyond_façade_pattern_matching_.php
정정이 가능한 간단한 자연어(NL)를 이해하기 위해서는 방대한 지식과 다양한 추론 스킬이 필요하다. 또한 스펠링, 문법의 실수를 커버할 수 있어야 하며, 간단한 문맥적 상황도 이해할 수 있어야 한다. 엄격하게 자연어 사용을 제한하고 있는 것은 어찌 보면 당연한 일일지도 모른다.
그러나 말이 인터페이스가 되고 있는 시대가 왔다. 작은 디바이스에는 게임 콘트롤러나 마우스보다 더 적절한 입력 도구로 사용되고 있다. 제한적인 어휘나 파서를 활용하고 있는 구식 어드벤처 게임이라도 말로 입력을 할 때 훨씬 재미있다. 구글은 현재 말을 텍스트로 변환시키는 서버를 무료로 제공하고 있으며, 이로 인해 웹 페이지의 텍스트를 말로 사용할 수 있는 움직임이 주목받고 있다.
Scribblenauts 은 최신 퍼즐 게임에 명사와 형용사를 이용하였고, Telltale Games 는 명사와 동사를 섞어 쓰는 제품을 개발 중이다. 즉, 자연어로만 실행되는 게임은 이제 시간 문제라고 할 수 있다. Bot Colony 는 자연어 게임을 시도하고 있으며, Façade 는 이미 5 년 전에 이를 비슷하게 해냈다.
이 글에서, AIML, Façade, and ChatScript 을 통해 게임 실행을 위한 자연어 처리에 대해 알아볼 것이다. 또한 단어 패턴 매칭에서 의미 패턴 매칭으로 변하고 있는 최신의 기술에 대해서도 알아볼 것이다.
이 글은 아래의 몇 가지 포인트로 구성될 것이다 :
1. 스크립트 문법과 의미가 프로그램을 이용하지 않고 콘텐츠를 제작하기 쉽게 해 준다. 2. 하나의 단어 보다는 여러 단어를 매칭하는 것이 의미에 부합하도록 하는데 더 좋다.
3. 단어의 부재는 단어가 있는 것 만큼 중요하다. 4. (문법적 분석 보다) 와일드카드 매칭이 잘못된 긍정적인 것을 줄이기 위해 공고히 되어야 한다.
AIML (1995)
제한 받지 않은 자연어 입력은 수십 년 동안 존재했다 - Eliza and A.L.I.C.E.(위)와 같은 chatbot 이 그러한 예이다. 그러나 결과물은 유용하지 않다. 자연어 이해를 위한 그럴듯한 추정을 위해서는 많은 데이터를 필요로 한다. 콘텐츠 오서닝을 쉽게 하기 위해서는 이러한 데이터가 주요한 요인이다.
A.L.I.C.E 는 AIML 로 작성되었다. AIML 은 오서닝을 위해 만들어진 시스템이다. 프로그래머로써, 나는 AIML 이 반복되는 자가 수정 코드인 것 같다. 즉, 콘텐츠 제작과 유지가 끔찍하다는 것이다. 게다가 패턴 매칭은 미미하다.
패턴 매칭
AIML 은 간단하다. 여러분이 카테고리(다른 말로 규칙)를 단어의 패턴, 와일드 카드 및 현재 입력된 것이 규칙에 매칭될 때 어떻게 할 것인가를 설정한다. AIML 의 신택스는 XML 기반인데, 아래에 설명한 것과 같이, pattern (input) 구문과 template (output) 구분으로 구성된다 :
<category> <pattern> I NEED HELP * </pattern> <template>Can you ask for help in the form of a question?</template> </category>
패턴은 반드시 특수한 경우에 사용되는 단어를 커버할 수 있어야만 한다 ; 구두법은 고려하지 않는다. 와일드카드는 0 이 아닌 단어와 결합되고, 다양한 입력에 매칭할 수 있는 패턴을 생성한다.
오서링의 문제가 즉각적으로 발생한다. 나는 당신을 사랑한다는 문장을 매칭하는 데 4 개의 규칙이 필요하지만 나는 당신을 정말 사랑한다는 문장은 매칭할 수 없다.
<category> <pattern> I LOVE YOU </pattern> <template>Whatever</template> </category
<category> <pattern> * I LOVE YOU </pattern> <template>Whatever </template> </category <category> <pattern> I LOVE YOU * </pattern> <template>Whatever</template> </category
<category> <pattern> * I LOVE YOU * </pattern> <template> Whatever</template> </category
만약 AIML 와일드카드만 0 이나 그 이상의 단어에 매치된다면, 한 개의 패턴만 생성된다. 여러분은 위의 패턴을 나와 당신 사이에 와일드 카드를 추가하여 나는 당신을 정말 사랑한다는 매치한 패턴을 만들 수 있다. 그러나 이 경우 나는 당신을 절대 사랑하지 않을 것이다와 같은 문장을 수용하게 될 수도 있다. AIML 에서 와일드카드는 부적절하다.
반복적인 치환 (Recursive Substitution)
AIML 의 힘은 반복적인 치환에 있다. <srai> 태그를 사용하여 인풋을 제공하고 <star/>을 이용한 아웃풋에 contents of *을 넣는다. What is LINUX? 라는 질문에 Can you please tell me what LINUX is right now 를 맵핑하기 위한 규칙은 아래와 같다 :
<category> <pattern> * RIGHT NOW <\pattern> <template> <srai><star/></srai></template> </category>
=> CAN YOU PLEASE TELL ME WHAT LINUX IS and then
<category> <pattern> CAN YOU PLEASE * <\pattern> <template> <srai> Please <star/></srai></template> </category>
=> PLEASE TELL ME WHAT LINUX IS and then
<category> <pattern> PLEASE TELL ME WHAT * <\pattern> <template> <srai> TELL ME WHAT <star/></srai></template> </category>
=> TELL ME WHAT LINUX IS and then
<category> <pattern> TELL ME WHAT * IS <\pattern> <template> <srai> WHAT IS <star/></srai></template> </category>
=> WHAT IS LINUX and finally
<category> <pattern> WHAT IS LINUX <\pattern> <template> LINUX is an operating system. </template> </category>
=> LINUX is an operating system.
AIML 은 모두 이와 같은 방식으로 이루어진다. A.L.I.C.E.는 1300 개의 규칙으로 이루어져있고, really 와 accordingly 와 같은 불필요한 부사를 제거하였다.
※ 자세한 내용은 첨부(PDF)화일을 참고하시기 바랍니다.
|