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값을 가장 확실하게 생성 텍스트에 넣는 방법