# 랩업 리포트(화이트 보드)(re)
# Relation Extraction using KLUE-RE data
## 1. 프로젝트 개요
### I. 프로젝트 주제 및 개요
**관계 추출**(**R**elation **E**xtraction)은 문장의 단어(Entity)에 대한 속성과 관계를 예측하는 문제다. 관계 추출은 지식 그래프 구축을 위한 핵심 구성 요소로, 구조화된 검색, 감정 분석, 질문 답변하기, 요약과 같은 자연어처리 응용 프로그램에서 중요하다. 비구조적인 자연어 문장에서 구조적인 triple을 추출해 정보를 요약하고, 중요한 성분을 핵심적으로 파악할 수 있다.
프로젝트는 문장, 단어에 대한 정보를 통해 ,문장 속에서 단어 사이의 관계를 추론하는 모델을 학습시키고, 이를 통해 우리의 인공지능 모델이 단어들의 속성과 관계를 파악하며 개념을 학습할 수 있다.
### II. 개발환경
본 프로젝트는 리눅스 환경 하(Ubuntu 18.04.5)에서 개발되었다. 통합 개발환경으로는 Visual Studio Code와 Jupyter Notebook을 병행하여 사용하였으며, 학습을 위한 GPU로는 v100을 제공받았다. 또한, 개발에 사용된 주요 프레임워크와 라이브러리는 다음과 같다.
- Pytorch (1.7.1)
- transformers (4.10.0)
- pandas (1.1.5)
- scikit-learn (0.24.1)
### III. 프로젝트 구조
```
├── best_model/
├── results/
├── prediction/
├── logs/
├── dict_label_to_num
├── dict_num_to_label
├── README.md
├── requirements.txt
├── config.json
├── inference.py
├── load_data.py
└── train.py
```
### IV. 기대효과
우선 프로젝트가 팀별로 진행되는 만큼, 협업을 위한 플랫폼(Github) 사용에 익숙해질 수 있다. 또한, “도메인 이해, 데이터 분석, 데이터 전처리, 모델링 및 학습”의 순서로 진행되는 대회의 전반적인 과정을 익힐 수 있으며, 데이터의 분포가 일정하지 않거나 모델에 과적합이 발생했을 때 등과 같이 문제가 생겼을 때 이를 해결하기 위한 적절한 방법론을 서로 공유할 수 있다.
## 2. 프로젝트 팀 구성 및 역할 (가나다순)
- 고지호(T2007): augmentation (재번역, entity 교환)
- 김민성(T2024): 모델링 구성
- 김범찬(T2031): Data preprocessing
- 김정현(T2051): EDA
- 심현덕(T2125): 하이퍼 파라미터 튜닝
- 최수홍(T2228): Data preprocessing, Data augmentation(EDA, AEDA)
## 3. 프로젝트 수행 절차 및 방법
### I. 프로젝트 기획
EDA를 통해서 데이터의 분포를 관찰하여 데이터의 불균형을 어떤 방법으로 해결할 것인지, 어떤 모델을 시도해볼 것이고, 어느 방법으로 전처리를 할 것인지 토의하였다. 2주라는 짧은 기간동안 첫 주는 크게 두 팀(모델링과 전처리)으로 나누어 프로젝트 수행의 효율성을 높이고자했다. 두번째 주부터 성능이 비교적 보장된 모델에 대하여 증강된 데이터로 실험하고 앙상블을 시도했다.
### II. 프로젝트 수행
본프로젝트 수행을 위한 일련의 과정은 다음과 같다.
1. EDA를 통해서 데이터의 분포를 관찰한다
2. BERT, RoBERTa, XLNet 등 모델을 각자 훈련시켜 어느정도 성능을 보이는 모델을 찾아낸다.
3. Augmentation(Generator model, Back transation, EDA(Easy Data Augmentation), AEDA 등)를 사용해 부족한 데이터 개수와 EDA를 통해 알아낸 불균형을 해결해 보고자 노력한다.
4. 이후 이들 모델들의 결과값을 토대로 Ensemble을 통해 성능을 높인다.
### III. 프로젝트 결과
**LB score (public)**:
- micro f1 : 73.248, auprc : 71.119
**LB score (private)**:
- micro f1 : 71.556, auprc : 73.898
## 4. 프로젝트 수행 결과
### I. 탐색적분석 및 전처리
#### i. 학습데이터 소개
`[sentence, subject_entity, object_entity, label, source]` 형태로 구성된 레코드가 32,640개 있는 `train.csv` 파일과 `test.csv` 파일을 제공받았다.
`subject_entity` 와 `object_entity`는 사전(Dictionary) 형식으로 되어있으며, 관계의 주체/객체가 되는 단어인 `word`, 문장 내의 단어의 위치를 표현하는 `start_idx`, `end_idx`, 그리고 단어의 타입을 나타내는 `type`을 키로 가지고 있다.
`type`은 기관(`ORG`), 인물(`PER`), 날짜(`DAT`), 기타 고유명사(`POH`), 기타 수량표현 (`NOH`), 장소(`LOC`)로 구별되어 있으며,
각 개체(Entity)간의 관계를 표현하는 `label` 특성에 대한 설명은 아래 표와 같다.
| <center>Data Description</center> | <center>Data Distribution<center> |
|--|--|
| |  |
#### ii. 전처리
데이터가 불균형 하기 때문에 이를 증강시키는 것이 가장 중요한 문제였다. EDA(easy data augmentation), back translation, Generator model를 이용하여 data augmentation을 시도하였다
### II. 모델 개요
Roberta-large
### III. 모델 선정 및 분석
먼저, 대부분의 실험에서 성능이 가장 좋았던 klue/roberta-large 모델을 선택했고 파리미터로 10 Epochs, learning rate 1e-5, weight_decay 1e-6를 주었습니다.
또한, trainset과 testset의 Out-of-Vocabulary(OOV) 정도가 많다고 판단하게 되어 [UNK]토큰을 9개, [unused] 토큰을 200개를 special tokens으로 넣었습니다.
### IV. 검증(validation) 전략, 앙상블 방법
#### i. 검증
검증에 있어선 Stratified K fold cross validation을 주로 사용하였다.
**Stratified K fold cross validation**
- 이전의 K fold cross validation은 데이터셋이 랜덤하게 선택되어 분포가 고르지 못한 경우가 생길 위험성이 있다. 이를 방지하기위해 고른 분포로 데이터셋을 나누는 방법이다.
### V. 차후 모델 개선 방안
#### 자체 모델 개선
하이퍼 파라미터 튜닝이나 모델에 LSTM, GRU 등을 결합해서 모델을 개선하는등의 시도를 하지못했음
#### 앙상블
상위 모델 여러가지를 앙상블을 시도하려고 했지만 시간 부족에 따라서 시도하지 못하였다.
#### augmentation
다양한 augmentation을 통해 부족한 부분을 보충하기
## 5. 프로젝트 후기
- 고지호(T2007): 전처리와 데이터 증강에 많은 시간을 쏟아 어느 정도 노하우를 쌓은건 좋았지만, 오히려 키포인트는 모델링 부분에 있었던 것 같습니다. 이번에 쌓은 노하우로 다음 프로젝트에서는 모델링에 더 많은 시간을 쏟아보려 합니다.
- 김민성(T2024): huggingface 모델들에 대해 많은 시도를 할 수 있어서 좋았습니다. 너무 오래걸리는 시간때문에 최적화하는 방법을 공부하려고 합니다.
- 김범찬(T2031): 데이터 전처리를 비롯한 세부적인 부분에 너무 신경을 많이 쓴 나머지 전체적 작업에 참여할 시간이 많이 부족했습니다. 포기할 줄 아는 용기가 부족했던 것 같습니다.
- 김정현(T2051): 데이터 처리나 모델링에 도움이 되고 싶었으나 한계를 마주하여서 아쉬웠다. 좀 더 열심히 공부해야겠다. 좋은 방법들을 팀원들이 함께 의논해주셔서 많이 배운 것 같다.
- 심현덕(T2125): 짧은 기간이여서 많은 시도를 못하여서 아쉬웠다. 체계적으로 하면서 시간절약을 하는 것이 중요한 것 같다.
- 최수홍(T2228): 데이터 전처리와 증강에 시간을 쏟아부어 데이터와 친밀해 지려고 노력해서 좋은 시간을 가진 계기가 되었다.
## 6. 참조
* https://arxiv.org/pdf/2105.09680.pdf #klue dataset
* https://arxiv.org/pdf/1907.11692.pdf #RoBERTa
* https://arxiv.org/pdf/1901.11196.pdf #Easy Data Augmentation