Skip to content

Latest commit

 

History

History
140 lines (88 loc) · 4.9 KB

README.md

File metadata and controls

140 lines (88 loc) · 4.9 KB

Dacon_Korean_NLI

대회링크

1. 대회 설명

한국어 문장 관계 분류 경진대회로, klue benchmark에 존재하는 Natural Language Inference Dataset을 활용해 한 쌍의 문장(Premise, Hypothesis)의 관계를 파악합니다.

한국어 문장 관계를 파악하는 알고리즘을 통해, 최대의 Accuracy를 내는 것이 이번 대회의 목적입니다.

2. 개발 환경

GPU: Colab Pro P100 2개

3. 사용 라이브러리

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

4. 파일 구조

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

5. 데이터 - 내부 데이터

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 길이는 전반적으로 고루 분포되어 있음을 알 수 있습니다.

length길이

6. 데이터 - 외부 데이터

7. 모델

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로써 사용.

7-2. klue/roberta-large + bilstm

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하여 예측한 모델

8. 모델 훈련 방식 및 전략

8-1. Stratified K-Fold 활용

전체적으로 5-Fold까지 사용

8-2. mlm pretrain 방식

Masked Language Model pretrain 방식을 train 데이터를 활용해 klue/roberta-large에 pretrain 적용

  • 전체 token 중, 15%를 [MASK] token으로 변환 -> 80%는 [MASK]토큰으로 변환하고 10%는 랜덤 토큰으로 변경하며, 10%는 변환

9. 결과

9-1. Hyperparameter

  • Learning Rate: 2e-5
  • batch size: 16 * 2(accumulation step) = 32
  • warmup steps: 500
  • optimizers: adamw
  • scheduler: get_linear_schedule_with_warmup, noam scheduler

9-2. Final Results

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%)

10. 참고자료

11. 회고

많은 시도를 했지만, 생각보다 좋은 성적이 나오지 않았다.... -> RTT, noam scheduler, dataset 추가 등도 성능 하락을 보여줌

왜 성능이 별로였는지 대회 끝났지만 알아낼 필요가 있고 이번 대회를 계기로 다음 NLP 대회는 좋은 성적을 얻고자 다짐...!!! (사실 원하는 성적이 나오지 않아 많이 아쉬웠다..)