KoCharELECTRA Save

Character-level Korean ELECTRA Model (음절 단위 한국어 ELECTRA)

Project README

KoCharELECTRA

Character-level (음절) Korean ELECTRA Model

Details

Wordpiece-level이 아닌 Character-level(음절) tokenizer를 이용하여 학습한 한국어 ELECTRA Model입니다.

Model Max Len Vocab Size
KoCharElectra-Base 512 11568
KoCharElectra-Small 512 11568
  • Vocab의 사이즈는 11568개로 [unused] 토큰 200개를 추가하였습니다.
  • 한자의 경우는 전처리 시에 제외되어 Vocab에 존재하지 않습니다.

Tokenizer

  • Char-level tokenizer를 위하여 tokenization_kocharelectra.py 파일을 새로 제작
  • Transformers의 tokenization 관련 함수 지원 (convert_tokens_to_ids, convert_tokens_to_string, encode_plus...)
>>> from tokenization_kocharelectra import KoCharElectraTokenizer
>>> tokenizer = KoCharElectraTokenizer.from_pretrained("monologg/kocharelectra-base-discriminator")
>>> tokenizer.tokenize("나는 걸어가고 있는 중입니다.")
['나', '는', ' ', '걸', '어', '가', '고', ' ', '있', '는', ' ', '중', '입', '니', '다', '.']

KoCharELECTRA on Transformers

  • Huggingface S3에 모델이 이미 업로드되어 있어서, 모델을 직접 다운로드할 필요 없이 곧바로 사용할 수 있습니다.

  • ElectraModelpooled_output을 리턴하지 않는 것을 제외하고 BertModel과 유사합니다.

  • ELECTRA는 finetuning시에 discriminator를 사용합니다.

🚨 주의사항 🚨

  1. 반드시 Transformers v2.9.1 이상을 설치하시길 바랍니다. (v2.9.1에서 새로 변경된 API에 맞게 tokenization 파일을 제작했습니다)

  2. tokenizer의 경우 wordpiece가 아닌 char 단위이기에 ElectraTokenizer가 아니라 KoCharElectraTokenizer를 사용해야 합니다. (레포에서 제공하고 있는 tokenization_kocharelectra.py를 가져와서 사용해야 합니다.)

from transformers import ElectraTokenizer  # DON'T use ElectraTokenizer
from tokenization_kocharelectra import KoCharElectraTokenizer  # USE KoCharElectraTokenizer
from transformers import ElectraModel
from tokenization_kocharelectra import KoCharElectraTokenizer

# KoCharElectra-Base
model = ElectraModel.from_pretrained("monologg/kocharelectra-base-discriminator")
tokenizer = KoCharElectraTokenizer.from_pretrained("monologg/kocharelectra-base-discriminator")

# KoCharElectra-Small
model = ElectraModel.from_pretrained("monologg/kocharelectra-small-discriminator")
tokenizer = KoCharElectraTokenizer.from_pretrained("monologg/kocharelectra-small-discriminator")

Test Code

$ python3 test_kocharelectra.py

# Output
--------------------------------------------------------
tokens:  [CLS] 나 는   걸 어 가 고   있 는   중 입 니 다 . [SEP] 나 는   밥 을   먹 고   있 는   중 입 니 다 . [SEP]
input_ids: 2 40 8 5 374 38 14 13 5 36 8 5 75 142 57 7 10 3 40 8 5 733 11 5 445 13 5 36 8 5 75 142 57 7 10 3 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 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 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 1 0 0 0 0
--------------------------------------------------------
[Last layer hidden state]
Size: torch.Size([1, 40, 768])
Tensor: tensor([[[ 0.1453, -0.0629,  0.2065,  ...,  0.5304, -0.4602,  0.6803],
         [ 0.8824, -0.3448, -0.3342,  ...,  0.4652, -0.2378,  0.2560],
         [ 0.3114, -0.3019, -0.1159,  ...,  0.4712, -0.6678,  0.3425],
         ...,
         [-0.0830, -0.2008,  0.2107,  ..., -0.2890, -0.0297,  0.5241],
         [ 0.0587, -0.2498,  0.4193,  ..., -0.2537,  0.1526,  0.5394],
         [ 0.1337, -0.2736,  0.6251,  ..., -0.1580,  0.2323,  0.5248]]])

Result on Subtask

Char-level인 관계로 max_seq_len=128로 돌렸지만 (KoELECTRA에서는 50으로 설정), KoELECTRA와 비교했을 때 나쁘지 않은 성능을 보였습니다.

Base Model

NSMC (acc) Naver NER (F1)
KoELECTRA-Base 90.21 86.87
KoCharELECTRA-Base 90.18 84.99

Small Model

NSMC (acc) Naver NER (F1)
KoELECTRA-Small 88.76 84.11
KoCharELECTRA-Small 89.20 82.83

Acknowledgement

KoCharELECTRA은 Tensorflow Research Cloud (TFRC) 프로그램의 Cloud TPU 지원으로 제작되었습니다.

Reference

Open Source Agenda is not affiliated with "KoCharELECTRA" Project. README Source: monologg/KoCharELECTRA
Stars
53
Open Issues
1
Last Commit
11 months ago
License

Open Source Agenda Badge

Open Source Agenda Rating