KoBERT
KoBERT 是一个专为韩语自然语言处理打造的预训练 BERT 模型。它主要解决了谷歌原版多语言 BERT 在处理韩语时性能受限的问题,通过基于大规模韩语维基百科数据(500 万句、5400 万词)进行专项训练,显著提升了对韩语语境的理解能力。
该工具非常适合需要开发韩语 NLP 应用的开发者、研究人员以及学生使用。无论是进行情感分析、命名实体识别,还是构建语义搜索系统,KoBERT 都能提供强大的底层支持。其技术亮点在于采用了针对韩语优化的 SentencePiece 分词器,词表大小精简至 8,002 个,在保持高精度的同时减少了参数量(约 92M),使得模型更加轻量高效。此外,KoBERT 展现了极佳的工程兼容性,不仅原生支持 PyTorch,还提供了 ONNX 和 MXNet-Gluon 版本,方便用户根据实际部署环境灵活选择。项目还附带了基于 Naver 评论数据的情感分析等微调示例,帮助用户快速上手并应用于实际业务场景中。
使用场景
韩国某电商平台的客服团队需要构建一个自动系统,实时分析海量韩语用户评论的情感倾向,以便快速识别负面反馈并介入处理。
没有 KoBERT 时
- 语义理解偏差大:直接套用谷歌的多语言 BERT 模型,由于未针对韩语特有的助词、词尾变化及敬语体系进行深度优化,导致对复杂句式的意图识别准确率低下。
- 数据标注成本高昂:因基线模型效果不佳,团队不得不投入大量人力进行精细化的规则编写和人工数据标注,试图弥补模型在韩语语境下的“水土不服”。
- 响应延迟严重:为了提升准确率被迫堆叠复杂的后处理逻辑,导致单条评论的分析耗时增加,无法满足大促期间高并发实时监控的需求。
使用 KoBERT 后
- 原生韩语理解精准:KoBERT 基于 500 万句韩语维基百科数据预训练,内置专为韩语优化的 SentencePiece 分词器,能精准捕捉细微的情感色彩和语境含义。
- 开发部署效率倍增:借助其提供的 PyTorch 接口和现成的 Naver 情感分析微调脚本,开发人员仅需少量标注数据即可快速训练出高精度模型,大幅缩短上线周期。
- 推理性能显著提升:模型参数量经过精简(约 92M),且支持 ONNX 格式加速推理,在同等硬件资源下吞吐量大幅提升,实现了毫秒级的实时情感判定。
KoBERT 通过提供原生的韩语语言理解能力,将原本繁琐低效的韩语 NLP 任务转化为开箱即用的高性能解决方案。
运行环境要求
- 未说明
- 训练环境需要 32 张 NVIDIA V100 GPU (配合 Horovod 和 InfiniBand)
- 推理/微调建议使用 GPU 加速(如 Colab GPU 运行时),具体型号和显存未明确限定,但需支持 PyTorch/MXNet
未说明

快速开始
KoBERT
韩语 BERT 预训练大小写模型 (KoBERT)
为什么?
- 谷歌 BERT base 多语言大小写模型在韩语上的性能局限性
训练环境
- 架构
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,
}
- 训练数据集
| 数据 | 句子 | 单词 |
|---|---|---|
| 韩语维基 | 5M | 54M |
- 训练环境
- V100 GPU x 32, Horovod(使用 InfiniBand)

- 词汇表
- 大小:8,002
- 基于韩语维基学习的分词器(SentencePiece)
- 参数量较少(92M < 110M)
要求
- 请参阅 requirements.txt
如何安装
将 KoBERT 安装为 Python 包
pip install git+https://git@github.com/SKTBrain/KoBERT.git@master如果您想修改源代码,请克隆此仓库
git clone https://github.com/SKTBrain/KoBERT.git cd KoBERT pip install -r requirements.txt
使用方法
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]']")
>>> # 最后一层编码
>>> 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() 命令将其切换到训练模式。
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))})
>>> # 最后一层编码
>>> 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]']")
>>> # 最后一层编码
>>> 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)>
分词器
- 预训练的 Sentencepiece 分词器
>>> from gluonnlp.data import SentencepieceTokenizer
>>> from kobert import get_tokenizer_path
>>> tok_path = get_tokenizer_path()
>>> sp = SentencepieceTokenizer(tok_path)
>>> sp('分享韩语模型。')
['▁한국', '어', '▁모델', '을', '▁공유', '합니다', '.']
任务微调
Naver 情感分析
| 模型 | 准确率 |
|---|---|
| BERT base 多语言大小写模型 | 0.875 |
| KoBERT | 0.901 |
| KoGPT2 | 0.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]
韩语句子BERT
| 模型 | 余弦相似度 (皮尔逊) | 余弦相似度 (斯皮尔曼) | 欧几里得距离 (皮尔逊) | 欧几里得距离 (斯皮尔曼) | 曼哈顿距离 (皮尔逊) | 曼哈顿距离 (斯皮尔曼) | 点积 (皮尔逊) | 点积 (斯皮尔曼) |
|---|---|---|---|---|---|---|---|---|
| NLl | 65.05 | 68.48 | 68.81 | 68.18 | 68.90 | 68.20 | 65.22 | 66.81 |
| STS | 80.42 | 79.64 | 77.93 | 77.43 | 77.92 | 77.44 | 76.56 | 75.83 |
| STS + NLI | 78.81 | 78.47 | 77.68 | 77.78 | 77.71 | 77.83 | 75.75 | 75.22 |
发布
- v0.2.4
- 更改为从Hugging Face Hub下载大文件
- v0.2.3
- 支持
onnx 1.8.0
- 支持
- v0.2.2
- 修复错误:
No module named 'kobert.utils'
- 修复错误:
- v0.2.1
- 修改导入语句
- v0.2
- 更改为从
aws s3下载大文件 - 更改函数名称
- 更改为从
- v0.1.2
- 修正transformers库的兼容性
- 修改填充标记的索引
- v0.1.1
- 将词汇表和分词器合并
- v0.1
- 初始模型发布
联系方式
有关KoBERT的问题,请在这里提交。
许可证
KoBERT根据Apache-2.0许可证公开。使用该模型和代码时,请遵守许可证条款。完整的许可证内容可在LICENSE文件中查看。
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。