KoBERT

SKTBrainApache-2.0长期未更新

韩语版 BERT 预训练模型,基于 PyTorch 和 Transformers,可直接加载做韩语文本分类、情感分析等下游任务的微调。

Korean BERT pre-trained cased (KoBERT)

暂无版本1,422star374fork同步于 2026-11-07 07:31 UTC

怎么上手

由 README 提炼,执行前请确认
pip install git+https://[email protected]/SKTBrain/KoBERT.git@master
硬件要求按 README 说明

README 未说明推理显存要求;训练环境为 V100 GPU x 32 配 Horovod,微调示例建议在 Colab 使用 GPU 加速

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

SKT 开源韩语 BERT 预训练模型,补足多语言 BERT 韩语能力不足

韩语版 BERT 预训练模型,基于 PyTorch 和 Transformers,可直接加载做韩语文本分类、情感分析等下游任务的微调。

核心能力

  • 提供 12 层 768 维的韩语 cased BERT 预训练权重
  • 基于韩语维基 5M 句子训练 SentencePiece 分词器,词表 8002
  • 提供 PyTorch、ONNX、MXNet-Gluon 三种加载接口
  • 附带 NSMC 情感分析微调示例与 Colab 笔记本
  • 参数约 92M,小于多语言 BERT base 的 110M

容易踩的坑

模型权重较大,v0.2.4 起改为从 Hugging Face Hub 下载,首次调用需联网;get_pytorch_kobert_model 默认返回 eval 模式,训练前需手动调用 model.train();分词器依赖 gluonnlp 的 SentencepieceTokenizer,需按 requirements.txt 装齐依赖

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

0 个版本

