한국어 문장 관계 분류 경진대회로, klue benchmark에 존재하는 Natural Language Inference Dataset을 활용해 한 쌍의 문장(Premise, Hypothesis)의 관계를 파악합니다.
한국어 문장 관계를 파악하는 알고리즘을 통해, 최대의 Accuracy를 내는 것이 이번 대회의 목적입니다.
GPU: Colab Pro P100 2개
torch==1.6.0
pandas==1.1.5
scikit-learn==0.24.1
transformers==4.10.0
wandb==0.12.1
dataset==1.18.3
Dacon_Korean_NLI/
├── utils/
│ ├── collate_functions.py
│ ├── preprocessor.py
│ └── trainer.py
├── models/
│ ├── ConcatLastHiddenModel.py
│ ├── Explainable_Model.py
│ └── transformers_with_bilstm.py
├── train.py
├── train_mlm.py
├── load_data.py
├── papago_backtranslation.ipynb
└── inference.py
train data 24998개, test data 1666개로 구성!
train data의 columns: 'label','premise','hypothesis','index'
- train data label 분포
entailment 8561
contradiction 8489
neutral 7948
- train data의 premise와 hypothesis 길이 분포
premise 길이는 전반적으로 고루 분포되어 있음을 알 수 있습니다.
-
KLUE Official Dev Set 2994개 사용
-
Kakaobrain KorNLI Dataset - multinli.train.ko.tsv 데이터 중, 각 label 당 5000개씩 Test Data와 유사한 형태의 데이터 추출 - 15000개 사용
7-1. klue/roberta-large + self-explainable model
self-explainable model은 text span을 통해 self-explain한 모델을 구상
- SIC layer: 각 span들에 대해 hidden state vector를 얻는다.
- interpretation layer: text span에 대한 정보를 집계하여 weight sum으로 weighted combination을 만든다.
- output layer: softmax를 통해 최종 확률값을 출력한다.
이번 대회에서는 klue/roberta-large 모델을 Intermediate layer로써 사용.
klue/roberta-large + bilstm 2개 layer를 통해 2개의 hidden states를 concat하여 예측한 모델
7-3. klue/roberta-large + Concat Last Four Hidden states Model
klue/roberta-large의 output으로 hidden states를 받아 그 중, 마지막 4개의 hidden states를 concat하여 예측한 모델
전체적으로 5-Fold까지 사용
Masked Language Model pretrain 방식을 train 데이터를 활용해 klue/roberta-large에 pretrain 적용
- 전체 token 중, 15%를 [MASK] token으로 변환 -> 80%는 [MASK]토큰으로 변환하고 10%는 랜덤 토큰으로 변경하며, 10%는 변환
- Learning Rate: 2e-5
- batch size: 16 * 2(accumulation step) = 32
- warmup steps: 500
- optimizers: adamw
- scheduler: get_linear_schedule_with_warmup, noam scheduler
Model1: (기존 train data + KLUE Official Dev Set) klue/roberta-large & Explainable Model + klue/roberta-large & bilstm Model + klue/roberta-large + (기존 train data + KLUE Official Dev Set & mlm pretrained) klue/roberta-large + (기존 train data + multinli 15000개 data) klue/roberta-large + (기존 train data + multinli 15000개 data & mlm pretrained) klue/roberta-large & Explainable Model
Model2(단일 모델): (기존 train data + KLUE Official Dev Set) klue/roberta-large & Explainable Model
Public Accuracy | Private Accuracy | |
---|---|---|
Model1 | 0.894 | 0.88775915 |
Model2 | 0.891 | 0.8871548619 |
Final submission: Model1 제출
Public & Private Rank: 18/468 | 19/468 (상위 5%)
많은 시도를 했지만, 생각보다 좋은 성적이 나오지 않았다.... -> RTT, noam scheduler, dataset 추가 등도 성능 하락을 보여줌
왜 성능이 별로였는지 대회 끝났지만 알아낼 필요가 있고 이번 대회를 계기로 다음 NLP 대회는 좋은 성적을 얻고자 다짐...!!! (사실 원하는 성적이 나오지 않아 많이 아쉬웠다..)