김보성 | 김지후 | 김혜수 | 박이삭 | 이다곤 | 전미원 | 정두해 |
---|---|---|---|---|---|---|
Github | Github | Github | Github | Github | Github | Github |
김보성
Preprocessing(Data pruning • clean punctuation) • Ensemble(Weighted Vote) • Github management
김지후
EDA • Data Augmentation(EDA
• BackTranslation
) • 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(EDA
• AEDA
• RandomDeletion
• BackTranslation
) • Code Abstraction
- Task : 문장 내 개체간 관계 추출 (Relation Extraction)
- Date : 2021.09.27 - 2021.10.07 (2 weeks)
- Description : QA 시스템 구축, 감정 분석, 요약 등 다양한 NLP task에서 문장 속 단어간의 관계 데이터는 정보 파악에서 중요한 역할을 합니다. 이번 대회의 목적은 문장, 단어에 대한 정보를 통해 문장 속에서 단어 사이의 관계를 추론하는 모델을 학습시키는 것이었습니다. 결과적으로는 총 30개의 관계 클래스 중 하나를 예측한 결과와 30개의 클래스 각각에 대해서 예측한 확률을 반환하는 모델을 생성하도록 하였습니다.
- Train : 32,470개
- Test : 7,765개
대회 사이트 : AI stage
- 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을 통한 성능 향상을 기대했습니다.
- 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 결과는 아래와 같습니다.
아래 리스트의 모델은 특수문자를 제거한 (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 |
다음과 같은 명령어로 필요한 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/train/train.csv, dataset/test/test_data.csv
파일: code/EDA.ipynb, /concat.ipynb, /cleanse.ipynb, /preprocess_EDA.ipynb, /papago.ipynb
파일: code/preprocess_EDA.ipynb, translate.py, translate_entity.py, create_augments.py, create_entityswap_augments.py,
파일: train.py, inference.py, train_binary_classifier.py, inference_binary_classifier.py
파일: blender.py, blender.ipynb
.
├──klue-level2-nlp-07
| ├──code/
| ├──dataset
│ ├── test
│ ├── train
code
파일 안에는 각각 data preprocessing • train • inference가 가능한 라이브러리가 들어있습니다- 사용자는 전체 코드를 내려받은 후, argument 옵션을 지정하여 개별 라이브러리 모델을 활용할 수 있습니다
본 Repository는 AI stage에서 제공한 server, GPU를 기반으로 작성된 코드입니다.
- GPU: V100