Skip to content

boostcampaitech7/level1-semantictextsimilarity-nlp-13

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

50 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Level 1 Project :: STS(Semantic Text Similarity)

πŸ“ Abstract

  • 이 ν”„λ‘œμ νŠΈλŠ” 넀이버 λΆ€μŠ€νŠΈ μΊ ν”„ AI-Tech 7κΈ° NLP Level 1 기초 ν”„λ‘œμ νŠΈ κ²½μ§„λŒ€νšŒλ‘œ, Daconκ³Ό Kaggleκ³Ό μœ μ‚¬ν•œ λŒ€νšŒν˜• λ°©μ‹μœΌλ‘œ μ§„ν–‰λ˜μ—ˆλ‹€.
  • 두 λ¬Έμž₯이 의미적으둜 μ–Όλ§ˆλ‚˜ μœ μ‚¬ν•œμ§€λ₯Ό μˆ˜μΉ˜ν™”ν•˜λŠ” N21 μžμ—°μ–΄μ²˜λ¦¬ Task인 의미 μœ μ‚¬λ„ νŒλ³„(Semantic Text Similarity, STS)λ₯Ό 주제둜, λͺ¨λ“  νŒ€μ›μ΄ 데이터 μ „μ²˜λ¦¬λΆ€ν„° μ•™μƒλΈ”κΉŒμ§€ AI λͺ¨λΈλ§μ˜ μ „ 과정을 ν•¨κ»˜ ν˜‘μ—…ν–ˆλ‹€.

Project Leader Board

  • Public Leader Board
public_leader_board
  • Private Leader Board
private_leader_board

πŸ§‘πŸ»β€πŸ’» Team Introduction & Members

Team name : μŠ€λΉˆλΌν‚¨μŠ€λ°° [ NLP 13μ‘° ]

πŸ‘¨πŸΌβ€πŸ’» Members

κΆŒμ§€μˆ˜ 김성은 κΉ€νƒœμ› μ΄ν•œμ„œ μ •μ£Όν˜„
Github Github Github Github Github

πŸ§‘πŸ»β€πŸ”§ Members' Role

κΉ€νƒœμ› μΊ νΌλŠ” 13쑰의 νŒ€μž₯을 맑아 νŒ€μ„ 이끌며, λ°μ΄ν„°μ˜ 뢄포λ₯Ό λΆ„μ„ν•˜κ³ , 데이터 증강에 큰 κΈ°μ—¬λ₯Ό ν–ˆλ‹€. μ •μ£Όν˜„ 캠퍼와 μ΄ν•œμ„œ μΊ νΌλŠ” 주둜 μ •κ·œ ν‘œν˜„μ‹μ„ ν™œμš©ν•˜μ—¬ 데이터λ₯Ό μ „μ²˜λ¦¬ν•˜κ³ , 쑰사(은, λŠ”, 이, κ°€, 을, λ₯Ό, κ³Ό, 와)λ₯Ό λžœλ€ν™”ν•˜λŠ” κΈ°λ²•μœΌλ‘œ 데이터 ν’ˆμ§ˆμ„ ν–₯μƒμ‹œμΌ°λ‹€. 김성은 캠퍼와 κΆŒμ§€μˆ˜ μΊ νΌλŠ” Hugging Face와 GitHub에 μžˆλŠ” λ‹€μ–‘ν•œ λͺ¨λΈμ„ νƒμƒ‰ν•˜λ©°, μ΅œμ ν™” μž‘μ—…μ„ 톡해 μ„±λŠ₯을 κ·ΉλŒ€ν™”ν•˜λŠ”λ° μ£Όλ ₯ν–ˆλ‹€.

