[NLP] ๋ฌธ์„œ ๋ถ„๋ฅ˜ ๋ชจ๋ธ training

โ€ขAI/NLP

์ž์—ฐ์–ด์ฒ˜๋ฆฌ์˜ ์˜ˆ์ œ๋ฅผ ํ•™์Šตํ•˜์—ฌ ๋ณด์ž.
๋‹ค์Œ์€ ์ด์ „ ๊ธ€์—์„œ ์„ค๋ช…ํ•˜์˜€๋˜ ๋ฌธ์„œ ๋ถ„๋ฅ˜ ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

๋ณธ ํŒŒ์ผ์€ ์ด๊ธฐ์ฐฝ๋‹˜์˜ 'Do it! ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ'์— ๊ธฐ์ดˆํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ๋‹ค! :)

๋ฌธ์„œ๋ถ„๋ฅ˜ ๋ชจ๋ธ ํ•™์Šตํ•˜๊ธฐ

1. ๊ฐ์ข… ์„ค์ •ํ•˜๊ธฐ

TPU ๊ด€๋ จ ํŒจํ‚ค์ง€ ์„ค์น˜

์ฝ”๋žฉ ๋…ธํŠธ๋ถ ์ดˆ๊ธฐํ™” ๊ณผ์ •์—์„œ ํ•˜๋“œ์›จ์–ด ๊ฐ€์†๊ธฐ๋กœ TPU๋ฅผ ์„ ํƒํ–ˆ๋‹ค๋ฉด ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด TPU ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ค์„ ์„ค์น˜ํ•œ๋‹ค.

(์ฐธ๊ณ ๋กœ TPU ํ•™์Šต์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์› ๋“ฑ์ด GPU๋ณด๋‹ค ๋ถˆ์•ˆ์ •ํ•œ ํŽธ์ด๋ฏ€๋กœ ๋  ์ˆ˜ ์žˆ์œผ๋ฉด GPU๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒํ•จ)

code 1-0

!pip install cloud-tpu-client==0.10 https://storage.googleapis.com/tpu-pytorch/wheels/torch_xla-1.9-cp37-cp37m-linux_x86_64.whl
โ–ถCode output
Collecting torch-xla==1.9
  Using cached https://storage.googleapis.com/tpu-pytorch/wheels/torch_xla-1.9-cp37-cp37m-linux_x86_64.whl (149.9 MB)