暂无 release 数据(可能没有发版,或尚未同步)。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    KoBERT


    Korean BERT pre-trained cased (KoBERT)

    Why'?'

    Training Environment

    • Architecture
    predefined_args = {
            'attention_cell': 'multi_head',
            'num_layers': 12,
            'units': 768,
            'hidden_size': 3072,
            'max_length': 512,
            'num_heads': 12,
            'scaled': True,
            'dropout': 0.1,
            'use_residual': True,
            'embed_size': 768,
            'embed_dropout': 0.1,
            'token_type_vocab_size': 2,
            'word_embed': None,
        }
    
    • 학습셋
    데이터문장단어
    한국어 위키5M54M
    • 학습 환경
      • V100 GPU x 32, Horovod(with InfiniBand)

    2019-04-29 텐서보드 로그

    • 사전(Vocabulary)
      • 크기 : 8,002
      • 한글 위키 기반으로 학습한 토크나이저(SentencePiece)
      • Less number of parameters(92M < 110M )

    Requirements

    How to install

    • Install KoBERT as a python package

      pip install git+https://[email protected]/SKTBrain/KoBERT.git@master
      
    • If you want to modify source codes, please clone this repository

      git clone https://github.com/SKTBrain/KoBERT.git
      cd KoBERT
      pip install -r requirements.txt
      

    How to use

    PyTorch

    Huggingface transformers API가 편하신 분은 여기를 참고하세요.

    >>> import torch
    >>> from kobert import get_pytorch_kobert_model
    >>> input_ids = torch.LongTensor([[31, 51, 99], [15, 5, 0]])
    >>> input_mask = torch.LongTensor([[1, 1, 1], [1, 1, 0]])
    >>> token_type_ids = torch.LongTensor([[0, 0, 1], [0, 1, 0]])
    >>> model, vocab  = get_pytorch_kobert_model()
    >>> sequence_output, pooled_output = model(input_ids, input_mask, token_type_ids)
    >>> pooled_output.shape
    torch.Size([2, 768])
    >>> vocab
    Vocab(size=8002, unk="[UNK]", reserved="['[MASK]', '[SEP]', '[CLS]']")
    >>> # Last Encoding Layer
    >>> sequence_output[0]
    tensor([[-0.2461,  0.2428,  0.2590,  ..., -0.4861, -0.0731,  0.0756],
            [-0.2478,  0.2420,  0.2552,  ..., -0.4877, -0.0727,  0.0754],
            [-0.2472,  0.2420,  0.2561,  ..., -0.4874, -0.0733,  0.0765]],
           grad_fn=<SelectBackward>)
    

    model은 디폴트로 eval()모드로 리턴됨, 따라서 학습 용도로 사용시 model.train()명령을 통해 학습 모드로 변경할 필요가 있다.

    • Naver Sentiment Analysis Fine-Tuning with pytorch
      • Colab에서 [런타임] - [런타임 유형 변경] - 하드웨어 가속기(GPU) 사용을 권장합니다.
      • Open In Colab

    ONNX

    >>> import onnxruntime
    >>> import numpy as np
    >>> from kobert import get_onnx_kobert_model
    >>> onnx_path = get_onnx_kobert_model()
    >>> sess = onnxruntime.InferenceSession(onnx_path)
    >>> input_ids = [[31, 51, 99], [15, 5, 0]]
    >>> input_mask = [[1, 1, 1], [1, 1, 0]]
    >>> token_type_ids = [[0, 0, 1], [0, 1, 0]]
    >>> len_seq = len(input_ids[0])
    >>> pred_onnx = sess.run(None, {'input_ids':np.array(input_ids),
    >>>                             'token_type_ids':np.array(token_type_ids),
    >>>                             'input_mask':np.array(input_mask),
    >>>                             'position_ids':np.array(range(len_seq))})
    >>> # Last Encoding Layer
    >>> pred_onnx[-2][0]
    array([[-0.24610452,  0.24282141,  0.25895312, ..., -0.48613444,
            -0.07305173,  0.07560554],
           [-0.24783179,  0.24200465,  0.25520486, ..., -0.4877185 ,
            -0.0727044 ,  0.07536091],
           [-0.24721591,  0.24196623,  0.2560626 , ..., -0.48743123,
            -0.07326943,  0.07650235]], dtype=float32)
    

    ONNX 컨버팅은 soeque1께서 도움을 주셨습니다.

    MXNet-Gluon

    >>> import mxnet as mx
    >>> from kobert import get_mxnet_kobert_model
    >>> input_id = mx.nd.array([[31, 51, 99], [15, 5, 0]])
    >>> input_mask = mx.nd.array([[1, 1, 1], [1, 1, 0]])
    >>> token_type_ids = mx.nd.array([[0, 0, 1], [0, 1, 0]])
    >>> model, vocab = get_mxnet_kobert_model(use_decoder=False, use_classifier=False)
    >>> encoder_layer, pooled_output = model(input_id, token_type_ids)
    >>> pooled_output.shape
    (2, 768)
    >>> vocab
    Vocab(size=8002, unk="[UNK]", reserved="['[MASK]', '[SEP]', '[CLS]']")
    >>> # Last Encoding Layer
    >>> encoder_layer[0]
    [[-0.24610372  0.24282135  0.2589539  ... -0.48613444 -0.07305248
       0.07560539]
     [-0.24783105  0.242005    0.25520545 ... -0.48771808 -0.07270523
       0.07536077]
     [-0.24721491  0.241966    0.25606337 ... -0.48743105 -0.07327032
       0.07650219]]
    <NDArray 3x768 @cpu(0)>
    
    • Naver Sentiment Analysis Fine-Tuning with MXNet
      • Open In Colab

    Tokenizer

    >>> from gluonnlp.data import SentencepieceTokenizer
    >>> from kobert import get_tokenizer_path
    >>> tok_path = get_tokenizer_path()
    >>> sp  = SentencepieceTokenizer(tok_path)
    >>> sp('한국어 모델을 공유합니다.')
    ['▁한국', '어', '▁모델', '을', '▁공유', '합니다', '.']
    

    Task Fine-tuning

    Naver Sentiment Analysis

    ModelAccuracy
    BERT base multilingual cased0.875
    KoBERT0.901
    KoGPT20.899

    KoBERT와 CRF로 만든 한국어 객체명인식기

    문장을 입력하세요:  SKTBrain에서 KoBERT 모델을 공개해준 덕분에 BERT-CRF 기반 객체명인식기를 쉽게 개발할 수 있었다.
    len: 40, input_token:['[CLS]', '▁SK', 'T', 'B', 'ra', 'in', '에서', '▁K', 'o', 'B', 'ER', 'T', '▁모델', '을', '▁공개', '해', '준', '▁덕분에', '▁B', 'ER', 'T', '-', 'C', 'R', 'F', '▁기반', '▁', '객', '체', '명', '인', '식', '기를', '▁쉽게', '▁개발', '할', '▁수', '▁있었다', '.', '[SEP]']
    len: 40, pred_ner_tag:['[CLS]', 'B-ORG', 'I-ORG', 'I-ORG', 'I-ORG', 'I-ORG', 'O', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'O', 'O', 'O', 'O', 'O', 'O', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', '[SEP]']
    decoding_ner_sentence: [CLS] <SKTBrain:ORG>에서 <KoBERT:POH> 모델을 공개해준 덕분에 <BERT-CRF:POH> 기반 객체명인식기를 쉽게 개발할 수 있었다.[SEP]
    

    Korean Sentence BERT

    ModelCosine PearsonCosine SpearmanEuclidean PearsonEuclidean SpearmanManhattan PearsonManhattan SpearmanDot PearsonDot Spearman
    NLl65.0568.4868.8168.1868.9068.2065.2266.81
    STS80.4279.6477.9377.4377.9277.4476.5675.83
    STS + NLI78.8178.4777.6877.7877.7177.8375.7575.22

    Release

    • v0.2.4
      • 대용량 파일을 Hugging Face Hub에서 받도록 변경
    • v0.2.3
      • onnx 1.8.0 지원
    • v0.2.2
      • 에러 수정: No module named 'kobert.utils'
    • v0.2.1
      • import 구문 수정
    • v0.2
      • 대용량 파일을 aws s3에서 받도록 변경
      • 함수명 변경
    • v0.1.2
      • transformers 라이브러리 호환성 수정
      • pad token의 index 수정
    • v0.1.1
      • 사전(vocabulary)과 토크나이저 통합
    • v0.1
      • 초기 모델 릴리즈

    Contacts

    KoBERT 관련 이슈는 이곳에 등록해 주시기 바랍니다.

    License

    KoBERT는 Apache-2.0 라이선스 하에 공개되어 있습니다. 모델 및 코드를 사용할 경우 라이선스 내용을 준수해주세요. 라이선스 전문은 LICENSE 파일에서 확인하실 수 있습니다.