AWS发布模型无关的PII检测器,用提示词替代重训练
该检测器把要识别的PII类型写进系统提示词而非代码,可在Amazon Bedrock或自托管GPU上运行;在五个公开语料、49,365 条记录上评测,Core F1介于 74.9% 到 83.1%。
AI解读:AWS机器学习团队发布了名为pii-detector的示例包(仓库sample-llm-pii-detection),做的是从训练语料和业务文本里找出姓名、地址、邮箱、电话、身份证号、银行账号、生日等个人信息。它不再训练一个固定标签体系的分类模型,而是把待识别实体类型、输出格式写成指令交给大模型。
实际好处很直接:要新增一类实体,比如员工工号或加密钱包地址,改一行提示词即可,不用重新标注数据和训练模型;换模型也是一行代码。后端可以是Amazon Bedrock的托管模型,也可以是自己在Amazon EC2上用GPU部署的开源模型,方便不能连外网的环境。
评测覆盖 5 个公开数据集、49,365 条记录、222,114 个标注片段、8 种语言。在 12 类通用实体上,Mistral Large 3的Core F1最高为 83.1%,OSS-GPT 20B自托管为 81.6%,OpenAI PrivacyFilter为 80.7%。延迟差别很大:OSS-GPT 20B约 1.2 秒,Qwen3.6-27B约 12.8 秒。
扩展实体测试更能说明问题:把各数据集特有的类别定义加进提示词后,扩展实体F1从约 9%–17% 升到 72%–80%,核心F1不降反略升。这说明固定标签体系的检测器换领域要重训练,而提示词方案改的是配置。
限制也没有藏着:日期类实体所有模型都只有约 50% F1,因为边界和格式本身模糊;延迟基准是把并行处理的墙上时间折算回单条记录,属于指示性数据;真实的效果仍取决于你选哪个模型和怎么定义实体。
AWS机器学习团队发布了一个可配置、与模型无关的PII检测器,代码以pii-detector包的形式放在sample-llm-pii-detection仓库中。检测逻辑写在系统提示词里,而不是固化在模型标签体系里。
该检测器在五个公开PII语料上评测,共 49,365 条记录,与包括OpenAI PrivacyFilter在内的九个基于大模型的检测器逐片段对比。
检测器怎么工作:提示词定义实体,后端可插拔
检测器把语言模型当作可配置、可替换的组件。输入文本被包进指令中,指令定义要检测的PII实体和输出格式;模型返回一个结构化列表,每个对象带有实体类型和找到的文本值。
两个设计让它不绑定具体模型:一是指令驱动检测,检测逻辑完全在指令和一个薄的解析层里;二是后端可配置,模型通过统一的推理接口Inferencer访问,包内自带Amazon Bedrock适配器(pii_detector/bedrock_inferencer.py),是对Converse API的薄封装。同一接口也能接自托管开源模型的自定义适配器,例如在自有GPU基础设施上提供OSS-GPT 20B,覆盖无法访问Amazon Bedrock的安全或气隙环境。
自定义来自两个独立组件:模型决定准确率、延迟和成本;实体集定义什么算PII。要扩展实体集,加一条域内标识符或删掉不需要的类别,改一行指令即可,不用重新训练,也不用重新部署。
- 模型的输出是JSON列表,只含实体类型和文本值;字符偏移量在后续处理中恢复,因为大模型无法可靠给出偏移。
- 后处理分三步:解析JSON;用正则表达式在原文中定位每段值以计算精确字符偏移;把模型给出的近似标签(如把DATE写成DATES、把EMAIL写成CONTACT_INFO)按形态和别名表收回提示词自身的标签体系,映射不上的标为UNK而不是强行归类。
运行方式与依赖
要跑通检测器,需要Python 3.11或更高版本、一个能调用Amazon Bedrock Converse API的AWS账号并在Amazon Bedrock控制台中启用所选模型的访问权限,以及唯一运行时依赖boto3。
凭证通过标准AWS凭证链解析,可设置AWS_PROFILE或使用IAM角色、SSO配置文件,并设置AWS_REGION。示例假设你已克隆仓库并从根目录操作。
- 创建虚拟环境并安装boto3,设置PYTHONPATH使pii_detector模块可解析;运行python -m examples.detect执行仓库自带的示例,缺少凭证或模型权限时会提前失败并给出提示。
- 调用时用BedrockInferencer指定任意Amazon Bedrock Converse模型ID或推理配置文件ID,再传给PiiDetector;例如model_id="openai.gpt-oss-20b-1:0",region="us-east-1"。换模型只需改这一行,检测器和调用代码不变。
- Amazon Bedrock是无服务器的,没有基础设施要拆除,按token付费;清理时停用虚拟环境即可,如不再使用可在控制台关闭已启用的模型访问。若自托管后端,需要自己关闭主机。
基准测试:Core F1 74.9% 到 83.1%,日期是共同短板
评测使用Hugging Face上五个带标注片段的公开PII语料,每个数据集采样约 1 万条,合计 49,365 条记录、222,114 个核心真值片段,覆盖德语、英语、西班牙语、法语、印地语、意大利语、荷兰语和泰卢固语八种语言,域范围从多语言合成档案到英语人力资源和客服文档。
预测片段与真值按精确的 (start, end, label) 重叠匹配(IoU = 1.0),用精确率、召回率和F1打分。由于各检测器和数据集标签体系不同,所有原始标签统一映射到 12 个通用实体的规范分类上:NAME、ADDRESS、CONTACT_INFO、DATE、AGE、SSN、FINANCIAL、IP_ADDRESS、URL、USERNAME、PASSWORD、ID_NUMBER。每个检测器只在与数据集双方都声明支持的标签范围交集上打分,避免因未声称支持的类别被扣分。
- 9 个检测器的Core F1与单条检测延迟:Mistral Large 3(Bedrock)83.1%,1.16 秒;OSS-GPT 120B(Bedrock)79.4%,3.91 秒;Nova Lite 2(Bedrock)74.9%,0.77 秒;PrivacyFilter(EC2 g4dn.xlarge)80.7%,2.15 秒;OSS-GPT 20B(EC2 g5.12xlarge)81.6%,1.17 秒;Qwen3.6-27B(EC2 g5.12xlarge)79.5%,12.79 秒;Gemma-4-E4B-it(EC2 g5.xlarge)79.4%,0.43 秒;Qwen3.6-35B-A3B(EC2 g5.12xlarge)79.4%,5.59 秒;Qwen3.5-9B(EC2 g5.12xlarge)76.4%,15.31 秒。
- 延迟由模型决定而非参数量:OSS-GPT 20B在Amazon EC2上约 1.2 秒,参数规模接近的Qwen3.6-27B约 12.8 秒,推理时的冗长程度和架构比原始规模影响更大。
- 后端是可自由选择的:OSS-GPT 20B在Amazon EC2得 81.6%,在Amazon Bedrock得 81.3%,只差 0.3 个百分点。
- 在ai4privacy_500k的细分结果中,OSS-GPT 20B在全部八种语言上Core F1保持在 83%–90% 的窄区间,包括非拉丁字母的印地语和泰卢固语;在SSN、金融和身份证号这三类高风险标识上均超过 95%。共同弱点是DATE,约 50%,因为片段边界和格式本身存在歧义。
- 说明:检测实际是并行多线程处理多条记录,单条延迟是把总墙上时间折算回单条记录的估算值,属指示性而非严格的单次调用测量。
自定义扩展:加几行定义,扩展实体F1从约 10% 升到 70% 以上
第二个杠杆是检测哪些实体,完全由指令定义。各数据集都标注了自己的核心之外类别:nemotron和gretel标注职业、职位和公司名;isotonic标注加密钱包(比特币和以太坊)地址、车辆标识符和User-Agent字符串;ai4privacy_500k标注性别和机构名。
按基础配置运行的检测器对这些类别毫无概念,得分接近零。恢复它们不需要新模型、不需要重训练,只改指令:这就是Ext配置,把各数据集的额外类别定义和少量示例加进提示词,同时删除会与之冲突的do-not-flag行,例如当公司名成为目标后,把“business addresses”从公开清单里去掉。
- 扩展实体F1从基础到Ext:Qwen3.6-35B-A3B 9.4% ▸ 80.5%(核心F1 79.4% ▸ 83.5%);OSS-GPT 20B 12.1% ▸ 73.3%(核心 81.6% ▸ 83.1%);Mistral Large 3 17.3% ▸ 72.7%(核心 83.1% ▸ 89.1%);Gemma-4-E4B-it 12.5% ▸ 72.5%(核心 79.4% ▸ 83.8%)。
- 扩展实体F1提升约六倍,核心F1同步不变或略升;该效果在所有测试模型上都成立,而固定范围的标注模型要覆盖这些类别必须重新训练。
- 同一杠杆可推广到全新实体类型:为特定领域新增定义和示例写进提示词即可,没有要微调的模型,也没有要重新部署的流水线。