Public LB
: Joint Goal Accuracy 0.8344 | 1등🥇Private LB
: Joint Goal Accuracy 0.7335 | 1등🥇
미리 정의된 시나리오의 대화에서 (System발화, User발화)를 하나의 턴으로 둘 때, 턴마다 순차적으로 유저 발화의 Dialogue state(대화 상태) 를 추적하는 Task
-
기간 : 2021.04.26 ~ 2021.05.21(4주)
-
Dialogue State Tracking description :
-
Dataset Overview : Wizard-of-Seoul
-
Metric : 모델은 Joint Goal Accuracy와 Slot Accuracy, 그리고 Slot F1 Score 세 가지로 평가됩니다.
-
Joint Goal Accuracy는 추론된 Dialogue State와 실제 Dialogue State의 set이 완벽히 일치하는지를 측정합니다. 즉, 여러 개의 Slot 중 하나라도 틀리면 0점을 받는 매우 혹독한 Metric입니다. 이에 반해, Slot Accuracy는 턴 레벨의 측정이 아닌 그 원소인 (Slot, Value) pair에 대한 Accuracy를 측정합니다. 심지어 아무런 Value를 추론하지 않고도 (== "none"으로 예측), 절반 이상의 점수를 낼 수 있는 매우 관대한 Metric입니다.
-
따라서 본 대회에서는 JGA 다음으로 Slot-level의 F1 Score를 함께 평가합니다. ("none"의 영향력 약화)
-
리더보드는 Joint Goal Accuracy → Slot F1 Score → Slot Accuracy로 소팅됩니다.
-
p3-dst-teamed-st>
├── README.md
├── coco
│ ├── classifier_train.py
│ ├── data_utils.py
│ ├── evaluation.py
│ ├── gen_train.py
│ ├── model.py
│ ├── preprocessor.py
│ ├── pretrain.py
│ └── start_coco.py
├── data
│ ├── ontology.json
│ ├── slot_meta.json
│ ├── wos-v1_dev.json
│ └── wos-v1_train.json
├── data_utils.py
├── eval_utils.py
├── evaluation.py
├── hardvote_v2.py
├── inference.py
├── loss.py
├── model
│ ├── somdst.py
│ ├── sumbt.py
│ └── trade.py
├── preprocessor.py
├── requirements.txt
├── somdst_train.py
├── sumbt_train.py
└── trade_train.py
coco
: CoCo augmentation을 위한 data generation folderdata
: KLUE WOS banchmark dataset (2021.06 기준)model
: 학습에 사용한 3가지 모델 Classdata_utils.py
: data utileval_utils.py
: evaluation을 위한 utilsevaluation.py
: evaluation printhardvote_v2.py
: 앙상블을 위한 hardvoting fileinference.py
: model prediction을 위한 filsloss.py
: masked_cross_entropy losspreprocessor.py
: model별 preprocessorsomdst_train.py
: som-dst 학습sumbt_train.py
: sumbt 학습trade_train.py
: trade 학습
- torch==1.7.0+cu101
- transformers==3.5.1
pip install -r requirements.txt
-
Open vocab 기반의 DST model로 Unseen value를 맞출 수 있습니다.
-
모든 Slot을 전부 예측해야 하기 때문에 속도가 느리다는 단점이 있지만 그 단점을 보완하기 위해 Parallel decoding이 사용되었습니다.
-
Utterance Encoder의 성능개선을 위해 bidirection RNN Encoder를 BERT로 교체하였습니다.
- 사용법
# trade_train.py
python trade_train.py --save_dir ./output
- Ontology 기반의 DST model로 이름같이 value의 갯수가 많은 slot에 유리합니다.
- Unseen value를 맞추지 못한다는 단점이 있지만 대회에서 open vocab 기반 모델인 SOM-DST의 output을 새로운 Ontology로 사용하여 개선하였습니다.
- 사용법
# sumbt_train.py
python sumbt_train.py --save_dir ./output
- Open vocab 기반의 DST model 이며 TRADE의 모든 slot을 generation하는건 비효율 적이라는 단점을 보완하기위해 등장한 모델
- Utterance를 보고 UPDATE가 필요한 경우에만 generation
- 사용법
# somdst_train.py
python somdst_train.py --save_dir ./output
-
자주 사용 되는 slot의 조합(ex. 택시-목적지, 도착-시간)이 아닌경우 맞추지 못하는 Counter factual을 지적한 논문
-
pretrained된 BartForConditionalGeneration를 사용하여 utterance를 generation
-
pretrained된 classifier로 state를 추출하고 role based Slot value match filter로 필터링을 거쳐진 utterance를 augumentation data로 사용.
-
❗ 절대경로 사용에 주의
# get generation model, classifier model
# coco/pretrain.py
python pretrain.py
# coco/start_coco.py
python start_coco.py
SLOT_FIRST_AND_TOP_VALUE
: 대분류인 슬롯에 먼저 투표를 한 뒤에, 해당 슬롯 안에서 가장 많은 표를 받은 value값을 선택
# hardvote_v2.py
python hardvot_v2.py mode=save --csv_dir=./output --save_dir=./hardvoting_result
- SUMBT: Slot-Utterance Matching for Universal and Scalable Belief Tracking
- TRADE: Transferable Multi-Domain State Generator for Task-Oriented Dialogue Systems
- SOM-DST:Efficient Dialogue State Tracking by Selectively Overwriting Memory
- TAPT : Don't Stop Pretraining: Adapt Language Models to Domains and Tasks
- CoCo : Controllable Counterfactuals for Evaluating Dialogue State Trackers
윤도연(ydy8989) | 전재열(Jayten) | 설재환(anawkward) | 민재원(ekzm8523) | 김봉진(BongjinKim) | 오세민(osmosm7)