티스토리 뷰

한 토픽 내에 복수 개의 말걸기가 있을 경우 가장 위에서부터 차례로 출력되기 시작하며, 응답하기나 예상응답 등도 맨 위에서부터 차례로 매칭 여부를 점검하며 진행된다. 그리고 출력에 성공한 룰은 재사용이 되지 않도록 자동으로 사용되었음표시가 된다. 즉 챗봇이 한 번 한 말은 사용자에게 반복해서 말하지 않도록 CS가 관리한다. 만약 그 룰이 필요하다면 명시적으로 호출하여 재사용할 수 있다. 이 대원칙 하에 Label reuse[1] 함수를 사용하여 다음과 같은 형식으로 스크립트를 작성하면 같은 말을 되풀이 하는 것도 방지하고 코드 효율성도 높일 수 있게 된다

 

A.     t: FaveSong ( ) 저는 I love you를 좋아해요.

B.     u: (좋아하는 노래가 뭐에요) reuse(FaveSong)

 

A“FaveSong”이라는 라벨을 사용하기 위해 룰의 4가지 요소를 모두 포함하고 있다. CS에게 “FaveSong”이 라벨임을 알려 주기 위해 패턴 자리에 비어있는 괄호를 작성하고 그 뒤에 출력문을 작성하였다. FaveSong과 괄호 사이에는 빈칸이 있는 반면 reuse와 괄호 사이에는 빈칸이 없음에 주목하라. reuse는 함수이기 때문에 인수를 필요로 하고 따라서 인수를 전달받는 괄호와는 한몸처럼 움직인다고 생각하면 된다. 이제 위의 룰이 어떻게 세트로 움직일 수 있는지 생각해 보자.

시나리오 A : 만약 챗봇이 자신의 말할 순서 때 저는 I love you를 좋아해요라고 말했다면, CS는 이 룰이 향후 재사용되는 일이 없도록 자동으로 사용되었음표시를 해 둔다. 그런데 만약 상대방이 잊었거나 혹은 그 밖의 이유로 좋아하는 노래가 뭐에요?”라고 다시 묻는다면, 아까 했던 말을 지정하여 다시 출력한다. 이를 위해 말걸기에 라벨을 붙여 놓았고 reuse함수로 이 라벨 붙은 룰을 호출하였다.

시나리오 B : 이제 저는 I love you를 좋아해요.”라고 말하지 않은 상황에서 상대방이 좋아하는 노래가 뭐에요?”라고 먼저 질문하는 경우를 생각해 보자. 이 경우 일단 reuse함수에 의해 FaveSong이 출력된다. 이때, CS FaveSong 이 출력을 했으므로 FaveSong룰에 사용되었음마크를 하게 되어 장차 챗봇에게 말할 차례가 왔을 때 재사용되지 않도록 한다. 이로써 어느 경우에나 챗봇에 의해 같은 말이 반복되는 것을 방지할 수 있다.

 

위의 두 줄은 중복을 제거하면서 어떤 경우에도 대응할 수 있는 코드라는 점에서 효율적인 관용 표현이므로 익혀두는 것이 좋겠다.

다른 한편 인사말의 경우는 매번 필요하기 때문에 자칫 같은 말을 반복하는 경우가 생길 수 있다. 이런 경우는 다음과 같이 출력문에 선택 명령어([ ], 꺽은 괄호)를 사용하여 반복을 최소화 할 수 있다.

 

C.     u: (~안녕) [안녕?] [잘 지냈어요?] [반가워요] [방가방가] [Hi]

 

이렇게 하면 늘 한가지 인사말만 하는 것에 비해 좀 더 자연스러운 첫 인사가 될 수 있을 것이다

 



[1] 룰을 호출하여 그 룰의 출력문을 재사용하는 함수이다. 엄밀히 말하면 패턴을 제외한 나머지부분을 재사용한다. 따라서 조건식이나 관계식, 산술식 등이 있다면 이들도 함께 재사용(=실행)된다.


댓글
댓글쓰기 폼