Requirement already satisfied: cloud-tpu-client==0.10 in /usr/local/lib/python3.7/dist-packages (0.10)
Requirement already satisfied: google-api-python-client==1.8.0 in /usr/local/lib/python3.7/dist-packages (from cloud-tpu-client==0.10) (1.8.0)
Requirement already satisfied: oauth2client in /usr/local/lib/python3.7/dist-packages (from cloud-tpu-client==0.10) (4.1.3)
Requirement already satisfied: google-api-core<2dev,>=1.13.0 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client==1.8.0->cloud-tpu-client==0.10) (1.26.3)
Requirement already satisfied: google-auth>=1.4.1 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client==1.8.0->cloud-tpu-client==0.10) (1.35.0)
Requirement already satisfied: uritemplate<4dev,>=3.0.0 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client==1.8.0->cloud-tpu-client==0.10) (3.0.1)
Requirement already satisfied: six<2dev,>=1.6.1 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client==1.8.0->cloud-tpu-client==0.10) (1.15.0)
Requirement already satisfied: google-auth-httplib2>=0.0.3 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client==1.8.0->cloud-tpu-client==0.10) (0.0.4)
Requirement already satisfied: httplib2<1dev,>=0.9.2 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client==1.8.0->cloud-tpu-client==0.10) (0.17.4)
Requirement already satisfied: googleapis-common-protos<2.0dev,>=1.6.0 in /usr/local/lib/python3.7/dist-packages (from google-api-core<2dev,>=1.13.0->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (1.55.0)
Requirement already satisfied: pytz in /usr/local/lib/python3.7/dist-packages (from google-api-core<2dev,>=1.13.0->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (2018.9)
Requirement already satisfied: setuptools>=40.3.0 in /usr/local/lib/python3.7/dist-packages (from google-api-core<2dev,>=1.13.0->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (57.4.0)
Requirement already satisfied: protobuf>=3.12.0 in /usr/local/lib/python3.7/dist-packages (from google-api-core<2dev,>=1.13.0->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (3.17.3)
Requirement already satisfied: packaging>=14.3 in /usr/local/lib/python3.7/dist-packages (from google-api-core<2dev,>=1.13.0->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (21.3)
Requirement already satisfied: requests<3.0.0dev,>=2.18.0 in /usr/local/lib/python3.7/dist-packages (from google-api-core<2dev,>=1.13.0->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (2.23.0)
Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.7/dist-packages (from google-auth>=1.4.1->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (0.2.8)
Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.7/dist-packages (from google-auth>=1.4.1->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (4.8)
Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from google-auth>=1.4.1->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (4.2.4)
Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/local/lib/python3.7/dist-packages (from packaging>=14.3->google-api-core<2dev,>=1.13.0->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (3.0.7)
Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /usr/local/lib/python3.7/dist-packages (from pyasn1-modules>=0.2.1->google-auth>=1.4.1->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (0.4.8)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0dev,>=2.18.0->google-api-core<2dev,>=1.13.0->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (3.0.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0dev,>=2.18.0->google-api-core<2dev,>=1.13.0->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (1.24.3)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0dev,>=2.18.0->google-api-core<2dev,>=1.13.0->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (2021.10.8)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0dev,>=2.18.0->google-api-core<2dev,>=1.13.0->google-api-python-client==1.8.0->cloud-tpu-client==0.10) (2.10)

์˜์กด์„ฑ ํŒจํ‚ค์ง€ ์„ค์น˜

๋‹ค์Œ ์ฝ”๋“œ๋Š” TPU์ด์™ธ์— ์˜์กด์„ฑ ์žˆ๋Š” ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

๋ช…๋ น์–ด ๋งจ ์•ž์— ๋ถ™์€ ๋А๋‚Œํ‘œ(!)๋Š” ์ฝ”๋žฉ ํ™˜๊ฒฝ์—์„œ ํŒŒ์ด์ฌ์ด ์•„๋‹Œ, ์…ธ(shell)๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

code 1-1

!pip install ratsnlp
โ–ถCode output
Requirement already satisfied: ratsnlp in /usr/local/lib/python3.7/dist-packages (1.0.1)
Requirement already satisfied: torch>=1.9.0 in /usr/local/lib/python3.7/dist-packages (from ratsnlp) (1.10.0+cu111)
Requirement already satisfied: transformers==4.10.0 in /usr/local/lib/python3.7/dist-packages (from ratsnlp) (4.10.0)
Requirement already satisfied: flask-ngrok>=0.0.25 in /usr/local/lib/python3.7/dist-packages (from ratsnlp) (0.0.25)
Requirement already satisfied: Korpora>=0.2.0 in /usr/local/lib/python3.7/dist-packages (from ratsnlp) (0.2.0)
Requirement already satisfied: flask-cors>=3.0.10 in /usr/local/lib/python3.7/dist-packages (from ratsnlp) (3.0.10)
Requirement already satisfied: pytorch-lightning==1.3.4 in /usr/local/lib/python3.7/dist-packages (from ratsnlp) (1.3.4)
Requirement already satisfied: flask>=1.1.4 in /usr/local/lib/python3.7/dist-packages (from ratsnlp) (1.1.4)
Requirement already satisfied: fsspec[http]>=2021.4.0 in /usr/local/lib/python3.7/dist-packages (from pytorch-lightning==1.3.4->ratsnlp) (2022.2.0)
Requirement already satisfied: torchmetrics>=0.2.0 in /usr/local/lib/python3.7/dist-packages (from pytorch-lightning==1.3.4->ratsnlp) (0.7.2)
Requirement already satisfied: PyYAML<=5.4.1,>=5.1 in /usr/local/lib/python3.7/dist-packages (from pytorch-lightning==1.3.4->ratsnlp) (5.4.1)
Requirement already satisfied: tqdm>=4.41.0 in /usr/local/lib/python3.7/dist-packages (from pytorch-lightning==1.3.4->ratsnlp) (4.62.3)
Requirement already satisfied: pyDeprecate==0.3.0 in /usr/local/lib/python3.7/dist-packages (from pytorch-lightning==1.3.4->ratsnlp) (0.3.0)
Requirement already satisfied: packaging in /usr/local/lib/python3.7/dist-packages (from pytorch-lightning==1.3.4->ratsnlp) (21.3)
Requirement already satisfied: future>=0.17.1 in /usr/local/lib/python3.7/dist-packages (from pytorch-lightning==1.3.4->ratsnlp) (0.18.2)
Requirement already satisfied: numpy>=1.17.2 in /usr/local/lib/python3.7/dist-packages (from pytorch-lightning==1.3.4->ratsnlp) (1.21.5)
Requirement already satisfied: tensorboard!=2.5.0,>=2.2.0 in /usr/local/lib/python3.7/dist-packages (from pytorch-lightning==1.3.4->ratsnlp) (2.8.0)
Requirement already satisfied: sacremoses in /usr/local/lib/python3.7/dist-packages (from transformers==4.10.0->ratsnlp) (0.0.47)
Requirement already satisfied: huggingface-hub>=0.0.12 in /usr/local/lib/python3.7/dist-packages (from transformers==4.10.0->ratsnlp) (0.4.0)
Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.7/dist-packages (from transformers==4.10.0->ratsnlp) (2019.12.20)
Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from transformers==4.10.0->ratsnlp) (4.11.1)
Requirement already satisfied: filelock in /usr/local/lib/python3.7/dist-packages (from transformers==4.10.0->ratsnlp) (3.6.0)
Requirement already satisfied: tokenizers<0.11,>=0.10.1 in /usr/local/lib/python3.7/dist-packages (from transformers==4.10.0->ratsnlp) (0.10.3)
Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (from transformers==4.10.0->ratsnlp) (2.23.0)
Requirement already satisfied: Jinja2<3.0,>=2.10.1 in /usr/local/lib/python3.7/dist-packages (from flask>=1.1.4->ratsnlp) (2.11.3)
Requirement already satisfied: Werkzeug<2.0,>=0.15 in /usr/local/lib/python3.7/dist-packages (from flask>=1.1.4->ratsnlp) (1.0.1)
Requirement already satisfied: click<8.0,>=5.1 in /usr/local/lib/python3.7/dist-packages (from flask>=1.1.4->ratsnlp) (7.1.2)
Requirement already satisfied: itsdangerous<2.0,>=0.24 in /usr/local/lib/python3.7/dist-packages (from flask>=1.1.4->ratsnlp) (1.1.0)
Requirement already satisfied: Six in /usr/local/lib/python3.7/dist-packages (from flask-cors>=3.0.10->ratsnlp) (1.15.0)
Requirement already satisfied: aiohttp in /usr/local/lib/python3.7/dist-packages (from fsspec[http]>=2021.4.0->pytorch-lightning==1.3.4->ratsnlp) (3.8.1)
Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.7/dist-packages (from huggingface-hub>=0.0.12->transformers==4.10.0->ratsnlp) (3.10.0.2)
Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.7/dist-packages (from Jinja2<3.0,>=2.10.1->flask>=1.1.4->ratsnlp) (2.0.1)
Requirement already satisfied: xlrd>=1.2.0 in /usr/local/lib/python3.7/dist-packages (from Korpora>=0.2.0->ratsnlp) (2.0.1)
Requirement already satisfied: dataclasses>=0.6 in /usr/local/lib/python3.7/dist-packages (from Korpora>=0.2.0->ratsnlp) (0.6)
Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/local/lib/python3.7/dist-packages (from packaging->pytorch-lightning==1.3.4->ratsnlp) (3.0.7)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests->transformers==4.10.0->ratsnlp) (2021.10.8)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests->transformers==4.10.0->ratsnlp) (2.10)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests->transformers==4.10.0->ratsnlp) (3.0.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests->transformers==4.10.0->ratsnlp) (1.24.3)
Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /usr/local/lib/python3.7/dist-packages (from tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (0.4.6)
Requirement already satisfied: absl-py>=0.4 in /usr/local/lib/python3.7/dist-packages (from tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (1.0.0)
Requirement already satisfied: setuptools>=41.0.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (57.4.0)
Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.7/dist-packages (from tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (0.37.1)
Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.7/dist-packages (from tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (3.3.6)
Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (1.8.1)
Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (0.6.1)
Requirement already satisfied: protobuf>=3.6.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (3.17.3)
Requirement already satisfied: google-auth<3,>=1.6.3 in /usr/local/lib/python3.7/dist-packages (from tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (1.35.0)
Requirement already satisfied: grpcio>=1.24.3 in /usr/local/lib/python3.7/dist-packages (from tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (1.44.0)
Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.7/dist-packages (from google-auth<3,>=1.6.3->tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (0.2.8)
Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.7/dist-packages (from google-auth<3,>=1.6.3->tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (4.8)
Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from google-auth<3,>=1.6.3->tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (4.2.4)
Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.7/dist-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (1.3.1)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->transformers==4.10.0->ratsnlp) (3.7.0)
Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /usr/local/lib/python3.7/dist-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (0.4.8)
Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.7/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard!=2.5.0,>=2.2.0->pytorch-lightning==1.3.4->ratsnlp) (3.2.0)
Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec[http]>=2021.4.0->pytorch-lightning==1.3.4->ratsnlp) (1.3.0)
Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec[http]>=2021.4.0->pytorch-lightning==1.3.4->ratsnlp) (1.2.0)
Requirement already satisfied: asynctest==0.13.0 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec[http]>=2021.4.0->pytorch-lightning==1.3.4->ratsnlp) (0.13.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec[http]>=2021.4.0->pytorch-lightning==1.3.4->ratsnlp) (6.0.2)
Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec[http]>=2021.4.0->pytorch-lightning==1.3.4->ratsnlp) (4.0.2)
Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec[http]>=2021.4.0->pytorch-lightning==1.3.4->ratsnlp) (1.7.2)
Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec[http]>=2021.4.0->pytorch-lightning==1.3.4->ratsnlp) (21.4.0)
Requirement already satisfied: charset-normalizer<3.0,>=2.0 in /usr/local/lib/python3.7/dist-packages (from aiohttp->fsspec[http]>=2021.4.0->pytorch-lightning==1.3.4->ratsnlp) (2.0.12)
Requirement already satisfied: joblib in /usr/local/lib/python3.7/dist-packages (from sacremoses->transformers==4.10.0->ratsnlp) (1.1.0)

๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ์™€ ์—ฐ๊ฒฐ

์ฝ”๋žฉ ๋…ธํŠธ๋ถ์€ ์ผ์ •์‹œ๊ฐ„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹น์‹œ๊นŒ์ง€์˜ ๋ชจ๋“  ๊ฒฐ๊ณผ๋ฌผ์ด ๋‚ ์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ ๋“ฑ์„ ์ €์žฅํ•ด ๋‘๊ธฐ ์œ„ํ•ด ์ž์‹ ์˜ ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์ฝ”๋žฉ ๋…ธํŠธ๋ถ๊ณผ ์—ฐ๊ฒฐํ•œ๋‹ค.

code 1-2

from google.colab import drive
drive.mount('/gdrive', force_remount=True)
โ–ถCode output
Mounted at /gdrive

๋ชจ๋ธ ํ™˜๊ฒฝ ์„ค์ •

kcbert-base ๋ชจ๋ธ์„ NSMC๋ฐ์ดํ„ฐ๋กœ ํŒŒ์ธํŠœ๋‹

code 1-3

import torch
from ratsnlp.nlpbook.classification import ClassificationTrainArguments
args = ClassificationTrainArguments(
    pretrained_model_name="beomi/kcbert-base",
    downstream_corpus_name="nsmc",
    downstream_model_dir="/gdrive/My Drive/nlpbook/checkpoint-doccls",
    batch_size=32 if torch.cuda.is_available() else 4,
    learning_rate=5e-5,
    max_seq_length=128,
    epochs=3,
    tpu_cores=0 if torch.cuda.is_available() else 8,
    seed=7,
)

์ฐธ๊ณ ๋กœ TrainArguments์˜ ๊ฐ ์ธ์ž๊ฐ€ ํ•˜๋Š” ์—ญํ• ๊ณผ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • pretrained_model_name

ํ”„๋ฆฌํŠธ๋ ˆ์ธ ๋งˆ์นœ ์–ธ์–ด ๋ชจ๋ธ์˜ ์ด๋ฆ„ (๋‹จ, ํ•ด๋‹น ๋ชจ๋ธ์€ ํ—ˆ๊น…ํŽ˜์ด์Šค ๋ชจ๋ธ ํ—ˆ๋ธŒ์— ๋“ฑ๋ก๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.)

  • downstream_corpus_name

๋‹ค์šด์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ์˜ ์ด๋ฆ„

  • downstream_corpus_root_dir

๋‹ค์šด์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ ค๋ฐ›์„ ์œ„์น˜. ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด /root/Korpora์— ์ €์žฅ๋œ๋‹ค.

  • downstream_model_dir

ํŒŒ์ธํŠœ๋‹๋œ ๋ชจ๋ธ์˜ ์ฒดํฌํฌ์ธํŠธ๊ฐ€ ์ €์žฅ๋  ์œ„์น˜. gdrive/My Drive/nlpbook/checkpoint-doccs๋กœ ์ง€์ •ํ•˜๋ฉด ์ž์‹ ์˜ ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ [๋‚ด ํด๋”] ์•„๋ž˜ npbook/checkpoint-doccls๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค.

  • batch_size

๋ฐฐ์น˜ ํฌ๊ธฐ. ํ•˜๋“œ์›จ์–ด ๊ฐ€์†๊ธฐ๋กœ GPU๋ฅผ ์„ ํƒ(torch.cuda.is_available() == True)ํ–ˆ๋‹ค๋ฉด 32, TPU๋ผ๋ฉด(torch.cuda.is_available() == False) 4. ์ฝ”๋žฉ ํ™˜๊ฒฝ์—์„œ TPU๋Š” ๋ณดํ†ต 8๊ฐœ์˜ ์ฝ”์–ด๊ฐ€ ํ• ๋‹น๋˜๋Š”๋ฐ batch_size๋Š” ์ฝ”์–ด๋ณ„๋กœ ์ ์šฉ๋˜๋Š” ๋ฐฐ์น˜ ํฌ๊ธฐ์ด๋ฏ€๋กœ ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•ด ๋‘”๋‹ค.

  • learning_rate

๋Ÿฌ๋‹ ๋ ˆ์ดํŠธ(๋ณดํญ). 1ํšŒ ์Šคํ…์—์„œ ๋ชจ๋ธ์„ ์–ผ๋งˆ๋‚˜ ์—…๋ฐ์ดํŠธํ• ์ง€์— ๊ด€ํ•œ ํฌ๊ธฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

  • max_seq_length

ํ† ํฐ ๊ธฐ์ค€ ์ž…๋ ฅ ๋ฌธ์žฅ ์ตœ๋Œ€ ๊ธธ์ด. ์ด๋ณด๋‹ค ๊ธด ๋ฌธ์žฅ์€ max_seq_length๋กœ ์ž๋ฅด๊ณ , ์งง์€ ๋ฌธ์žฅ์€ max_seq_length๊ฐ€ ๋˜๋„๋ก ์ŠคํŽ˜์…œ ํ† ํฐ([PAD])๋ฅผ ๋ถ™์—ฌ์ค€๋‹ค.

  • epochs

ํ•™์Šต ์—ํฌํฌ ์ˆ˜. 3์ด๋ผ๋ฉด ํ•™์Šต ๋ฐ์ดํ„ฐ ์ „์ฒด๋ฅผ 3ํšŒ ๋ฐ˜๋ณต ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

  • tpu_cores

TPU ์ฝ”์–ด ์ˆ˜. ํ•˜๋“œ์›จ์–ด ๊ฐ€์†๊ธฐ๋กœ GPU๋ฅผ ์„ ํƒํ–ˆ๋‹ค๋ฉด 0, TPU๋ผ๋ฉด 8.

  • seed

๋žœ๋ค ์‹œ๋“œ(์ •์ˆ˜). None์„ ์ž…๋ ฅํ•˜๋ฉด ๋žœ๋ค ์‹œ๋“œ๋ฅผ ๊ณ ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋žœ๋ค ์‹œ๋“œ ๊ณ ์ •

๋žœ๋ค ์‹œ๋“œ๋ฅผ ์„ค์ •.

code 1-4๋Š” args์— ์ง€์ •๋œ ์‹œ๋“œ๋กœ ๊ณ ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

code 1-4

from ratsnlp import nlpbook
nlpbook.set_seed(args)
โ–ถCode output
set seed: 7

๋กœ๊ฑฐ ์„ค์ •

๊ฐ์ข… ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋กœ๊ฑฐ๋ฅผ ์„ค์ •.

code 1-5

nlpbook.set_logger(args)
โ–ถCode output
INFO:ratsnlp:Training/evaluation parameters ClassificationTrainArguments(pretrained_model_name='beomi/kcbert-base', downstream_task_name='document-classification', downstream_corpus_name='nsmc', downstream_corpus_root_dir='/content/Korpora', downstream_model_dir='/gdrive/My Drive/nlpbook/checkpoint-doccls', max_seq_length=128, save_top_k=1, monitor='min val_loss', seed=7, overwrite_cache=False, force_download=False, test_mode=False, learning_rate=5e-05, epochs=3, batch_size=32, cpu_workers=2, fp16=False, tpu_cores=0)

2. ๋ง๋ญ‰์น˜ ๋‚ด๋ ค๋ฐ›๊ธฐ

๋ง๋ญ‰์น˜ ๋‚ด๋ ค ๋ฐ›๊ธฐ

NSMC ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ ค๋ฐ›๋Š”๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ ค๋ฐ›๋Š” ๋„๊ตฌ๋กœ ์ฝ”ํฌ๋ผ(Korpora*)๋ผ๋Š” ํŒŒ์ด์ฌ ์˜คํ”ˆ์†Œ์Šค ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•ด, corpus_name(nsmc)์— ํ•ด๋‹นํ•˜๋Š” ๋ง๋ญ‰์น˜๋ฅผ root_dir(/root/Korpora) ์•„๋ž˜์— ์ €์žฅํ•ด ๋‘”๋‹ค.

  • Korpora*: github.com/ko-nlp/korpora

code 1-6

from Korpora import Korpora
Korpora.fetch(
    corpus_name=args.downstream_corpus_name,
    root_dir=args.downstream_corpus_root_dir,
    force_download=True,
) 
โ–ถCode output
[nsmc] download ratings_train.txt: 14.6MB [00:00, 75.6MB/s]                           
[nsmc] download ratings_test.txt: 4.90MB [00:00, 33.9MB/s]                           

3. ํ† ํฌ๋‚˜์ด์ € ์ค€๋น„ํ•˜๊ธฐ

ํ† ํฌ๋‚˜์ด์ € ์ค€๋น„

๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ ๋‹ค๋ฃจ๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋Š” ํ…์ŠคํŠธ ํ˜•ํƒœ์˜ ๋ฌธ์žฅ์ด๋‹ค. ํ† ํฐํ™”๋ž€ ๋ฌธ์žฅ์„ ํ† ํฐ ์‹œํ€€์Šค๋กœ ๋ถ„์ ˆํ•˜๋Š” ๊ณผ์ •์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋ณธ ์‹ค์Šต์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ์€ ์ž์—ฐ์–ด ๋ฌธ์žฅ์„ ๋ถ„์ ˆํ•œ ํ† ํฐ ์‹œํ€€์Šค๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค.

code 1-7๋ฅผ ์‹คํ–‰ํ•ด kcbert-base ๋ชจ๋ธ์ด ์‚ฌ์šฉํ•˜๋Š” ํ† ํฌ๋‚˜์ด์ €๋ฅผ ์„ ์–ธํ•œ๋‹ค.

ํ† ํฌ๋‚˜์ด์ €๋Š” ํ† ํฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋Š” ๋œป์ด๋‹ค.

code 1-7

from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained(
    args.pretrained_model_name,
    do_lower_case=False,
)
โ–ถCode output
Downloading:   0%|          | 0.00/250k [00:00<?, ?B/s]



Downloading:   0%|          | 0.00/49.0 [00:00<?, ?B/s]



Downloading:   0%|          | 0.00/619 [00:00<?, ?B/s]

4. ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌํ•˜๊ธฐ

๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ํ•™์Šตํ•˜๋ ค๋ฉด ํ•™์Šต ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์น˜ ๋‹จ์œ„๋กœ ๊ณ„์† ๋ชจ๋ธ์— ๊ณต๊ธ‰ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ํŒŒ์ดํ† ์น˜์—์„œ๋Š” ์ด ์—ญํ• ์„ ๋ฐ์ดํ„ฐ ๋กœ๋”(dataloader)๊ฐ€ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ๋กœ๋”๋Š” ๋ฐ์ดํ„ฐ์…‹(dataset)์ด ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐฐ์น˜ ํฌ๊ธฐ๋งŒํผ ๋ฝ‘์•„์„œ ์ž๋ฃŒํ˜•, ๋ฐ์ดํ„ฐ ๊ธธ์ด ๋“ฑ ์ •ํ•ด์ง„ ํ˜•์‹์— ๋งž์ถฐ ๋ฐฐ์น˜๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

ํ•™์Šต ๋ฐ์ดํ„ฐ์…‹ ๊ตฌ์ถ•

code 1-8์„ ํ†ตํ•ด ClassificationDataset์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
ClassificationDataset์˜ ๊ฐ€์žฅ ํฐ ์—ญํ• ์€ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€ ๋ฐ์ดํ„ฐ ๋กœ๋”๊ฐ€ ๋ฐฐ์น˜๋ฅผ ๋งŒ๋“ค ๋•Œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ผ์ด๋‹ค.

code 1-8

from ratsnlp.nlpbook.classification import NsmcCorpus, ClassificationDataset
corpus = NsmcCorpus()
train_dataset = ClassificationDataset(
    args=args,
    corpus=corpus,
    tokenizer=tokenizer,
    mode="train",
)
โ–ถCode output
INFO:ratsnlp:Creating features from dataset file at /content/Korpora/nsmc
INFO:ratsnlp:loading train data... LOOKING AT /content/Korpora/nsmc/ratings_train.txt
INFO:ratsnlp:tokenize sentences, it could take a lot of time...
INFO:ratsnlp:tokenize sentences [took 42.255 s]
INFO:ratsnlp:*** Example ***
INFO:ratsnlp:sentence: ์•„ ๋”๋น™.. ์ง„์งœ ์งœ์ฆ๋‚˜๋„ค์š” ๋ชฉ์†Œ๋ฆฌ
INFO:ratsnlp:tokens: [CLS] ์•„ ๋” ##๋น™ . . ์ง„์งœ ์งœ์ฆ๋‚˜๋„ค ##์š” ๋ชฉ์†Œ๋ฆฌ [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD]
INFO:ratsnlp:label: 0
INFO:ratsnlp:features: ClassificationFeatures(input_ids=[2, 2170, 832, 5045, 17, 17, 7992, 29734, 4040, 10720, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], attention_mask=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], token_type_ids=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], label=0)
INFO:ratsnlp:*** Example ***
INFO:ratsnlp:sentence: ํ ...ํฌ์Šคํ„ฐ๋ณด๊ณ  ์ดˆ๋”ฉ์˜ํ™”์ค„....์˜ค๋ฒ„์—ฐ๊ธฐ์กฐ์ฐจ ๊ฐ€๋ณ์ง€ ์•Š๊ตฌ๋‚˜
INFO:ratsnlp:tokens: [CLS] ํ  . . . ํฌ ##์Šคํ„ฐ ##๋ณด๊ณ  ์ดˆ๋”ฉ ##์˜ํ™” ##์ค„ . . . . ์˜ค๋ฒ„ ##์—ฐ๊ธฐ ##์กฐ์ฐจ ๊ฐ€๋ณ ##์ง€ ์•Š ##๊ตฌ๋‚˜ [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD]
INFO:ratsnlp:label: 1
INFO:ratsnlp:features: ClassificationFeatures(input_ids=[2, 3521, 17, 17, 17, 3294, 13069, 8190, 10635, 13796, 4006, 17, 17, 17, 17, 17613, 19625, 9790, 17775, 4102, 2175, 8030, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], attention_mask=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], token_type_ids=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], label=1)
INFO:ratsnlp:*** Example ***
INFO:ratsnlp:sentence: ๋„ˆ๋ฌด์žฌ๋ฐ“์—ˆ๋‹ค๊ทธ๋ž˜์„œ๋ณด๋Š”๊ฒƒ์„์ถ”์ฒœํ•œ๋‹ค
INFO:ratsnlp:tokens: [CLS] ๋„ˆ๋ฌด ##์žฌ ##๋ฐ“ ##์—ˆ๋‹ค ##๊ทธ๋ž˜ ##์„œ ##๋ณด๋Š” ##๊ฒƒ์„ ##์ถ” ##์ฒœ ##ํ•œ๋‹ค [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD]
INFO:ratsnlp:label: 0
INFO:ratsnlp:features: ClassificationFeatures(input_ids=[2, 8069, 4089, 7847, 8217, 9791, 4072, 9136, 8750, 4142, 4244, 8008, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], attention_mask=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], token_type_ids=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], label=0)
INFO:ratsnlp:*** Example ***
INFO:ratsnlp:sentence: ๊ต๋„์†Œ ์ด์•ผ๊ธฐ๊ตฌ๋จผ ..์†”์งํžˆ ์žฌ๋ฏธ๋Š” ์—†๋‹ค..ํ‰์  ์กฐ์ •
INFO:ratsnlp:tokens: [CLS] ๊ต๋„์†Œ ์ด์•ผ๊ธฐ ##๊ตฌ๋จผ . . ์†”์งํžˆ ์žฌ๋ฏธ ##๋Š” ์—†๋‹ค . . ํ‰ ##์  ์กฐ์ • [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD]
INFO:ratsnlp:label: 0
INFO:ratsnlp:features: ClassificationFeatures(input_ids=[2, 12164, 9089, 9828, 17, 17, 8876, 10827, 4008, 8131, 17, 17, 3288, 4213, 16612, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], attention_mask=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], token_type_ids=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], label=0)
INFO:ratsnlp:*** Example ***
INFO:ratsnlp:sentence: ์‚ฌ์ด๋ชฌํŽ˜๊ทธ์˜ ์ต์‚ด์Šค๋Ÿฐ ์—ฐ๊ธฐ๊ฐ€ ๋‹๋ณด์˜€๋˜ ์˜ํ™”!์ŠคํŒŒ์ด๋”๋งจ์—์„œ ๋Š™์–ด๋ณด์ด๊ธฐ๋งŒ ํ–ˆ๋˜ ์ปค์Šคํ‹ด ๋˜์ŠคํŠธ๊ฐ€ ๋„ˆ๋ฌด๋‚˜๋„ ์ด๋ป๋ณด์˜€๋‹ค
INFO:ratsnlp:tokens: [CLS] ์‚ฌ์ด ##๋ชฌ ##ํŽ˜ ##๊ทธ ##์˜ ์ต ##์‚ด ##์Šค๋Ÿฐ ์—ฐ๊ธฐ ##๊ฐ€ ๋‹ ##๋ณด ##์˜€๋˜ ์˜ํ™” ! ์ŠคํŒŒ์ด ##๋” ##๋งจ ##์—์„œ ๋Š™์–ด ##๋ณด์ด ##๊ธฐ๋งŒ ํ–ˆ๋˜ ์ปค ##์Šค ##ํ‹ด ๋˜ ##์ŠคํŠธ ##๊ฐ€ ๋„ˆ๋ฌด๋‚˜๋„ ์ด๋ป ##๋ณด ##์˜€๋‹ค [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD]
INFO:ratsnlp:label: 1
INFO:ratsnlp:features: ClassificationFeatures(input_ids=[2, 8538, 4880, 4335, 4313, 4042, 2452, 4471, 10670, 11219, 4009, 870, 4010, 13043, 9376, 5, 24034, 4356, 4617, 7971, 22878, 11980, 9235, 10129, 3010, 4103, 4713, 834, 8795, 4009, 22110, 23997, 4010, 9827, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], attention_mask=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], token_type_ids=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], label=1)
INFO:ratsnlp:Saving features into cached file, it could take a lot of time...
INFO:ratsnlp:Saving features into cached file /content/Korpora/nsmc/cached_train_BertTokenizer_128_nsmc_document-classification [took 23.322 s]

