text: # coding=utf-8
  # Copyright 2019 SK T-Brain Authors.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  import os
  import sys
  import requests
  import hashlib
  
  import torch
  
  from pytorch_pretrained_bert import BertModel, BertConfig
  import gluonnlp as nlp
  
  from .utils import download as _download
  
  kobert_models = {
      'pytorch_kobert': {
          'url':
          'https://kobert.blob.core.windows.net/models/kobert/pytorch/pytorch_kobert_2439f391a6.params',
          'fname': 'pytorch_kobert_2439f391a6.params',
          'chksum': '2439f391a6'
      },
      'vocab': {
          'url':
          'https://kobert.blob.core.windows.net/models/kobert/vocab/kobertvocab_f38b8a4d6d.json',
          'fname': 'kobertvocab_f38b8a4d6d.json',
          'chksum': 'f38b8a4d6d'
      }
  }
  
  
  bert_config = {'attention_probs_dropout_prob': 0.1,
   'hidden_act': 'gelu',
   'hidden_dropout_prob': 0.1,
   'hidden_size': 768,
   'initializer_range': 0.02,
   'intermediate_size': 3072,
   'max_position_embeddings': 512,
   'num_attention_heads': 12,
   'num_hidden_layers': 12,
   'type_vocab_size': 2,
   'vocab_size': 8002}
  
  
  
  def get_pytorch_kobert_model(ctx='cpu',
                             cachedir='~/kobert/'):
      # download model
      model_info = kobert_models['pytorch_kobert']
      model_path = _download(model_info['url'],
                             model_info['fname'],
                             model_info['chksum'],
                             cachedir=cachedir)
      # download vocab
      vocab_info = kobert_models['vocab']
      vocab_path = _download(vocab_info['url'],
                             vocab_info['fname'],
                             vocab_info['chksum'],
                             cachedir=cachedir)
      return get_kobert_model(model_path, vocab_path, ctx)
  
  
  
  def get_kobert_model(model_file, vocab_file, ctx="cpu"):
      bertmodel = BertModel(config=BertConfig.from_dict(bert_config))
      bertmodel.load_state_dict(torch.load(model_file))
      device = torch.device(ctx)
      bertmodel.to(device)
      bertmodel.eval()
      vocab_b_obj = nlp.vocab.BERTVocab.from_json(
          open(vocab_file, 'rt').read())
      return bertmodel, vocab_b_obj
  