Skip to content

gibum1228/nlp_relation_extraction

This branch is up to date with boostcampaitech5/level2_klue-nlp-02:main.

Folders and files

NameName
Last commit message
Last commit date
May 12, 2023
May 17, 2023
May 17, 2023
Jun 4, 2023
May 17, 2023
May 14, 2023
May 17, 2023
May 19, 2023
May 13, 2023
May 17, 2023
May 17, 2023
May 17, 2023
May 11, 2023
May 11, 2023

Repository files navigation

문장 내 개체간 관계 추출

  • 팀명: 강남 특공대
  • 인원: 5명
  • 주최: 부스트캠프 ai tech 5기 | level 2 프로젝트
  • 프로젝트 기간: 2023년 5월 2일 ~ 2023년 5월 18일
  • 주제: KLUE 데이터셋에서 관계 추출(RE; Relation Extraction) 문제 해결
  • 데이터셋
    • train data: 32,470개
    • test data: 7,765개
  • 평가 방법
    • Micro F1 Score AUPRC
  • 개발 스택: Git Notion Ubuntu Python Pytorch Lightning HuggingFace Wandb
  • 결과: Public: 10위, Private: 7위

목차

1. 팀원 소개 > 2. 프로젝트 구조 > 3. 데이터 전처리 및 모델링 > 4. 프로젝트 자체 평가

1. 팀원 소개


김기범

박희진

이주형

천소영

천재원

2. 프로젝트 구조

|-- level2_klue-nlp-02/
|   |-- code/ (private)
|   |-- dataset/ (private)
|   |-- results/ (private)
|   |-- data_analysis/
|   |   |-- {name}_pre.ipynb
|   |   `-- {name}_viz.ipynb
|   |-- ensemble/
|   |   `-- ensemble.ipynb
|   |-- models/
|   |   `-- models.py
|   |-- utils/
|   |   |-- data_controller.py
|   |   |-- metrics.py
|   |   `-- utils.py
|   |-- README.md
|   |-- config.yaml
|   |-- confusion_matrix.yaml
|   |-- main_process.py
|   |-- requirements.txt
|   `-- use_config.yaml (private)
`----------------------

3. 데이터 전처리 및 모델링

적용한 전처리 기법 및 모델링 기법이 매우 많은 관계로 코드 내 docstring를 참고

4. 프로젝트 자체 평가

4.1 잘한 점

  • 굵직굵직하게 해야 할 일들과 그에 맞춘 전체적인 날짜를 잘 설정하고, 그에 따라 계획적으로 다같이 프로젝트를 진행할 수 있었음
  • 협업 과정에서 Github를 적극적으로 활용함
  • Zoom을 적극적으로 활용하여 이슈 발생 시 즉각적인 대응
  • 애자일 스크럼 방식을 채택해 팀원 간 진행도를 파악하고 중복 업무를 배제해 효율적으로 프로젝트를 진행할 수 있었음
  • EDA를 누군가가 맡아서 하는 것이 아니라, 팀원 모두가 함께 진행한 뒤 각자의 분석 결과를 쇼업함으로써 상호 간의 얻을 수 있는 아이디어가 다양했음
  • 서로의 꼼꼼한 코드 리뷰를 통해 구현한 기능을 점검하고 공유하는 문화(with Agile process)
  • 일반화된 프로젝트 구조(모듈화) 덕분에 실험 환경 공유가 용이했음
  • 주기적인 오프라인 만남을 통한 적극적인 팀 아이디어 공유와 토론
  • fp16 precision을 사용하여 마지막에 학습 속도를 비약적으로 빠르게 한 점
  • 코드 주석을 명확하게 기입해 다른 사람의 코드를 쉽게 이해하고 읽어 활용할 수 있었음

4.2 시도 했으나 잘 되지 않았던 것

  • TAPT를 도입하여 성능을 끌어올리고자 했으나, 오히려 하락했음(이미 기학습된 데이터가 KLUE 데이터 셋이라 오버피팅이 일어난 것으로 추측)
  • Adversarial Validation을 도입하여 Test와 Valid 사이의 score 차이를 줄이려 했으나, 잘 되지 않았음. Feature에 대한 더 깊은 고민이 필요했던 것으로 추측.
  • 몇 가지 Data Augmentation 기법들을 적용했지만, 실제 성능 향상에 기여된 기법들은 극소수에 불과
  • 다양한 loss 함수를 설계하였으나 해당 태스크에 적합한 기법을 찾기 어려웠던 점
  • 모델의 학습 난이도를 높이기 위한 multi task learning 기법을 다소 단순하게 적용시켜 큰 효과가 없었음.

4.3 아쉬웠던 점

  • 프로젝트 관련해서 멘토님과 상호작용이 활발하지 못 했던 점 아쉬웠음
  • 감정적으로 아무래도 F1 score가 잘 나오지 않다보니, 마음이 급해져서 구현에 구멍을 종종 발생시켰던 점
  • Augmentation 기법들을 다양하게 적용해보고 싶었지만 아이디어의 한계에 봉착함
  • 다양한 모델을 적용해 보고자 했으나 적용할 수 있는 모델이 한정적이었음
  • 리더보드 점수와 실험 모니터링 결과를 비교했을 때 F1은 너무 높게 나오고(과적합) AUPRC는 너무 낮게 나왔는데(과소적합) 이 간극을 해결하지 못 한 게 아쉬움이 남음
  • 각종 논문을 토대로 loss 함수 및 모델링을 진행하였으나, 구현에 집중하여 고정된 환경에서 정량적으로 성능 비교를 진행하지 못한 점.
  • WandB sweep이나 ray tune과 같은 툴을 사용하여 하이퍼파라미터 튜닝을 좀 더 정량적으로 하지 못했던 점
  • fp16을 좀 더 빨리 도입하여, 다양한 실험을 더 많이 진행하지 못한 점
  • 같은 조건에서 seed를 바꿔가며 지금 모델의 일반화된 성능을 체크하지 못한 점
  • 블렌딩의 꿈을 이루지 못 한 게 아쉬움
  • 마지막 날에서야 k-fold가 생각나서 적용 못 함

4.4 프로젝트를 통해 배운 점 또는 시사점

  • 자나깨나 에러 조심, 완성 코드 다시 보자
    • 오히려 잘 돌아가는 코드가 더 무섭다
  • 하이퍼파라미터 튜닝 라이브러리 or 툴 등을 적극 활용해보자
  • 3주 라는 시간이 길면 길고 짧으면 짧은데 지치지 않고 꾸준한 열정을 쏟기 위해 팀 분위기가 중요하다는 걸 깨달음
  • 체력 관리는 항상 중요하다. 아프거나 컨디션이 안 좋으면 시간 대비 효율이 나오지 않아 오히려 좋지 않다.
  • 팀원 간의 코드 설명에 쏟는 시간은 아무리 늘려도 부족하지 않다.
    • 서로의 구현이나 아이디어에 대해 열심히 질문하고, 상세하게 대답하는 것으로 큰 성장을 이룰 수 있음
  • 대회 진행 계획을 조금 더 앞당겨서 아이디어 검증의 여유를 둘 수 있게 해야하겠다는 깨달음
  • 논문은 이미 검증된 자료다. 논문의 모델 구조와 하이퍼파라미터 세팅을 참고해야겠다는 점.
  • AI Stages 제출 횟수인 10회는 적다는 걸 앎
    • 제출 마감 직전에 내지 말기. 여유 시간을 가지고 10분 전에 제출 완료하기.

About

level2_klue-nlp-02 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Jupyter Notebook 97.6%
  • Python 2.4%