ClassificationDataset ํด๋ž˜์Šค๊ฐ€ ํ•˜๋Š” ์—ญํ• 

์ด ํด๋ž˜์Šค๋Š” NsmcCorpus์™€ ์œ„์—์„œ ์„ ์–ธํ•ด ๋‘” **ํ† ํฌ๋‚˜์ด์ €(tokenizer)**๋ฅผ ํ’ˆ๊ณ  ์žˆ๋‹ค.

NsmcCorpus๋Š” CSV ํŒŒ์ผ ํ˜•์‹์˜ NSMC ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์žฅ๊ณผ ๋ ˆ์ด๋ธ”*(์˜ˆ๋ฅผ ๋“ค๋ฉด ์˜ํ™” ๋ฆฌ๋ทฐ์™€ ๊ธ์ • ๋ฐ ๋ถ€์ •)*์œผ๋กœ ์ฝ๋Š”๋‹ค.

NsmcCorpus๋Š” ClassificationDataset์ด ์š”๊ตฌํ•˜๋ฉด ์ด ๋ฌธ์žฅ๊ณผ ๋ ˆ์ด๋ธ”์„ ClassificationDataset์— ์ œ๊ณตํ•œ๋‹ค.

ClassificationDataset์€ ์ œ๊ณต๋ฐ›์€ ๋ฌธ์žฅ๊ณผ ๋ ˆ์ด๋ธ” ๊ฐ๊ฐ์„ tokenizer๋ฅผ ํ™œ์šฉํ•ด ๋ชจ๋ธ์ด ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ(ClassificationFeature)๋กœ ๊ฐ€๊ณตํ•œ๋‹ค.

