|
|
--- |
|
|
license: apache-2.0 |
|
|
pipeline_tag: fill-mask |
|
|
tags: |
|
|
- fill-mask |
|
|
- transformers |
|
|
- en |
|
|
- ko |
|
|
widget: |
|
|
- text: 한국 수도는 [MASK] 입니다. |
|
|
--- |
|
|
# bert-base-kor-v1 |
|
|
- Bert-base 한국어 scratch 모델 |
|
|
- [ai_hub 웹데이터 기반 한국어 말뭉치 데이터](https://aihub.or.kr/aihubdata/data/view.do?currMenu=115&topMenu=100&aihubDataSe=realm&dataSetSn=624) (약 52M Text) 말뭉치로 NSP, MLM 훈련시킨 모델 |
|
|
- vocab: 30,022개 (BertTokenizer) |
|
|
|
|
|
## Usage (HuggingFace Transformers) |
|
|
### MASK 예시 |
|
|
```python |
|
|
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 웹데이터 기반 한국어 말뭉치 데이터](https://aihub.or.kr/aihubdata/data/view.do?currMenu=115&topMenu=100&aihubDataSe=realm&dataSetSn=624) (약 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) |
|
|
- 훈련코드 [여기](https://github.com/kobongsoo/BERT/blob/master/bert/bert-NSP-MLM-Trainer-V2.0.ipynb) 참조 |
|
|
|
|
|
## 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 |
|
|
|