๋ณธ ๋ฌธ์๋ KNOW๊ธฐ๋ฐ ์ง์ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ ๊ฒฝ์ง๋ํ Private 2nd ์ฝ๋ ๋ฐ ์ ์ ์ฌํ ๋ฐฉ๋ฒ์ ๋ํด ์์ ํ๊ณ ์์ต๋๋ค.
๋ณธ ์ฝ๋๋ ํ์ ํ ํ๊ตญ์ด ์๋ฒ ๋ฉ์ ๋ฒ์ ์ถฉ๋ ๋ฌธ์ ๋ก ์ธํด ๊ฐ์ํ๊ฒฝ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
- base
- numpy
- omegaconf
- pandas
- pytorch_lightning
- scikit_learn
- torch==1.10.1
- transformers
- wandb
- transformers_4_15_0
- numpy
- pandas
- pytorch_lightning
- scikit_learn
- torch==1.10.1
- transformers==4.15.0
- tqdm
- transformers_2_8_0
- boto3
- gluonnlp >= 0.6.0
- mxnet >= 1.4.0
- onnxruntime == 1.8.0
- sentencepiece >= 0.1.6
- torch >= 1.7.0
- transformers == 2.8.0
- tqdm
transformers_4_15_0
์ transformers_2_8_0
ํ๊ฒฝ์ ํ์ ํ ๋ฐ์ดํฐ์
์์
๋ฌธ๋จ์์ ๋ ์์ธํ๊ฒ ์ค๋ช
ํ๊ณ ์์ต๋๋ค. ์ฌ์ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ๋ฐ์ดํฐ์
ํ์ผ์ด ๊ฐ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ด๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ํ๊ฒฝ ์ค์ ์ ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
๋ณธ ํ๋ก์ ํธ๋ conda
๋ฅผ ํตํ ๊ฐ์ํ๊ฒฝ ์ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ จ์ ์์
์ ์ํํ๋ ์ ํธ๋ฆฌํฐ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค. ์ํํ ์์
์ ์ํด conda
์ฌ์ฉ์ ๊ถ์ฅ๋๋ฆฝ๋๋ค.
์ค๋ฌธ์กฐ์ฌ ๋ฐ์ดํฐ์ ํฌํจ๋ ์์ฐ์ด ํญ๋ชฉ์ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด, ๋ณธ ํ๋ก์ ํธ๋ ํ๊ตญ์ด ์๋ฒ ๋ฉ ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค.
- SimCSE (https://github.com/BM-K/KoSimCSE-SKT)
- Averaged BERT Input Embeddings ํ๊ตญ์ด KoSimCSE ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ฅ ์๋ฒ ๋ฉ์ ์์ฑํ๊ธฐ ์ํด, ๋ค์์ ๋ช ๋ น์ด๋ฅผ ํตํด ํ๊ฒฝ์ค์ ์ ์งํํด ์ฃผ์ญ์์ค.
$ conda activate transformers_2_8_0
$ git clone https://github.com/BM-K/KoSimCSE.git
$ cd KoSimCSE
$ git clone https://github.com/SKTBrain/KoBERT.git
$ cd KoBERT
$ pip install -r requirements.txt
$ pip install .
$ cd ..
$ pip install -r requirements.txt
๋ช
๋ น์ด ์คํ์ด ์๋ฃ๋์๋ค๋ฉด Prerequisites ๋ฌธ๋จ์์ ๋ช
์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ์ด ๋ transformers
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ์ 2.8.0์ ๋ง์กฑํด์ผ ํฉ๋๋ค. ๋ฒ์ ์ด ์ผ์นํ์ง ์์ ๊ฒฝ์ฐ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ญ์ ํ ์ฌ์ค์น๋ฅผ ๊ถ์ฅ๋๋ฆฝ๋๋ค.
transformers
๋ฒ์ ์ด ์๋ก ์์ดํ๊ธฐ ๋๋ฌธ์, KoBERT
์ KoSimCSE
๊ฐ ์ ์์ ์ผ๋ก ์คํ๋์ง ์์ต๋๋ค. KoSimCSE/KoBERT/kobert/pytorch_bert.py
์ 28๋ฒ์งธ ์ค
bertmodel = BertModel.from_pretrained(model_path), return_dict=False)
๋ฅผ
bertmodel = BertModel.from_pretrained(model_path))
๋ก ์์ ํ์ฌ ์ฃผ์ญ์์ค.
์ดํ ํด๋น ๋ ํฌ์งํ ๋ฆฌ์ README ๋ฌธ์์์ ์ฌ์ ํ์ต ๋ชจ๋ธ์ ๋ค์ด๋ก๋๋ฐ์ ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ๋ค์ด๋ก๋๋ ํ์ผ (nli_checkpoint.pt)์ KoSimCSE ํด๋ ๋ด์ ์์นํด ์์ด์ผ ํฉ๋๋ค.
์ด์ ๋ํ ๋ฐ์ดํฐ์
์ ๋ค์ด๋ก๋ํด ์ฃผ์ญ์์ค. ๋ค์ด๋ก๋๋ ํ์ผ๊ณผ KoSimCSE
ํด๋๋ฅผ ๋ชจ๋ ํ๋ก์ ํธ ๊ฒฝ๋ก์ res
ํด๋์ ํ์๋ก ์ฎ๊ฒจ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ์ดํ ๋ค์์ ๋ช
๋ น์ด๋ฅผ ์ํํด ์ฃผ์ญ์์ค.
$ bash utilities/preprocess.sh
ํน์ ํ๊ฒฝ์ค์ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์, utilities/preprocess.sh
ํ์ผ์ ์ฒซ ์ค์ ์์นํ
source ~/anaconda3/etc/profile.d/conda.sh
๋ช ๋ น์ด์์ ํ์ฌ ์์คํ ์ ์๋์ฝ๋ค ๊ฒฝ๋ก๋ฅผ ์์ ํ์ฌ ์ฃผ์ญ์์ค.
์คํ์ด ์๋ฃ๋์๋ค๋ฉด, ๋ค์์ ํ์ผ์ด ์์ฑ๋์๋์ง ํ์ธํด ์ฃผ์ธ์. ํด๋น ํ์ผ์ ๋ชจ๋ res
ํด๋๋ก ์ฎ๊ธฐ๋ฉด ๋ฐ์ดํฐ์
์ ์ฒ๋ฆฌ๋ ์๋ฃ๋ฉ๋๋ค.
- KNOW_2017.pkl
- KNOW_2018.pkl
- KNOW_2019.pkl
- KNOW_2020.pkl
- KNOW_2017_test.pkl
- KNOW_2018_test.pkl
- KNOW_2019_test.pkl
- KNOW_2020_test.pkl
ํน์ ์ฒจ๋ถ๋, ์ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ์์ ํ์ผ๋ค์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํด๋น ํ์ผ๋ค์ ์์ ๊ณผ์ ๊ณผ ๋์ผํ๊ฒ ์งํ๋์ด ์์ฑ๋ ํ์ผ๋ค์ ๋๋ค.
๋ชจ๋ธ์ ํ์ตํ๊ธฐ ์ํด ๋ค์์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ญ์์ค.
$ python src/train.py config/sid-512d-1tb-1ab-18l.yaml data.filename=res/KNOW_2017.pkl data.fold_index=0 data.num_folds=5 train.random_seed=42
์ฐ๋ ๋ฐ์ดํฐ, KFold ๊ฐฏ์ ๋ฐ random seed๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์ ์์ ๋ช ๋ น์ด์ ๋ช ์๋ ๊ฐ์ ์กฐ์ ํ ์ ์์ต๋๋ค. ํน์ ์ ์ฒด ๋ฐ์ดํฐ์ ๋ํ 5-fold ํ์ต์ ์ํด ๋ค์์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ญ์์ค.
$ bash utilities/train.sh data.random_seed=42
๋ณธ ํ๋ก์ ํธ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ํด ๋ค์์ random seed์ ๋ํ ํ์ต์ ์งํํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ๋ฌผ๋ก GPU์ random generation์ด ์์ดํ์ฌ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- data.random_seed=0
- data.random_seed=1
- data.random_seed=2
- data.random_seed=3
- data.random_seed=4
- data.random_seed=20
- data.random_seed=24
- data.random_seed=42
- data.random_seed=777
- data.random_seed=1111
- data.random_seed=1234
- data.random_seed=2022
- data.random_seed=9876
- data.random_seed=9999
- data.random_seed=65535
๊ฐ random seed๋ณ ๋ชจ๋ธ ๊ฐ์ค์น๊ฐ ํ๋ก์ ํธ ํด๋ ์ต์๋จ์ ์์นํ๊ฒ ๋ฉ๋๋ค. ๊ฐ seed๋ณ ์๋ฃ๋ ๋ชจ๋ธ์ ์๋ก์ด ํด๋ (e.g. rs42
)์ ๊ฒฉ๋ฆฌํด ์ฃผ์ญ์์ค.
ํ์ต์ด ์๋ฃ๋ ๋ชจ๋ธ, ํน์ ๋๋ด๋ ๊ฐ์ค์น ํ์ผ๋ค์ด ๊ฒฉ๋ฆฌ๋์ด ์๋ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ํ ์คํธ ๋ฐ์ดํฐ์ ์ ๋ํ ์์ธก ํ์ผ์ ์์ฑํฉ๋๋ค.
$ bash utilities/predict-test.sh ./rs42
๋ชจ๋ random seed์ ๋ํด ๋ช
๋ น์ด๋ฅผ ์คํํ ๋ค, ํด๋ ๋ด์ ์์ธก๋ .csv
ํ์ผ๋ค์ด ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค. ์ด๋ค์ ํ๋๋ก ๊ฒฐํฉํ๊ธฐ ์ํด ๋ค์์ ๋ช
๋ น์ด๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์คํํฉ๋๋ค.
$ python utilities/create_submission.py **/*.csv --merge --ensemble
๋ชจ๋ ๊ณผ์ ์ด ์๋ฃ๋์๋ค๋ฉด, submission-ensemble.csv
ํ์ผ์ด ์์ฑ๋์๋์ง ํ์ธํ์ญ์์ค. ํด๋น ํ์ผ์ด ์ ์ถ์ ์ฌ์ฉ๋ submission์
๋๋ค.