BERTc-165M

字级中文 Modern BERT,从零预训练。纯 PyTorch 实现,不依赖 transformers。

架构

  • 参数量 165M
  • 12L / 1024H / 2752I / 16 heads
  • ScaledSinusoidal 位置编码、GeGLU 前馈、LayerNorm 无 bias、输入输出词嵌入绑定
  • 全部 Linear 无 bias;Megatron 式初始化(残差支路 ×1/√2L)
  • 预训练用 flex_attention 做跨文档隔离,微调走 SDPA

下游表现

任务 结果
PD-1998 分词 / 词性 / 实体(联合微调) score 1.4689(CWS 0.9836 / POS 0.9753 / NER 0.9632)
SIGHAN-15 拼写纠错 SIGHAN-15 句级 F1 0.8333

首个在 165M 规模同时拿到 MT / CSC SOTA 的 Modern BERTc 骨干。

用法

import json, torch
from safetensors.torch import load_file
from model import ModernBertConfig, ModernBertForMLM
from tokenizer import PieceCharTokenizer

cfg = ModernBertConfig.from_dict(json.load(open("config.json")))
model = ModernBertForMLM(cfg)
model.load_state_dict(load_file("model.safetensors"), strict=True)
model.eval()

tok = PieceCharTokenizer(".")
ids = torch.tensor([tok.encode("北京是中国的首都")])
ids[0, 2] = tok.mask_token_id
print(tok.id_to_char(int(model(ids)["logits"][0, 2].argmax())))

依赖

只需要 PyTorchPieceTokenizer,没有别的。

模型定义 目录内的 model.py(纯 torch,不 import transformers)
权重读取 目录内的 checkpoint.py(85 行 safetensors 读取,不需要 safetensors 库)
分词器 PieceTokenizer,提供字级切分和词表
pip install torch
pip install git+https://github.com/Ismantic/PieceTokenizer

目录是自包含的:进到目录里直接 python example_*.py 就能跑,不依赖目录外的 任何文件。

Tokenizer

字级 SentencePiece,BERTc-Tokenizer.pt,词表 12536(pad=12531,mask=12535)。必须用 dict="no" 加载(字模式,不挂分词词典)——挂了词典编码结果会跟训练时不一致,而且不报错。

pip install git+https://github.com/Ismantic/PieceTokenizer

文件

文件 说明
model.safetensors 权重
config.json 架构配置
model.py 模型定义(纯 PyTorch,无 transformers 依赖)
BERTc-Tokenizer.pt 词表(与 PieceTokenizer 仓库里那份相同)
tokenizer.py 字级 tokenizer 封装
example_load.py 加载 + 掩码预测示例

许可

Apache-2.0。训练语料各自的许可见对应数据集卡。

Downloads last month
100
Safetensors
Model size
0.2B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support