KoELECTRA
ELECTRA๋ Replaced Token Detection
, ์ฆ generator์์ ๋์จ token์ ๋ณด๊ณ discriminator์์ "real" token์ธ์ง "fake" token์ธ์ง ํ๋ณํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ์ต์ ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ชจ๋ input token์ ๋ํด ํ์ตํ ์ ์๋ค๋ ์ฅ์ ์ ๊ฐ์ง๋ฉฐ, BERT ๋ฑ๊ณผ ๋น๊ตํ์ ๋ ๋ ์ข์ ์ฑ๋ฅ์ ๋ณด์์ต๋๋ค.
KoELECTRA๋ 34GB์ ํ๊ตญ์ด text๋ก ํ์ตํ์๊ณ , ์ด๋ฅผ ํตํด ๋์จ KoELECTRA-Base
์ KoELECTRA-Small
๋ ๊ฐ์ง ๋ชจ๋ธ์ ๋ฐฐํฌํ๊ฒ ๋์์ต๋๋ค.
๋ํ KoELECTRA๋ Wordpiece ์ฌ์ฉ, ๋ชจ๋ธ s3 ์
๋ก๋ ๋ฑ์ ํตํด OS ์๊ด์์ด Transformers
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ์ค์นํ๋ฉด ๊ณง๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
Download Link
Model | Discriminator | Generator | Tensorflow-v1 |
---|---|---|---|
KoELECTRA-Base-v1 |
Discriminator | Generator | Tensorflow-v1 |
KoELECTRA-Small-v1 |
Discriminator | Generator | Tensorflow-v1 |
KoELECTRA-Base-v2 |
Discriminator | Generator | Tensorflow-v1 |
KoELECTRA-Small-v2 |
Discriminator | Generator | Tensorflow-v1 |
KoELECTRA-Base-v3 |
Discriminator | Generator | Tensorflow-v1 |
KoELECTRA-Small-v3 |
Discriminator | Generator | Tensorflow-v1 |
About KoELECTRA
Layers | Embedding Size | Hidden Size | # heads | ||
---|---|---|---|---|---|
KoELECTRA-Base |
Discriminator | 12 | 768 | 768 | 12 |
Generator | 12 | 768 | 256 | 4 | |
KoELECTRA-Small |
Discriminator | 12 | 128 | 256 | 4 |
Generator | 12 | 128 | 256 | 4 |
Vocabulary
- ์ด๋ฒ ํ๋ก์ ํธ์ ๊ฐ์ฅ ํฐ ๋ชฉ์ ์ Transformers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ์์ผ๋ฉด ๋ชจ๋ธ์ ๊ณง๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ด์๊ณ , ์ด์ Sentencepiece, Mecab์ ์ฌ์ฉํ์ง ์๊ณ ์ ๋
ผ๋ฌธ๊ณผ ์ฝ๋์์ ์ฌ์ฉํ
Wordpiece
๋ฅผ ์ฌ์ฉํ์์ต๋๋ค. - ์์ธํ ๋ด์ฉ์ [Wordpiece Vocabulary] ์ฐธ๊ณ
Vocab Len | do_lower_case | |
---|---|---|
v1 | 32200 | False |
v2 | 32200 | False |
v3 | 35000 | False |
Data
v1
,v2
์ ๊ฒฝ์ฐ ์ฝ 14G Corpus (2.6B tokens)๋ฅผ ์ฌ์ฉํ์ต๋๋ค. (๋ด์ค, ์ํค, ๋๋ฌด์ํค)v3
์ ๊ฒฝ์ฐ ์ฝ 20G์ ๋ชจ๋์ ๋ง๋ญ์น๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉํ์ต๋๋ค. (์ ๋ฌธ, ๋ฌธ์ด, ๊ตฌ์ด, ๋ฉ์ ์ , ์น)
Pretraining Details
Model | Batch Size | Train Steps | LR | Max Seq Len | Generator Size | Train Time |
---|---|---|---|---|---|---|
Base v1,2 |
256 | 700K | 2e-4 | 512 | 0.33 | 7d |
Base v3 |
256 | 1.5M | 2e-4 | 512 | 0.33 | 14d |
Small v1,2 |
512 | 300K | 5e-4 | 512 | 1.0 | 3d |
Small v3 |
512 | 800K | 5e-4 | 512 | 1.0 | 7d |
-
KoELECTRA-Small
๋ชจ๋ธ์ ๊ฒฝ์ฐ ์ ๋ ผ๋ฌธ์์์ELECTRA-Small++
์ ๋์ผํ ์ต์ ์ ์ฌ์ฉํ์์ต๋๋ค.- ์ด๋ ๊ณต์ ELECTRA์์ ๋ฐฐํฌํ Small ๋ชจ๋ธ๊ณผ ์ค์ ์ด ๋์ผํฉ๋๋ค.
- ๋ํ
KoELECTRA-Base
์๋ ๋ฌ๋ฆฌ, Generator์ Discriminator์ ๋ชจ๋ธ ์ฌ์ด์ฆ(=generator_hidden_size
)๊ฐ ๋์ผํฉ๋๋ค.
-
Batch size
์Train steps
์ ์ ์ธํ๊ณ ๋ ์ ๋ ผ๋ฌธ์ Hyperparameter์ ๋์ผํ๊ฒ ๊ฐ์ ธ๊ฐ์ต๋๋ค.- ๋ค๋ฅธ hyperparameter๋ฅผ ๋ณ๊ฒฝํ์ฌ ๋๋ ค๋ดค์ง๋ง ์ ๋ ผ๋ฌธ๊ณผ ๋์ผํ๊ฒ ๊ฐ์ ธ๊ฐ ๊ฒ์ด ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ข์์ต๋๋ค.
-
TPU v3-8์ ์ด์ฉํ์ฌ ํ์ตํ์๊ณ , GCP์์์ TPU ์ฌ์ฉ๋ฒ์ [Using TPU for Pretraining]์ ์ ๋ฆฌํ์์ต๋๋ค.
๐ค Transformers ๐ค
KoELECTRA on -
Transformers v2.8.0
๋ถํฐElectraModel
์ ๊ณต์ ์ง์ํฉ๋๋ค. -
Huggingface S3์ ๋ชจ๋ธ์ด ์ด๋ฏธ ์ ๋ก๋๋์ด ์์ด์, ๋ชจ๋ธ์ ์ง์ ๋ค์ด๋ก๋ํ ํ์ ์์ด ๊ณง๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
ElectraModel
์pooled_output
์ ๋ฆฌํดํ์ง ์๋ ๊ฒ์ ์ ์ธํ๊ณBertModel
๊ณผ ์ ์ฌํฉ๋๋ค. -
ELECTRA๋ finetuning์์
discriminator
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
1. Pytorch Model & Tokenizer
from transformers import ElectraModel, ElectraTokenizer
model = ElectraModel.from_pretrained("monologg/koelectra-base-discriminator") # KoELECTRA-Base
model = ElectraModel.from_pretrained("monologg/koelectra-small-discriminator") # KoELECTRA-Small
model = ElectraModel.from_pretrained("monologg/koelectra-base-v2-discriminator") # KoELECTRA-Base-v2
model = ElectraModel.from_pretrained("monologg/koelectra-small-v2-discriminator") # KoELECTRA-Small-v2
model = ElectraModel.from_pretrained("monologg/koelectra-base-v3-discriminator") # KoELECTRA-Base-v3
model = ElectraModel.from_pretrained("monologg/koelectra-small-v3-discriminator") # KoELECTRA-Small-v3
2. Tensorflow v2 Model
from transformers import TFElectraModel
model = TFElectraModel.from_pretrained("monologg/koelectra-base-v3-discriminator", from_pt=True)
3. Tokenizer Example
>>> from transformers import ElectraTokenizer
>>> tokenizer = ElectraTokenizer.from_pretrained("monologg/koelectra-base-v3-discriminator")
>>> tokenizer.tokenize("[CLS] ํ๊ตญ์ด ELECTRA๋ฅผ ๊ณต์ ํฉ๋๋ค. [SEP]")
['[CLS]', 'ํ๊ตญ์ด', 'EL', '##EC', '##TRA', '##๋ฅผ', '๊ณต์ ', '##ํฉ๋๋ค', '.', '[SEP]']
>>> tokenizer.convert_tokens_to_ids(['[CLS]', 'ํ๊ตญ์ด', 'EL', '##EC', '##TRA', '##๋ฅผ', '๊ณต์ ', '##ํฉ๋๋ค', '.', '[SEP]'])
[2, 11229, 29173, 13352, 25541, 4110, 7824, 17788, 18, 3]
Result on Subtask
config์ ์ธํ ์ ๊ทธ๋๋ก ํ์ฌ ๋๋ฆฐ ๊ฒฐ๊ณผ์ด๋ฉฐ, hyperparameter tuning์ ์ถ๊ฐ์ ์ผ๋ก ํ ์ ๋ ์ข์ ์ฑ๋ฅ์ด ๋์ฌ ์ ์์ต๋๋ค.
์ฝ๋ ๋ฐ ์์ธํ ๋ด์ฉ์ [Finetuning] ์ฐธ๊ณ
Base Model
NSMC (acc) |
Naver NER (F1) |
PAWS (acc) |
KorNLI (acc) |
KorSTS (spearman) |
Question Pair (acc) |
KorQuaD (Dev) (EM/F1) |
Korean-Hate-Speech (Dev) (F1) |
|
---|---|---|---|---|---|---|---|---|
KoBERT | 89.59 | 87.92 | 81.25 | 79.62 | 81.59 | 94.85 | 51.75 / 79.15 | 66.21 |
XLM-Roberta-Base | 89.03 | 86.65 | 82.80 | 80.23 | 78.45 | 93.80 | 64.70 / 88.94 | 64.06 |
HanBERT | 90.06 | 87.70 | 82.95 | 80.32 | 82.73 | 94.72 | 78.74 / 92.02 | 68.32 |
KoELECTRA-Base | 90.33 | 87.18 | 81.70 | 80.64 | 82.00 | 93.54 | 60.86 / 89.28 | 66.09 |
KoELECTRA-Base-v2 | 89.56 | 87.16 | 80.70 | 80.72 | 82.30 | 94.85 | 84.01 / 92.40 | 67.45 |
KoELECTRA-Base-v3 | 90.63 | 88.11 | 84.45 | 82.24 | 85.53 | 95.25 | 84.83 / 93.45 | 67.61 |
Small Model
NSMC (acc) |
Naver NER (F1) |
PAWS (acc) |
KorNLI (acc) |
KorSTS (spearman) |
Question Pair (acc) |
KorQuaD (Dev) (EM/F1) |
Korean-Hate-Speech (Dev) (F1) |
|
---|---|---|---|---|---|---|---|---|
DistilKoBERT | 88.60 | 84.65 | 60.50 | 72.00 | 72.59 | 92.48 | 54.40 / 77.97 | 60.72 |
KoELECTRA-Small | 88.83 | 84.38 | 73.10 | 76.45 | 76.56 | 93.01 | 58.04 / 86.76 | 63.03 |
KoELECTRA-Small-v2 | 88.83 | 85.00 | 72.35 | 78.14 | 77.84 | 93.27 | 81.43 / 90.46 | 60.14 |
KoELECTRA-Small-v3 | 89.36 | 85.40 | 77.45 | 78.60 | 80.79 | 94.85 | 82.11 / 91.13 | 63.07 |
Updates
April 27, 2020
- 2๊ฐ์ Subtask (
KorSTS
,QuestionPair
)์ ๋ํด ์ถ๊ฐ์ ์ผ๋ก finetuning์ ์งํํ์๊ณ , ๊ธฐ์กด 5๊ฐ์ Subtask์ ๋ํด์๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฐ์ดํธํ์์ต๋๋ค.
June 3, 2020
- EnlipleAI PLM์์ ์ฌ์ฉ๋ vocabulary๋ฅผ ์ด์ฉํ์ฌ
KoELECTRA-v2
๋ฅผ ์ ์ํ์์ต๋๋ค. Base ๋ชจ๋ธ๊ณผ Small ๋ชจ๋ธ ๋ชจ๋KorQuaD
์์ ์ฑ๋ฅ ํฅ์์ ๋ณด์์ต๋๋ค.
October 9, 2020
๋ชจ๋์ ๋ง๋ญ์น
๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉํ์ฌKoELECTRA-v3
๋ฅผ ์ ์ํ์์ต๋๋ค. Vocab๋Mecab
๊ณผWordpiece
๋ฅผ ์ด์ฉํ์ฌ ์๋ก ์ ์ํ์์ต๋๋ค.Huggingface Transformers
์ElectraForSequenceClassification
๊ณต์ ์ง์ ๋ฑ์ ๊ณ ๋ คํ์ฌ ๊ธฐ์กด Subtask ๊ฒฐ๊ณผ๋ฅผ ์๋ก Updateํ์์ต๋๋ค. ๋ํ Korean-Hate-Speech์ ๊ฒฐ๊ณผ๋ ์ถ๊ฐํ์ต๋๋ค.
from transformers import ElectraModel, ElectraTokenizer
model = ElectraModel.from_pretrained("monologg/koelectra-base-v3-discriminator")
tokenizer = ElectraTokenizer.from_pretrained("monologg/koelectra-base-v3-discriminator")
May 26, 2021
torch<=1.4
์์ ๋ก๋ฉ์ด ๋์ง ์๋ ์ด์ ํด๊ฒฐ (๋ชจ๋ธ ์์ ํ ์ฌ์ ๋ก๋ ์๋ฃ) (Related Issue)- huggingface hub์
tensorflow v2
๋ชจ๋ธ ์ ๋ก๋ (tf_model.h5
)
Oct 20, 2021
tf_model.h5
์์ ๋ฐ๋ก ๋ก๋ฉํ๋ ๋ถ๋ถ์ด ์ฌ๋ฌ ์ด์๊ฐ ์กด์ฌํ์ฌ ์ ๊ฑฐ (from_pt=True
๋ก ๋ก๋ฉํ๋ ๊ฒ์ผ๋ก ๋๋๋ฆผ)
Acknowledgement
KoELECTRA์ Tensorflow Research Cloud (TFRC) ํ๋ก๊ทธ๋จ์ Cloud TPU ์ง์์ผ๋ก ์ ์๋์์ต๋๋ค. ๋ํ KoELECTRA-v3
๋ ๋ชจ๋์ ๋ง๋ญ์น์ ๋์์ผ๋ก ์ ์๋์์ต๋๋ค.
Citation
์ด ์ฝ๋๋ฅผ ์ฐ๊ตฌ์ฉ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ์ธ์ฉํด์ฃผ์ธ์.
@misc{park2020koelectra,
author = {Park, Jangwon},
title = {KoELECTRA: Pretrained ELECTRA Model for Korean},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/monologg/KoELECTRA}}
}