Skip to content

Tentoto/klue-level2-nlp-07

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Boostcamp Relation Extraction Competition

Table of contents

  1. Introduction
  2. Project Outline
  3. Solution
  4. How to Use

1. Introduction



☕ TEAM : 조지KLUE니

🔅 Members

김보성 김지후 김혜수 박이삭 이다곤 전미원 정두해
image1 image2 image3 image4 image5 image6 image7
Github Github Github Github Github Github Github

🔅 Contribution

김보성   Preprocessing(Data pruning • clean punctuation) • Ensemble(Weighted Vote) • Github management
김지후   EDA • Data Augmentation(EDABackTranslation) • Binary classifier experiment
김혜수   Preprocessing (NER Marker) • Data Augmentation(Entity Swap augmentation)
박이삭   Preprocessing(clean punctuation • special character removal) • Binary classifier experiment
이다곤   Custom Token Addition • Model Embedding Size Modification • Vocab Modification • Tokenizer Experiment
전미원   Data Visualization • Modeling • Binary classifier experiment • Ensemble
정두해   EDA • Data Augmentation(EDAAEDARandomDeletionBackTranslation) • Code Abstraction


2. Project Outline

  • Task : 문장 내 개체간 관계 추출 (Relation Extraction)
  • Date : 2021.09.27 - 2021.10.07 (2 weeks)
  • Description : QA 시스템 구축, 감정 분석, 요약 등 다양한 NLP task에서 문장 속 단어간의 관계 데이터는 정보 파악에서 중요한 역할을 합니다. 이번 대회의 목적은 문장, 단어에 대한 정보를 통해 문장 속에서 단어 사이의 관계를 추론하는 모델을 학습시키는 것이었습니다. 결과적으로는 총 30개의 관계 클래스 중 하나를 예측한 결과와 30개의 클래스 각각에 대해서 예측한 확률을 반환하는 모델을 생성하도록 하였습니다.
  • Train : 32,470개
  • Test : 7,765개

🏆 Final Score

1

대회 사이트 : AI stage


3. Solution

KEY POINT

  • No-relation의 데이터가 상대적으로 많았습니다.
  • No-relation(label:0)과 Have-relation(label:1~29) 데이터 간의 분포 차이도 컸습니다.
    • 이를 해결하기 위해 둘을 분류하는 binary classifier model을 구현했습니다.
  • 데이터 불균형 문제가 심각하여 Data augmentation에 대한 중요도가 크다고 판단했습니다.
    • Back translation
    • EDA AEDA RandomDeletion
    • 대칭성이 있는 relation의 경우 subject, object EntitySwap
  • Relation Extraction Task를 잘 수행하기 위한 fine-tuning 기법으로 데이터에 NER marker를 추가했습니다.
  • Weighted ensemble을 통한 성능 향상을 기대했습니다.

Checklist

  • Exploratory Data Analysis
  • Data Visualization
  • Data Preprocessing(special character removal)
  • Inserting NER Marker
  • Transformer based model (BERT, klue/RoBERTa XLM-RoBERTa)
  • Data Augmentation(Back Translation, EDA, AEDA, Entity-Swap)
  • Model with binary classifier
  • Ensemble(weighted voting)
  • Experimental Logging (WandB, tensorboard)
  • Customize Model Architecture
  • Customize Loss (Focal Loss + Label Smoothing)
  • Stratified k-fold cross validation

Evaluation

단일 모델의 Evaluation 결과는 아래와 같습니다.
아래 리스트의 모델은 특수문자를 제거한 (special character removal) 데이터 전처리 과정을 거친 후 학습이 진행되었습니다.

Method Micro F1-score
KLUE/BERT-base 67.602
KLUE/RoBERTa-base 68.064
kykim/bert-kor-base 68.9
KLUE/RoBERTa-large 71.167
KLUE/RoBERTa-large + NER Marker(w/ adding special_token) 69.615
KLUE/RoBERTa-large + NER Marker(w/o adding special_token) 70.444
KLUE/RoBERTa-large + Entity Marker 68.617
KLUE/RoBERTa-large + NER Marker + Data Augmentation(EntitySwap) 69.646
XLM-RoBERTa-large + Data Augmentation (EDA:Original=1:1) 68.994
KLUE/RoBERTa-large + Data Augmentation (RandomDeletion:Original=1:1) 71.167
KLUE/RoBERTa-large + Data Augmentation (EDA:Original=1:1) 72.862
KLUE/RoBERTa-large + binary classifier + Data Augmentation (BackTranslation:Original=1:1) 70.731
KLUE/RoBERTa-large + Data Augmentation (BackTranslation:Original=1:1) 72.969

4. How to Use

Installation

다음과 같은 명령어로 필요한 libraries를 다운 받습니다.

pip install -r requirements.txt

KoEDA 모듈

pip install koeda  
apt-get install g++ openjdk-8-jdk python3-dev python3-pip curl  
python3 -m pip install --upgrade pip  
python3 -m pip install konlpy  
apt-get install curl git  
bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)  

Google deep_translator 모듈

pip install -U deep-translator

Dataset

파일: dataset/train/train.csv, dataset/test/test_data.csv

Data Analysis

파일: code/EDA.ipynb, /concat.ipynb, /cleanse.ipynb, /preprocess_EDA.ipynb, /papago.ipynb

Data preprocessing & Data Augmentation

파일: code/preprocess_EDA.ipynb, translate.py, translate_entity.py, create_augments.py, create_entityswap_augments.py,

Modeling

파일: train.py, inference.py, train_binary_classifier.py, inference_binary_classifier.py

Ensemble

파일: blender.py, blender.ipynb

Directory

.
├──klue-level2-nlp-07
|    ├──code/
|    ├──dataset
│        ├── test
│        ├── train

  • code 파일 안에는 각각 data preprocessingtraininference가 가능한 라이브러리가 들어있습니다
  • 사용자는 전체 코드를 내려받은 후, argument 옵션을 지정하여 개별 라이브러리 모델을 활용할 수 있습니다

Hardware

본 Repository는 AI stage에서 제공한 server, GPU를 기반으로 작성된 코드입니다.

  • GPU: V100

About

klue-level2-nlp-07 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.7%
  • Shell 0.3%