티스토리 뷰

예제 대화문


대화의 화제거리로 흔히 쓰이는 영화, 만화, 소설, 음악, 스포츠 등은 지식과 경험이라는 두 개의 축을 가지고 대화를 이어 나갈 수 있는 소재이다. 예를 들면 매트릭스라는 영화를 안다는 지식 측면과 매트릭스를 보았다라는 경험 측면의 두 축을 바탕으로 서로 묻고 답하고 교감할 수 있다. 위의 대화 예제도 일상 대화에서처럼 경험을 묻고 있는데 이렇게 경험을 물었을 때는 사용자의 답변을 잘 기억해 두어야 향후 이어지는 대화에서 문맥에 맞는 질문이나 답을 할 수 있다.

앞 절에서 설명한 매치변수가 한 룰 내에서 유효한 단기기억이라면 이번 절에서는 룰과 룰 사이에 공유할 수 있는 장기기억에 대해 알아보기로 하자. 이는 작성자 변수라고도 하는데 작성자가 만들고 작성자가 삭제할 수 있기 때문이며 $(달러 표시)로 시작하면 된다. 앞선 절에서 설명한 단기기억이 _(under bar)로 시작하였던 것과 비교해서 기억해 두면 좋겠다.

 

A.     u: ( ~광팬*) 그럼 콘서트에도 가 본 적 있겠네요?

B.     a: (~) 우와~, 좋았겠어요. $Concert = Yes

 

사용자가 콘서트에 가 보았다고 라고 대답하면 룰B가 실행되는데 이때 출력과 동시에 변수 $ConcertYes라는 값을 할당한다. Concert라는 변수명은 챗봇의 작성자가 임의로 작성하는 것이며 Yes라는 값도 챗봇의 작성자 자신이 알아볼 수 있는 임의의 값으로 할당하면 된다

CS는 $로 시작하는 단어를 만나면 장기기억 변수, 즉 룰과 룰 간에 공유할 수 있는 변수라고 인식하여 사용자가 명시적으로 삭제하거나 값을 재할당하기 전까지는 그대로 보관한다. 따라서 위의 룰이 실행된 후에 적절한 곳에서 다음과 같은 대화문을 작성할 수 있다.

 

C.     t: ($Concert) 그런데 투애니원 콘서트에는 누구와 갔었어요?

a: (친구*) 신났겠네요

a: (애인*) 어머, 부러워라~

a: (혼자*) 정말 팬인가 봐요. 혼자 가다니

 

C의 말걸기는 조건이 참일 때만 실행되도록 되어 있는데 그 조건은 $Concert에 값이 할당되어 있을 때만 참이 되는 조건이다. 이 변수에 값이 할당되어 있으면, 즉 앞선 대화에서 투애니원 콘서트에 갔었다는 경험을 확인했었다면 그런데 투애니원 콘서트에는 누구와 갔었어요?“ 라는 질문을 할 수 있게 되는 것이다. 이제 이 변수의 4가지 가능한 상태를 알아 보자.

 

    C의 앞쪽 어디에도 $Concert 변수가 없다 : 조건이 참인지 알아보려고 했는데 앞쪽 어느 대화에서도 $Concert라는 변수가 선언된 적도 사용된 적도 없다. 즉 이곳에 처음 나타나는 변수이다. 변수가 처음 언급되면 자동으로 null(=할당된 값 없음)을 갖게 되므로 위의 조건은 거짓이 되어 룰C는 실행되지 않는다.

    B가 실행되지 않았다 : B가 실행되지 않았다면 $Concert 변수는 이곳에서 처음 선언된 것과 같은 상태 값을 가지고 있다. 즉 선언될 때 자동으로 할당 받는 null 값을 가지고 있고 따라서 조건은 거짓이 된다.

    B가 실행되었다 : B가 실행되면 $ConcertYes라는 값이 할당된다. null 이외의 값을 가지고 있으므로 조건은 참으로 판명된다.

    $ConcertNo라는 값이 할당되어 있다. : 이 경우도 조건은 참으로 판명된다. C의 조건식은 $Concert에 할당된 값이 무엇이냐는 구별하지 않고 값이 할당된 적이 있느냐만 구별하기 때문이다.

 

만약 값이 Yes일 때만 실행하도록 하고 싶으면 룰C의 조건문을 다음과 같이 수정하면 된다.

 

D.     t: ($Concert==Yes) 그런데 투애니원 콘서트에는 누구와 갔었어요?

E.     t: ($Concert!=No) 그런데 투애니원 콘서트에는 누구와 갔었어요?

 

이때 YesNo의 의미는 챗봇의 작성자가 임의로 정한 것으로 본인이 파악할 수 있으면 된다. 여기서 주의할 점은 등호의 왼쪽과 오른쪽에 빈칸이 없어야 한다는 점이다. 좌우를 비교하는 관계식은 빈칸없이 붙여 써야 한다.

 

예제 대화문



댓글
  • 프로필사진 김지영 변수를 출력할때 $변수명이 맞는 건가요? chatscript에서 출력을 해보려고 하니까 출력이 되지 않아서 질문드립니다.
    c: (~예) $City=서울 가까운 기차역에서 $City 까지 가는 방법을 안내해드릴께요.
    이렇게 룰을 구성하였는데 제대로 실행이 되지 않습니다. 혹시 작성자변수를 사용하려면 다른 설정이 필요한가요?
    2016.09.07 14:02
댓글쓰기 폼