w
weasonlee/SampurNER_Bengali_MuRIL
模型介绍
文件和版本
Pull Requests
讨论
分析

SampurNER Bengali MuRIL — Ascend NPU 适配

模型简介

SampurNER Bengali MuRIL 是一个在孟加拉语 SampurNER 数据集上微调 MuRIL-large-cased(BERT-large 架构:24 层、隐藏维度 1024、词表大小 197285)的**细粒度命名实体识别(NER)**模型。该模型基于 EaMaTa 框架(AAAI-2026)与 Few-NERD 标签体系构建,共包含 133 个 BIO 标签,覆盖 8 大粗类实体:人物、地点、组织、建筑、艺术、产品、事件、杂项。模型参数量为 505.0M,在测试集上 F1 得分为 68.26。

原始模型:prachuryyaIITG/SampurNER_Bengali_MuRIL(MIT 协议) 数据集:prachuryyaIITG/SampurNER 论文:SampurNER(AAAI-2026)

加载方式:使用标准 transformers API(AutoModelForTokenClassification + AutoTokenizer)即可,无需自定义代码。

环境要求

  • 昇腾 Ascend 910(本仓库已在 910 ×2 环境下验证,单卡即可完成推理)
  • Python 3.11
  • torch 2.9.0 + torch-npu 2.9.0.post1
  • transformers 4.57.6(注意 huggingface_hub 需低于 1.0 版本)

部署步骤

# 1. 克隆仓库
git clone https://gitcode.com/weasonlee/SampurNER_Bengali_MuRIL.git
cd SampurNER_Bengali_MuRIL

# 2. 安装依赖
pip install -r requirements.txt

# 3. 下载权重到 models/(已 .gitignore 排除;~2GB)
mkdir -p models
HF_ENDPOINT=https://hf-mirror.com python -c "
from huggingface_hub import snapshot_download
snapshot_download('prachuryyaIITG/SampurNER_Bengali_MuRIL', local_dir='models')"

# 4. 推理(NPU)
python inference.py --device npu
# 或 CPU
python inference.py --device cpu

推理示例

$ python inference.py --device npu
torch.npu.is_available() = True
torch.npu.device_count() = 2
[info] device = npu:0, torch = 2.9.0+cpu
[load] BertForTokenClassification (muril-large-cased): 505.0M params, 133 labels
[info] batch = 4 Bengali sentences, max_len = 17
[time] run 0: 16 ms
[time] avg: 16 ms (4 sentences)
[out ] sent0: entities = রবীন্দ্রনাথ(B-person-artist/author) ঠাকুর(I-person-artist/author) কলকাতায়(B-location-GPE)
[out ] sent1: entities = ঢাকা(B-organization-education) বিশ্ববিদ্যালয়(I-organization-education) বাংলাদেশের(B-location-GPE)

===== CPU vs NPU comparison (4 sentences, 133 labels) =====
cos_sim (logits)   = 0.99999607
max_abs_err        = 6.247e-02
mean_abs_err       = 4.012e-03
argmax agreement   = 100.00%

输入:4 条含丰富实体的孟加拉语新闻风格句子(人名、地名、机构名、河流/海湾等,如“রবীন্দ্রনাথ ঠাকুর কলকাতায় জন্মগ্রহণ করেন。”);CPU 与 NPU 输入 token 完全一致。模型正确识别“রবীন্দ্রনাথ ঠাকুর”为 person-artist/author、“কলকাতায়”为 location-GPE 等。

CPU 与 NPU 精度对比

指标值
cos_sim(token logits,133 类)0.99999607
max_abs_err6.247e-02
mean_abs_err4.012e-03
argmax 标签一致率100.00%
单次批量耗时(4 句,含同步,3 次均值)NPU ~16 ms vs CPU ~913 ms(~57× 加速)

结论:NPU(Ascend 910, torch-npu 2.9.0.post1)与 CPU 的 logits 一致性达 0.99999+(fp32 正常差异水平),全部 token 的 NER 标签预测完全一致(100%),适配成功。

仓库结构

├── inference.py        # 推理脚本(孟加拉语 NER + NPU/CPU 对比)
├── readme.md
├── requirements.txt
├── models/             # 权重目录(需自行下载,已 gitignore)
├── assets/             # 运行截图
│   ├── agent_workflow.png
│   ├── npu_device_call.png
│   └── model_result.png
└── results/            # 每次运行的 logits/标签/耗时产物(gitignore)

引用

Kaushik P. 等人著,《SampurNER:孟加拉语细粒度命名实体识别的综合基准》,AAAI-2026。