DST(Dialogue State Tracking)

이번 포스팅에서는 DST(Dialogue State Tracking)에 대해 알아보고자 한다.

DST는 말 그대로 대화 시스템에서 state를 추적하는 기술을 말하며, belief tracking이라고도 불린다.

Dialogue State

Dialogue state는 의미 그대로 대화의 상태를 말하며, 마찬가지로 belief라고도 불린다.

State는 대화 시스템에서 사용자의 목적을 표현한다고 할 수 있다.

따라서, 주로 task-oriented 대화 시스템에서 사용된다.

아래 예시는 식당 예약을 위한 3-turn의 dialogue와 각각 turn에서의 User의 state를 보여준다.

출처:https://www.aclweb.org/anthology/P17-1163.pdf

여기서 turn은 System과 User가 한번씩 주고 받는 대화의 쌍을 의미한다.

첫번째 turn에서는 state가 inform(price=cheap)으로 label 되어 있다.

inform()은 User가 목적을 수행하기 위해 System에게 전달하는 조건들이라고 생각할 수 있다.

Dialogue state는 보통 slot-value의 쌍의 형태를 이루는데, slot은 일반적인 범주이며, value는 slot의 구체적인 값이라고 볼 수 있다.

위의 예시에서는 price가 slot, cheapprice의 value가 된다.

User의 발화에서의 cheapercheap이라는 value로 매핑한것을 볼 수 있는데, slot별로 value의 수는 정해져 있기 때문에 자연어 문장을 discrete한 값으로 매핑할 필요가 있다.

두번째 turn에서는 state가 inform(price=cheap, food=Thai, area=centre)로 update 된 것을 볼 수 있다.

이처럼, dialogue state는 대화의 매 turn마다 User의 발화에 따라 update 된다.

세번째 turn에서는 request(address)라는 state가 추가된 것을 볼 수 있다.

request()inform()과는 반대로, User가 System에게 요청하고 System이 응답하는 내용이라고 생각할 수 있다.

price, food, area와는 다르게 address는 slot-value 쌍의 형태가 아니라 slot만 존재한다.

일반적으로 price, food, area처럼 slot-value 쌍의 형태이며 User가 System에게 전달하는 slot은 informable slot이라고 부르며, address처럼 slot만 존재하며 User가 System에게 요청하는 slot은 requestable slot이라고 부른다.

Delexicalization

위에서 자연어 문장을 slot-value 형태에 매핑시킬 필요가 있다고 언급했다.

하지만, 자연어 문장에서는 비슷한 의미를 가지는 다양한 단어들이 사용되기 때문에 이는 간단한 문제가 아니다.

가장 단순한 방법으로는 semantic dictionary를 사람이 직접 만들어서 매핑하는 방법이 있다.

아래 예시는 식당 예약 시스템에서 사용할 수 있는 semantic dictionary를 보여준다.

출처:https://www.aclweb.org/anthology/P17-1163.pdf

자연어 문장에 cheaper, low-cost 등의 단어가 등장하면 이를 price=cheap으로 매핑할 수 있다.

Dictionary에 매핑되는 token이 있으면 그 token을 generic한 token으로 대체한다.

[2], [3]에서는 slot과 value에 대응되는 token들을 각각 <slot>, <value>라는 generic token으로 대체한다.

모든 종류의 slot은 <slot>으로, value는 <value>로 대체되어 feature를 공유하는 [2], [3]과는 다르게, [5]는 food라는 slot은 <s.food>로, food가 가질 수 있는 value들은 <v.food>로 대체한다.

즉, [5]는 slot별로 feature를 각각 학습한다고 할 수 있다.

하지만 이런 방법들은 사람이 직접 dictionary를 만들어야 하고, 수 많은 단어가 존재하기 때문에 비효율적이다.

[4], [6]는 dictionary를 사용해 직접적으로 delexicalization을 적용하는 것이 아니라, pretrain된 word vector를 사용해 모든 slot-value 쌍의 후보들과의 semantic similarity를 표현한다.

Dialogue State Tracker

대화의 매 turn마다 dialogue state를 update하며, user가 무엇을 원하는지를 파악하기 위해 tracker를 만들 필요가 있다.

Naive한 방법으로는 slot당 각각의 tracker를 만드는 방법이 있다.

[2], [3], [4], [5]가 이에 해당한다.

[2], [3], [5]는 delexicalization을 통해서 slot에 대응되는 tracker를 찾아 representation을 계산하고, 해당 slot의 모든 value에 대한 확률을 구한다.

[4]는 delexicalization을 사용하지 않기 때문에 모든 slot-value 쌍에 대해서 representation을 계산하고, utterance의 representation과 similarity를 계산하여 미리 정의한 thershold보다 similarity가 큰 slot-value 쌍을 추출한다.

그 후에, 각 slot별로 similarity가 가장 높은 value를 선택해 해당 turn의 belief를 update한다.

하지만 naive한 방법은 slot별로 tracker를 만들기 때문에 모델의 parameter가 많아진다.

[6]는 이러한 단점을 개선하기 위해 모든 slot에 대해 모델의 parameter를 공유하는 방법을 사용한다.

[6][4]와 비슷하게 delexicalization을 사용하지 않고, 모든 slot-value 쌍에 대해 similarity를 계산하여 해당 turn의 belief를 update한다.

[2], [3], [4], [5], [6]은 모두 user의 utterance에 더해서 이전 turn의 system의 output을 입력으로 사용한다.

Tasks

DST의 task는 multi turn으로 구성된 대화에서 매 turn마다 모델이 belief를 추론하는 task이다.

모델이 추론한 결과와 매 turn에 labeling 되어 있는 ground truth의 belief를 비교하여 모델의 성능을 평가한다.

대표적인 task로는 DSTC(Dialogue State Trackning Challenge)WOZ(Wizard of OZ) task가 있다.

References

Leave a comment