๋ถ์คํธ ์บ ํ AI-Tech 5๊ธฐ NLP Level 1 ๊ธฐ์ด ํ๋ก์ ํธ ๊ฒฝ์ง๋ํ๋ก, Dacon๊ณผ Kaggle๊ณผ ์ ์ฌํญ ๋ํํ ๋ฐฉ์์ผ๋ก ์งํ๋์์ต๋๋ค. ๋ ๋ฌธ์ฅ์ด ์๋ฏธ์ ์ผ๋ก ์ผ๋ง๋ ์ ์ฌํ์ง๋ฅผ ์์นํํ๋ N21 ์์ฐ์ด์ฒ๋ฆฌ Task์ธ ์๋ฏธ ์ ์ฌ๋ ํ๋ณ(Semantic Text Similarity, STS)๋ฅผ ์ฃผ์ ๋ก, ๋ชจ๋ ํ์์ด ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ๋ถํฐ ๋ชจ๋ธ์ ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋์ ์ด๋ฅด๊ธฐ๊น์ง AI ๋ชจ๋ธ๋ง์ ์ ๊ณผ์ ์ ๋ชจ๋๊ฐ End-to-End๋ก ํ์ ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ์ต๋๋ค.
- ๐ฅ Public Leader Board
- ๐ฅPrivate Leader Board
Team name : ์ค์ฌ [ NLP 11์กฐ ]
๊ฐ๋ฏผ์ฌ | ๊น์ฃผ์ | ๊นํ๋ฏผ | ์ ํ์ค | ์ค์์ |
---|---|---|---|---|
Github | Github | Github | Github | Github |
๋๋ถ๋ถ์ ํ์๋ค์ด ์ฒซ NLP ๋๋ฉ์ธ์ ํ๋ก์ ํธ์ธ๋งํผ ๋ช ํํ ๊ธฐ์ค์ ๊ฐ์ง๊ณ ์ ๋ฌด๋ฅผ ๊ตฌ๋ถํ ๊ฒ๋ณด๋ค ๋ค์ํ ์ธ์ฌ์ดํธ๋ฅผ ๊ธฐ๋ฅด๊ธฐ ์ํด ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ๋ถํฐ ๋ชจ๋ธ ํ๋๊น์ง End-to-End๋ก ๊ฒฝํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ์ฌ ํ์ ์ ์งํํ์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ ํ๋ํ ๋ชจ๋ธ์ ํ ๋นํ์ฌ ํ์ดํผ ํ๋ผ๋ฏธํฐ ํ๋์ ํ๊ณ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ, ์ฆ๊ฐ ๋ฑ ๋ณธ์ธ์ ์์ด๋์ด๋ฅผ ๊ตฌํํ๋ ์๋ก์ ๋ด์ฉ์ด ๊ฒน์น์ง ์๋๋ก ๋ถ์ ์ ํ์ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ์ต๋๋ค.
์ด๋ฆ | ์ญํ |
---|---|
๊ฐ๋ฏผ์ฌ |
๋ชจ๋ธ ํ๋(electra-kor-base , koelectra-base-v3-discriminator ),๋ฐ์ดํฐ ์ฆ๊ฐ(back translation / switching sentence pair /์์๊ธ์์ฝ์
๋ฐ์ ๊ฑฐ ),๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ์คํ(๋ ์ด๋ธ ์ ์ํ ๋ฐ ๋
ธ์ด์ฆ์ถ๊ฐ ),Ensemble ์คํ(output ํ๊ท , ํ์คํธ์ฐจํ์ฉ ),EDA(๊ธ์์ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๋ถํฌ ๋ถ์ ) |
๊นํ๋ฏผ |
Hugging Face ๊ธฐ๋ฐ Baseline ์ฝ๋ ์์ฑ , Task์ ์ ํฉํ ๋ชจ๋ธ Search ๋ฐ ๋ถ๋ฐฐ , ๋ชจ๋ธ ์คํ ์ด๊ด , ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ์คํ(Random Token Masking , Label Random Noise, Fill Random Token Mask, Source Tagging ), Custom Loss ์คํ(Binary Cross Entropy + Focal Loss ),๋ชจ๋ธ ํ๋(xlm-roberta-large, electra-kor-base ),๋ชจ๋ธ Ensemble |
๊น์ฃผ์ |
๋ชจ๋ธ ํ๋(kobigbird-bert-base, electra-kor-base ),EDA(๋ผ๋ฒจ ๋ถํฌ ๋ฐ์ดํฐ๋ถ์ ),EDA ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์ฆ๊ฐ ์์ด๋์ด ์ ์ , ๋ฐ์ดํฐ ์ฆ๊ฐ(Easy Augmented DataSR ์ฆ๊ฐ ),ํ ํ์
ํ๋ก์ธ์ค ๊ด๋ฆฌ(Github ํ๊ด๋ฆฌ+ ํ Notion ํ์ด์ง๊ด๋ฆฌ ) ,Custom Loss ์คํ(RMSE ) |
์ค์์ |
๋ชจ๋ธ ํ๋(koelectra-base-finetuned-nsmc, KR-ELECTRA-discriminator ๋ชจ๋ธํ๋ ),๋ฐ์ดํฐ ์ฆ๊ฐ(label rescaling, ๋จ์๋ณต์ ๋ฐ์ดํฐ์ฆ๊ฐ, ์ด์๋์น๋ฐ์ดํฐ์ฆ๊ฐ, under sampling + swap sentence + copied sentence + uniform distribution + random noise ),๋ชจ๋ธ Ensemble |
์ ํ์ค ย ย ย ย ย ย ย ย ย |
๋ชจ๋ธ ํ๋(KR-ELECTRA-discriminator, mdeberta-v3-base-kor-further )๋ฐ์ดํฐ ์ฆ๊ฐ(๋ง์ถค๋ฒ๊ต์ ์ฆ๊ฐ,EDA(Easy Data Augmentation) SR(Synonym Replacement)ํ์ฌ์ ํ(๋ช
์ฌ, ์กฐ์ฌ) ๊ต์ฒด+ swap sentence + copied sentence, Data Distribution ),๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ์คํ(๋ง์ถค๋ฒ๊ต์ ) |
ํ๋ก์ ํธ ์ฃผ์ | Semantic Text Similarity (STS) : ๋ ํ
์คํธ๊ฐ ์ผ๋ง๋ ์ ์ฌํ์ง ํ๋จํ๋ NLP Task |
---|---|
ํ๋ก์ ํธ ๊ตฌํ๋ด์ฉ | 1. Hugging Face์ Pretrained ๋ชจ๋ธ๊ณผSTS ๋ฐ์ดํฐ์
์ ํ์ฉํด ๋ ๋ฌธ์ฅ์ 0๊ณผ 5์ฌ์ด์ ์ ์ฌ๋๋ฅผ ์ธก์ ํ๋ AI๋ชจ๋ธ์ ๊ตฌ์ถ 2. ๋ฆฌ๋๋ณด๋ ํ๊ฐ์งํ์ธ ํผ์ด์จ ์๊ด ๊ณ์(Pearson Correlation Coefficient ,PCC)์์ ๋์ ์ ์(1์ ๊ฐ๊น์ด ์ ์)์ ๋๋ฌํ ์ ์๋๋ก ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ, ์ฆ๊ฐ, ํ์ดํผ ํ๋ผ๋ฏธํฐ ํ๋์ ์งํ |
๊ฐ๋ฐ ํ๊ฒฝ | โข GPU : Tesla V100 ์๋ฒ 5๊ฐ (RAM32G) / K80, T4, and P100 ๋๋ค ํ ๋น(RAM52G) /GeForce RTX 4090 ๋ก์ปฌ (RAM 24GB), Rtx3060ti 8gb ๋ก์ปฌ 2๋ (RAM 8 GB)โข ๊ฐ๋ฐ Tool : PyCharm, Jupyter notebook, VS Code [์๋ฒ SSH์ฐ๊ฒฐ], Colab Pro +, wandb |
ํ์ ํ๊ฒฝ | โข Github Repository : Baseline ์ฝ๋ ๊ณต์ ๋ฐ ๋ฒ์ ๊ด๋ฆฌ, issue ํ์ด์ง๋ฅผ ํตํ ์คํ ์งํ โข Notion : STS ํ๋ก์ ํธ ํ์ด์ง๋ฅผ ํตํ ์ญํ ๋ถ๋ด, ์์ด๋์ด ๋ธ๋ ์ธ ์คํ ๋ฐ, ๋ํ๊ด๋ จ ํ์ ๋ด์ฉ ๊ธฐ๋ก โข SLACK, Zoom : ์ค์๊ฐ ๋๋ฉด/๋น๋๋ฉด ํ์ |
- ํ์ต ๋ฐ์ดํฐ ๊ฒฝ๋ก:ย
./data
- ๊ณต๊ฐ Pretrained ๋ชจ๋ธ ๊ธฐ๋ฐ์ผ๋ก ์ถ๊ฐ Fine Tuning ํ์ต์ ํ ํ๋ผ๋ฏธํฐ ๊ฒฝ๋ก
./save_folder/kykim/checkpoint-7960
./save_folder/snunlp/checkpoint-31824
./save_folder/xlm_roberta_large/checkpoint-7960
- ํ์ต ๋ฉ์ธ ์ฝ๋:ย
./train.py
- ํ์ต ๋ฐ์ดํฐ์
๊ฒฝ๋ก:
./data/aug_train.csv
- ํ
์คํธ ๋ฉ์ธ ์ฝ๋:ย
./infer.py
- ํ
์คํธ ๋ฐ์ดํฐ์
๊ฒฝ๋ก:ย
./data/test.csv
ํ์ต ์งํํ๊ธฐ ์ ๋ฐ์ดํฐ ์ฆ๊ฐ์ ๋จผ์ ์คํํ์ฌ ํ์ต ์๊ฐ ๋จ์ถ
- ๋ฐ์ดํฐ ์ฆ๊ฐย Get Augmentation Data :
augmentation.py
- Train :
train.py
- Predict :
infer.py
- Ensemble :
python esnb.py
- ์ต์ข
์ ์ถ ํ์ผ :
./esnb/esnb.csv
๐ฆlevel1_semantictextsimilarity-nlp-11
โฃ .gitignore
โฃ config_yaml
โ โฃ kykim.yaml
โ โฃ snunlp.yaml
โ โฃ test.yaml
โ โ xlm_roberta_large.yaml
โฃ data
โ โฃ train.csv
โ โฃ aug_train.csv
โ โฃ dev.csv
โ โ test.csv
โฃ wordnet
โ โ wordnet.pickle
โฃ save_folde
โ โฃ kykim
โ โ โ checkpoint-7960
โ โฃ snunlp
โ โ โ checkpoint-31824
โ โ xlm_roberta_large
โ โ checkpoint-7960
โฃ esnb
โ โ esnb.csv
โฃ output
โ โฃ xlm_roberta_large.csv
โ โฃ kykim.csv
โ โ snunlp.csv
โฃ .gitignore
โฃ Readme.md
โฃ augmentation.py
โฃ dataloader.py
โฃ esnb.py
โฃ infer.py
โฃ train.py
โ utils.py
ํ ํ์ ์ ์ํด ํ๋ก์ ํธ ๊ด๋ จ Ground Rule์ ์ค์ ํ์ฌ ํ๋ก์ ํธ๊ฐ ์ํํ๊ฒ ๋์๊ฐ ์ ์๋๋ก ํ ๊ท์น์ ์ ํ์ผ๋ฉฐ, ๋ ์ง ๋จ์๋ก ๊ฐ๋ตํ ๋ชฉํ๋ฅผ ์ค์ ํ์ฌ ํ์ ์ ์ํํ๊ฒ ์งํํ ์ ์๋๋ก ๊ณํ์ ํ์ฌ ์งํํ์ต๋๋ค.
-a. ์คํ ๊ด๋ จ Ground Rule
: ๋ณธ์ธ ์คํ ์์ํ ๋, Github issue์ "[score ์ ์(์๋ค๋ฉด --)] ๋ชจ๋ธ์ด๋ฆ, data = ๋ฐ์ดํฐ ์ข
๋ฅ, ์ ์ฒ๋ฆฌ ์ข
๋ฅ, ๋ฐ์ดํฐ ์ฆ๊ฐ ์ข
๋ฅ"
์์์ผ๋ก issue
๋ฅผ ์ฌ๋ฆฐ ๋ค ์คํ์ ์์ํ๋ค.
-b. Commit ๊ด๋ จ Ground Rule
: git commit & push
๋ ํ๋ฒ ์คํํ ๋
๋ง๋ค ์งํํ๋ค. ์ฝ๋ ์์ ๋ด์ฉ, ์ ์, ๊ด๋ จ๋ issue
๊ฐ ๋ค์ด๊ฐ๋๋ก commitํ๊ณ ๊ฐ์ธ branch์ pushํ๋ค.
-c. Submission ๊ด๋ จ Ground Rule:
๊ฐ ์ฌ๋๋ณ๋ก ํ๋ฃจ submission ํ์๋ 2ํ
์ฉ ํ ๋นํ๋ค. ์ถ๊ฐ๋ก submission์ ํ๊ณ ์ถ์ผ๋ฉด SLACK ๋จ์ฒด ํก๋ฐฉ์์ ํด๋น ๋ ์ง์ submission๊ณํ์ด ์๋ ํน์, ํ์๊ฐ ๋จ๋ ์ฌ๋์๊ฒ ๋ฌผ์ด๋ด์ ์ฌ์ ๊ฐ ๋๋ค๋ฉด ์ถ๊ฐ submission ๊ฐ๋ฅํ๋ค.
(1~3์ผ์ฐจ)
: NLP ๊ธฐ์ด ๋ํ ๊ด๋ จ ๋ํ ๊ฐ์ ๋ฐ ์คํ์ ๋ฏธ์ ์๋ฃ & ํ์ ๊ด๋ จ Ground Rule ์ค์ (3~4์ผ์ฐจ)
: STS Baseline ์ฝ๋ ์์ฑ & EDA(Exploratory Data Analysis) & ์ ์ฒ๋ฆฌ/์ฆ๊ฐ ๊ด๋ จ ์์ด๋์ด ํ์(5~14์ผ์ฐจ)
: ์ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ์ฆ๊ฐ, ํ์ดํผ ํ๋ผ๋ฏธํฐ ํ๋ ๋ฑ ์์ด๋์ด ๊ตฌํ ๋ฐ ์คํ ์งํ
*์๋๋ ์ ํฌ ํ๋ก์ ํธ ์งํ๊ณผ์ ์ ๋ด์ Gantt์ฐจํธ ์ ๋๋ค.
๋ถ๋ฅ | ๋ด์ฉ |
---|---|
๋ชจ๋ธ | kykim/electra-kor-base , snunlp/KR-ELECTRA-discriminator , xlm-roberta-large + HuggingFace Transformer Trainer |
๋ฐ์ดํฐ | โข v1 : swap sentence, copied sentence ๊ธฐ๋ฒ์ ์ ์ฉํ์ฌ ๋ ์ด๋ธ ๋ถ๊ท ํ์ ํด์ํ ๋ฐ์ดํฐ์
โข v2 : KorEDA์ Wordnet ํ์ฉํ์ฌ Synonym Replacement ๊ธฐ๋ฒ์ผ๋ก ์ฆ๊ฐํ ๋ฐ์ดํฐ์
|
๊ฒ์ฆ ์ ๋ต | โข Evaluation ๋จ๊ณ์ ํผ์ด์จ ์๊ด ๊ณ์๋ฅผ ์ผ์ฐจ์ ์ผ๋ก ๋น๊ต โข ๊ธฐ์กด SOTA ๋ชจ๋ธ๊ณผ ์ฑ๋ฅ์ด ๋น์ทํ ๋ชจ๋ธ์ ์ ์ถํ์ฌ public ์ ์๋ฅผ ํ์ธํ์ฌ ์ด์ฐจ ๊ฒ์ฆ |
์์๋ธ ๋ฐฉ๋ฒ | โข ์๊ธฐ 3๊ฐ์ ๋ชจ๋ธ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์์ ํ๊ท ์ ๋ด๋ ๋ฐฉ๋ฒ์ผ๋ก ์์๋ธ ์ํ |
๋ชจ๋ธ ํ๊ฐ ๋ฐ ๊ฐ์ ย ย ย ย ย ย ย ย ย ย | ํ ํฌ๋์ด์ง ๊ฒฐ๊ณผ ๋ถ์์ ํตํด max_length๋ฅผ ์์ ํ์ฌ ๋ชจ๋ธ ํ์ต ์๊ฐ์ ์ ๋ฐ ๊ฐ๋ ๋จ์ถํ ์ ์์๋ค. ๋ค์ํ ์ฆ๊ฐ ๋ฐ ์ ์ฒ๋ฆฌ ๊ธฐ๋ฒ์ ํตํด label imbalance ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ overfitting์ ๋ฐฉ์งํ๊ณ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์์ผฐ๋ค. ๋ํ, HuggingFace Trainer์ wandb๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ํ์ธต ๋ ํธ๋ฆฌํ๊ณ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์๋ค. |
#ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
# version 0.5
pip install git+https://github.com/haven-jeon/PyKoSpacing.git
# version 1.1
pip install git+https://github.com/jungin500/py-hanspell
pip install -r requirements.txt
sudo apt install default-jdk
# ๋ฐ์ดํฐ ์ฆ๊ฐ
python3 augmentation.py
# train.py ์ฝ๋ ์คํ : ๋ชจ๋ธ ํ์ต ์งํ
# model_name์ kykim/electra-kor-base, snunlp/KR-ELECTRA-discriminator, xlm-roberta-large๋ก ๋ณ๊ฒฝํ๋ฉฐ train์ผ๋ก ํ์ต
python3 train.py # model_name = model_list[0]
python3 train.py # model_name = model_list[1]
python3 train.py # model_name = model_list[2]
# infer.py ์ฝ๋ ์คํ : ํ๋ จ๋ ๋ชจ๋ธ load + sample_submission์ ์ด์ฉํ train ์งํ
python3 infer.py # model_name = model_list[0]
python3 infer.py # model_name = model_list[1]
python3 infer.py # model_name = model_list[2]
python3 esnb.py