ONNX 模型库
返回模型

说明文档


language: en license: apache-2.0 tags:

  • bert
  • token-classification
  • ner
  • pii
  • privacy
  • onnx
  • personal-information datasets:
  • custom metrics:
  • f1
  • precision
  • recall model-index:
  • name: bert-pii-onnx results: []

BERT PII 检测模型 (ONNX)

该模型是一个基于 BERT 的词元分类模型,经过微调用于检测文本中的个人身份信息 (PII)。模型以 ONNX 格式提供,可在不同平台上高效推理。

模型描述

  • 模型类型: 词元分类(命名实体识别)
  • 基础模型: bert-base-uncased (Google BERT)
  • 格式: ONNX
  • 语言: 英语
  • 许可证: Apache 2.0
  • 训练数据集: ai4privacy/pii-masking-300k

预期用途

该模型旨在识别和分类文本中各种类型的个人身份信息,包括但不限于:

支持的 PII 类别

该模型可检测 27 种不同类型的 PII 实体:

个人标识符

  • GIVENNAME1, GIVENNAME2 - 名字
  • LASTNAME1, LASTNAME2, LASTNAME3 - 姓氏
  • USERNAME - 用户名
  • TITLE - 个人头衔
  • SEX - 性别信息

联系方式

  • EMAIL - 电子邮件地址
  • TEL - 电话号码
  • IP - IP 地址

位置信息

  • STREET - 街道地址
  • CITY - 城市名称
  • STATE - 省/州名称
  • COUNTRY - 国家名称
  • POSTCODE - 邮政编码
  • BUILDING - 建筑物名称/编号
  • SECADDRESS - 次要地址
  • GEOCOORD - 地理坐标

身份证件

  • PASSPORT - 护照号码
  • IDCARD - 身份证号码
  • DRIVERLICENSE - 驾驶证号码
  • SOCIALNUMBER - 社会保障号码
  • PASS - 密码信息

时间信息

  • DATE - 日期信息
  • TIME - 时间信息
  • BOD - 出生日期

该模型使用 BIO(Begin-Inside-Outside)标注方案,其中:

  • B-[ENTITY] 标记实体的开始
  • I-[ENTITY] 标记实体的延续
  • O 标记非 PII 的词元

使用方法

依赖要求

pip install onnxruntime transformers tokenizers

Python 示例

import onnxruntime as ort
from transformers import AutoTokenizer
import numpy as np

# Load tokenizer
tokenizer = AutoTokenizer.from_pretrained("path/to/model")

# Load ONNX model
session = ort.InferenceSession("onnx/model.onnx")

# Prepare input text
text = "My name is John Smith and my email is john.smith@example.com"
inputs = tokenizer(text, return_tensors="np", padding=True, truncation=True)

# Run inference
outputs = session.run(
    None,
    {
        "input_ids": inputs["input_ids"].astype(np.int64),
        "attention_mask": inputs["attention_mask"].astype(np.int64),
        "token_type_ids": inputs["token_type_ids"].astype(np.int64)
    }
)

# Get predictions
logits = outputs[0]
predictions = np.argmax(logits, axis=-1)

# Map predictions to labels
id2label = {
    0: "B-BOD", 1: "B-BUILDING", 2: "B-CITY", 3: "B-COUNTRY",
    4: "B-DATE", 5: "B-DRIVERLICENSE", 6: "B-EMAIL", 7: "B-GEOCOORD",
    8: "B-GIVENNAME1", 9: "B-GIVENNAME2", 10: "B-IDCARD", 11: "B-IP",
    12: "B-LASTNAME1", 13: "B-LASTNAME2", 14: "B-LASTNAME3", 15: "B-PASS",
    16: "B-PASSPORT", 17: "B-POSTCODE", 18: "B-SECADDRESS", 19: "B-SEX",
    20: "B-SOCIALNUMBER", 21: "B-STATE", 22: "B-STREET", 23: "B-TEL",
    24: "B-TIME", 25: "B-TITLE", 26: "B-USERNAME", 27: "I-BOD",
    28: "I-BUILDING", 29: "I-CITY", 30: "I-COUNTRY", 31: "I-DATE",
    32: "I-DRIVERLICENSE", 33: "I-EMAIL", 34: "I-GEOCOORD", 35: "I-GIVENNAME1",
    36: "I-GIVENNAME2", 37: "I-IDCARD", 38: "I-IP", 39: "I-LASTNAME1",
    40: "I-LASTNAME2", 41: "I-LASTNAME3", 42: "I-PASS", 43: "I-PASSPORT",
    44: "I-POSTCODE", 45: "I-SECADDRESS", 46: "I-SEX", 47: "I-SOCIALNUMBER",
    48: "I-STATE", 49: "I-STREET", 50: "I-TEL", 51: "I-TIME",
    52: "I-TITLE", 53: "I-USERNAME", 54: "O"
}

# Decode predictions
tokens = tokenizer.convert_ids_to_tokens(inputs["input_ids"][0])
labels = [id2label[pred] for pred in predictions[0]]

for token, label in zip(tokens, labels):
    if token not in ["[CLS]", "[SEP]", "[PAD]"]:
        print(f"{token}: {label}")

JavaScript/Node.js 示例

const ort = require('onnxruntime-node');
const { AutoTokenizer } = require('@xenova/transformers');

async function detectPII(text) {
    // Load tokenizer
    const tokenizer = await AutoTokenizer.from_pretrained('path/to/model');
    
    // Load ONNX model
    const session = await ort.InferenceSession.create('onnx/model.onnx');
    
    // Tokenize input
    const inputs = await tokenizer(text, { 
        padding: true, 
        truncation: true, 
        return_tensors: 'ortvalue' 
    });
    
    // Run inference
    const outputs = await session.run(inputs);
    
    // Process outputs
    const logits = outputs.logits;
    // ... process predictions
}

