티스토리 뷰



사용자가 챗봇에게 좋아하는 노래 있어요?”라고 묻는 상황을 가정해 보자. 이때 사용자는 아래와 같이 물어볼 수 있다.

 

A.     좋아하는 노래 있어요?

B.     노래 좋아하는 거 있어요?

 

어순이 중요한 영어에서도 구어의 경우 어순을 무시하는 경우가 많다고 하는데, 한국어와 같이 어순이 중요하지 않은 언어의 경우는 어순이 더더욱 무시될 수 있다. 이런 경우에는 순서에 상관없이 패턴과 사용자 입력문을 비교하는 것이 필요하다. 이때 사용하는 명령어가 << >>이다.

 

C.     u: (<< 좋아* 노래 >>) . I love you를 좋아해요.

 

패턴에 << >> 명령어가 있으면 CS엔진은 단어의 나열된 순서에 상관없이 그 단어들이 사용자 입력문에 나타나는가를 조사하여 매칭여부를 판단한다. 이제 룰C가 어떻게 사용자 입력문 B와 매칭되는지 확인해 보기로 하자.(A와 매칭되는 것은 추가 설명이 필요 없을 것이다.)

사용자가 B문장을 입력하면 CS는 패턴의 첫번째 단어인 좋아*”를 선택해 사용자 입력문 B와 비교한다. “좋아*”는 좋아하는, 좋아했던, 좋아한 등 좋아로 시작하는 어떤 단어와도 매칭이 된다. 입력문 B에서 발견하였다. 이제 패턴의 두 번째 단어인 노래라는 단어를 사용자 입력문에서 찾는다. 이때는 단어의 확장없이 정확하게 노래라는 단어를 찾는다 

그런데 << >> 명령어가 있기 때문에 CS는 순서에 상관없이 찾기 위해 노래라는 단어를 사용자 입력문의 맨 앞으로 가서 처음부터 찾기 시작한다. 만약 << >>가 없었다면 노래라는 단어는 좋아하는을 발견한 다음 위치부터 찾았을 것이다.

결과적으로 사용자 입력문에서 노래라는 단어가 먼저 나타나도 되고(입력문 B) “좋아하는이라는 단어가 먼저 나타나도 된다.(입력문 A) 이 두 단어가 순서에 상관없이 사용자 입력문에 나타나기만 하면 이 룰은 참으로 평가되고 결국 뒤에 있는 출력문 , I love you를 좋아해요가 출력된다.

이 순서없는 매칭은 지정된 두 단어의 순서에 상관없기 때문에 두 단어 사이에 다른 단어가 와도 상관이 없다. 예를 들어

 

A.      u: ( <<티아라* 노래*>> )

 

D는  노래하는 티아라”, “티아라가 노래한다뿐만 아니라 티아라가 부르는 노래”, “티아라가 작곡하고 녹음한 노래티아라*”노래*”사이에 어떤 단어가 있더라도 매칭이 된다. 순서에 상관없이 이 두 단어가 나타나기만 하면 되기 때문이다. 달리 말해 << >> 사이에는 와일드카드를 삽입하는 것이 의미 없다는 뜻이며 만약 추가하였다면 컴파일 할 때 에러를 보여 준다.

이 순서없는 매칭은 한국어, 특히 한국어 구어에서 무척 유용한 규칙이므로 잘 기억해 두기로 하자.

 



댓글
댓글쓰기 폼