티스토리 뷰


예제 대화문


대화를 올바르게 이어나가기 위해서는 앞선 대화 내용을 기억해야 하는 경우가 많다. 예를 들어 이번 일요일에 등산을 가요라고 했는데 잠시 후에 일요일에 뭐 하세요라고 묻는다면 상대방은 자신의 말에 주의를 기울여 주지 않았음을 알게 될 것이다. 사람 간의 대화에서 이런 일이 잘 발생하지 않는 것은 앞서 나눈 대화 내용을 서로 기억하고 있기 때문이다. 마찬가지로 챗봇도 같은 질문을 반복하지 않아야 하는데 이를 위해 첫째, 후속 대화의 전제가 되는 사용자의 발언은 장기 기억장치에 저장해 두어야 하며, 둘째 사용자에게 질문할 때는 질문하기 전에 이미 주고 받은 내용인지 확인해야 한다.

위에 제시한 대화 예제는 모를 때만 질문하도록, 그러니까 필요한 정보를 이미 얻었으면 묻지 않도록 챗봇의 질문에 조건을 추가하는 사례이다. 먼저 첫 번째 대화를 위한 패턴을 보자.

 

A.     u: ( _*1 좋아*) 그렇군요. 저도 _0 좋아해요. $Favorite = _0

 

A의 패턴에 있는 _(under bar) 명령어는 사용자가 입력한 단어가 무엇이든 한 단어를 단기기억 변수에 저장하도록 한다. 언더바가 붙은 와일드카드에 숫자 1이 지정되어 있어(_*1) 오직 한 단어만 저장한다. 저장한 후 출력문에서 _0에 의해 호출되어 사용자에게 출력된다. 동시에 장기기억 변수 $Favorite에 사용자가 입력한 단어를 저장한다. 이 룰의 특징은 사용자가 한 말을 임시 기억장소에서 장기기억 장소로 옮기는 것이며 이렇게 함으로써 후속 대화에서 이 내용을 공유할 수 있게 된다는 점이다.

이제 스크립트를 작성하는 단계를 생각해 보자. 대화의 진행을 위해 상대방이 좋아하는 멤버를 꼭 알아야 하는 상황이라고 가정해 보자. 스크립트 작성자는 이를 위해 룰A를 준비해 놓았지만 이 룰이 시행되지 않을 수 있기 때문에 다른 곳에서 한 번 더 질문하도록 준비를 해 놓기로 했다. 문제는 이 두 질문이 모두 실행되면 안되기 때문에 (같은 말을 반복하면 사용자는 자기가 한 말에 집중하지 않았다고 불쾌하게 생각할 수 있다.) 두 번째 질문에는 안전장치를 걸기로 했다. 즉 첫번째 질문이 실행되지 않았을 때만 두번째 질문이 출력되도록 다음과 같이 조건을 걸어 놓았다.

 

B.     t: (!$Favorite) 투애니원 멤버 중에 특별히 좋아하는 멤버가 있어요?

a: (~박봄) $Favorite = 박봄

a: (~씨엘) $Favorite = 씨엘

a: (~산다라) $Favorite = 산다라

a: (~민지) $Favorite = 민지

 

위의 말걸기는 $Favorite 변수에 값이 할당되어 있지 않다면(느낌표 연산자가 앞에 붙어 있다) 실행된다. 실행된 후에는 사용자의 답변을 $Favorite 변수에 할당함으로써 향후 동일한 질문이 반복되는 일이 없도록 한다. 반대로 좋아하는 멤버가 누구인지 알면, $Favorite 변수에 값이 할당되어 있다면 이 말걸기 룰은 작동되지 않는다. 모를 때만 질문하게 되는 것이다.

한편 룰B는 장기기억 변수 $Favorite에 작성자가 값을 직접 할당해 넣고 있다. 그러나 어떤 경우에는 대화 상대방이 입력한 내용을 그대로 기억하는 것이 더 좋을 수 있다. 사람끼리 대화를 할 때도 상대방이 사용한 단어를 그대로 사용함으로써 상대를 더 존중한다는 뉘앙스를 전달할 수 있는 것처럼 챗봇도 사용자가 입력한 단어를 그대로 사용함으로써 좀 더 공감이 가는 대화를 할 수 있다. B를 다음과 같이 바꿔 써 보자.

 

C.     t: (!$Favorite) 투애니원 멤버 중에 특별히 좋아하는 멤버가 있어요?

a: ( _~씨엘) $Favorite = ‘_0

a: ( _~박봄) $Favorite = ‘_0

a: ( _~산다라) $Favorite = ‘_0

a: ( _~민지) $Favorite = ‘_0

a: ( _*) 투애니원 멤버가 아니지 않아요?

 

C를 보면, 사용자 예상답변의 패턴 란에 _(under bar)를 추가해 넣어 사용자가 입력한 단어를 임시 변수에 보관할 수 있게 하고 다시 이를 입력형 그대로 장기 변수 $Favorite에 저장하고 있다.(_0 앞에 어포스트로피를 붙였다.) 따라서 만약 사용자가 “CL”이라고 입력했다면 $Favorite에도 “CL”이라고 저장이 되고 이후 챗봇이 씨엘을 언급할 때는 사용자가 사용했던 바로 그 단어 “CL”을 출력하게 될 것이다.

C를 좀 더 효율적으로 표기하기 위해 투애니원 멤버 전체를 하나의 컨셉으로 만들면,

 

D.     concept: ~투애니원멤버 [~씨엘 ~박봄 ~산다라 ~민지]

t: (!$Favorite) 투애니원 멤버 중에 특별히 좋아하는 멤버가 있어요?

a: ( _~투애니원멤버) $Favorite = ‘_0 , $Favorite 좋아하는군요.


예제 대화문



댓글
댓글쓰기 폼