Study Record/AI Data Science

[Conversational AI 14강] TOD - Basics

Sungyeon Kim 2024. 7. 8. 11:40

Task-oriented dialogue systems

 

1. Ontology

1) intent -> call을 할 수 있는 하나의 함수의 mapping

2) slot -> intent를 수행하기 위한 attribute = 함수 파라미터

3) slot value -> 함수 인자

4) service -> a category of related intents

5) domain -> a category of knowledge or activity or services

*domain과 service를 구분하지 않는 경우도 있음

 

2. Framework

NLU(Natural Language Understanding

-> DST(Dialogue State Tracking)

-> DP (Dialogue Policy)

-> NLG (Natural Language Generation)

 

1) NLU

intent, slot, slot value 추출하는 과정

e.g., find_hotel(type='guest house', internet='yes')

find_hotel -> intent

type -> slot

guest house -> slot value

 

(1) rule-based methods

-> 되게 빨라서 생각보다 자주 쓰임

(2) Statistical methods

-> intent classifier + slot Tagger

 

-> seq2seq (GPT) 요즘 많이 쓰임

 

2) DST

update the dialogue/belief state

dialogue state = all slot values based on the dialogue so far

e.g.,

type = 'guest house'

internet = 'yes'

pricerange = None

 

(1) evaluation metrics

a. joint goal accuracy

-> 한 턴에서 모든 value가 correct하면 -> 성공으로 간주

-> 모든 턴에서 성공이 몇 퍼냐

 

b. slot accuracy

-> 한 slot이 계속 언급될 때 correct value로 예측될 확률

 

3) DP

(1) query a DB

(2) call APIs

-> 둘중 하나 실행 후 determine the system acts

 

(1) statistical methods

-> systems act classification

(2) 요즘은 seq2seq (GPT)!!

 

4) NLG

convert the system acts to natural language

 

(1) Template-base methods

-> template 미리 만들어두기!

-> simple and fast, but not flexible

 

(2) 요즘은 seq2seq!

 

(3) evaluation metrics

a. inform rate: % of entities provided by system that are correct

b. success rate: 유저가 요청한 attribute 중 system이 correct하게 답변해준 확률

c. BLEU

 

3. MultiWOZ

most popular multi-domain task-oriented dialogue datasets

TOD에서 정말정말 중요한 데이터셋

 

4. SimpleTOD 모델

최근 많이 쓰이는 seq2seq dialogue system 방식

dialogue context -> nlu -> dialogue state tracking -> (db/api calls) -> system acts -> response

위 파이프라인을 seq2seq으로 스트림라인하자

 

delexicalized response: 실제 인자값 그대로 문장 안에 넣는 게 아니라 [value_count]와 같은 placehoders로 넣기

-> 그냥 인자값 그대로 텍스트 생성하게 하면 실제 db값이 아니라 training data에 많이 존재하는 숫자값으로 생성될 확률 높음 

 

1) training

next-word prediction

 

2) evaluation

baseline보다 performance는 좋았지만

실제 DB값 말고 이상한 값 넣는 경우 많았음 -> training data에 오버피팅

 

[질문]

현재 기술 중에

추출한 DB값을 가장 확실하게 생성 텍스트에 넣는 방법