BERTc-315M-MT
中文分词 + 词性标注 + 命名实体识别。基于 BERTc-315M 微调。
三任务联合微调。分词和实体走 CRF(序列约束强),词性走 softmax。词性只在词首字上有监督。
指标
| 指标 | 值 |
|---|---|
| joint score | 1.4712 |
| CWS F1 | 0.9840 |
| POS 准确率 | 0.9800 |
| NER F1 | 0.9660 |
训练
- 配方:5 epoch,batch 64,骨干 lr 2e-5 / 头 lr 5e-4,warmup 0.1,α_pos 2.0,β_ner 0.5,FGM ε 1.0
- 数据:PD-1998(人民日报 1998 年 1-6 月 PFR 标注),train 102,739 句(199801-199805)/ dev 21,143 句(199806)
用法
from mt_model import BERTcForMT
model = BERTcForMT.from_pretrained(".")
print(model.predict("中国科学院计算技术研究所在北京"))
# {'words': ['中国科学院计算技术研究所', '在', '北京'],
# 'pos': ['ni', 'p', 'ns'],
# 'ner': [{'type': 'Ni', 'start': 0, 'end': 12}, {'type': 'Ns', 'start': 13, 'end': 15}]}
评测口径
指标在 dev 集前 2000 句上测 —— 与训练时选 best.pt 的口径一致
(训练脚本 --dev_limit 2000)。全量 21,143 句上是
分词 0.9790 / 词性 0.9787 / 实体 0.9597 / joint 1.4646。
joint score = 分词 F1 + 0.3 × 词性准确率 + 0.2 × 实体 F1。
标签体系
- 分词:BIES
- 词性:LTP base1 的 27 个标签(PD-1998 的 43 个映射过来)
- 实体:BIES × {人名 Nh / 地名 Ns / 机构 Ni},PD 的 MISC 丢弃
词性代号可读性差(ns 地名 / ni 机构名 / nh 人名 / nd 方位词 /
nl 处所词 / wp 标点),BERTc 仓库的 save/cws.py 有个把它们翻成中文的
交互式脚本。
依赖
只需要 PyTorch 和 PieceTokenizer,没有别的。
| 模型定义 | 目录内的 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 |
骨干 + 三个任务头 |
mt_model.py |
推理入口 BERTcForMT |
crf.py |
线性链 CRF |
model.py |
骨干定义 |
tokenizer.py |
字级 tokenizer |
example_decode.py |
示例 |
许可
Apache-2.0。训练语料各自的许可见对应数据集卡。
- Downloads last month
- 96