이름 μ—­ν• 
κΆŒμ§€μˆ˜ EDA (라벨 뢄포 데이터뢄석), λͺ¨λΈ 탐색 (KLUE: λ…Όλ¬Έ λ°”νƒ•μœΌλ‘œ RoBERTa와 ELECTRA 계열 λͺ¨λΈ μ€‘μ‹¬μœΌλ‘œ 탐색), λͺ¨λΈ μ‹€ν—˜ (team-lucid/deberta-v3-base-korean), Ensemble μ‹€ν—˜ (output 평균 및 κ°€μ€‘μΉ˜ ν™œμš©)
김성은 EDA (라벨 뢄포 데이터뢄석), λͺ¨λΈ 탐색 (Encoder, Decoder, Encoder - Decoder λͺ¨λΈλ‘œ μ„ΈλΆ„ν™”ν•˜μ—¬ 탐색), λͺ¨λΈ μ‹€ν—˜ (snunlp-KR-ELECTRA), Ensemble μ‹€ν—˜ (output 평균 및 κ°€μ€‘μΉ˜ ν™œμš©)
κΉ€νƒœμ› λͺ¨λΈ μ‹€ν—˜ (KR-ELECTRA-discriminator, electra-kor-base, deberta-v3, klue-roberta ), 데이터 증강 (label rescaling(0점 인덱슀의 제거 및 5점 인덱슀 μΆ”κ°€), λ‹¨μˆœ 볡제 데이터 증강(1점~3점 인덱슀), train λ°μ΄ν„°μ˜ 전체적인 λ§žμΆ€λ²• ꡐ정/λΆˆμš©μ–΄ 제거/띄어쓰기 ꡐ정), λͺ¨λΈ Ensemble (weighted sum for 3model/4models)
μ΄ν•œμ„œ 데이터 증강(쑰사 λŒ€μ²΄, Label 뢄포 κ· ν˜•ν™”), λͺ¨λΈ μ‹€ν—˜(team-lucid/deberta-v3-base-korean, monologg/koelectra-base-v3-discriminator, snunlp/KR-ELECTRA), Hyperparameter Tuning(Optuna Template μ œμž‘ 및 μ‹€ν—˜)
μ •μ£Όν˜„ Β Β Β Β Β Β Β Β Β Β Β Β  데이터 EDA (Label 뢄포, λ¬Έμž₯ λ‚΄μ˜ 단어 λΉˆλ„), 데이터 증강 (Swap sentence1 and sentence2, μœ μ˜μ–΄ ꡐ체(β€˜λ„ˆλ¬΄β€™, β€˜μ§„μ§œβ€™, β€˜μ •λ§β€™)), λͺ¨λΈ μ„ μ • 및 Ensemble (T5-base-korean-summarization), Ensemble(Blending Ensemble for 3 or 4 model(meta model = Ridge))

πŸ–₯️ Project Introduction

ν”„λ‘œμ νŠΈ 주제 Semantic Text Similarity (STS) : 두 ν…μŠ€νŠΈκ°€ μ–Όλ§ˆλ‚˜ μœ μ‚¬ν•œμ§€ νŒλ‹¨ν•˜λŠ” NLP Task
ν”„λ‘œμ νŠΈ κ΅¬ν˜„λ‚΄μš© 1. Hugging Face 의 Pretrained λͺ¨λΈκ³Ό STS 데이터셋을 ν™œμš©ν•΄ 두 λ¬Έμž₯의 0 κ³Ό 5 μ‚¬μ΄μ˜ μœ μ‚¬λ„λ₯Ό μΈ‘μ •ν•˜λŠ” AI λͺ¨λΈμ„ ꡬ좕
2. λ¦¬λ”λ³΄λ“œ ν‰κ°€μ§€ν‘œμΈ ν”Όμ–΄μŠ¨ 상관 κ³„μˆ˜(Pearson Correlation Coefficient ,PCC)μ—μ„œ 높은 점수(1에 κ°€κΉŒμš΄ 점수)에 도달할 수 μžˆλ„λ‘ 데이터 μ „μ²˜λ¦¬, 증강, ν•˜μ΄νΌ νŒŒλΌλ―Έν„° νŠœλ‹μ„ 진행
개발 ν™˜κ²½ β€’ GPU : Tesla V100 μ„œλ²„ 4개 (RAM32G)
β€’ 개발 Tool : Jupyter notebook, VS Code [μ„œλ²„ SSHμ—°κ²°]
ν˜‘μ—… ν™˜κ²½ β€’ Github Repository : Baseline μ½”λ“œ 곡유 및 버전 관리, 개인 branchλ₯Ό μ‚¬μš©ν•΄ μž‘μ—…μƒν™© 곡유
β€’ Notion : STS ν”„λ‘œμ νŠΈ νŽ˜μ΄μ§€λ₯Ό ν†΅ν•œ μ—­ν• λΆ„λ‹΄, μ‹€ν—˜ κ°€μ„€ μ„€μ • 및 κ²°κ³Ό 곡유
β€’ SLACK, Zoom : μ‹€μ‹œκ°„ λŒ€λ©΄/λΉ„λŒ€λ©΄ 회의

