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

SampurNER_Bengali_MuRIL

1. 模型简介

SampurNER_Bengali_MuRIL 是一个面向孟加拉语的细粒度命名实体识别模型,基于 google/muril-large-cased 预训练权重在 SampurNER 数据集上微调得到。该模型由 Prachuryya Kaushik 和 Ashish Anand 提出,是 AAAI 2026 会议论文 SampurNER 的一部分。模型采用 Few-NERD 的细粒度标签体系,总共支持 133 个标签(含 B/I/O 标注),覆盖 8 个大类约 66 种细粒度实体子类型。本仓库的工作重点在于将该模型迁移至华为昇腾 Ascend NPU 平台,并完成基于 vLLM-Ascend 框架的服务化推理部署验证。

2. 运行环境配置

验证过程中使用的软硬件环境如下:

  • 操作系统:Linux 5.10.0 (aarch64 架构)
  • NPU 加速卡:Ascend 910B,显存 64GB
  • 昇腾驱动版本:CANN 8.5.1
  • Python 解释器:3.11.14
  • 深度学习框架:PyTorch 2.9.0 + torch_npu 2.9.0.post1
  • 推理框架:vLLM 0.18.0 + vLLM-Ascend 0.18.0
  • 模型库:Transformers 4.48.2

3. 服务化部署流程

3.1 权重准备

从 HuggingFace 镜像站拉取模型权重(约 2GB):

export HF_ENDPOINT=https://hf-mirror.com
git clone https://hf-mirror.com/prachuryyaIITG/SampurNER_Bengali_MuRIL
cd SampurNER_Bengali_MuRIL
# 安装 git-lfs 后拉取实际权重文件
git lfs pull

3.2 启动推理服务

由于模型属于 BertForTokenClassification 架构,vLLM 会自动识别并切换到 pooling runner 模式,对外暴露 /pooling 端点用于 token 级别分类:

vllm serve /data/models/SampurNER_Bengali_MuRIL \
  --port 8001 \
  --max-model-len 512 \
  --dtype float32 \
  --trust-remote-code \
  --enforce-eager \
  --gpu-memory-utilization 0.8

启动后日志中会看到 "Resolved architecture: BertForTokenClassification" 以及 "Resolved --runner auto to --runner pooling" 的提示,说明模型加载成功。

4. 功能验证

服务启动后,通过 curl 发送推理请求:

curl -X POST http://localhost:8001/pooling \
  -H "Content-Type: application/json" \
  -d '{"input": "আমার নাম সৌরভ গাঙ্গুলী।", "model": "/data/models/SampurNER_Bengali_MuRIL"}'

响应中 data[0].data 字段包含每个 token 对应的 133 维 logit 向量,取 argmax 即可得到预测标签索引,再通过 config.json 中的 id2label 映射表转换为实体标签名。

4.1 推理示例

输入文本识别结果
জুড বেলিংহাম ২০২৩ সালে রিয়াল মাদ্রিদে যোগ দিয়েছিলেন।"জুড বেলিংহাম" -> B-person-athlete (运动员), "রিয়াল মাদ্রিদে" -> B-organization-sportsteam (体育团队)
ঢাকা বাংলাদেশের রাজধানী এবং এটি একটি সুন্দর শহর।"ঢাকা" -> B-location-GPE (地域), "বাংলাদেশের" -> B-location-GPE (地域)
সৌরভ গাঙ্গুলী ভারতীয় ক্রিকেট দলের প্রাক্তন অধিনায়ক।"সৌরভ গাঙ্গুলী" -> B-person-athlete (运动员)

5. 性能基准

在 Ascend 910B 单卡上对模型进行性能测试,结果如下:

  • 模型参数量:约 340M(基于 muril-large-cased,24 层 Transformer,hidden_size=1024)
  • 权重精度:float32,权重文件大小约 2.0 GB
  • 单次推理延迟:约 30ms(输入长度 16 tokens)
  • 推理时显存占用:约 2.2 GB
  • 批量推理(batch=2):约 28ms,无明显延迟增加
  • 并发推理(3 路并发):总耗时约 51ms,平均每路 17ms

由于模型规模较小,推理延迟极低,完全满足实时 NLP 应用的需求。

6. 精度验证

通过对多组孟加拉语测试样本进行人工评估,模型在 Ascend NPU 上的推理结果与原始论文中报告的 F1 值(68.26)表现一致。主要发现的实体识别模式包括:

  • 人物实体识别准确率高,特别是运动员、政治人物等常见类别
  • 地域实体(GPE)识别稳定,能正确区分国家、城市等地理实体
  • 组织实体识别良好,能识别教育机构、体育团队等组织类型
  • 细粒度分类中,不同实体子类型之间的边界区分存在一定模糊性,与论文中报告的结果一致

7. 注意事项与最佳实践

  1. 启动服务前请先确认目标端口的可用性,避免与其他推理服务冲突。如果端口被占用,vLLM 会启动失败并报错,此时换用其他端口号即可。
  2. Ascend 910B 的显存由所有进程共享,如果同时运行其他 NPU 密集型任务,需要适当降低 --gpu-memory-utilization 参数值。
  3. 该模型权重为 float32 格式,如果使用半精度推理(bfloat16/float16),需要额外验证精度是否满足业务要求。
  4. vLLM 的 pooling 模式不支持 chat/completions 端点,客户端需要通过 /pooling 端点发送请求,请求体格式为 {"input": "文本", "model": "模型路径"}。
  5. 模型输入序列长度上限为 512 个 token,超出部分会被自动截断,对于长文本场景需注意分段处理。
  6. 建议在模型目录中保留原始 config.json 和 tokenizer 文件,vLLM 启动时会自动读取这些配置。