🍹 Insight Daily 🪺
Aitrainee | 公众号:AI进修生
Hi,这里是Aitrainee,欢迎阅读本期新文章。
如果你正在寻找保护个人可识别信息(PII)的解决方案,那么可以看看这个只有2.8亿小型编码器的开源模型,名为 Piranha v1。这个模型专注于 PII 检测,仅此而已。该模型支持六种语言,检测精度接近完美,并且以 MIT 许可证发布。
在构建AI和机器学习模型时,企业往往需要大量数据进行训练,而这些数据可能包含大量PII。Piranha v1 可以用于数据集清理,在将数据用于机器学习训练之前,清除或遮蔽所有敏感信息,确保数据合规并符合隐私保护标准。
在客户服务业务中,企业往往通过电话、邮件或在线聊天与客户互动,客户在交谈过程中可能会泄露敏感信息。Piranha v1 可以嵌入到客户服务系统中,实时检测并遮蔽客户或客服在对话中提到的个人信息,确保这些信息不会被记录到日志或历史记录中。
我们将在本地的 Notebook 环境中安装它,然后看看它的运行效果。在这之前。
这个模型能够检测17种个人可识别信息,支持六种语言,标记检测率为 98.27%,非常惊人。这意味着它的精度超过98%,即98%被分类为PII的标记实际上确实是PII。另外,它的召回率也是98.27%,这意味着它能正确识别98.27%的PII标记。第三,它的特异性为99.84%,这意味着它能正确识别99.84%的非PII标记。
Piranha 模型尤其擅长检测密码、电子邮件、电话号码和用户名,准确率达到100%。该模型是微软 mdta V3 基础模型的精调版本,能够处理256个 Deberta 标记的上下文长度。如果文本超过这个长度,你可以将其拆分。
支持的语言包括英语、西班牙语、法语、德语、意大利语和荷兰语。支持的 PII 类型包括账户号码、楼号、城市、信用卡号码、出生日期、驾驶证、电子邮件、名字、姓氏、身份证号、密码、社会安全号码、街道地址、税号、电话号码、用户名和邮政编码。它们还在模型卡中分享了一些基准测试信息。
现在让我们尝试在本地安装这个模型。首先创建一个虚拟环境,命名为 PII。
虚拟环境已经创建完成,接下来我们安装 torch 和 Transformers。
安装完成后,启动 Jupyter Notebook,在浏览器环境中运行模型。
Notebook 已经启动。
让我粘贴代码,代码(官方的)非常简单,主要是导入我们刚才安装的库:torch 和 Transformers,指定模型名称和分词器,
!pip install transformers
!pip install transformers
import torch
from transformers import AutoTokenizer, AutoModelForTokenClassification
model_name = "iiiorg/piiranha-v1-detect-personal-information"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForTokenClassification.from_pretrained(model_name)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
def mask_pii(text, aggregate_redaction=True):
# Tokenize input text
inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True)
inputs = {k: v.to(device) for k, v in inputs.items()}
# Get the model predictions
with torch.no_grad():
outputs = model(**inputs)
# Get the predicted labels
predictions = torch.argmax(outputs.logits, dim=-1)
# Convert token predictions to word predictions
encoded_inputs = tokenizer.encode_plus(text, return_offsets_mapping=True, add_special_tokens=True)
offset_mapping = encoded_inputs['offset_mapping']
masked_text = list(text)
is_redacting = False
redaction_start = 0
current_pii_type = ''
for i, (start, end) in enumerate(offset_mapping):
if start == end: # Special token
continue
label = predictions[0][i].item()
if label != model.config.label2id['O']: # Non-O label
pii_type = model.config.id2label[label]
if not is_redacting:
is_redacting = True
redaction_start = start
current_pii_type = pii_type
elif not aggregate_redaction and pii_type != current_pii_type:
# End current redaction and start a new one
apply_redaction(masked_text, redaction_start, start, current_pii_type, aggregate_redaction)
redaction_start = start
current_pii_type = pii_type
else:
if is_redacting:
apply_redaction(masked_text, redaction_start, end, current_pii_type, aggregate_redaction)
is_redacting = False
# Handle case where PII is at the end of the text
if is_redacting:
apply_redaction(masked_text, redaction_start, len(masked_text), current_pii_type, aggregate_redaction)
return ''.join(masked_text)
def apply_redaction(masked_text, start, end, pii_type, aggregate_redaction):
for j in range(start, end):
masked_text[j] = ''
if aggregate_redaction:
masked_text[start] = '[redacted]'
else:
masked_text[start] = f'[{pii_type}]'
运行代码,模型下载完成了。模型非常小,只有大约1.1GB。现在我们看看如何使用它。
我们测试的文本中指定了名字、地址和电话号码,所有这些都是个人可识别信息。
模型有两种方式处理:一种是聚合遮蔽,另一种是详细遮蔽,后者会告诉你具体遮蔽了哪些PII。
运行代码后,结果非常快,模型已经遮蔽了名字、地址和电话号码。在详细遮蔽中,它告诉我们遮蔽的具体内容,如名字、姓氏、楼号、城市、街道和电话号码。
让我们再试一个例子。这段文本提到了 Dr. Emily J. Chen 的工作地址及其他一些信息,如电子邮件和电话号码。运行后,模型很快遮蔽了所有PII,地址的具体公寓号没有遮蔽,因为它不重要,但其他信息都被遮蔽了。
详细遮蔽告诉我们哪些具体内容被遮蔽,如电子邮件、电话号码等,非常智能。
现在我们给模型一个更具挑战性的任务。这段文本提到 "John Smith 是 John Mayer 的大粉丝",John Smith 是素人,而 John Mayer 是公众人物,模型需要区分两者。运行后,模型正确地遮蔽了 John Smith 的信息,而没有遮蔽 John Mayer 的信息,非常令人印象深刻。
总的来说,这款模型非常令人惊艳,特别适用于网络安全场景。
🌟希望这篇文章对你有帮助,感谢阅读!如果你喜欢这系列文章请以 点赞 / 分享 / 在看 的方式告诉我,以便我用来评估创作方向。
[2] huggingface:https://huggingface.co/iiiorg/piiranha-v1-detect-personal-information
知音难求,自我修炼亦艰
抓住前沿技术的机遇,与我们一起成为创新的超级个体
(把握AIGC时代的个人力量)
点这里👇关注我,记得标星哦~