πŸ“ Project Structure

πŸ—‚οΈ 디렉토리 ꡬ쑰 μ„€λͺ…

  • ν•™μŠ΅ 데이터 경둜:Β ./data
  • ν•™μŠ΅ 메인 μ½”λ“œ: ./train.py
  • ν•™μŠ΅ 데이터셋 경둜: ./data/aug_train.csv
  • ν…ŒμŠ€νŠΈ 데이터셋 경둜: ./data/test.csv

πŸ“„ μ½”λ“œ ꡬ쑰 μ„€λͺ…

ν•™μŠ΅ μ§„ν–‰ν•˜κΈ° μ „ 데이터 증강을 λ¨Όμ € μ‹€ν–‰ν•˜μ—¬ ν•™μŠ΅ μ‹œκ°„ 단좕

  • 데이터 증강 Get Augmentation Data : augmentation.py
  • Train : train.py
  • Predict : test.py
  • Ensemble : weighted_ensemble.py, blending_ensemble.py
  • μ΅œμ’… 제좜 파일 : /output/Ensemble/blending_ensemble.csv
πŸ“¦level1_semantictextsimilarity-nlp-13
 ┣ πŸ“‚ base
 ┃ ┣ __init__.py
 ┃ ┣ base_data_loader.py
 ┃ ┣ base_dataset.py
 ┃ β”— base_trainer.py
 ┣ πŸ“‚ data
 ┃ ┣ aug_train.csv
 ┃ ┣ dev.csv
 ┃ ┣ sample_submission.csv
 ┃ ┣ test.csv
 ┃ β”— train.csv
 ┣ πŸ“‚ module
 ┃ ┣ dataset.py
 ┃ ┣ loss.py
 ┃ ┣ metric.py
 ┃ ┣ model.py
 ┃ β”— trainer.py
 ┣ πŸ“‚ output
 ┃ ┣ πŸ“‚ Ensemble
 ┃ ┃ β”— blending_ensemble.csv
 ┃ ┣ πŸ“‚ STSModel_eenzeenee-t5-base-korean-summarization
 ┃ ┃ ┣ dev_output_t5.csv
 ┃ ┃ ┣ test_output_t5.csv
 ┃ ┃ β”— train_output_t5.csv
 ┃ ┣ πŸ“‚ STSModel_klue-roberta-base
 ┃ ┃ ┣ dev_output_klue.csv
 ┃ ┃ ┣ test_output_klue.csv
 ┃ ┃ β”— train_output.csv
 ┃ ┣ πŸ“‚ STSModel_kykim-electra-kor-base
 ┃ ┃ ┣ dev_output_kykim.csv
 ┃ ┃ ┣ test_output_kykim.csv
 ┃ ┃ β”— train_output.csv
 ┃ ┣ πŸ“‚ STSModel_snunlp-KR-ELECTRA-discriminator
 ┃ ┃ ┣ dev_output_snunlp.csv
 ┃ ┃ ┣ test_output_snunlp.csv
 ┃ ┃ β”— train_output.csv
 ┃ ┣ πŸ“‚ STSModel_team-lucid-deberta-v3-base-korean
 ┃ ┃ ┣ dev_output_lucid.csv
 ┃ ┃ ┣ test_output_lucid.csv
 ┃ ┃ β”— train_output.csv
 ┃ β”— πŸ“‚ eng2_
 ┃ ┃ ┣ dev_output_eng2.csv
 ┃ ┃ β”— test_output_eng2.csv
 ┣ augmentation.py
 ┣ blending_ensemble.py
 ┣ config.yaml
 ┣ Readme.md
 ┣ requirements.txt
 ┣ test.py
 ┣ train.py
 β”— utils.py

