사용자가 말을 걸기 전에 챗봇이 먼저 사용자에게 말을 걸 수 있다. 또는 챗봇에게 대화의 컨트롤이 왔을 때 사용자에게 새로운 화제를 제시할 수 있다. 이때 사용하는 규칙이 말걸기[1] (gambit) 규칙이다.
챗봇에게 대화의 컨트롤이 오는 경우는 다음과 같은 경우이다. 사용자가 입력을 하면 챗봇에게 말할 차례가 온 것인데 이때, 챗봇이 하는 최우선 업무는 사용자 입력문에 일치하는 규칙을 찾는 일이다. 찾으면 그 규칙을 시행하게 되고 따라서 이 경우 대화의 컨트롤은 사용자가 갖고 있다. 사용자의 입력문에 챗봇이 대응하여야 하기 때문이다. 대신 사용자는 자연스런 대화를 하고 있다는 느낌을 받게 된다. 그런데 사용자 입력문에 해당하는 규칙을 발견하지 못한 경우에는 챗봇이 어떤 말이든 할 수 있는 상태가 된다. 즉 대화의 컨트롤을 챗봇이 갖게 되는 것이다. 이때 챗봇은 직전에 나눴던 토픽에서 말걸기를 선택하여 출력할 수도 있고 다른 토픽으로 옮겨가서 새로운 화제를 말걸기로 제시할 수도 있다.
말걸기의 가장 중요한 기능은 화제거리를 제시하여 사용자와의 대화를 주도하는 것이다. 이를 위해 말걸기는 질문으로 작성되는 경우가 대부분이다. 질문을 하면 미리 준비해 놓은 주제로 대화의 범위를 좁히는 장점이 있기 때문이다.
말걸기는 보통 다음의 세 가지 형식으로 작성된다.
A. t: 혹시 K-POP 좋아하세요?
B. t: MyFavorite () 저는 I love you라는 곡을 좋아해요. $MyFavorite = 1
C. t: ($Concert) 그런데 투애니원 콘서트에는 누구와 가셨었어요?
룰A는 전형적인 말걸기 형식으로 룰 타입과 출력문만 있는 경우이다. 룰B는 MyFavorite라는 라벨을 가진 말걸기 규칙으로 이후 이 라벨을 호출하여 사용할 수 있다. 라벨을 붙일 때는 룰의 4가지 구성요소를 모두 작성해야 한다. 룰B는 MyFavorite이라는 단어가 라벨이라는 것을 CS에 알려주기 위해 내용이 비어 있는 패턴을 표시했고 (비어 있는 괄호) 이어 출력문을 작성했다. 맨 끝에는 향후 사용을 위해 변수를 선언하고 그 값을 설정하고 있다. 변수의 사용에 대해서는 4장 2절에서 자세히 다루기로 하겠다.
룰C는 변수 $Concert가 참일 때만 이 규칙을 실행하라는 뜻이다. 이 역시 4장 2절에서 다룰 텐데 현재 기억해 두어야 할 점은 조건이 만족될 때만 말하도록 하는 기능이 다양하게 준비되어 있다는 점이다.
모든 말걸기 규칙(t:)은 모든 응답규칙(s: ?: u:)보다 앞에 위치하여야 한다. 또한 말걸기는 씌여진 순서대로 위에서부터 차례로 실행된다. 그리고 한 번 실행된 규칙은 시스템에 의해 “사용되었음” 마크가 자동으로 붙기 때문에 재사용되는 것이 원천적으로 방지된다. 다만, 그 규칙을 명시적으로 호출하면 한 번 사용된 룰이라도 재차 사용할 수 있다.
말걸기는 대화를 이끌어 가는 첫 단추이기 때문에 그 작성방법에 대해 좀 더 부연설명이 필요하다. 사용자에게 말을 걸 때는 문맥을 맞게 하는 것이 중요하다. 뜬금없이 새로운 화제로 말을 거는 것은 상대방을 당황스럽게 할 수 있기 때문이다. 말을 거는 좋은 방법 중 하나는 사용자에게 맞장구치면서 질문을 건네는 식으로 하는 것이다. 예를 들면 사용자가 투애니원이라든가 강남스타일이라든가를 언급할 때 “K-POP 좋아하세요?”라고 질문을 건네는 식으로 사용자의 언급에 맞춰 말을 거는 것일 것이다.
CS는 이렇게 문맥에 맞춰 말걸기를 할 수 있는 방법을 제공하고 있는데 그것이 바로 Topic의 키워드이다. 사용자가 입력한 단어가 특정 토픽 키워드와 일치하면 그 토픽이 활성화 되어 소속된 규칙이 우선적으로 검토된다. 이때 만약 그 토픽 내에 일치하는 룰이 없으면 말걸기가 실행된다. 따라서 각 토픽 내에 키워드와 연관되는 말걸기를 준비해 놓으면 결과적으로 사용자가 입력한 단어와 연관되는 말걸기가 실행되는 것이다.
이제 토픽의 키워드 란에 연관 단어를 빠짐없이 망라하는 방법을 알아 보기로 하자. 연관된 단어가 두 세 개 라면 직접 열거하면 되겠으나 만약 음식, 영화배우, 야구, 여행 등과 같이 그 연관 단어가 무척 많다면 매번 일일이 열거하는 것이 비효율적이다. 이때 아래와 같이 concept 명령을 사용하여 연관 단어 집합을 한 번 만들어 놓고 필요한 여러 곳에서 호출하여 사용할 수 있는 방법이 있다.
컨셉의 구문형식은 토픽의 구문형식과 동일하여 외우기도 쉽다. 이 컨셉의 기능은 매우 유용하여 동의어들을 하나의 집합으로 다룰 수 있도록 해 줄 뿐만 아니라 특정 개념을 나타내는 단어들의 모임, 동일한 품사들의 집합, 한 단어의 다양한 변화형 등 여러 곳에 응용하여 사용할 수 있다.
위와 같이 한글표기, 영문표기, 애칭, 그리고 예상되는 철자 오류까지 포함하여 함께 등록을 해 놓으면 사용자의 다양한 표현에 폭 넓게 대응할 수 있게 된다. 마찬가지로 티아라, 마마무 등도 같은 방식으로 만들 수 있다.
concept: ~티아라 [ 티아라 T-ara Tara ]
concept: ~마마무 [ 마마무 맘맘무 mamamoo mamamo ]
그리고 토픽의 키워드란에 이들 컨셉을 키워드로 등재한다. 컨셉과 단어를 함께 등록해도 된다.
Topic: ~KPOP [ ~투애니원 ~티아라 ~마마무 가요 히트곡 ]
이제 KPOP 토픽은 투애니원과 티아라, 마마무에 대해서는 사용자가 한글로 입력하든 영어로 입력하든 일부 철자 오류가 있든 관계없이 사용자 의도를 캐치해 낼 수 있고 따라서 KPOP 토픽이 올바른 시점에 활성화 되어 소속된 룰의 일치여부를 검토할 수 있게 되었다.