Home

Awesome

한국어 | English

KoELECTRA

<p float="left" align="center"> <img width="900" src="https://user-images.githubusercontent.com/28896432/80024445-0f444e00-851a-11ea-9137-9da2abfd553d.png" /> </p>

ELECTRAReplaced Token Detection, 즉 generator에서 나온 token을 보고 discriminator에서 "real" token인지 "fake" token인지 판별하는 방법으로 학습을 합니다. 이 방법은 모든 input token에 대해 학습할 수 있다는 장점을 가지며, BERT 등과 비교했을 때 더 좋은 성능을 보였습니다.

KoELECTRA는 34GB의 한국어 text로 학습하였고, 이를 통해 나온 KoELECTRA-BaseKoELECTRA-Small 두 가지 모델을 배포하게 되었습니다.

또한 KoELECTRA는 Wordpiece 사용, 모델 s3 업로드 등을 통해 OS 상관없이 Transformers 라이브러리만 설치하면 곧바로 사용할 수 있습니다.

Download Link

ModelDiscriminatorGeneratorTensorflow-v1
KoELECTRA-Base-v1DiscriminatorGeneratorTensorflow-v1
KoELECTRA-Small-v1DiscriminatorGeneratorTensorflow-v1
KoELECTRA-Base-v2DiscriminatorGeneratorTensorflow-v1
KoELECTRA-Small-v2DiscriminatorGeneratorTensorflow-v1
KoELECTRA-Base-v3DiscriminatorGeneratorTensorflow-v1
KoELECTRA-Small-v3DiscriminatorGeneratorTensorflow-v1

About KoELECTRA

LayersEmbedding SizeHidden Size# heads
KoELECTRA-BaseDiscriminator1276876812
Generator127682564
KoELECTRA-SmallDiscriminator121282564
Generator121282564

Vocabulary

Vocab Lendo_lower_case
v132200False
v232200False
v335000False

Data

Pretraining Details

ModelBatch SizeTrain StepsLRMax Seq LenGenerator SizeTrain Time
Base v1,2256700K2e-45120.337d
Base v32561.5M2e-45120.3314d
Small v1,2512300K5e-45121.03d
Small v3512800K5e-45121.07d

KoELECTRA on 🤗 Transformers 🤗

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<br/>(acc)Naver NER<br/>(F1)PAWS<br/>(acc)KorNLI<br/>(acc)KorSTS<br/>(spearman)Question Pair<br/>(acc)KorQuaD (Dev)<br/>(EM/F1)Korean-Hate-Speech (Dev)<br/>(F1)
KoBERT89.5987.9281.2579.6281.5994.8551.75 / 79.1566.21
XLM-Roberta-Base89.0386.6582.8080.2378.4593.8064.70 / 88.9464.06
HanBERT90.0687.7082.9580.3282.7394.7278.74 / 92.0268.32
KoELECTRA-Base90.3387.1881.7080.6482.0093.5460.86 / 89.2866.09
KoELECTRA-Base-v289.5687.1680.7080.7282.3094.8584.01 / 92.4067.45
KoELECTRA-Base-v390.6388.1184.4582.2485.5395.2584.83 / 93.4567.61

Small Model

NSMC<br/>(acc)Naver NER<br/>(F1)PAWS<br/>(acc)KorNLI<br/>(acc)KorSTS<br/>(spearman)Question Pair<br/>(acc)KorQuaD (Dev)<br/>(EM/F1)Korean-Hate-Speech (Dev)<br/>(F1)
DistilKoBERT88.6084.6560.5072.0072.5992.4854.40 / 77.9760.72
KoELECTRA-Small88.8384.3873.1076.4576.5693.0158.04 / 86.7663.03
KoELECTRA-Small-v288.8385.0072.3578.1477.8493.2781.43 / 90.4660.14
KoELECTRA-Small-v389.3685.4077.4578.6080.7994.8582.11 / 91.1363.07

Updates

April 27, 2020

June 3, 2020

October 9, 2020

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

Oct 20, 2021

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}}
}

Reference