πŸ“ Project Ground Rule

νŒ€ ν˜‘μ—…μ„ μœ„ν•΄ ν”„λ‘œμ νŠΈ κ΄€λ ¨ Ground Rule을 μ„€μ •ν•˜μ—¬ ν”„λ‘œμ νŠΈκ°€ μ›ν™œν•˜κ²Œ λŒμ•„κ°ˆ 수 μžˆλ„λ‘ κ·œμΉ™μ„ μ •ν–ˆμœΌλ©°, λ‚ μ§œ λ‹¨μœ„λ‘œ κ°„λž΅ν•œ λͺ©ν‘œλ₯Ό μ„€μ •ν•˜μ—¬ ν˜‘μ—…μ„ μ›ν™œν•˜κ²Œ 진행할 수 μžˆλ„λ‘ κ³„νšν•˜μ—¬ μ§„ν–‰ν–ˆλ‹€.

- a. Server κ΄€λ ¨ : κΆŒμ§€μˆ˜, 김성은, μ΄ν•œμ„œ, μ •μ£Όν˜„ μΊ νΌλŠ” 각자 μ„œλ²„λ₯Ό 생성해 λͺ¨λΈ μ‹€ν—˜μ„ μ§„ν–‰ν•˜κ³ , κΉ€νƒœμ› μΊ νΌλŠ” μ„œλ²„κ°€ 유휴 μƒνƒœμΈ μ„œλ²„μ—μ„œ μ‹€ν—˜μ„ μ§„ν–‰ν–ˆλ‹€.

- b. Git κ΄€λ ¨ : 각자 branch 생성해 μž‘μ—…ν•˜κ³ , κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•  νŒŒμΌμ€ main에 push ν•˜λŠ” λ°©λ²•μœΌλ‘œ ν˜‘μ—…ν–ˆλ‹€.

- c. Submission κ΄€λ ¨ : λŒ€νšŒ 마감 2일 μ „κΉŒμ§€λŠ” 자유둭게 μ œμΆœν–ˆκ³ , 2일 μ „λΆ€ν„°λŠ” 인당 2νšŒμ”© λΆ„λ°°ν–ˆλ‹€.

- d. Notion κ΄€λ ¨ : μ›ν™œν•œ 아이디어 λΈŒλ ˆμΈμŠ€ν† λ°κ³Ό 뢄업을 μœ„ν•΄ 회의λ₯Ό ν•  경우 λ…Έμ…˜μ— κΈ°λ‘ν•˜λ©°, 연ꡬ 및 μ‹€ν—˜κ²°κ³Όμ˜ 기둝을 κ³΅μœ ν–ˆλ‹€.


πŸ—“ Project Procedure: 총 14일 진행

  • (1~3 일차): EDA 뢄석
  • (3~5 일차): 데이터 μ „μ²˜λ¦¬
  • (6~11 일차) : 데이터 증강
  • (7~12 일차) : λͺ¨λΈλ§ 및 νŠœλ‹
  • (11~13 일차) : 앙상블
  • μ•„λž˜λŠ” 저희 ν”„λ‘œμ νŠΈ 진행과정을 담은 Gantt차트 μž…λ‹ˆλ‹€.
Gantt

πŸ“ŠDataSet

  • μš°λ¦¬λŠ” λ¨Όμ € λ°μ΄ν„°μ˜ 양이 적고 λΆˆκ· ν˜•ν•˜λ‹€λŠ” 점을 ν™•μΈν–ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ°μ΄ν„°μ˜ 양을 μ ˆλŒ€μ μœΌλ‘œ 늘린 ν›„, μ¦κ°•λœ λ°μ΄ν„°μ˜ 라벨 뢄포λ₯Ό κ³ λ €ν•˜μ—¬ 좔가적인 데이터 증강을 μ§„ν–‰ν–ˆλ‹€.
