readme: ---
  license: apache-2.0
  pipeline_tag: fill-mask
  tags:
  - fill-mask
  - transformers
  - en
  - ko
  widget:
    - text: 한국 수도는 [MASK] 입니다.
  ---
  # albert-small-kor-v1
  - albert-small 한국어 scratch 모델
  - [ai_hub 웹데이터 기반 한국어 말뭉치 데이터](https://aihub.or.kr/aihubdata/data/view.do?currMenu=115&topMenu=100&aihubDataSe=realm&dataSetSn=624) (약 52M Text) 말뭉치로 SOP, MLM  훈련시킨 모델
  - vocab: 30,000개 (SentencePiece)
  
  ## Usage (HuggingFace Transformers)
  ### MASK 예시
  ```python
  from transformers import AutoTokenizer, AutoModel, AlbertForMaskedLM
  import torch
  import torch.nn.functional as F
  tokenizer = AutoTokenizer.from_pretrained('bongsoo/albert-small-kor-v1', do_lower_case=True)
  model = AlbertForMaskedLM.from_pretrained('bongsoo/albert-small-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] : ▁서울 (80)
  
  *Input: 프랑스 수도는 [MASK]이다
  *[MASK] : ▁불과 (1682)
  
  *Input: 충무공 이순신은 [MASK]에 최고의 장수였다
  *[MASK] : ▁우리 (184)
  ```
  
  ## 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 = 1e-4 , weigth_decay=0.01, batch_size = 128, token_max_len = 128,epoch = 8**
  - Vocab: 30,000개 (SentencePiece)
  - 훈련시간 : 171h/1GPU (24GB/21GB use)
  - 훈련코드 [여기](https://github.com/kobongsoo/BERT/blob/master/albert/albert-SOP-MLM-Trainer-V2.0.ipynb) 참조
  
  ## Model Config
  ```
  {
    "architectures": [
      "AlbertForPreTraining"
    ],
    "attention_probs_dropout_prob": 0,
    "bos_token_id": 2,
    "classifier_dropout_prob": 0.1,
    "embedding_size": 128,
    "eos_token_id": 3,
    "hidden_act": "gelu_new",
    "hidden_dropout_prob": 0,
    "hidden_size": 768,
    "initializer_range": 0.02,
    "inner_group_num": 1,
    "intermediate_size": 3072,
    "layer_norm_eps": 1e-12,
    "max_position_embeddings": 512,
    "model_type": "albert",
    "num_attention_heads": 12,
    "num_hidden_groups": 1,
    "num_hidden_layers": 6,
    "pad_token_id": 0,
    "position_embedding_type": "absolute",
    "torch_dtype": "float32",
    "transformers_version": "4.21.2",
    "type_vocab_size": 2,
    "vocab_size": 30000
  }
  ```
  
  ## Citing & Authors
  bongsoo
  