模型架构

  • 架构: BertForTokenClassification
  • 隐藏层大小: 768
  • 中间层大小: 3072
  • 注意力头数: 12(BERT-base 的典型配置)
  • 隐藏层数: 12(BERT-base 的典型配置)
  • 激活函数: GELU
  • 最大序列长度: 512 词元
  • Dropout: 0.1
  • 标签数量: 55(54 个 PII 标签 + Outside)

训练详情

训练数据

该模型在 ai4privacy/pii-masking-300k 数据集上进行了微调:

  • 数据集: ai4privacy/pii-masking-300k
  • 规模: 300,000 个样本
  • 格式: 带有 PII 实体 BIO 标签的预标注文本
  • 许可证: 请查看数据集页面了解许可证详情

训练流程

  • 基础模型: bert-base-uncased (Google BERT)
  • 分词方式: WordPiece 分词,小写标准化
  • 最大序列长度: 128 词元(为效率优化)
  • 填充词元: [PAD] (ID: 0)
  • 未知词元: [UNK] (ID: 100)
  • CLS 词元: [CLS] (ID: 101)
  • SEP 词元: [SEP] (ID: 102)
  • Mask 词元: [MASK] (ID: 103)

训练超参数

  • 学习率: 2e-5
  • 批次大小: 16(每设备)
  • 训练轮数: 3
  • 权重衰减: 0.01
  • 优化器: AdamW(默认)
  • 训练平台: Kaggle GPU T4 x2
  • 训练时间: 约 1-2 小时

评估策略

  • 评估指标: SeqEval(NER 任务的标准指标)
  • 评估策略: 每轮训练后
  • 跟踪指标:
    • 精确率 (Precision)
    • 召回率 (Recall)
    • F1 分数
    • 准确率 (Accuracy)

评估

该模型应在适当的 PII 检测基准上使用标准 NER 指标(F1、精确率、召回率)对每种实体类型进行评估。

局限性与偏差

  • 模型性能可能因不同的文本领域和写作风格而异
  • 对于训练数据中代表性不足的国家/地区的 PII 格式,可能无法很好地泛化
  • 上下文相关的实体(如既是名字又是常见词的词)可能具有挑战性
  • 模型可能存在训练数据中的偏差
  • 在关键应用中,不应作为 PII 检测的唯一方法,需要人工审核

伦理考量

该模型旨在通过检测文本中的 PII 来帮助保护隐私。但是:

  • 模型并不完美,可能会遗漏某些 PII(假阴性)或错误地将非 PII 标记为 PII(假阳性)
  • 应作为综合隐私保护策略的一部分使用
  • 用户应了解适用的隐私法规(GDPR、CCPA 等)
  • 模型的使用应遵守所有相关法律法规
  • 请考虑在您的特定用例中自动 PII 检测的影响

ONNX Runtime 兼容性

该模型与 ONNX Runtime 兼容,可部署于:

  • CPU(针对推理优化)
  • GPU (CUDA)
  • 边缘设备
  • Web 浏览器(通过 ONNX.js)
  • 移动设备

文件结构

.
├── README.md                    # 本文件
├── config.json                  # 模型配置
├── tokenizer_config.json        # 分词器配置
├── tokenizer.json              # 快速分词器
├── vocab.txt                   # 词汇表文件
├── special_tokens_map.json     # 特殊词元映射
└── onnx/
    └── model.onnx              # ONNX 模型文件

引用

如果您在研究或应用中使用此模型,请引用:

@misc{bert-pii-onnx,
  title={BERT PII Detection Model (ONNX)},
  author={Your Name/Organization},
  year={2025},
  howpublished={\url{https://huggingface.co/your-username/bert-pii-onnx}}
}

基础模型引用

该模型基于 BERT。请同时引用原始 BERT 论文:

@article{devlin2018bert,
  title={BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding},
  author={Devlin, Jacob and Chang, Ming-Wei and Lee, Kenton and Toutanova, Kristina},
  journal={arXiv preprint arXiv:1810.04805},
  year={2018}
}

联系方式

如有关于此模型的问题、问题反馈或建议,请在模型仓库中提交 issue。

致谢

基础模型

该模型构建于 Google Research 开发的 BERT(Bidirectional Encoder Representations from Transformers) 之上:

数据集

该模型在 ai4privacy/pii-masking-300k 上训练:

  • 数据集: ai4privacy/pii-masking-300k
  • 创建者: Hugging Face 上的 ai4privacy 团队
  • 规模: 300,000 个带有 PII 标注的样本
  • 如果您使用此模型,请引用数据集创建者
@misc{ai4privacy-pii-dataset,
  title={PII Masking 300K Dataset},
  author={ai4privacy},
  year={2024},
  howpublished={\url{https://huggingface.co/datasets/ai4privacy/pii-masking-300k}}
}

技术

特别感谢

  • Hugging Face 团队提供的 Transformers 库和模型中心基础设施
  • ONNX 社区提供的标准化模型格式和运行时
  • 训练数据集的贡献者(如适用)

barflyman/bert-pii-detect-onnx

作者 barflyman

token-classification
↓ 1 ♥ 0

创建时间: 2025-11-18 01:49:53+00:00

更新时间: 2025-11-18 02:35:48+00:00

在 Hugging Face 上查看

文件 (10)

.DS_Store
.gitattributes
README.md
config.json
onnx/model.onnx ONNX
onnx/model_quantized.onnx ONNX
special_tokens_map.json
tokenizer.json
tokenizer_config.json
vocab.txt