2022๋ ์ธ๊ณต์ง๋ฅ ์จ๋ผ์ธ ๊ฒฝ์ง๋ํ / ๋ฌธ์ ๊ฒ์ ํจ์จํ๋ฅผ ์ํ ๊ธฐ๊ณ๋ ํด ๋ฌธ์ - ํ: QuoQA
ํ ์คํธ์ ์ง๋ฌธ์ด ์ฃผ์ด์ก์ ๋ ๋ณธ๋ฌธ์์ ์ง๋ฌธ์ ๋ต์ ์ฐพ๋ ๊ณผ์ ์ ๋๋ค. ๋ต๋ณ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ๋ต๋ณ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ ๋ชจ๋ ์กด์ฌํ๋ฉฐ, Exact Match๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฑ๋ฅ์ ํ๊ฐํฉ๋๋ค. ๊ธฐ๊ณ๋ ํด๋ Extractive Question Answering ํ์์ผ๋ก์จ Context ์์์ Answer Span์ ์ฐพ๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค.
- ํด๋น ๋ฌธ๋จ์ผ๋ก ๋ต๋ณ ๊ฐ๋ฅ์ฑ์ ํ๋จํ๋ ๊ฒ๊ณผ ๋ต๋ณ ๋ฌธ์์ด์ ์ถ์ถํ๋ ๊ณผ์ ์ Transformer backbone model ๋จ์ผ ๋ชจ๋ธ๋ก์จ ๋์์ ์ํํ๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
- ๋ต๋ณ ๊ฐ๋ฅ์ฑ์ ๊ธฐ์ค์ผ๋ก ์ฐ์ถํ loss์ ๋ฌธ์์ด ์์์ , ๋์ ์ด ์ผ์นํ๋์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฐ์ถํ loss๋ฅผ ๊ฐ์คํ๊ท ํฉํ์ฌ total loss๋ฅผ ์ฐ์ ํฉ๋๋ค.
- ํ์ ๋ GPU VRAM ์์์์ ํ๋ จ์ํค๊ธฐ ์ํ์ฌ Gradient Accumulation, Gradient Checkpoint๋ฅผ ์ฌ์ฉํ์ผ๋ฉฐ ์ด๋ฅผ ํตํด ์ฑ๋ฅ ํฅ์์ ์ด๋ค๋์ต๋๋ค.
ํ๋ จ ๋ช
๋ น์ด
bash running_train_only.sh
์ถ๋ก ๋ช
๋ น์ด
bash running_inference_only.sh
KLUE: Korean Language Understanding Evaluation(2021)์์ ๊ณต๊ฐํ roberta-large ๋ชจ๋ธ์ ์ฌ์ฉํ์ต๋๋ค. (arXiv:2105.09680)
RoBERTa ๋ชจ๋ธ์ ์ ์ ํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ต๋ณ ๋ถ๊ฐ ํญ๋ชฉ๊ณผ ์๋ต ๋ฌธ์์ด์ ๋ฒค์น๋งํฌ๋ก ์ผ์ SQuAD v2.0 Benchmark, KLUE Benchmark์์ Roberta Backbone์ด ์ฑ๋ฅ์ด ์ข๋ค๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.
- #Trainable Params์ Num Layers๋ฅผ ๋ฐ์ก์ ๋ RoBERTa-large ๋ชจ๋ธ์ด KPFBert-base ๋ฑ๊ณผ ๊ฐ์ base size ๋ชจ๋ธ์ ๋นํด์ ๋ฅ๋ฌ๋ ํ์ต์ ๋น๊ต์ฐ์๊ฐ ์์ ๊ฒ์ผ๋ก ์์ํ์ต๋๋ค.
- ํ ์์ฒด์ ์ผ๋ก Train Dataset์ 5 Fold๋ก ๋๋ ์ Evaluation Score์ ์ฐ์ถํ์ ๋ klue/roberta-large๊ฐ ์ฑ๋ฅ์ด ์ ์ผ ์ฐ์ํ๊ฒ ๋์์ต๋๋ค.
๊ตฌ์ฒด์ ์ผ๋ก Huggingface์ ์ ๋ก๋๋ ๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ์ต๋๋ค: ๐ klue/roberta-large
ํด๋น pre-trained weight๋ 2021๋ 06์ 15์ผ์ ๊ณต๊ฐ๋์์ต๋๋ค. ํด๋น PLM์ ๋ค์๊ณผ ๊ฐ์ ๋ฐ์ดํฐ์ , ํ ํฌ๋์ด์ , ๋ชจ๋ธ ๊ตฌ์กฐ๋ฅผ ๋ฐํ์ผ๋ก ํ๋ จ์ด ๋์์ต๋๋ค.
- Pretrained Corpora (์ด 62GB)
- MODU Corpus
- Korean Corpus containing formal articles and colloquial text released by the National Institute of Korean Language
- CC-100-Kor
- Korean portion of the multilingual web crawled corpora used for training XLM-R
- NAMUWIKI
- Korean web-based encyclopedia
- NEWSCRAWL
- Collection of 12,800,000 news articles from 2011 to 2020
- PETITION
- Blue House National Petition: collection of public petitions
- MODU Corpus
- Tokenizer
- 32K Vocab Size
- Morpheme-based subword tokenization
- Pre-tokenize raw-text into morphemes and then apply BPE
- Model Structure
- 24 transformer layers
- 337M trainable parameters
- Dynamic / WWM Masking
../DATA
| +- sample_submission.csv
| +- test.json
| +- train.json
- 'train.json'๋ฅผ Huggingface์ datasets.Dataset ํด๋์ค๋ก ๋ณํํ๋ค.
- Dataset ํด๋์ค๋ก ๋ณํ๋ train dataset์ ๋ฐํ์ผ๋ก RobertaForV2QuestionAnswering์ ํ์ธํ๋์ ์งํํ๋ค.
- 'test.json'๋ฅผ Huggingface์ datasets.Dataset ํด๋์ค๋ก ๋ณํํ๋ค.
- ์์ Finetuningํ RobertaForV2QuestionAnswering ๋ชจ๋ธ์ ๋ฐํ์ผ๋ก 'FINAL_SUBMISSION.csv' ํ์ผ์ ์์ฑํ๋ค.
CPU 10C, Nvidia T4 GPU x 1, 90MEM, 1TB
USER/
โโโ running_train_only.sh
โโโ running_inference_only.sh
โโโ train.py
โโโ inference.py
โโโ trainer.py
โโโ arguments.py
โโโ question_ids.json
โโโ README.md
โโโ requirements.txt
โโโ .gitignore
โ
โโโ models
โย ย โโโ roberta.py
โย ย โโโ output.py
โย ย โโโ bart.py
โย ย โโโ bert.py
โย ย โโโ electra.py
โ
โโโ utils
โย ย โโโ encoder.py
โย ย โโโ loader.py
โย ย โโโ preprocessor.py
โย ย โโโ postprocessor.py
โย ย โโโ metric.py
โ
โโโ exps
โย ย โโโ checkpoint-125/ *ํ๋จ ์์ธ ๊ธฐ์ *
โย ย โโโ checkpoint-250/
โย ย โโโ checkpoint-375/
โย ย โโโ checkpoint-500/
โย ย โโโ checkpoint-625/
โย ย โโโ checkpoint-750/
โย ย โโโ checkpoint-875/
โ
โโโ mecab-0.996-ko-0.9.2/
โ
โโโ mecab-ko-dic-2.1.1-20180720/
โ
โโโ RESULT * Output ์์ธ์ค๋ช
*
ย ย โโโ final_submission.csv
โโโ checkpoint-875
โโโ pytorch_model.bin
โโโ config.json
โโโ optimizer.pt
โโโ rng_state.pth
โโโ scheduler.pt
โโโ special_tokens_map.json
โโโ tokenizer_config.json
โโโ tokenizer.json
โโโ trainer_state.json
โโโ training_args.bin
โโโ vocab.txt
-
running_train_only.sh
- ๋ชจ๋ธ ํ์ตํ๊ธฐ ์ํ shell script ํ์ผ์ ๋๋ค.
- ํ๋ จ์ ํ์ํ argument๋ ์๋๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค.
-
running_inference_only.sh
- ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ๋ก ์ถ๋ก ํ๊ธฐ ์ํ shell script ํ์ผ์ ๋๋ค.
- ์ถ๋ก ์ ํ์ํ argument๋ ์๋๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค.
-
train.py
- ๋ชจ๋ธ ํ์ต์ ์คํํ๋ ์ฝ๋์ ๋๋ค.
- ์ ์ฅ๋ model checkpoint ๊ฐ์ค์น ํ์ผ์
exps/
ํด๋์ ์์ต๋๋ค. - ์ต์ข
์ถ๋ก ์ ์ฐ์ด๋ ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ์
RESULT/
ํด๋์ ์์ต๋๋ค.
-
inference.py
- ํ์ต๋ model ๊ฐ์ค์น๋ฅผ ํตํด predictionํ๊ณ , ์์ธกํ ๊ฒฐ๊ณผ๋ฅผ csv ํ์ผ๋ก ์ ์ฅํ๋ ์ฝ๋์ ๋๋ค.
- ์ ์ฅ๋ ์ต์ข
submission ํ์ผ์
RESULT/
ํด๋์ ์์ต๋๋ค.
-
trainer.py
- Huggingface์ Trainer class๋ฅผ ์์๋ฐ์ trainer๋ฅผ ๊ตฌํํ ํ์ผ์ ๋๋ค.
- compute_loss, evaluate, predict ํจ์๋ฅผ customํ๊ฒ ๋ณ๊ฒฝํ์ต๋๋ค.
-
arguments.py
- ํ์ต ๋ฐ ์ถ๋ก ์ ํ์ํ arguments ๊ด๋ จ class๋ฅผ ์ ์ํ ํ์ผ์ ๋๋ค.
- arguments์ ์ข ๋ฅ, ๊ธฐ๋ณธ๊ฐ, help message ๋ฑ์ ์ ์ํ์ต๋๋ค.
-
question_ids.json
- ์ฌํ์ ์ํด์ ํ์ตํ ๋์ train data์ id ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํ๊ณ ์ด๋ฅผ ์ด์ฉํด์ /DATA/train.json์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ์์ต๋๋ค.
-
models/
- ๋ชจ๋ธ class๋ฅผ ๊ตฌํํ ํ์ผ๋ค์ด ์๋ ๋๋ ํ ๋ฆฌ์
๋๋ค.
- ์ต์ข
๋ชจ๋ธ์
roberta.py
์ ์๋ RobertaForV2QuestionAnswering class๋ง ์ฌ์ฉํ์ต๋๋ค. - ์ด ์ธ์
output.py
์์ ๋ชจ๋ธ ์ถ๋ ฅ๋ฌผ class๋ฅผ ๊ตฌํํ์ต๋๋ค.
- ์ต์ข
๋ชจ๋ธ์
- ๋ชจ๋ธ class๋ฅผ ๊ตฌํํ ํ์ผ๋ค์ด ์๋ ๋๋ ํ ๋ฆฌ์
๋๋ค.
-
utils/
- ๋ฐ์ดํฐ์ ์ ์ฒ๋ฆฌ, ๋ชจ๋ธ ์ ๋ ฅ ๋ฐ์ดํฐ ์ /ํ์ฒ๋ฆฌ, ํ๊ฐ์งํ ํ์ผ๋ค์ด ์๋ ๋๋ ํ ๋ฆฌ์ ๋๋ค.encoder.py
- ๋ฐ์ดํฐ๋ฅผ tokenizeํ๊ณ is_impossible, ์ ๋ต index ๋ฑ์ ๊ตฌํ๋ Encoder class๋ฅผ ์ ์ํ ํ์ผ์ ๋๋ค.
loader.py
- train, test ๋ฐ์ดํฐ๊ฐ ์๋ /DATA ๋๋ ํ ๋ฆฌ์์ json ํ์ผ์ธ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ณ Huggingface์ Datasets ํด๋์ค์ ๋ง๊ฒ ํ์์ ๋ณํํ๋ ํด๋์ค๊ฐ ์๋ ํ์ผ์ ๋๋ค.
preprocessor.py
- ์ ๋ต์ด ์๋ ๊ฒฝ์ฐ, ์ ๋ต์ด 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ๋ Preprocessor class๋ฅผ ์ ์ํ ํ์ผ์ ๋๋ค.
postprocessor.py
- ๋ชจ๋ธ ์ถ๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก ์ต์ข prediction์ ๊ตฌํ๊ณ ํฌ๋งท์ ๋ง์ถฐ ์ถ๋ ฅํ๋ ํจ์๋ฅผ ์ ์ํ ํ์ผ์ ๋๋ค.
- Konlpy์ ํํ์ ๋ถ์๊ธฐ mecab์ ํ์ฉํ์ฌ ํํ์ ๋ถ์ ํ, ๋์ ์กฐ์ฌ ๋ฐ ์๋ค์ ํน์ ๋ฌธ์ ์ ๊ฑฐ (mecab version: mecab of 0.996/ko-0.9.2)
metric.py
- ๋ชจ๋ธ์ ํ๊ฐํ๊ธฐ ์ํ ํ๊ฐ์งํ Metric class๋ฅผ ์ ์ํ ํ์ผ์ ๋๋ค.
-
exps/
- train.py๋ฅผ ์คํํ ์, ํ๋ จ๋ ๋๋ง๋ค ์์ฑ๋๋ ๋ชจ๋ธ checkpoint๋ฅผ ์ ์ฅํ๋ ๋๋ ํ ๋ฆฌ์ ๋๋ค.
-
RESULT/
-
train.py๋ฅผ ํตํด ํ์ต๋ ์ต์ข ๋ชจ๋ธ checkpoint ๊ฐ์ค์น ํ์ผ์ ์ ์ฅํ๋ ๋๋ ํ ๋ฆฌ์ ๋๋ค.
-
inference.py๋ฅผ ํตํด Test data์ ๋ํด์ ๋ชจ๋ธ์ด ์์ธกํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๋๋ ํ ๋ฆฌ์ ๋๋ค.
-
final_submission.csv
- ์ต์ข ์์ธก๊ฐ์ด ์ ์ฅ๋ submission ํ์ผ์ ๋๋ค.
-
checkpoint-875/
- ์ต์ข ๋ชจ๋ธ ๊ฐ์ค์น๊ฐ ์ ์ฅ๋ ๋๋ ํ ๋ฆฌ์ ๋๋ค.
pytorch_model.bin
- ๋ชจ๋ธ ๊ฐ์ค์น๊ฐ ์ ์ฅ๋ ํ์ผ์ ๋๋ค.
config.json
- ๋ชจ๋ธ์ ๋ํ ์ ๋ฐ์ ์ธ ํน์ง ๋ฐ ๊ฒฝ๋ก๊ฐ ์ ํ์๋ ํ์ผ์ ๋๋ค.
optimizer.pt
- optimizer weight๋ฅผ ๋ด์ ํ์ผ์ ๋๋ค.
rng_state.pth
- python, numpy, cpu ์ ๋ณด๋ฅผ ๋ด์ ํ์ผ์ ๋๋ค.
scheduler.pt
- scheduler weight๋ฅผ ๋ด์ ํ์ผ์ ๋๋ค.
special_tokens_map.json
- tokenizer์์ ์ฌ์ฉํ๋ special token์ ๋ด์ ํ์ผ์ ๋๋ค.
tokenizer_config.json
- tokenizer์ special token, class ๋ฐ ๋ชจ๋ธ ์ด๋ฆ ์ ๋ณด ๋ด์ ํ์ผ์ ๋๋ค.
tokenizer.json
- tokenizer์ ๊ฐ vocab id ์ ๋ณด๋ฅผ ๋ด์ ํ์ผ์ ๋๋ค.
trainer_state.json
- ๊ฐ log step ๋น, learning rate๋ loss, eval ์ ๋ณด ๋ฑ์ ๋ด์ ํ์ผ์ ๋๋ค.
training_args.bin
- train argument๋ฅผ ๋ด์ ํ์ผ์ ๋๋ค.
vocab.txt
- tokenizer์ ๋ค๋ฃจ๋ ๋ฌธ์๋ค์ ๋ด์ ํ์ผ์ ๋๋ค.
-
argument | description |
---|---|
do_train | ๋ชจ๋ธ์ ํ๋ จํ ์ง ์ฌ๋ถ ๊ฒฐ์ ํฉ๋๋ค. |
group_name | wandb ๊ทธ๋ฃน ์ด๋ฆ ์ง์ ํฉ๋๋ค. |
data_path | Nipa dataset ์ ํํฉ๋๋ค. |
use_validation | validation์ ์ํํ ์ง ์ฌ๋ถ ๊ฒฐ์ |
PLM | ๋ชจ๋ธ PLM ๊ฒฐ์ ํฉ๋๋ค. |
model_category | models ํด๋ ์์ ์ฌ์ฉํ ํ์ผ ์ ํํฉ๋๋ค. |
model_name | model_category์์ ์ ํํ ํ์ผ์์ ์ธ๋ถ class ์ ํํฉ๋๋ค. |
max_length | ์ต๋ ๊ธธ์ด ์ง์ ํฉ๋๋ค. |
save_strategy | step or epoch ๊ธฐ์ค ๋ฑ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์์ ์ ํฉ๋๋ค. |
save_total_limit | ์ต๋ checkpoint ์ ์ฅ ๊ฐฏ์๋ฅผ ์ง์ ํฉ๋๋ค. |
learning_rate | ํ๋ จ learning rate๋ฅผ ์ง์ ํฉ๋๋ค. |
per_device_train_batch_size | train batch size๋ฅผ ์ง์ ํฉ๋๋ค. |
per_device_eval_batch_size | eval batch size๋ฅผ ์ง์ ํฉ๋๋ค. |
gradient_accumulation_steps | gradient accumulation ์๋ฅผ ์ ํฉ๋๋ค. |
gradient_checkpointing | gradient checkpoint ์ฌ๋ถ๋ฅผ ์ ํฉ๋๋ค. |
max_steps | ํ์ต ์ต๋ step์ ์ง์ ํฉ๋๋ค. |
argument | description |
---|---|
do_predict | ์ฃผ์ด์ง ๋ฐ์ดํฐ์ ๋ํด ์์ธกํ ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. |
PLM | ์ํ๋ ๊ฐ์ค์น ๋ชจ๋ธ์ ๊ฐ์ ธ์ต๋๋ค. |
model_category | models ํด๋ ์์ ์ฌ์ฉํ ํ์ผ ์ ํํฉ๋๋ค. |
model_name | model_category์์ ์ ํํ ํ์ผ์์ ์ธ๋ถ class ์ ํํฉ๋๋ค. |
max_length | ์ต๋ ๊ธธ์ด ์ง์ ํฉ๋๋ค. |
output_dir | ์์ธก๊ฐ์ ์ ์ฅํ ๊ฒฝ๋ก๋ฅผ ์ค์ ํฉ๋๋ค. |
file_name | ์์ธก๊ฐ์ ๋ํ ํ์ผ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. |