티스토리 뷰

 

    입력문, 패턴, 매칭, 출력문

사용자와 챗봇의 대화는 입력문, 패턴, 매칭, 출력문의 4가지 요소로 구성된다. 패턴과 출력문은 챗봇의 개발자가 미리 준비해 놓는 것이고 (이 둘을 묶어 룰이라 부름) 입력문과 매칭은 대화 중에 사용자와 챗봇에 의해 각각 실시간으로 입력되고 검토되는 것이다.



사용자 입력문이 들어오면 챗봇은 가지고 있는 룰 중에서 입력문과 일치하는 패턴을 찾는다. 이때 패턴을 기준으로 입력문을 조사한다. 즉 패턴이 입력문과 같거나 패턴이 입력문에 포함되면 일치하는 것으로 판단하고 준비되어 있는 출력문을 사용자에게 출력한다.

 


A는 패턴과 입력문이 동일하므로 일치판정을 내리고 B는 패턴이 입력문에 포함되므로 일치판정을 내린다. C는 패턴에 있는 단어 음악이 입력문에 없기 때문에 두 문장이 달라 불일치판정을 내린다. 물론 영화좋아하다만 있으면 일치판정을 내리도록 룰을 작성할 수도 있다. 이와 같이 패턴 매칭은 엄격하게 적용할 수도 있고 느슨하게 적용할 수도 있다. 일반적으로 패턴매칭은 정확히 일치하는 경우를 찾기 보다는 근접한 것을 찾도록 작성한다. 그래야 뜻은 비슷하나 표현이 다른 다양한 입력문에 대응할 수 있기 때문이다.

 

    룰의 형식과 종류

룰이란 패턴과 출력문을 한 데 묶어 부르는 것인데 세부적으로는 다음과 같이 룰타입, 라벨, 패턴 그리고 출력문의 4개 요소로 구성된다. 이 요소들은 콜론(:)과 괄호로 분리된다.



콜론 앞에는 룰타입, 괄호 앞에는 룰의 명칭(라벨), 괄호 안에는 패턴, 그리고 괄호 뒤는 출력문이다. 위의 예제는 사용자가 의문문으로 입력해 왔을 때만 대응하고 TIME이라 부르기로 하며 사용자가 "지금 몇 시에요?"라고 입력하면 "오후 5시입니다."라고 출력하도록 작성한 룰이다.

룰타입은 크게 두 가지가 있는데, 첫째는 챗봇이 얘기할 때 적용하는 룰, 둘째는 사용자가 얘기할 때 적용하는 룰이다. 그리고 사용자가 얘기할 때는 그 내용을 좀 더 세분화해서 의문문인지 평서문인지를 구별하여 적용하는 룰타입이 있다. (1 참조)



한편 룰은 라벨(=이름)을 가질 수 있다. 라벨을 가지면 다른 룰이 호출하여 재사용할 수 있다는 점과 디버그할 때 그 룰을 호출하여 테스트하고 추적할 수 있다는 점이 장점이라 할 수 있다. 라벨은 띄어쓰기 없이 한 단어로 작성하면 되는데 예를 들면 TIME, MyFavorite, Best_Singer 등과 같이 적으면 된다.

 

패턴은 (4)절 패턴 매칭의 기초에서 자세히 설명하기로 하고, 이곳에서는 룰의 3가지 종류에 대해 설명하기로 한다. 룰을 어떤 상황에서 어떤 용도로 사용하려 하느냐에 따라 아래와 같이 3가지 종류로 나눌 수 있는데 이는 챗봇을 기준으로 분류한 것이다.

l  말걸기(gambit) : 챗봇이 사용자에게 먼저 말걸기를 할 때 사용하는 룰이다. 보통 화제를 제시하는 평서문이거나 대화 시작을 위한 질문이 된다.

l  응답(responder) : 사용자가 먼저 말 걸어 오는 상황을 대비한 룰이다. 즉 사용자가 진술을 하거나 질문을 하면 챗봇이 어떻게 응답해야 하는지를 정의한 룰이다

l  예상응답(rejoinder) : 챗봇이 사용자에게 질문을 할 수 있는데, 이 때 사용자가 취할 수 있는 응답을 예상하여 그 각각을 열거하고 그 각각에 대해 챗봇이 어떻게 응답해야 하는지를 정의한 룰이다. CS의 장점 중 하나가 이 예상응답 작성이 매우 체계적이고 생산적이라는 점이다.

  

    토픽의 형식과 종류

