- μ΄ νλ‘μ νΈλ λ€μ΄λ² λΆμ€νΈ μΊ ν AI-Tech 7κΈ° NLP Level 1 κΈ°μ΄ νλ‘μ νΈ κ²½μ§λνλ‘, Daconκ³Ό Kaggleκ³Ό μ μ¬ν λνν λ°©μμΌλ‘ μ§νλμλ€.
- λ λ¬Έμ₯μ΄ μλ―Έμ μΌλ‘ μΌλ§λ μ μ¬νμ§λ₯Ό μμΉννλ N21 μμ°μ΄μ²λ¦¬ TaskμΈ μλ―Έ μ μ¬λ νλ³(Semantic Text Similarity, STS)λ₯Ό μ£Όμ λ‘, λͺ¨λ νμμ΄ λ°μ΄ν° μ μ²λ¦¬λΆν° μμλΈκΉμ§ AI λͺ¨λΈλ§μ μ κ³Όμ μ ν¨κ» νμ νλ€.
- Public Leader Board
- Private Leader Board
Team name : μ€λΉλΌν¨μ€λ°° [ NLP 13μ‘° ]
κΆμ§μ | κΉμ±μ | κΉνμ | μ΄νμ | μ μ£Όν |
---|---|---|---|---|
Github | Github | Github | Github | Github |
κΉνμ μΊ νΌλ 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)) |
νλ‘μ νΈ μ£Όμ | 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 : μ€μκ° λλ©΄/λΉλλ©΄ νμ |
- νμ΅ λ°μ΄ν° κ²½λ‘:Β
./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
ν νμ μ μν΄ νλ‘μ νΈ κ΄λ ¨ Ground Ruleμ μ€μ νμ¬ νλ‘μ νΈκ° μννκ² λμκ° μ μλλ‘ κ·μΉμ μ νμΌλ©°, λ μ§ λ¨μλ‘ κ°λ΅ν λͺ©νλ₯Ό μ€μ νμ¬ νμ μ μννκ² μ§νν μ μλλ‘ κ³ννμ¬ μ§ννλ€.
- a. Server κ΄λ ¨
: κΆμ§μ, κΉμ±μ, μ΄νμ, μ μ£Όν μΊ νΌλ κ°μ μλ²λ₯Ό μμ±ν΄ λͺ¨λΈ μ€νμ μ§ννκ³ , κΉνμ μΊ νΌλ μλ²κ° μ ν΄ μνμΈ μλ²μμ μ€νμ μ§ννλ€.
- b. Git κ΄λ ¨
: κ°μ branch μμ±ν΄ μμ
νκ³ , 곡ν΅μΌλ‘ μ¬μ©ν νμΌμ mainμ push νλ λ°©λ²μΌλ‘ νμ
νλ€.
- c. Submission κ΄λ ¨
: λν λ§κ° 2μΌ μ κΉμ§λ μμ λ‘κ² μ μΆνκ³ , 2μΌ μ λΆν°λ μΈλΉ 2νμ© λΆλ°°νλ€.
- d. Notion κ΄λ ¨
: μνν μμ΄λμ΄ λΈλ μΈμ€ν λ°κ³Ό λΆμ
μ μν΄ νμλ₯Ό ν κ²½μ° λ
Έμ
μ κΈ°λ‘νλ©°, μ°κ΅¬ λ° μ€νκ²°κ³Όμ κΈ°λ‘μ 곡μ νλ€.
(1~3 μΌμ°¨)
: EDA λΆμ(3~5 μΌμ°¨)
: λ°μ΄ν° μ μ²λ¦¬(6~11 μΌμ°¨)
: λ°μ΄ν° μ¦κ°(7~12 μΌμ°¨)
: λͺ¨λΈλ§ λ° νλ(11~13 μΌμ°¨)
: μμλΈ
- μλλ μ ν¬ νλ‘μ νΈ μ§νκ³Όμ μ λ΄μ Ganttμ°¨νΈ μ λλ€.
- μ°λ¦¬λ λ¨Όμ λ°μ΄ν°μ μμ΄ μ κ³ λΆκ· ννλ€λ μ μ νμΈνλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λ°μ΄ν°μ μμ μ λμ μΌλ‘ λλ¦° ν, μ¦κ°λ λ°μ΄ν°μ λΌλ²¨ λΆν¬λ₯Ό κ³ λ €νμ¬ μΆκ°μ μΈ λ°μ΄ν° μ¦κ°μ μ§ννλ€.
Techniques | Description |
---|---|
Swap sentence | μ 체 λ°μ΄ν°λ₯Ό sentence1κ³Ό sentence2μ μμλ₯Ό λ°κΎΈμ΄ λ°μ΄ν°μ μμ μ½ 2λ°°λ‘ μ¦κ°νλ€. |
μ μμ΄ κ΅μ²΄λ₯Ό ν΅ν μ¦κ° | raw λ°μ΄ν°μ μμ sentence 1κ³Ό sentence 2μ 'λ무', 'μ λ§', 'μ§μ§'λΌλ λ¨μ΄κ° λ§μ΄ λ€μ΄κ° μλ€λ κ²μ νλ¨νμ¬ ν΄λΉ λ¨μ΄λ€μ΄ ν¬ν¨λ λ¬Έμ₯μμ κ·Έ μ€ ν λ¨μ΄λ₯Ό μ μΈν λλ¨Έμ§ λ λ¨μ΄ μ€ νλλ‘ λ¬΄μμ λ체νμ¬ λ°μ΄ν°λ₯Ό μ¦κ°νλ€. |
- μ΅μ’ μ μΌλ‘ 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 |
# νμ λΌμ΄λΈλ¬λ¦¬ μ€μΉ
pip install -r requirements.txt
#λ°μ΄ν° μ¦κ°
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
# μμ°¨μ μΌλ‘ 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