---
tags: '랩업 리포트'
---
KLUE - Run & Learn 팀 랩업 리포트
===
프로젝트 개요
---
- 프로젝트 주제
- [NLP] 문장 내 개체간 관계 추출
- 프로젝트 개요(프로젝트 구현 내용, 컨셉, 교육 내용과 관련성 등)
- 문장의 단어(Entity)에 대한 속성과 관계를 예측하는 인공지능 만들기
- 자연어 처리 과정에 대한 기초 잡기
- Huggingface를 사용하여 모델 파인 튜닝 도전하기
- 활용 장비 및 재료(개발 환경 등)
- H/W
- V100 GPU
- SSH 환경
- S/W
- Ubuntu 18.04 LTS
- Pytorch, Huggingface
- Wandb
- VS Code, Jupyter Lab
- 프로젝트 구조
- main.py, main_cfg.yaml 을 통한 모델 훈련
- 기대 효과
- 문장에서 토큰들 사이의 관계성을 30개의 Class를 기준으로 분류하는 모델이다. 관계 추출은 구조화된 검색, 감정 분석, 질문 답변하기, 요약과 같은 자연어처리 응용 프로그램에서 활용될 수 있다.
프로젝트 팀 구성 및 역할
---
- 강석민 : 사용하기 쉽도록 코드 리펙토링
- 김종현 : Feature Extraction을 통해 전통적인 ML 기법 적용, pre-trained 모델에 추가적인 layer 추가
- 김태현 : 대회 데이터셋을 이용한 Masked Language Model pre-training을 통해 Domain adaptation을 시도
- 오동규 : 모델의 Entity Information 학습을 위한 다양한 방법 실험.
- 윤채원 : 데이터셋 class의 imbalance를 반영한 train/val 분할해봄. 또한 BERT model Domain adaptation을 시도
- 최재혁 : Entity들의 관계성을 단어 임베딩 레이어에 부착하는 전처리과정을 제시하고, 추가적으로 Entity의 임베딩 벡터를 BERT모델에 넣어보려는 시도
- 허은진 : AEDA를 사용해서 Data Augmentation 시도
프로젝트 수행 절차 및 방법
---
- 210927 : 인공지능과 자연어, 자연어 전처리
- 210928 : BERT 언어 모델 소개, 한국어 BERT 모델 학습
- 210929 : BERT 언어모델 기반의 단일 문장 분류
- 210930 : BERT 언어모델 기반의 두 문장 관계 분류
- 211001 : BERT 언어모델 기반의 문장 토큰 분류
- 211005 : 베이스라인 코드 이해, 모델 파인 튜닝 진행
- 211006 : 코드 리팩토링, AEDA 적용
- 211007 : 하이퍼 파라미터 적용 및 최종 모델 정리
프로젝트 수행 결과
---
### 탐색적 분석 및 전처리 (학습데이터 소개)
- 총 데이터 갯수 : 32470개
- 문장, subject_entity, object_entity, 라벨
- entity에는 name, start_index, end_index, type이 포함됨
- 테스트 데이터 갯수 : 7765개
- 클래스 : 30개
### 모델 개요
- KLUE/BERT-base
- KLUE/BERT-large
- KLUE/RoBERTa-Large
- KLUE/RoBERTa-base
- KoElectra-base-V3
### 모델 선정 및 분석
- KLUE/bert-base
- 기초 베이스 라인에 제공된 모델이며 준수한 점수를 기록함
- KLUE/RoBERTa-Small
- 빠른 학습시간으로 여러가지 시도를 할 때 사용
- KLUE/RoBERTa-Large
- 가장 높은 점수를 보여 주었으며 최종 제출 모델로 사용
- KoElectra-base-V3
- 벤치마크 점수는 높지만 현재 대회에서는 낮은점수를 기록하여 제외 됨
### 모델 평가 및 개선
- 하이퍼 파라미터 튜닝 시도

- AEDA 시도

### 시연 결과 & 모델 성능

자체 평가 의견
---
### 잘한점들
- 대회 코드를 좀 더 사용하기 쉽게 만듦 (Hydra 사용)
- AEDA를 시도하여 훈련데이터 튜닝
- 하이퍼파라미터 최적화 적용
### 시도 했으나 잘 되지 않았던 것들
- CatBoost를 통한 모델 분류 성능 향상 시도
- Pytorch Lightning 사용 시도
- 그러나 HuggingFace가 더 잘되있어서 HuggingFace 사용
- Entity 토큰을 Embedding Layer에 추가해서 넣어주려고 했으나, PreTrained된 모델에 맞지 않았던 문제
- MLM을 이용한 언어모델을 대회 데이터셋으로 추가 학습한 후 fine tuning
- Output Layer에서 RNN, LSTM 레이어를 부착해서 시도
### 아쉬웠던 점들
- 모델 제작, 시간에 쫒겨 커스텀 모델을 만들진 못했다.
- 가지고 있는 아이디어를 적용한 모델을 학습하는데에 시간이 생각보다 너무 오래걸려서 원하는 결과를 끝내 보지 못했다.
- 데이터 셋에 맞는 Pre-Trained된 모델을 재학습시켜보지는 못했다.
- 다같이 한번에 맞춰서 진행할 코드가 늦게 만들어지기도 했고, 다음에는 이번 대회를 통해서 만든 것을 기반으로 발전해야겠다.
- Ensemble 등 Competition에서 많이 사용하는 기법을 적용해보지 못했다.
- huggingface 사용이 익숙하지 않아서 응용할 때 헤맸다.