Skip to content

데이콘 "한국어 문장 관계 분류 경진대회" 참여한 코드입니다.

Notifications You must be signed in to change notification settings

j961224/Dacon_Korean_NLI

Repository files navigation

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 대회는 좋은 성적을 얻고자 다짐...!!! (사실 원하는 성적이 나오지 않아 많이 아쉬웠다..)

About

데이콘 "한국어 문장 관계 분류 경진대회" 참여한 코드입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published