Instructions to use eebyp/BypBERT-tiny-zh-v1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use eebyp/BypBERT-tiny-zh-v1 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("fill-mask", model="eebyp/BypBERT-tiny-zh-v1")# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForMaskedLM tokenizer = AutoTokenizer.from_pretrained("eebyp/BypBERT-tiny-zh-v1") model = AutoModelForMaskedLM.from_pretrained("eebyp/BypBERT-tiny-zh-v1", device_map="auto") - Notebooks
- Google Colab
- Kaggle
🧠 BypBERT-tiny-zh-v1
轻量级中文 BERT 预训练模型(8.7M 参数),基于中文维基百科 129 万句语料,采用掩码语言模型(MLM)策略训练。
📋 模型概览
| 属性 | 值 |
|---|---|
| 架构 | BERT(Encoder-only) |
| 参数量 | 8,689,032(≈ 8.7M) |
| 隐藏层维度 | 256 |
| 层数 | 4 |
| 注意力头数 | 4 |
| 前馈网络维度 | 1,024 |
| 词表大小 | 21,128(bert-base-chinese WordPiece) |
| 最大序列长度 | 128 |
| 预训练任务 | 掩码语言模型(MLM) |
| 训练语料 | 中文维基百科 1,287,957 句 |
| 训练步数 | 116,000 步(5 epochs,含续训) |
| 基础模型 | bert-base-chinese |
| 训练硬件 | NVIDIA Tesla T4(14.6 GB 显存)/ Google Colab Pro |
| 框架版本 | PyTorch / Transformers 5.17.0 |
🎯 适用场景
✅ 推荐使用
| 任务 | 说明 |
|---|---|
| 文本分类微调 | 情感分析、主题分类、意图识别等 |
| 命名实体识别(NER) | 人名、地名、机构名等实体标注 |
| 句向量提取 | 通过 [CLS] 向量计算句子相似度 |
| 语义检索 | 轻量级语义匹配与检索 |
| 端侧部署 | 8.7M 参数适合移动端/嵌入式设备 |
⚠️ 不推荐直接使用
- 知识问答/填空题:MLM 命中率 10%,事实记忆能力有限
- 生成式任务:Encoder-only 架构不支持文本生成
- 长文档建模:最大序列长度 128 tokens
📊 评估结果
评估框架
本模型采用五维度评估框架,从不同侧面全面检验模型能力:
| 维度 | 测试方法 | 衡量能力 | 学术依据 |
|---|---|---|---|
| 语言建模 | 困惑度(Perplexity) | 对中文语言模式的概率建模质量 | Jelinek, 1997 |
| 🎯 事实记忆 | MLM 遮空预测 | 精确回忆训练语料中的具体知识 | Devlin et al., 2019 |
| 🔍 语义区分 | 句子相似度对比 | 同类主题句子的向量是否更接近 | Reimers & Gurevych, 2019 |
| 语法理解 | 通顺/不通顺句判断 | 区分语法正确与错误的句子 | Linzen et al., 2016 |
| 🔄 上下文敏感 | 多义词向量对比 | 同一字在不同语境下的表示差异 | Ethayaraj, 2019 |
为什么需要多维度? 单一指标只能反映模型的一个侧面。困惑度低不代表能精确填空,MLM 命中率高也不代表语言理解好。多维度交叉验证才能全面判断模型"学到了什么"。
训练语料覆盖
训练语料 corpus.txt 共 1,287,972 行,覆盖中文维基百科多个主题领域:
| 语料位置 | 主题领域 |
|---|---|
| 1 ~ 10 万行 | 农业 |
| ~ 10 万行 | 美国政治(克林顿传记) |
| ~ 20 万行 | 语言学(罗常培、王力等) |
| ~ 30 万行 | 新世纪音乐 |
| ~ 50 万行 | 中国历史(漕运、南新仓) |
| ~ 70 万行 | 网络技术(I2P) |
| ~ 80 万行 | 光学(复消色差镜头) |
| ~ 90 万行 | 日本历史(德山藩) |
| ~ 100 万行 | 野生动物(短尾猫) |
| ~ 110 万行 | 科幻小说(艾西莫夫) |
| ~ 128 万行 | 体育(FIFA 世界杯) |
核心指标
📈 困惑度(Perplexity)
| 指标 | 值 | 基线 | 提升 |
|---|---|---|---|
| 困惑度 | 2.05 | 21,128(随机) | 10,315 倍 |
评估使用 8 段直接取自训练语料的文本,覆盖农业、政治、音乐、语言学、历史、野生动物、科幻、体育等主题。困惑度 2.05 属于优秀水平(< 100 为优秀)。
🎯 MLM 遮空预测(Top-5 命中率)
| 指标 | 值 |
|---|---|
| 命中率 | 1/10(10.0%) |
| 测试句数 | 10 句(均取自训练语料原文) |
⚠️ 重要澄清:MLM 命中率低 ≠ 模型没用
MLM 填空测试要求模型精确回忆具体事实(如"德山""TCP""罗常培"等专有名词),而下游任务(分类、NER、句向量)需要的是语言理解能力——两者是完全不同的能力维度。
模型虽然填不对空,但预测并非随机,已学会:
- ✅ 词性判断(知道 [MASK] 位置应填什么词性)
- ✅ 语义搭配(知道"征"后接名词,"第"后接数字)
- ✅ 语法结构(知道"的""性"等结构词的用法)
- ❌ 具体事实(不知道"征银""第七位""德山"等低频专有名词)
下游任务依赖的是前三项,而非最后一项。
| 下游任务 | 需要能力 | 是否需要事实记忆 | 本模型是否够用 |
|---|---|---|---|
| 文本分类 | 语言理解 | ❌ | ✅ 够用 |
| 命名实体识别 | 语言理解 | ✅ 够用 | |
| 句向量编码 | 语言理解 | ❌ | ✅ 够用 |
| 情感分析 | 语言理解 | ✅ 够用 | |
| 知识问答 | 事实记忆 | ✅ | ❌ 不够 |
📝 语法判断
| 指标 | 值 | 基线 |
|---|---|---|
| 准确率 | **80.0%**(4/5) | 50%(随机) |
模型能正确区分通顺句与词序打乱/完全倒序的不通顺句,说明已学会中文语序规则(主-谓-宾结构)。
🔍 语义区分
| 指标 | 值 |
|---|---|
| 同类主题平均相似度 | 0.8906 |
| 异类主题平均相似度 | 0.7841 |
| 差值 | 0.1065 |
同类主题句子对的 [CLS] 向量余弦相似度 consistently 高于异类主题,证明模型能捕捉主题语义信息。
🔄 上下文敏感性
| 指标 | 值 | 阈值 |
|---|---|---|
| "打"字多义平均相似度 | 0.7653 | < 0.99 |
"打"字在三个不同语境(打电话 / 打篮球 / 打字)中产生显著不同的向量表示,证明模型具备上下文相关的词表示能力——这正是 BERT 相对于传统词嵌入(如 Word2Vec)的核心优势。
训练进程
| 阶段 | 训练句数 | 步数 | 困惑度 | MLM 命中率 |
|---|---|---|---|---|
| Quick Test(1 万句) | 10,000 | 314 | 868.90 | 0/10 |
| Checkpoint-76000(75%) | 1,287,957 | 76,000 | 3.50 | 0/10 |
| Final(100%) | 1,287,957 | 116,000 | 2.05 | 1/10 |
Quick Test (10K 句) → 困惑度 868.90
Checkpoint-76000 (75%) → 困惑度 3.50 (↓ 248 倍,质变阶段)
Final (100%) → 困惑度 2.05 (↓ 1.7 倍,精调阶段)
快速使用
加载模型
from transformers import AutoModelForMaskedLM, AutoTokenizer
model = AutoModelForMaskedLM.from_pretrained("eebyp/BypBERT-tiny-zh-v1")
tokenizer = AutoTokenizer.from_pretrained("eebyp/BypBERT-tiny-zh-v1")
掩码语言模型(填空)
from transformers import pipeline
fill_mask = pipeline("fill-mask", model=model, tokenizer=tokenizer)
results = fill_mask("农业属于第[MASK]级产业。")
for r in results:
print(f"{r['token_str']}: {r['score']:.4f}")
# 输出: 一: 0.4394, 二: 0.3070, 三: 0.1294 ...
提取句向量
import torch
inputs = tokenizer("今天天气很好", return_tensors="pt")
outputs = model(**inputs, output_hidden_states=True)
cls_embedding = outputs.hidden_states[-1][0, 0, :] # [CLS] 向量,256 维
print(cls_embedding.shape) # torch.Size([256])
微调文本分类器
from transformers import BertForSequenceClassification
classifier = BertForSequenceClassification.from_pretrained(
"eebyp/BypBERT-tiny-zh-v1",
num_labels=10 # 根据你的任务调整
)
️ 局限性
| 局限 | 说明 | 建议 |
|---|---|---|
| 容量有限 | 8.7M 参数限制了事实记忆能力 | 在下游任务数据上微调 |
| 序列长度短 | 最大 128 tokens | 不适合长文档建模 |
| 仅 MLM 预训练 | 未使用 WWM 或 MacBERT 策略 | 关注后续版本(v2 WWM / v3 Mac) |
| 无下游基准测试 | 仅有内在评估指标 | 建议在具体任务上微调后评估 |
🔮 后续版本
| 版本 | 预训练策略 | 状态 |
|---|---|---|
| v1(当前) | 标准 MLM | ✅ 已发布 |
| v2 | 全词掩码(WWM) | 📋 计划中 |
| v3 | MacBERT 风格(MLM as Correction) | 📋 计划中 |
📖 引用
如果在研究中使用本模型,请引用:
@misc{bai2026bypbert,
title={BypBERT: A Series of Lightweight Chinese BERT Models},
author={Bai, Yiping},
year={2026},
publisher={Hugging Face},
howpublished={\url{https://huggingface.co/eebyp/BypBERT-tiny-zh-v1}}
}
👤 作者
- Yiping Bai(白毅平)
- ORCID:0009-0004-2842-8241
- Hugging Face:eebyp
- Downloads last month
- 30
Model tree for eebyp/BypBERT-tiny-zh-v1
Base model
google-bert/bert-base-chinese