ClassificationFeature๋ผ๋Š” ์ž๋ฃŒํ˜•์—๋Š” ์ด 4๊ฐ€์ง€์˜ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค.

  • ์ฒซ๋ฒˆ์งธ๋Š” **input_id**์ด๋‹ค. ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜๋œ ํ† ํฐ ์‹œํ€€์Šค์ด๋‹ค.

  • ๋‘๋ฒˆ์งธ๋Š” **attention_mask**๋กœ ํ•ด๋‹น ํ† ํฐ์ด ํŒจ๋”ฉ ํ† ํฐ์ธ์ง€(0) ์•„๋‹Œ์ง€(1)๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • token_type_ids ์„ธ๊ทธ๋จผํŠธ ์ •๋ณด, **label**์€ ์ •์ˆ˜๋กœ ๋ฐ”๋€ ๋ ˆ์ด๋ธ” ์ •๋ณด ์ด๋‹ค.

ClassificationFeatures ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ž๋ฃŒํ˜•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • input_ids : List[int]
  • attention_mask : List[int]
  • token_type_ids : Listh[int]
  • label : int

ํ•™์Šต ๋ฐ์ดํ„ฐ ๋กœ๋” ๊ตฌ์ถ•

code 1-9๋ฅผ ํ†ตํ•ด ํ•™์Šตํ•  ๋•Œ ์“ฐ์ด๋Š” ๋ฐ์ดํ„ฐ ๋กœ๋”๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋กœ๋”๋Š” ClassificationDatasetํด๋ž˜์Šค๊ฐ€ ๋“ค๊ณ  ์žˆ๋Š” ์ „์ฒด ์ธ์Šคํ„ด์Šค ๊ฐ€์šด๋ฐ ๋ฐฐ์น˜ ํฌ๊ธฐ(code 1-3์—์„œ ์ •์˜ํ•œ args์˜ batch_size)๋งŒํผ์„ ๋ฝ‘์•„ ๋ฐฐ์น˜ ํ˜•ํƒœ๋กœ ๊ฐ€๊ณต(nlpbook.data_collator)ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

