- 이 프로젝트는 네이버 부스트캠프 AI Tech 7기 NLP Level 2 기초 프로젝트 경진대회로, Dacon, Kaggle과 유사한 대회형 방식으로 진행되었다.
- Data-Centric Topic Classification는 주어진 뉴스 헤드라인으로부터 해당 뉴스의 주제를
0
~6
의 정수 레이블로 분류하는 것으로, 모델 구조의 변경 없이 Data-Centric 관점으로 해결함을 목표로 하였다.
- Public
- Private
Team Name : 스빈라킨스배 [ NLP 13조 ]
권지수 | 김성은 | 김태원 | 이한서 | 정주현 |
---|---|---|---|---|
Github | Github | Github | Github | Github |
이름 | 역할 |
---|---|
권지수 |
Text/Label Noise Split, Text Cleaning, Prompt-Based Generation |
김성은 |
Text/Label Noise Split, Back-Translation(Google Translate), Prompt-Based Generation |
김태원 |
EDA, Re-Labeling, Evol-Instruct LLM for Augmentation |
이한서 |
Text/Label Noise Split, Text Cleaning, Back-translation(DeepL), Prompt-Based Generation |
정주현 |
Re-Labeling, ML Model Searching |
프로젝트 주제 | 주어진 뉴스 헤드라인으로부터 해당 뉴스의 주제를 분류하되, 모델 구조의 변경 없이 Data-Centric 관점으로 해결 |
---|---|
프로젝트 구현내용 | LLM을 활용해 데이터의 텍스트 노이즈와 라벨 노이즈를 분류한 뒤, LLM으로 텍스트를 정제하고 Cleanlab으로 라벨을 정제했다. 그 후 한국어-일본어로 역번역하여 데이터를 증강하고, 중복 데이터를 제거하여 최적의 학습 데이터를 생성한 뒤 분류를 진행했다. |
개발 환경 | • GPU : Tesla V100(32G RAM) 서버 4개 • 개발 Tool : Jupyter notebook, VS Code [서버 SSH연결] |
협업 환경 | • Github Repository : 데이터, 코드 버전 관리 및 작업 상황 공유 • Notion : 역할 분담, 실험 가설 및 검증 결과 공유 • SLACK, Zoom : 실시간 비대면 회의 |
Code
- Text/Label Noise Split:
filtering.ipynb
- Text/Label Cleaning, Back-Translation, Baseline:
/code
Data
- Noise/Cleaned:
/split_train_data
- Back-Translation:
/backtranslation_data
- Train:
/data
filtering.ipynb
:train.csv
에서 Text/Label Noise를 구분해text_noise.csv
,labe_noise.csv
를 생성text_clean.py
:text_noise.csv
의 text를 정제한text_cleaned.csv
를 생성correct_label.py
:label_noise.csv
의 label을 교정한 뒤,text_cleaned.csv
와 합친merge_text_label_cleaned.csv
를 생성total_clean.py
:merge_text_label_clean.csv
의 label을 교정해total_cleaned.csv
를 생성backtranslate_DeepL_JP.py
:total_cleaned.csv
를 한-일-한 역번역해backtranslated_DeepL_JP.csv
를 생성postprocess_and_merge.py
:total_cleaned.csv
와backtranslated_DeepL_JP.csv
를 후처리하여 합친train.csv
를 생성baseline_code.ipynb
: baseline code
📂 backtranslation_data
┃ ┗ backtranslated_DeepL_JP.csv
📂 code
┃ ┣ backtranslate_DeepL_JP.py
┃ ┣ baseline_code.ipynb
┃ ┣ correct_label.py
┃ ┣ postprocess_and_merge.py
┃ ┣ text_clean.py
┃ ┗ total_clean.py
📂 data
┃ ┗ train.csv
📂 split_train_data
┃ ┣ label_noise.csv
┃ ┣ merge_text_label_cleaned.csv
┃ ┣ text_cleaned.csv
┃ ┣ text_noise.csv
┃ ┗ total_cleaned.csv
┣ filtering.ipynb
┗ requirements.txt
팀 협업을 위해 프로젝트 관련 Ground Rule을 설정하여 프로젝트가 원활하게 돌아갈 수 있도록 규칙을 정했으며, 날짜 단위로 간략한 목표를 설정하여 협업을 원활하게 진행할 수 있도록 계획하여 진행했다.
Server
: 권지수, 김성은, 이한서, 정주현 캠퍼는 각자 서버를 생성해 모델 실험을 진행하고, 김태원 캠퍼는 서버가 유휴 상태인 서버에서 실험을 진행했다.Git
:exp
branch에 각자 폴더를 생성해 작업하고, 공통으로 사용할 파일은 main에 push 하는 방법으로 협업했다.Submission
: 대회 마감 5일 전까지는 자유롭게 제출하고, 5일 전부터는 인당 2회씩 분배했다.Notion
: 원활한 아이디어 브레인스토밍과 분업을 위해 회의를 할 경우 노션에 기록하며, 연구 및 실험결과의 기록을 공유했다.
- 1~5 일차: 데이터 전처리 및 증강
- 6~11 일차:
Cleanlab
을 활용한 데이터 노이즈 정제 및 데이터 생성 실험
# 필요 라이브러리 설치
pip3 install -r requirements.txt
# label_noise.csv, text_noise.csv 파일 생성
filtering.ipynb
# prepare_train.sh 코드 실행 : Train dataset 을 만들기 위한 backtranslate_DeepL_JP.py,
# correct_label.py, postprocess_and_merge.py, text_clean.py, total_clean.py 실행
chmod +x prepare_train.sh # 권한 추가
./prepare_train.sh # 실행
# baseline code 실행
baseline_code.ipynb