库名称:transformers
标签:[标记分类, 命名实体识别, deberta, 隐私, PII检测]
DeBERTa实现的PII检测模型卡

该模型是基于microsoft/deberta
微调的命名实体识别(NER)模型,专门用于检测个人身份信息(PII)实体,如姓名、社保号码、电话号码、信用卡号、地址等。
模型详情
模型描述
该基于Transformer的模型在自定义数据集上微调,用于检测敏感信息(通常归类为PII)。模型通过标记级分类进行序列标注以识别实体。
- 开发者: [Privatone]
- 微调自模型:
microsoft/deberta
- 模型类型: 标记分类(NER)
- 语言: 英语
- 用例: 文本中的PII检测
训练详情
训练数据
模型在包含以下PII实体类型标注示例的自定义数据集上微调:
- 姓名
- 社保号码
- 电话号码
- 信用卡号
- 银行账号
- 银行路由号码
- 地址
训练周期日志
周期 |
训练损失 |
验证损失 |
精确率 |
召回率 |
F1值 |
准确率 |
1 |
0.3672 |
0.1987 |
0.7806 |
0.8114 |
0.7957 |
0.9534 |
2 |
0.1149 |
0.1011 |
0.9161 |
0.9772 |
0.9457 |
0.9797 |
3 |
0.0795 |
0.0889 |
0.9264 |
0.9825 |
0.9536 |
0.9813 |
4 |
0.0708 |
0.0880 |
0.9242 |
0.9842 |
0.9533 |
0.9806 |
5 |
0.0626 |
0.0858 |
0.9235 |
0.9851 |
0.9533 |
0.9806 |
SeqEval分类报告
标签 |
精确率 |
召回率 |
F1值 |
支持数 |
地址 |
0.91 |
0.94 |
0.92 |
77 |
银行账号 |
0.91 |
0.99 |
0.95 |
169 |
银行路由号码 |
0.85 |
0.96 |
0.90 |
104 |
信用卡号 |
0.95 |
1.00 |
0.97 |
228 |
姓名 |
0.98 |
0.97 |
0.97 |
164 |
电话号码 |
0.94 |
0.99 |
0.96 |
308 |
社保号码 |
0.87 |
1.00 |
0.93 |
90 |
摘要
- 微平均: 0.95
- 宏平均: 0.95
- 加权平均: 0.95
评估
测试数据
评估在相同标注数据集的保留部分上进行。
指标
- 精确率
- 召回率
- F1值(通过seqeval计算)
- 按实体分类的详细结果
- 标记级准确率
结果
- 大多数标签的F1值持续高于0.95,显示PII检测的稳健性。
建议
- 在高风险环境中使用人工审核。
- 部署前在您自己的领域特定数据上进行评估。
如何开始使用该模型
from transformers import AutoTokenizer, AutoModelForTokenClassification
from transformers import pipeline
model_name = "AI-Enthusiast11/pii-entity-extractor"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForTokenClassification.from_pretrained(model_name)
def merge_tokens(ner_results):
entities = {}
for entity in ner_results:
entity_type = entity["entity_group"]
entity_value = entity["word"].replace("##", "")
if entity_type not in entities:
entities[entity_type] = []
if entities[entity_type] and not entity_value.startswith(" "):
entities[entity_type][-1] += entity_value
else:
entities[entity_type].append(entity_value)
return entities
def redact_text_with_labels(text):
ner_results = nlp(text)
cleaned_entities = merge_tokens(ner_results)
redacted_text = text
for entity_type, values in cleaned_entities.items():
for value in values:
redacted_text = redacted_text.replace(value, f"[{entity_type}]")
return redacted_text
nlp = pipeline("ner", model=model_name, tokenizer=tokenizer, aggregation_strategy="simple")
example = "嗨,我是Mia Thompson。我最近注意到我的电费账单在上周付款后仍未更新。我使用了账号4893172051,关联的路由号码是192847561。我的服务几乎被暂停,如果您能核实付款情况,我将不胜感激。如需更多信息,请致电727-814-3902联系我。"
ner_results = nlp(example)
cleaned_entities = merge_tokens(ner_results)
print("\n==NER结果:==\n")
for entity_type, values in cleaned_entities.items():
print(f" {entity_type}: {', '.join(values)}")
redacted_example = redact_text_with_labels(example)
print(f"\n==替换后的示例:==\n{redacted_example}")