영어권에서 8세 수준의 자연스런 대화를 하는 것으로 평가받는 Talking Angela는 약 26,000 개의 룰을 가지고 있다고 한다. 이 정도 규모의 룰을 작성하고 개선하려면 룰을 효과적으로 관리할 수 있는 방법이 제공되어야 하는데 CS에서는 토픽이라는 방법을 제공하고 있다.

토픽은 연관된 룰을 모아 놓은 논리적 집합체인데 단순히 룰을 모아놓는 데서 그치는 것이 아니라 사람의 대화관리를 흉내낸 것이라는 점에 더 큰 가치가 있다. 토픽을 기준으로 연관된 룰을 관리하는 것이 사람들간의 대화 관리와 유사하다는 점이다. 사람은 대화를 할 때, 특정 주제에 관해 대화를 주고 받는다. 짧게는 두 세번 주고 받기도 있고 길게는 몇 십 번을 주고 받기도 한다. 따라서 룰을 토픽단위로 묶어서 작성하면 사람과의 대화전개를 예상하며 작성할 수 있기 때문에 문맥에 부합하는 대화문을 작성할 수 있고 중복이나 누락 등도 최소화할 수 있는 장점이 있게 된다.

 

토픽은 토픽 선언자, 토픽 이름, 키워드의 3가지로 구성된다. 



토픽을 만들 때 가장 중요한 점은 토픽의 키워드이다. 왜냐하면 이곳에 나열된 단어들이 사용자 입력문에 있는 단어와 일치하면 그 해당 토픽이 활성화되고 그 토픽에 소속된 룰들의 일치여부가 검토되기 때문이다. 이는 사용자가 무엇을 말하려는 지, 무엇에 관해 말하려는 지 그 의도에 따라 챗봇이 응답하도록 하기 위함이다. 만약 사용자 입력문에 있는 단어가 여러 토픽에 걸쳐 있다면 CS는 우선순위를 정하여 토픽들을 차례로 검토한다. 따라서 토픽의 키워드 목록을 작성할 때는 사용자의 어떤 대화문에 이 토픽을 활성화시킬 것인지 생각하며 단어들을 고르고 동시에 다른 토픽의 키워드들과 가급적 중첩되지 않도록 작성하는 것이 중요하다.

토픽은 사용하는 용도에 따라 다음과 같은 3가지 종류로 나뉠 수 있다.

l  이야기 토픽(Story topic) : 사용자와 대화를 이끌어 가는 주된 토픽. 화제거리를 제시하고 사용자 질문에 답하고 사용자의 응답을 예상하는 등의 모든 유형의 룰을 가지고 있는 토픽이다.

l  반응전용 토픽(Reactor topic) : 사용자의 질문이나 응답에 반응하기 위해 준비해 놓는 토픽으로 영화, 음악, , 여행지, 취미 등 광범위한 선택지에 대한 챗봇의 응답을 준비해 놓은 것이다. 예를 들어 사용자가 영화 설국열차를 언급할 때와 스타워즈를 언급할 때 그 각각에 맞춰 특별한 답변을 할 수 있도록 준비해 놓는 것이다. 반응전용 토픽을 활용하면 답변을 모듈화하여 관리할 수 있기 때문에 전체 룰의 작성과 개선에 효율성을 얻을 수 있다.

l  얼버무림 토픽(Quibble topic) : 미처 예상하지 못한 사용자 질문에 대한 답변을 모아 놓은 토픽이다. 챗봇의 개발자는 사용자가 던질 수 있는 가능한 모든 질문들에 답을 준비하려 하지만 미처 예상하지 못한 질문이 있을 수 있다. 이때 아무 답변을 안하는 것보다는 모호하게라도 어물쩍 답변하면서 화제를 전환하는 것이 낫다. 아무 반응이 없으면 사용자는 당황하거나 무시당한다는 느낌을 받을 수 있기 때문에 비록 정확한 답은 아니더라도 얼버무리면서 화제를 전환할 수 있도록 작성해 놓는 토픽이다.



댓글
댓글쓰기 폼