code 1-9

from torch.utils.data import DataLoader, RandomSampler
train_dataloader = DataLoader(
    train_dataset,
    batch_size=args.batch_size,
    sampler=RandomSampler(train_dataset, replacement=False),
    collate_fn=nlpbook.data_collator,
    drop_last=False,
    num_workers=args.cpu_workers,
)

์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ ๋ณด๋ฉด sampler์™€ collate_fn์ด ๋ˆˆ์— ๋ˆ๋‹ค.
์ „์ž๋Š” ์ƒ˜ํ”Œ๋ง ๋ฐฉ์‹์„ ์ •์˜ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ๋งŒ๋“  ๋ฐ์ดํ„ฐ ๋กœ๋”๋Š” ๋ฐฐ์น˜๋ฅผ ๋งŒ๋“ค ๋•Œ ClassificationDataset์ด ๋“ค๊ณ  ์žˆ๋Š” ์ „์ฒด ์ธ์Šคํ„ด์Šค ๊ฐ€์šด๋ฐ batch_size ๊ฐœ์ˆ˜๋งŒํผ ๋น„๋ณต์›(replacement=False) ๋žœ๋ค ์ถ”์ถœ(RandomSampler)ํ•œ๋‹ค.

collate_fn์€ ์ด๋ ‡๊ฒŒ ๋ฝ‘์€ ์ธ์Šคํ„ด์Šค๋“ค์„ ๋ฐฐ์น˜๋กœ ๋งŒ๋“œ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. nlpbook.data_collator๋Š” ๊ฐ™์€ ๋ฐฐ์น˜์—์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฟ์ผ ๋•Œ ์ด๋ฅผ input_ids, attention_mask ๋“ฑ ์ข…๋ฅ˜๋ณ„๋กœ ๋ชจ์œผ๊ณ  ํŒŒ์ดํ† ์น˜๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ž๋ฃŒํ˜•์ธ ํ…์„œ(tensor)ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

ํ‰๊ฐ€์šฉ ๋ฐ์ดํ„ฐ ๋กœ๋” ๊ตฌ์ถ•

ํ‰๊ฐ€์šฉ ๋ฐ์ดํ„ฐ ๋กœ๋”๋Š” ํ•™์Šต์šฉ ๋ฐ์ดํ„ฐ ๋กœ๋”์™€ ๋‹ฌ๋ฆฌ **SequentialSampler**๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. SequentialSampler๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ batch_size๋งŒํผ ์ˆœ์„œ๋Œ€๋กœ ์ถ”์ถœํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ํ•™์Šต ๋•Œ ๋ฐฐ์น˜ ๊ตฌ์„ฑ์€ ๋žœ๋ค์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€๋ฐ, ํ‰๊ฐ€ํ•  ๋•Œ๋Š” ํ‰๊ฐ€์šฉ ๋ฐ์ดํ„ฐ ์ „์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๊ตณ์ด ๋žœ๋ค์œผ๋กœ ๊ตฌ์„ฑํ•  ์ด์œ ๊ฐ€ ์—†์–ด SequentialSampler๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

code 1-10์„ ํ†ตํ•ด ํ‰๊ฐ€์šฉ ๋ฐ์ดํ„ฐ ๋กœ๋”๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค.

code 1-10

from torch.utils.data import SequentialSampler
val_dataset = ClassificationDataset(
    args=args,
    corpus=corpus,
    tokenizer=tokenizer,
    mode="test",
)
val_dataloader= DataLoader(
    val_dataset,
    batch_size=args.batch_size,
    sampler=SequentialSampler(val_dataset),
    collate_fn=nlpbook.data_collator,
    drop_last=False,
    num_workers=args.cpu_workers,
)
โ–ถCode output
INFO:ratsnlp:Creating features from dataset file at /content/Korpora/nsmc
INFO:ratsnlp:loading test data... LOOKING AT /content/Korpora/nsmc/ratings_test.txt
INFO:ratsnlp:tokenize sentences, it could take a lot of time...
INFO:ratsnlp:tokenize sentences [took 14.198 s]
INFO:ratsnlp:*** Example ***
INFO:ratsnlp:sentence: ๊ตณ ใ…‹
INFO:ratsnlp:tokens: [CLS] ๊ตณ ใ…‹ [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD]
INFO:ratsnlp:label: 1
INFO:ratsnlp:features: ClassificationFeatures(input_ids=[2, 352, 192, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], attention_mask=[1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], token_type_ids=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], label=1)
INFO:ratsnlp:*** Example ***
INFO:ratsnlp:sentence: GDNTOPCLASSINTHECLUB
INFO:ratsnlp:tokens: [CLS] G ##D ##N ##TO ##P ##C ##L ##A ##S ##S ##I ##N ##T ##H ##E ##C ##L ##U ##B [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD]
INFO:ratsnlp:label: 0
INFO:ratsnlp:features: ClassificationFeatures(input_ids=[2, 40, 4452, 4581, 25144, 4579, 4881, 4450, 4580, 4985, 4985, 4506, 4581, 4850, 5121, 4451, 4881, 4450, 5167, 4756, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], attention_mask=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], token_type_ids=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], label=0)
INFO:ratsnlp:*** Example ***
INFO:ratsnlp:sentence: ๋ญ์•ผ ์ด ํ‰์ ๋“ค์€.... ๋‚˜์˜์ง„ ์•Š์ง€๋งŒ 10์  ์งœ๋ฆฌ๋Š” ๋”๋”์šฑ ์•„๋‹ˆ์ž–์•„
INFO:ratsnlp:tokens: [CLS] ๋ญ์•ผ ์ด ํ‰ ##์  ##๋“ค์€ . . . . ๋‚˜์˜ ##์ง„ ์•Š์ง€๋งŒ 10 ##์  ์งœ๋ฆฌ ##๋Š” ๋”๋”์šฑ ์•„๋‹ˆ์ž–์•„ [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD]
INFO:ratsnlp:label: 0
INFO:ratsnlp:features: ClassificationFeatures(input_ids=[2, 10691, 2451, 3288, 4213, 7977, 17, 17, 17, 17, 10476, 4153, 15426, 8240, 4213, 21394, 4008, 15616, 13439, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], attention_mask=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], token_type_ids=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], label=0)
INFO:ratsnlp:*** Example ***
INFO:ratsnlp:sentence: ์ง€๋ฃจํ•˜์ง€๋Š” ์•Š์€๋ฐ ์™„์ „ ๋ง‰์žฅ์ž„... ๋ˆ์ฃผ๊ณ  ๋ณด๊ธฐ์—๋Š”....
INFO:ratsnlp:tokens: [CLS] ์ง€ ##๋ฃจ ##ํ•˜์ง€๋Š” ์•Š์€๋ฐ ์™„์ „ ๋ง‰์žฅ ##์ž„ . . . ๋ˆ์ฃผ๊ณ  ๋ณด๊ธฐ์— ##๋Š” . . . . [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD]
INFO:ratsnlp:label: 0
INFO:ratsnlp:features: ClassificationFeatures(input_ids=[2, 2688, 4532, 16036, 20879, 8357, 15971, 4252, 17, 17, 17, 13900, 25253, 4008, 17, 17, 17, 17, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], attention_mask=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], token_type_ids=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], label=0)
INFO:ratsnlp:*** Example ***
INFO:ratsnlp:sentence: 3D๋งŒ ์•„๋‹ˆ์—ˆ์–ด๋„ ๋ณ„ ๋‹ค์„ฏ ๊ฐœ ์คฌ์„ํ…๋ฐ.. ์™œ 3D๋กœ ๋‚˜์™€์„œ ์ œ ์‹ฌ๊ธฐ๋ฅผ ๋ถˆํŽธํ•˜๊ฒŒ ํ•˜์ฃ ??
INFO:ratsnlp:tokens: [CLS] 3 ##D ##๋งŒ ์•„๋‹ˆ์—ˆ ##์–ด๋„ ๋ณ„ ๋‹ค์„ฏ ๊ฐœ ์คฌ ##์„ํ…๋ฐ . . ์™œ 3 ##D ##๋กœ ๋‚˜์™€์„œ ์ œ ์‹ฌ ##๊ธฐ๋ฅผ ๋ถˆํŽธ ##ํ•˜๊ฒŒ ํ•˜์ฃ  ? ? [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD]
INFO:ratsnlp:label: 0
INFO:ratsnlp:features: ClassificationFeatures(input_ids=[2, 22, 4452, 4049, 18851, 8194, 1558, 23887, 220, 2648, 9243, 17, 17, 2332, 22, 4452, 4091, 10045, 2545, 2015, 8313, 10588, 8007, 18566, 32, 32, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], attention_mask=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], token_type_ids=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], label=0)
INFO:ratsnlp:Saving features into cached file, it could take a lot of time...
INFO:ratsnlp:Saving features into cached file /content/Korpora/nsmc/cached_test_BertTokenizer_128_nsmc_document-classification [took 7.800 s]

5. ๋ชจ๋ธ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

๋ชจ๋ธ ์ดˆ๊ธฐํ™”

code 1-3**(1. ๊ฐ์ข… ์„ค์ •ํ•˜๊ธฐ-๋ชจ๋ธ ํ™˜๊ฒฝ ์„ค์ •)**์—์„œ pretrained_model_name์„ beomi/kebert-base๋กœ ์ง€์ •ํ–ˆ์œผ๋ฏ€๋กœ ํ”„๋ฆฌํŠธ๋ ˆ์ธ์„ ๋งˆ์นœ BERT๋กœ kcbert-base๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋ชจ๋ธ์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ฝ”๋“œ์—์„œ BertForSequenceClassification์€ ํ”„๋ฆฌํŠธ๋ ˆ์ธ์„ ๋งˆ์นœ BERT ๋ชจ๋ธ ์œ„์— ๋ฌธ์„œ ๋ถ„๋ฅ˜์šฉ ํƒœ์Šคํฌ ๋ชจ๋“ˆ์ด ๋ง๋ถ™์—ฌ์ง„ ํ˜•ํƒœ์˜ ๋ชจ๋ธ ํด๋ž˜์Šค์ด๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ํ—ˆ๊น…ํŽ˜์ด์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” transformers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

code 1-11

from transformers import BertConfig, BertForSequenceClassification
pretrained_model_config = BertConfig.from_pretrained(
    args.pretrained_model_name,
    num_labels=corpus.num_labels,
)
model = BertForSequenceClassification.from_pretrained(
    args.pretrained_model_name,
    config=pretrained_model_config,
)
โ–ถCode output
Downloading:   0%|          | 0.00/438M [00:00<?, ?B/s]


Some weights of the model checkpoint at beomi/kcbert-base were not used when initializing BertForSequenceClassification: ['cls.seq_relationship.bias', 'cls.predictions.transform.dense.bias', 'cls.predictions.decoder.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.seq_relationship.weight', 'cls.predictions.transform.dense.weight', 'cls.predictions.bias', 'cls.predictions.transform.LayerNorm.bias', 'cls.predictions.decoder.weight']
- This IS expected if you are initializing BertForSequenceClassification from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).
- This IS NOT expected if you are initializing BertForSequenceClassification from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).
Some weights of BertForSequenceClassification were not initialized from the model checkpoint at beomi/kcbert-base and are newly initialized: ['classifier.weight', 'classifier.bias']
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.

6. ๋ชจ๋ธ ํ•™์Šต์‹œํ‚ค๊ธฐ

ํŒŒ์ดํ† ์น˜ ๋ผ์ดํŠธ๋‹(pytorch lightning*)์ด ์ œ๊ณตํ•˜๋Š” LightningModule ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ํƒœ์Šคํฌ(task)๋ฅผ ์ •์˜ํ•œ๋‹ค. ํƒœ์Šคํฌ์—๋Š” ๋ชจ๋ธ๊ณผ ์˜ตํ‹ฐ๋งˆ์ด์ €, ํ•™์Šต ๊ณผ์ • ๋“ฑ์ด ์ •์˜๋˜์–ด ์žˆ๋‹ค.

  • pytorch lightning*: github.com/PyTorchLightning/pytorch-lightning

Task ์ •์˜

