bert-base-kor-v1
- Bert-base 한국어 scratch 모델
- ai_hub 웹데이터 기반 한국어 말뭉치 데이터 (약 52M Text) 말뭉치로 NSP, MLM 훈련시킨 모델
- vocab: 30,022개 (BertTokenizer)
Usage (HuggingFace Transformers)
MASK 예시
from transformers import AutoTokenizer, AutoModel, BertForMaskedLM
import torch
import torch.nn.functional as F
tokenizer = AutoTokenizer.from_pretrained('bongsoo/bert-base-kor-v1', do_lower_case=False)
model = BertForMaskedLM.from_pretrained('bongsoo/bert-base-kor-v1')
text = ['한국 수도는 [MASK] 이다', '프랑스 수도는 [MASK]이다', '충무공 이순신은 [MASK]에 최고의 장수였다']
tokenized_input = tokenizer(text, max_length=128, truncation=True, padding='max_length', return_tensors='pt')
outputs = model(**tokenized_input)
logits = outputs.logits
mask_idx_list = []
for tokens in tokenized_input['input_ids'].tolist():
token_str = [tokenizer.convert_ids_to_tokens(s) for s in tokens]
# **위 token_str리스트에서 [MASK] 인덱스를 구함
# => **해당 [MASK] 안덱스 값 mask_idx 에서는 아래 출력하는데 사용됨
mask_idx = token_str.index('[MASK]')
mask_idx_list.append(mask_idx)
for idx, mask_idx in enumerate(mask_idx_list):
logits_pred=torch.argmax(F.softmax(logits[idx]), dim=1)
mask_logits_idx = int(logits_pred[mask_idx])
# [MASK]에 해당하는 token 구함
mask_logits_token = tokenizer.convert_ids_to_tokens(mask_logits_idx)
# 결과 출력
print('\n')
print('*Input: {}'.format(text[idx]))
print('*[MASK] : {} ({})'.format(mask_logits_token, mask_logits_idx))
- 결과
*Input: 한국 수도는 [MASK] 이다
*[MASK] : 서울 (1970)
*Input: 프랑스 수도는 [MASK]이다
*[MASK] : 파리 (4846)
*Input: 충무공 이순신은 [MASK]에 최고의 장수였다
*[MASK] : 조선 (2760)
Training
MLM(Masked Langeuage Model) 훈련
- 모델 : Bert-base
- 말뭉치 : ai_hub 웹데이터 기반 한국어 말뭉치 데이터 (약 52M Text)
- HyperParameter : lr = 5e-5 , weigth_decay=0.0, batch_size = 64, token_max_len = 128,epoch = 10
- Vocab: 30,022개 (BertTokenizer)
- 훈련시간 : 400h/1GPU (24GB/15GB use)
- 훈련코드 여기 참조
Model Config
{
"architectures": [
"BertForPreTraining"
],
"attention_probs_dropout_prob": 0.1,
"classifier_dropout": null,
"hidden_act": "gelu",
"hidden_dropout_prob": 0.1,
"hidden_size": 768,
"initializer_range": 0.02,
"intermediate_size": 3072,
"layer_norm_eps": 1e-12,
"max_position_embeddings": 512,
"model_type": "bert",
"num_attention_heads": 12,
"num_hidden_layers": 12,
"pad_token_id": 0,
"position_embedding_type": "absolute",
"torch_dtype": "float32",
"transformers_version": "4.21.2",
"type_vocab_size": 2,
"use_cache": true,
"vocab_size": 30022
}
Citing & Authors
bongsoo