Pretrained Language Models For Korean
- ์ต๊ณ ์ ์ฑ๋ฅ์ ๋ด๋ ์ธ์ด ๋ชจ๋ธ๋ค์ด ์ธ๊ณ ๊ฐ์ง์์ ๊ฐ๋ฐ๋๊ณ ์์ง๋ง ๋๋ถ๋ถ ์์ด๋ง์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ํ๊ตญ์ด ์์ฐ์ด ์ฒ๋ฆฌ ์ฐ๊ตฌ๋ฅผ ์์ํ์๋๋ฐ ๋์์ด ๋๊ณ ์ ํ๊ตญ์ด๋ก ํ์ต๋ ์ต์ ์ธ์ด๋ชจ๋ธ๋ค์ ๊ณต๊ฐํฉ๋๋ค.
- Transformers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ฌ์ฉ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์์ผ๋ฉฐ encoder ๊ธฐ๋ฐ(BERT ๋ฑ), decoder ๊ธฐ๋ฐ(GPT3), encoder-decoder(T5, BERTSHARED) ๋ชจ๋ธ์ ๋ชจ๋ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
- ๋ด์ค์ ๊ฐ์ด ์ ์ ์ ๋ ์ธ์ด ๋ฟ๋ง ์๋๋ผ, ์ค์ ์ธํฐ๋ท ์์์ ์ฐ์ด๋ ์ ์กฐ์ด, ์ค์๋ง, ์ค์, ํ์๋ฅผ ์ ์ดํดํ ์ ์๋ ๋ชจ๋ธ์ ๊ฐ๋ฐํ๊ธฐ ์ํด, ๋๋ถ๋ฅ ์ฃผ์ ๋ณ ํ ์คํธ๋ฅผ ๋ณ๋๋ก ์์งํ์์ผ๋ฉฐ ๋๋ถ๋ถ์ ๋ฐ์ดํฐ๋ ๋ธ๋ก๊ทธ, ๋๊ธ, ๋ฆฌ๋ทฐ์ ๋๋ค.
- ๋ชจ๋ธ์ ์์ ์ ์ฌ์ฉ์ ๊ฒฝ์ฐ MOU๋ฅผ ํตํด ๋ฌด๋ฃ๋ก ์ฌ์ฉํ์ค ์ ์์ต๋๋ค. [email protected] ๋ก ๋ฌธ์ ๋ถํ๋๋ฆฝ๋๋ค.
- ์์ฐ์ด์ฒ๋ฆฌ๋ฅผ ์ฒ์ ์ ํ์๋ ๋ถ๋ค์ ์ํด Youtube์ ์์ฐ์ด์ฒ๋ฆฌ ๊ธฐ์ด ๊ฐ์๋ฅผ ์ฌ๋ ค๋์์ต๋๋ค(์ฝ 6์๊ฐ ๋ถ๋)
Recent update
- 2021-01-30: Bertshared (Bert๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ seq2seq๋ชจ๋ธ) ๋ชจ๋ธ ์ถ๊ฐ
- 2021-01-26: GPT3 ๋ชจ๋ธ ์ด๊ธฐ ๋ฒ์ ์ถ๊ฐ
- 2021-01-22: Funnel-transformer ๋ชจ๋ธ ์ถ๊ฐ
Pretraining models
Hidden size | layers | max length | batch size | learning rate | training steps | |
---|---|---|---|---|---|---|
albert-kor-base | 768 | 12 | 256 | 1024 | 5e-4 | 0.9M |
bert-kor-base | 768 | 12 | 512 | 256 | 1e-4 | 1.9M |
funnel-kor-base | 768 | 6_6_6 | 512 | 128 | 8e-5 | 0.9M |
electra-kor-base | 768 | 12 | 512 | 256 | 2e-4 | 1.9M |
gpt3-kor-small_based_on_gpt2 | 768 | 12 | 2048 | 4096 | 1e-2 | 10K |
bertshared-kor-base | 768/768 | 12/12 | 512/512 | 16 | 5e-5 | 20K |
- ์๋ณธ ๋ชจ๋ธ๊ณผ ๋ฌ๋ฆฌ tokenizer๋ ๋ชจ๋ ๋ชจ๋ธ์ ๋ํด wordpiece๋ก ํต์ผํ์์ต๋๋ค. ์์ธํ ์ฌ์ฉ๋ฒ์ usage๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
- ELECTRA ๋ชจ๋ธ์ discriminator์ ๋๋ค.
- BERT ๋ชจ๋ธ์๋ whole-word-masking์ด ์ ์ฉ๋์์ต๋๋ค.
- FUNNEL-TRANSFORMER ๋ชจ๋ธ์ ELECTRA๋ชจ๋ธ์ ์ฌ์ฉํ๊ณ generator์ discriminator๊ฐ ๋ชจ๋ ๋ค์ด๊ฐ ์์ต๋๋ค.
- GPT3์ ๊ฒฝ์ฐ ์ ํํ ์ํคํ ์ณ๋ฅผ ๊ณต๊ฐํ์ง ์์์ง๋ง GPT2์ ๊ฑฐ์ ์ ์ฌํ๋ฉฐ few-shot ํ์ต์ ์ํด input๊ธธ์ด๋ฅผ ๋๋ฆฌ๊ณ ๊ณ์ฐ ํจ์จํ๋ฅผ ์ํ ๋ช๊ฐ์ง ์ฒ๋ฆฌ๋ฅผ ํ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ๋ฐ๋ผ์ GPT2๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฅผ ๋ฐ์ํ์ฌ ํ์ตํ์์ต๋๋ค.
- BERTSHARED๋ seq2seq๋ชจ๋ธ๋ก encoder์ decoder๋ฅผ bert-kor-base๋ก ์ด๊ธฐํํ ๋ค์ training์ ํ ๊ฒ์ ๋๋ค. Encoder์ decoder๊ฐ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ณต์ ํ๊ฒ ํจ์ผ๋ก์จ ํ๋์ bert ๋ชจ๋ธ ์ฉ๋์ผ๋ก seq2seq๋ฅผ ๊ตฌํํ ์ ์๊ฒ ๋์์ต๋๋ค (reference). ๊ณต๊ฐํ ๋ชจ๋ธ์ summarization ํ์คํฌ์ ๋ํด ํ์ตํ ๊ฒ์ ๋๋ค.
Notebooks
- ๊ฐ๋จํ ํ ์คํธ ๊ฒฐ๊ณผ์ ์ฌ์ฉ๋ฒ์ ๋ณด์ฌ๋๋ฆฌ๊ธฐ ์ํ ๊ฒ์ผ๋ก, ์์ฒด ๋ฐ์ดํฐ๋ก ์ํ์๋ ์ฑ๋ฅ์ ์ป๊ธฐ ์ํด์๋ tuning์ด ํ์ํฉ๋๋ค.
Usage
- Transformers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด pytorch์ tensorflow ๋ชจ๋์์ ํธํ๊ฒ ์ฌ์ฉํ์ค ์ ์์ต๋๋ค.
# electra-base-kor
from transformers import ElectraTokenizerFast, ElectraModel, TFElectraModel
tokenizer_electra = ElectraTokenizerFast.from_pretrained("kykim/electra-kor-base")
model_electra_pt = ElectraModel.from_pretrained("kykim/electra-kor-base") # pytorch
model_electra_tf = TFElectraModel.from_pretrained("kykim/electra-kor-base") # tensorflow
# bert-base-kor
from transformers import BertTokenizerFast, BertModel
tokenizer_bert = BertTokenizerFast.from_pretrained("kykim/bert-kor-base")
model_bert = BertModel.from_pretrained("kykim/bert-kor-base")
# albert-base-kor
from transformers import BertTokenizerFast, AlbertModel
tokenizer_albert = BertTokenizerFast.from_pretrained("kykim/albert-kor-base")
model_albert = AlbertModel.from_pretrained("kykim/albert-kor-base")
# funnel-base-kor
from transformers import FunnelTokenizerFast, FunnelModel
tokenizer_funnel = FunnelTokenizerFast.from_pretrained("kykim/funnel-kor-base")
model_funnel = FunnelModel.from_pretrained("kykim/funnel-kor-base")
# gpt3-kor-small_based_on_gpt2
from transformers import BertTokenizerFast, GPT2LMHeadModel
tokenizer_gpt3 = BertTokenizerFast.from_pretrained("kykim/gpt3-kor-small_based_on_gpt2")
model_gpt3 = GPT2LMHeadModel.from_pretrained("kykim/gpt3-kor-small_based_on_gpt2")
# bertshared-kor-base
from transformers import BertTokenizerFast, EncoderDecoderModel
tokenizer_bertshared = BertTokenizerFast.from_pretrained("kykim/bertshared-kor-base")
model_bertshared = EncoderDecoderModel.from_pretrained("kykim/bertshared-kor-base")
Dataset
- ํ์ต์ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ตญ๋ด ์ฃผ์ ์ปค๋จธ์ค ๋ฆฌ๋ทฐ 1์ต๊ฐ + ๋ธ๋ก๊ทธ ํ ์น์ฌ์ดํธ 2000๋ง๊ฐ (75GB)
- ๋ชจ๋์ ๋ง๋ญ์น (18GB)
- ์ํคํผ๋์์ ๋๋ฌด์ํค (6GB)
- ๋ถํ์ํ๊ฑฐ๋ ๋๋ฌด ์งค์ ๋ฌธ์ฅ, ์ค๋ณต๋๋ ๋ฌธ์ฅ๋ค์ ์ ์ธํ์ฌ 100GB์ ๋ฐ์ดํฐ ์ค ์ต์ข ์ ์ผ๋ก 70GB (์ฝ 127์ต๊ฐ์ token)์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ํ์ต์ ์ฌ์ฉํ์์ต๋๋ค.
- ๋ฐ์ดํฐ๋ ํ์ฅํ(8GB), ์ํ(6GB), ์ ์์ ํ(13GB), ๋ฐ๋ ค๋๋ฌผ(2GB) ๋ฑ๋ฑ์ ์นดํ ๊ณ ๋ฆฌ๋ก ๋ถ๋ฅ๋์ด ์์ผ๋ฉฐ ๋๋ฉ์ธ ํนํ ์ธ์ด๋ชจ๋ธ ํ์ต์ ์ฌ์ฉํ์์ต๋๋ค.
Vocab
Vocab Len | lower_case | strip_accent |
---|---|---|
42000 | True | False |
- ํ๊ธ, ์์ด, ์ซ์์ ์ผ๋ถ ํน์๋ฌธ์๋ฅผ ์ ์ธํ ๋ฌธ์๋ ํ์ต์ ๋ฐฉํด๊ฐ๋๋ค๊ณ ํ๋จํ์ฌ ์ญ์ ํ์์ต๋๋ค(์์: ํ์, ์ด๋ชจ์ง ๋ฑ)
- Huggingface tokenizers ์ wordpiece๋ชจ๋ธ์ ์ฌ์ฉํด 40000๊ฐ์ subword๋ฅผ ์์ฑํ์์ต๋๋ค.
- ์ฌ๊ธฐ์ 2000๊ฐ์ unused token๊ณผ ๋ฃ์ด ํ์ตํ์์ผ๋ฉฐ, unused token๋ ๋๋ฉ์ธ ๋ณ ํนํ ์ฉ์ด๋ฅผ ๋ด๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
Fine-tuning
- Fine-tuning ์ฝ๋์ KoBert, HanBERT, KoELECTRA-Base-v3 ๊ฒฐ๊ณผ๋ KoELECTRA ๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค. ์ด ์ธ์๋ ์ง์ fine-tuning์ ์ํํ์์ผ๋ฉฐ batch size=32, learning rate=3e-5, epoch=5~15๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
NSMC (acc) |
Naver NER (F1) |
PAWS (acc) |
KorNLI (acc) |
KorSTS (spearman) |
Question Pair (acc) |
Korean-Hate-Speech (Dev) (F1) |
|
---|---|---|---|---|---|---|---|
KoBERT | 89.59 | 87.92 | 81.25 | 79.62 | 81.59 | 94.85 | 66.21 |
HanBERT | 90.06 | 87.70 | 82.95 | 80.32 | 82.73 | 94.72 | 68.32 |
kcbert-base | 89.87 | 85.00 | 67.40 | 75.57 | 75.94 | 93.93 | 68.78 |
KoELECTRA-Base-v3 | 90.63 | 88.11 | 84.45 | 82.24 | 85.53 | 95.25 | 67.61 |
OURS | |||||||
albert-kor-base | 89.45 | 82.66 | 81.20 | 79.42 | 81.76 | 94.59 | 65.44 |
bert-kor-base | 90.87 | 87.27 | 82.80 | 82.32 | 84.31 | 95.25 | 68.45 |
electra-kor-base | 91.29 | 87.20 | 85.50 | 83.11 | 85.46 | 95.78 | 66.03 |
funnel-kor-base | 91.36 | 88.02 | 83.90 | 84.52 | 95.51 | 68.18 |
Citation
@misc{kim2020lmkor,
author = {Kiyoung Kim},
title = {Pretrained Language Models For Korean},
year = {2020},
publisher = {GitHub},
howpublished = {\url{https://github.com/kiyoungkim1/LMkor}}
}
Reference
- BERT
- ALBERT
- ELECTRA
- FUNNEL-TRANSFORMER
- GPT3 and GPT2
- Leveraging Pre-trained Checkpoints for Sequence Generation Tasks
- Huggingface Transformers
- Huggingface Tokenizers
- ๋ชจ๋์ ๋ง๋ญ์น
- KoELECTRA
Acknowledgments
-
Cloud TPUs are provided by TensorFlow Research Cloud (TFRC) program.
-
Also, ๋ชจ๋์ ๋ง๋ญ์น is used for pretraining data.
License
- The pretrained models is distributed under the terms of the Apache-2.0 License.