code 1-3**(1. ๊ฐ์ข… ์„ค์ •ํ•˜๊ธฐ-๋ชจ๋ธ ํ™˜๊ฒฝ ์„ค์ •)์—์„œ ๋งŒ๋“  ํ•™์Šต ์„ค์ •(args)๊ณผ code 1-11(5. ๋ชจ๋ธ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ-๋ชจ๋ธ์ดˆ๊ธฐํ™”)**์—์„œ ์ค€๋น„ํ•œ ๋ชจ๋ธ(model)์„ ClassificationTask์— ์ฃผ์ž…ํ•œ๋‹ค. ClassificationTask์—๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €(optimizer), ๋Ÿฌ๋‹ ๋ ˆ์ดํŠธ ์Šค์ผ€์ค„๋Ÿฌ(learnig rate scheduler)๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ์˜ตํ‹ฐ๋งˆ์ด์ €๋กœ๋Š” ์•„๋‹ด(Adam), ๋Ÿฌ๋‹ ๋ ˆ์ดํŠธ ์Šค์ผ€์ค„๋Ÿฌ๋กœ๋Š” ExponentialLR์„ ์‚ฌ์šฉํ•œ๋‹ค.

code1-12๋ฅผ ํ†ตํ•ด ๋ฌธ์„œ ๋ถ„๋ฅ˜์šฉ ํƒœ์Šคํฌ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

code 1-12

from ratsnlp.nlpbook.classification import ClassificationTask
task = ClassificationTask(model, args)

'Do it! ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ'์˜ ์ €์ž ์ด๊ธฐ์ฐฝ ๋‹˜์˜ ๋น„์œ ๋ฅผ ์ธ์šฉํ•˜์ž๋ฉด,


๋ชจ๋ธ ํ•™์Šต ๊ณผ์ •์€ ๋ˆˆ์„ ๊ฐ€๋ฆฐ ์ƒํƒœ์—์„œ ์‚ฐ๋“ฑ์„ฑ์ด๋ฅผ ํ•œ ๊ฑธ์Œ์”ฉ ๋‚ด๋ ค๊ฐ€๋Š” ๊ณผ์ •๊ณผ ๊ฐ™๋‹ค. ๋Ÿฌ๋‹ ๋ ˆ์ดํŠธ๋Š” ํ•œ ๋ฒˆ ๋‚ด๋ ค๊ฐˆ ๋•Œ ์–ผ๋งˆ๋‚˜ ์ด๋™ํ• ์ง€ ๋ณดํญ์— ํ•ด๋‹นํ•œ๋‹ค.


ํ•™์Šต์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ์ ์ฐจ ๋Ÿฌ๋‹ ๋ ˆ์ดํŠธ๋ฅผ ์ค„์—ฌ ์„ธ๋ฐ€ํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๋ฉด ์ข€ ๋” ์ข‹์€ ๋ชจ๋ธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด ์—ญํ• ์„ ํ•˜๋Š” ๊ฒŒ ๋ฐ”๋กœ ๋Ÿฌ๋‹ ๋ ˆ์ดํŠธ ์Šค์ผ€์ค„๋Ÿฌ์ด๋‹ค. ExponentialLR์€ ํ˜„์žฌ ์—ํฌํฌ(epoch*)์˜ ๋Ÿฌ๋‹ ๋ฉ”์ดํŠธ๋ฅผ '์ด์ „ ์—ํฌํฌ์˜ ๋Ÿฌ๋‹ ๋ ˆ์ดํŠธ x gamma'๋กœ ์Šค์ผ€์ค„๋ง ํ•œ๋‹ค. ๋ณธ ์˜ˆ์ œ์—์„œ๋Š” gamma๋ฅผ 0.9๋กœ ์„ค์ •ํ•˜์˜€๋‹ค.

  • ์—ํฌํฌ: ๋ฐ์ดํ„ฐ ์ „์ฒด๋ฅผ ํ•™์Šตํ•˜๋Š” ํšŸ์ˆ˜. ๋งŒ์ผ ์—ํฌํฌ๊ฐ€ 3์ด๋ผ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ 3๋ฒˆ ๋ฐ˜๋ณต ํ•™์Šตํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

ํŠธ๋ ˆ์ด๋„ˆ ์ •์˜

code 1-13์„ ํ†ตํ•ด ํŠธ๋ ˆ์ด๋„ˆ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํŠธ๋ ˆ์ด๋„ˆ๋Š” ํŒŒ์ดํ† ์น˜ ๋ผ์ดํŠธ๋‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋„์›€์„ ๋ฐ›์•„ GPU/TPU ์„ค์ •, ๋กœ๊ทธ ๋ฐ ์ฒดํฌํฌ์ธํŠธ ๋“ฑ ๊ท€์ฐฎ์€ ์„ค์ •์„ ์•Œ์•„์„œ ํ•ด ์ค€๋‹ค.

code 1-13

trainer = nlpbook.get_trainer(args)
โ–ถCode output
/usr/local/lib/python3.7/dist-packages/pytorch_lightning/utilities/distributed.py:69: UserWarning: Checkpoint directory /gdrive/My Drive/nlpbook/checkpoint-doccls exists and is not empty.
  warnings.warn(*args, **kwargs)
GPU available: True, used: True
TPU available: False, using: 0 TPU cores

ํ•™์Šต ๊ฐœ์‹œ

code 1-14์ฒ˜๋Ÿผ ํŠธ๋ ˆ์ด๋„ˆ์˜ fit()ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ•™์Šต์„ ์‹œ์ž‘ํ•œ๋‹ค. ํ•™์Šต ์‹œ๊ฐ„์€ ์ž์‹ ์˜ ์ฝ”๋žฉ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋‚˜ ๊ฝค ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ํ•™์Šต์ด ์ง„ํ–‰๋˜๋Š” ๋„์ค‘ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋„๋ฉด ๋ชจ๋ธ ํ•™์Šต์„ ๋น„๋กฏํ•œ ์ฝ”๋žฉ ์‹คํ–‰์ด ์ค‘๋‹จ๋˜๋‹ˆ ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค.

code 1-14

trainer.fit(
    task,
    train_dataloader=train_dataloader,
    val_dataloaders=val_dataloader,
)
โ–ถCode output
LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]

  | Name  | Type                          | Params
--------------------------------------------------------
0 | model | BertForSequenceClassification | 108 M 
--------------------------------------------------------
108 M     Trainable params
0         Non-trainable params
108 M     Total params
435.680   Total estimated model params size (MB)



Training: 114it [00:00, ?it/s]



Validating: 0it [00:00, ?it/s]



Validating: 0it [00:00, ?it/s]

๋ฌธ์„œ ๋ถ„๋ฅ˜ ๋ชจ๋ธ ํ•™์Šต์„ ์š”์•ฝํ•˜์ž๋ฉด

๊ฐ์ข… ์„ค์ •์„ ๋งˆ์นœ ๋’ค ๋ง๋ญ‰์น˜๋ฅผ ๋‚ด๋ ค๋ฐ›์•„ ์ „์ฒ˜๋ฆฌํ•œ๋‹ค. ํ”„๋ฆฌํŠธ๋ ˆ์ธ์„ ๋งˆ์นœ ๋ชจ๋ธ์„ ์ด ๋ฐ์ดํ„ฐ์— ๋งž๊ฒŒ ํŒŒ์ธ ํŠœ๋‹ํ•œ๋‹ค.

Share