Techniques Description
Swap sentence 전체 데이터λ₯Ό sentence1κ³Ό sentence2의 μˆœμ„œλ₯Ό λ°”κΎΈμ–΄ λ°μ΄ν„°μ˜ 양을 μ•½ 2배둜 μ¦κ°•ν–ˆλ‹€.
μœ μ˜μ–΄ ꡐ체λ₯Ό ν†΅ν•œ 증강 raw λ°μ΄ν„°μ…‹μ—μ„œ sentence 1κ³Ό sentence 2에 'λ„ˆλ¬΄', '정말', 'μ§„μ§œ'λΌλŠ” 단어가 많이 λ“€μ–΄κ°€ μžˆλ‹€λŠ” 것을 νŒλ‹¨ν•˜μ—¬ ν•΄λ‹Ή 단어듀이 ν¬ν•¨λœ λ¬Έμž₯μ—μ„œ κ·Έ 쀑 ν•œ 단어λ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ 두 단어 쀑 ν•˜λ‚˜λ‘œ λ¬΄μž‘μœ„ λŒ€μ²΄ν•˜μ—¬ 데이터λ₯Ό μ¦κ°•ν–ˆλ‹€.

πŸ€–Ensemble Model

  • μ΅œμ’…μ μœΌλ‘œ 5개의 λͺ¨λΈμ„ blending 기법을 ν™œμš©ν•˜μ—¬ μ‚¬μš©ν–ˆν–ˆλ‹€.
Model Learing Rate Batch Size loss epoch dev person (val_pearson) Scheduler
klue/roberta-base 1e-5 16 L2(MSE) 10 0.9216 stepLR
kykim/electra-kor-base 1e-5 16 L2(MSE) 10 0.9259 stepLR
team-lucid/deberta-v3-base-korean 1e-4 16 L2(MSE) 10 0.9327 stepLR
snunlp/KR-ELECTRA-discriminator 1e-5 16 L2(MSE) 10 0.9333 stepLR
eenzeenee/t5-base-korean-summarization 1e-5 16 L2(MSE) 10 0.9229 stepLR

πŸ’» Getting Started

⚠️ How To install Requirements

# ν•„μš” 라이브러리 μ„€μΉ˜
pip install -r requirements.txt

⌨️ How To Train & Test

#데이터 증강
python3 augmentation.py
# train.py μ½”λ“œ μ‹€ν–‰ : λͺ¨λΈ ν•™μŠ΅μ„ 순차적으둜 진행
# 이후 test.py μ½”λ“œλ₯Ό 순차적으둜 μ‹€ν–‰ν•˜μ—¬ test
# config.yaml λ‚΄ λͺ¨λΈ 이름, lr 을 리슀트 μˆœμ„œλŒ€λ‘œ λ³€κ²½ν•˜λ©° train 으둜 ν•™μŠ΅

#plm_name[0], lr[0] -> klue/roberta-base
python3 train.py
python3 test.py

#plm_name[1], lr[1] -> kykim/electra-kor-base
python3 train.py
python3 test.py

#plm_name[2], lr[2] -> team-lucid/deberta-v3-base-korean 
python3 train.py
python3 test.py

#plm_name[3], lr[3] -> snunlp/KR-ELECTRA-discriminator
python3 train.py
python3 test.py

#plm_name[4], lr[4] -> eenzeenee/t5-base-korean- summarization
python3 train.py
python3 test.py

⌨️ How To Ensemble

# 순차적으둜 weighted ensemble 진행 ν›„, 좜λ ₯ κ²°κ³Όλ₯Ό μ‚¬μš©ν•΄μ„œ blended ensemble 진행
python3 weighted_ensemble.py # klue/roberta-base, eenzeenee/t5-base-korean-summarization, kykim/electra-kor-base
python3 blending_ensemble.py # kykim/electra-kor-base , team-lucid/deberta-v3-base-korean , snunlp/KR-ELECTRA-discriminator, weighted_ensemble

About

level1-semantictextsimilarity-nlp-13 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages