문장의 단어(Entity)에 대한 속성과 관계를 예측하는 인공지능 만들기.
Public Leader Board
Private Leader Board
Team name : 윤슬 [ NLP 08조 ]
- 모더레이터 외에도 Github 관리자를 두어 베이스라인 코드의 버전 관리를 원활하게 하고, 같은 분야라도 다른 작업을 진행할 수 있도록 분업을 하여 협업을 진행하였다.
| 이름 | 역할 |
|---|---|
강민재 | EDA(길이,레이블,토큰, entity 편향 확인),ErrorAnalysis,데이터증강(단순 복제, classinverse 관계 교체 증강),데이터전처리(subject,objectentity스페셜 토큰 처리) |
김태민 | 모델 실험(Attention layer 추가 실험, Linear/LSTM layer 추가 실험, Loss, Optimizer 실험), 데이터 전처리(Entity Representation – ENTITY, Typed Entity) |
김주원 | 모델 튜닝, 프로젝트 매니저(노션관리, 회의 진행), EDA, 모델 앙상블(Hard Voting, Soft Voting, Weighted Voting), Error Analysis(Error Analysis 라이브러리 개발) |
윤상원 | Github 베이스라인 코드 관리(코드 리팩토링, 버그 픽스, 코드 버전 컨트롤), 모델 실험(TAPT 적용), 데이터 전처리(Entity Representation – ENTITY, Typed Entity), EDA(UNK 관련 EDA), 모델 튜닝 |
신혁준 | EDA(데이터 heuristic 체크, Label 별 관계 편향 조사), 데이터 증강 (동일 entity start_idx, end_idx 교체, Easy Data Augmentation – SR 기반 증강, 클래스 Down Sampling) |
| 프로젝트 주제 | 문장 내 개체간 관계 추출(KLUE RE): 문장의 단어(Entity)에 대한 속성과 관계를 예측하는NLP Task |
|---|---|
| 프로젝트 구현내용 | 1. Hugging Face의 Pretrained 모델과KLUE RE 데이터셋을 활용해 주어진 subject, object entity간의 30개 중 하나의 relation 예측하는 AI 모델 구축 2. 리더보드 평가지표인 Micro F1-Score와AUPRC 높은 점수에 도달할 수 있도록 데이터 전처리(Entity Representation), 데이터 증강, 모델링 및 하이퍼 파라미터 튜닝을 진행 |
| 개발 환경 | • GPU: Tesla V100 서버 4개 (RAM32G) /Tesla V4 (RAM52G) /GeForce RTX 4090 로컬 (RAM 24GB) • 개발 Tool: PyCharm, Jupyter notebook, VS Code [서버 SSH연결], Colab Pro +, wandb |
| 협업 환경 | • Github Repository : Baseline 코드 공유 및 버전 관리 • Notion : KLUE 프로젝트 페이지를 통한 역할분담, 대회 협업 관련Ground Rule 설정, 아이디어 브레인 스토밍, 대회관련 회의 내용 기록 • SLACK, Zoom : 실시간 대면/비대면 회의 |
*아래는 저희 프로젝트 진행과정을 담은 Gantt차트 입니다.
학습 진행하기 전 증강 데이터 활용시 Augmentation을 학습 전에 진행
TAPT 적용시 TAPT 코드를 사전에 먼저 학습시켜 모델에 활용
augment_train.py : 데이터 증강 모델 학습augment_dataloader.py : 데이터 증강 모델 학습시 사용하는 dataloaderaugment.py : 데이터 증강 코드train/train.csv : 학습 데이터test/test_data.csv : 테스트 데이터augment.yaml : 증강 관련 설정 파일.default.yaml : 모델 학습, 추론 관련 설정 파일. 다양한 모델, 하이퍼 파라미터 세팅ensemble.yaml : 앙상블 설정 파일 (Hard Voting, Soft Voting, F1-score Weighted Voting)tapt.yaml : TAPT 관련 설정 파일ensemble.py : 앙상블 실행 코드ensemble_model.py : 앙상블 기법 정의(Hard Voting, Soft Voting, F1-score Weighted Voting)utils.py : 앙상블에 필요한 argmax, softmax 함수 정의RBERT.py: R-BERT 모델 정의 코드TAEMIN_CUSTOM_RBERT.py: R-BERT 단순화 모델 정의 코드TAEMIN_R_RoBERTa.py: R-Roberta 모델 파일TAEMIN_RoBERTa_LSTM.py: Roberta-LSTM 모델 정의 코드TAEMIN_TOKEN_ATTENTION_BERT.py: BERT + CLS Token Attention 모델 정의 코드TAEMIN_TOKEN_ATTENTION_RoBERTa.py: Roberta + CLS Token Attention 모델 정의 코드model_base.py: base 모델 정의 코드(FC Layer, RobertaClassificationHead, RobertaPooler)utils.py:datasets.py : 모델 별 dataset 생성 코드losses.py : Focal loss 코드optimizers.py : AdamW, Adam, SGD, Adabelief 등 Optimizer 정의 코드preprocess.py : 데이터 파싱 및 전처리 코드schedulers.py : StepLR, CosinLR 정의 코드tokenize.py : 토크나이징 및 Entity Representation 코드utils.py : micro_f1, config_parser, confusion_matrix 코드dict_label_to_num.pkl : 숫자 label을 스트링 label로 변환하는 피클 파일dict_num_to_label.pkl : 스트링 label을 숫자 label로 변환하는 피클 파일dataset.py : TAPT 데이터 로더 코드tapt.py : TAPT 학습 코드dataloader.py : 모델 data loader 코드inference.py : 모델 추론 코드model.py : pytorch-lightning을 이용한 기본 모델 정의 코드requirements.txt : 환경 설정 관련 text파일train.py : 모델 학습 코드wandb_tuning.py : 여러개의 하이퍼 파라미터를 이용하여 wandb로 튜닝📦level2_klue-nlp-08
┣ augmentation
┃ ┣ augment.py
┃ ┣ augment_dataloader.py
┃ ┣ augment_train.py
┃ ┗ utils.py
┣ config
┃ ┣ augment.yaml
┃ ┣ default.yaml
┃ ┣ ensemble.yaml
┃ ┗ tapt.yaml
┣ dataset
┃ ┣ test
┃ ┃ ┗ test_data.csv
┃ ┣ train
┃ ┃ ┗ train.csv
┣ model_ensemble
┃ ┣ ensemble.py
┃ ┣ ensemble_model.py
┃ ┗ utils.py
┣ models
┃ ┣ RBERT.py
┃ ┣ TAEMIN_CUSTOM_RBERT.py
┃ ┣ TAEMIN_R_RoBERTa.py
┃ ┣ TAEMIN_RoBERTa_LSTM.py
┃ ┣ TAEMIN_TOKEN_ATTENTION_BERT.py
┃ ┣ TAEMIN_TOKEN_ATTENTION_RoBERTa.py
┃ ┣ model_base.py
┃ ┗ utils.py
┣ modules
┃ ┣ datasets.py
┃ ┣ losses.py
┃ ┣ optimizers.py
┃ ┣ preprocess.py
┃ ┣ schedulers.py
┃ ┣ tokenize.py
┃ ┗ utils.py
┣ pickle
┃ ┣ dict_label_to_num.pkl
┃ ┗ dict_num_to_label.pkl
┣ prediction
┣ tapt
┃ ┣ dataset.py
┃ ┗ tapt.py
┣ wandb
┣ .gitignore
┣ README.md
┣ dataloader.py
┣ inference.py
┣ model.py
┣ requirements.txt
┣ train.py
┗ wandb_tuning.py
| 분류 | 내용 |
|---|---|
| 모델 | klue/bert-base, klue/roberta-large, ainize/klue-bert-base-re HuggingFace Transformer Model+Pytorch Lightning활용 + Attention Layer or FC Layer |
| 전처리 | • Entity Representation : Entity marker / Typed entity marker / SUB,OBJ marker / punct(한글) 등 다양한 entity representation을 적용하여 최적의 성능을 내는 entity representation 적용 |
| 데이터 | • raw data : 기본 train 데이터 32470개 • 증강데이터 : MLM kue/roberta-large 모델을 활용하여 증강데이터를 만들고 uniform 분포를 만들어 총 53873개 |
| 검증 전략 | • 만들었던 모델의 Validation 데이터를 inference에 Micro F1-Score와 AUPRC Score 비교 • 최종적으로 리더보드에 제출하여 모델 성능 검증 |
| 앙상블 방법 | • Entity Represenatation과 모델기법, 증강데이터 중 가장 성능이 좋은 모델 3개를 선정하여 soft voting 앙상블을 진행 |
| 모델 평가 및 개선 | . MLM 모델을 사용하여 데이터 증강을 실시하여 label imbalance 문제를 해결한다. 또한, Entity Representation을 활용하여 데이터를 전처리하고 HuggingFace 모델에 Attention layer와 FC Layer등을 추가하는 등 다양한 기법을 활용하여 모델 성능을 개선한다. |
#필요 라이브러리 설치
pip install -r requirements.txt
# 데이터 증강 [optional]
python3 augmentation/augment.py --config=config/augment.yaml
python3 augmentation/augment_train.py --config=config/augment.yaml
# TAPT 학습 모델 생성 [optional]
python3 tapt/tapt.py --config=config/tapt.yaml
# train.py 코드 실행 : 모델 학습 진행
python3 train.py --config=config/default.yaml
# 모델 예측 진행
python3 inference.py --config=config/default.yaml
# 앙상블 진행 [config를 통해서 option 선택]
python3 model_ensemble/ensemble.py --config=config/ensemble.yaml
Python
100.0%
문장의 단어(Entity)에 대한 속성과 관계를 예측하는 인공지능 만들기.
Public Leader Board
Private Leader Board
Team name : 윤슬 [ NLP 08조 ]
- 모더레이터 외에도 Github 관리자를 두어 베이스라인 코드의 버전 관리를 원활하게 하고, 같은 분야라도 다른 작업을 진행할 수 있도록 분업을 하여 협업을 진행하였다.
| 이름 | 역할 |
|---|---|
강민재 | EDA(길이,레이블,토큰, entity 편향 확인),ErrorAnalysis,데이터증강(단순 복제, classinverse 관계 교체 증강),데이터전처리(subject,objectentity스페셜 토큰 처리) |
김태민 | 모델 실험(Attention layer 추가 실험, Linear/LSTM layer 추가 실험, Loss, Optimizer 실험), 데이터 전처리(Entity Representation – ENTITY, Typed Entity) |
김주원 | 모델 튜닝, 프로젝트 매니저(노션관리, 회의 진행), EDA, 모델 앙상블(Hard Voting, Soft Voting, Weighted Voting), Error Analysis(Error Analysis 라이브러리 개발) |
윤상원 | Github 베이스라인 코드 관리(코드 리팩토링, 버그 픽스, 코드 버전 컨트롤), 모델 실험(TAPT 적용), 데이터 전처리(Entity Representation – ENTITY, Typed Entity), EDA(UNK 관련 EDA), 모델 튜닝 |
신혁준 | EDA(데이터 heuristic 체크, Label 별 관계 편향 조사), 데이터 증강 (동일 entity start_idx, end_idx 교체, Easy Data Augmentation – SR 기반 증강, 클래스 Down Sampling) |
| 프로젝트 주제 | 문장 내 개체간 관계 추출(KLUE RE): 문장의 단어(Entity)에 대한 속성과 관계를 예측하는NLP Task |
|---|---|
| 프로젝트 구현내용 | 1. Hugging Face의 Pretrained 모델과KLUE RE 데이터셋을 활용해 주어진 subject, object entity간의 30개 중 하나의 relation 예측하는 AI 모델 구축 2. 리더보드 평가지표인 Micro F1-Score와AUPRC 높은 점수에 도달할 수 있도록 데이터 전처리(Entity Representation), 데이터 증강, 모델링 및 하이퍼 파라미터 튜닝을 진행 |
| 개발 환경 | • GPU: Tesla V100 서버 4개 (RAM32G) /Tesla V4 (RAM52G) /GeForce RTX 4090 로컬 (RAM 24GB) • 개발 Tool: PyCharm, Jupyter notebook, VS Code [서버 SSH연결], Colab Pro +, wandb |
| 협업 환경 | • Github Repository : Baseline 코드 공유 및 버전 관리 • Notion : KLUE 프로젝트 페이지를 통한 역할분담, 대회 협업 관련Ground Rule 설정, 아이디어 브레인 스토밍, 대회관련 회의 내용 기록 • SLACK, Zoom : 실시간 대면/비대면 회의 |
*아래는 저희 프로젝트 진행과정을 담은 Gantt차트 입니다.
학습 진행하기 전 증강 데이터 활용시 Augmentation을 학습 전에 진행
TAPT 적용시 TAPT 코드를 사전에 먼저 학습시켜 모델에 활용
augment_train.py : 데이터 증강 모델 학습augment_dataloader.py : 데이터 증강 모델 학습시 사용하는 dataloaderaugment.py : 데이터 증강 코드train/train.csv : 학습 데이터test/test_data.csv : 테스트 데이터augment.yaml : 증강 관련 설정 파일.default.yaml : 모델 학습, 추론 관련 설정 파일. 다양한 모델, 하이퍼 파라미터 세팅ensemble.yaml : 앙상블 설정 파일 (Hard Voting, Soft Voting, F1-score Weighted Voting)tapt.yaml : TAPT 관련 설정 파일ensemble.py : 앙상블 실행 코드ensemble_model.py : 앙상블 기법 정의(Hard Voting, Soft Voting, F1-score Weighted Voting)utils.py : 앙상블에 필요한 argmax, softmax 함수 정의RBERT.py: R-BERT 모델 정의 코드TAEMIN_CUSTOM_RBERT.py: R-BERT 단순화 모델 정의 코드TAEMIN_R_RoBERTa.py: R-Roberta 모델 파일TAEMIN_RoBERTa_LSTM.py: Roberta-LSTM 모델 정의 코드TAEMIN_TOKEN_ATTENTION_BERT.py: BERT + CLS Token Attention 모델 정의 코드TAEMIN_TOKEN_ATTENTION_RoBERTa.py: Roberta + CLS Token Attention 모델 정의 코드model_base.py: base 모델 정의 코드(FC Layer, RobertaClassificationHead, RobertaPooler)utils.py:datasets.py : 모델 별 dataset 생성 코드losses.py : Focal loss 코드optimizers.py : AdamW, Adam, SGD, Adabelief 등 Optimizer 정의 코드preprocess.py : 데이터 파싱 및 전처리 코드schedulers.py : StepLR, CosinLR 정의 코드tokenize.py : 토크나이징 및 Entity Representation 코드utils.py : micro_f1, config_parser, confusion_matrix 코드dict_label_to_num.pkl : 숫자 label을 스트링 label로 변환하는 피클 파일dict_num_to_label.pkl : 스트링 label을 숫자 label로 변환하는 피클 파일dataset.py : TAPT 데이터 로더 코드tapt.py : TAPT 학습 코드dataloader.py : 모델 data loader 코드inference.py : 모델 추론 코드model.py : pytorch-lightning을 이용한 기본 모델 정의 코드requirements.txt : 환경 설정 관련 text파일train.py : 모델 학습 코드wandb_tuning.py : 여러개의 하이퍼 파라미터를 이용하여 wandb로 튜닝📦level2_klue-nlp-08
┣ augmentation
┃ ┣ augment.py
┃ ┣ augment_dataloader.py
┃ ┣ augment_train.py
┃ ┗ utils.py
┣ config
┃ ┣ augment.yaml
┃ ┣ default.yaml
┃ ┣ ensemble.yaml
┃ ┗ tapt.yaml
┣ dataset
┃ ┣ test
┃ ┃ ┗ test_data.csv
┃ ┣ train
┃ ┃ ┗ train.csv
┣ model_ensemble
┃ ┣ ensemble.py
┃ ┣ ensemble_model.py
┃ ┗ utils.py
┣ models
┃ ┣ RBERT.py
┃ ┣ TAEMIN_CUSTOM_RBERT.py
┃ ┣ TAEMIN_R_RoBERTa.py
┃ ┣ TAEMIN_RoBERTa_LSTM.py
┃ ┣ TAEMIN_TOKEN_ATTENTION_BERT.py
┃ ┣ TAEMIN_TOKEN_ATTENTION_RoBERTa.py
┃ ┣ model_base.py
┃ ┗ utils.py
┣ modules
┃ ┣ datasets.py
┃ ┣ losses.py
┃ ┣ optimizers.py
┃ ┣ preprocess.py
┃ ┣ schedulers.py
┃ ┣ tokenize.py
┃ ┗ utils.py
┣ pickle
┃ ┣ dict_label_to_num.pkl
┃ ┗ dict_num_to_label.pkl
┣ prediction
┣ tapt
┃ ┣ dataset.py
┃ ┗ tapt.py
┣ wandb
┣ .gitignore
┣ README.md
┣ dataloader.py
┣ inference.py
┣ model.py
┣ requirements.txt
┣ train.py
┗ wandb_tuning.py
| 분류 | 내용 |
|---|---|
| 모델 | klue/bert-base, klue/roberta-large, ainize/klue-bert-base-re HuggingFace Transformer Model+Pytorch Lightning활용 + Attention Layer or FC Layer |
| 전처리 | • Entity Representation : Entity marker / Typed entity marker / SUB,OBJ marker / punct(한글) 등 다양한 entity representation을 적용하여 최적의 성능을 내는 entity representation 적용 |
| 데이터 | • raw data : 기본 train 데이터 32470개 • 증강데이터 : MLM kue/roberta-large 모델을 활용하여 증강데이터를 만들고 uniform 분포를 만들어 총 53873개 |
| 검증 전략 | • 만들었던 모델의 Validation 데이터를 inference에 Micro F1-Score와 AUPRC Score 비교 • 최종적으로 리더보드에 제출하여 모델 성능 검증 |
| 앙상블 방법 | • Entity Represenatation과 모델기법, 증강데이터 중 가장 성능이 좋은 모델 3개를 선정하여 soft voting 앙상블을 진행 |
| 모델 평가 및 개선 | . MLM 모델을 사용하여 데이터 증강을 실시하여 label imbalance 문제를 해결한다. 또한, Entity Representation을 활용하여 데이터를 전처리하고 HuggingFace 모델에 Attention layer와 FC Layer등을 추가하는 등 다양한 기법을 활용하여 모델 성능을 개선한다. |
#필요 라이브러리 설치
pip install -r requirements.txt
# 데이터 증강 [optional]
python3 augmentation/augment.py --config=config/augment.yaml
python3 augmentation/augment_train.py --config=config/augment.yaml
# TAPT 학습 모델 생성 [optional]
python3 tapt/tapt.py --config=config/tapt.yaml
# train.py 코드 실행 : 모델 학습 진행
python3 train.py --config=config/default.yaml
# 모델 예측 진행
python3 inference.py --config=config/default.yaml
# 앙상블 진행 [config를 통해서 option 선택]
python3 model_ensemble/ensemble.py --config=config/ensemble.yaml
Python
100.0%