OpenAI 发布了 Privacy Filter — 一个用于隐藏文本中 PII 的模型。防御者使用它以防止数据泄露。
但每种防御都有另一面。攻击者也需要 PII。来自日志、转储、废弃的 S3 存储桶、被窃取的收件箱。相同的任务:在一堆文本中找到所有个人信息。
Privacy Filter 遮盖。Privacy Parser 提取。
相同的模型、相同的标签分类法、相同的权重。你得到的不是 <REDACTED>,而是结构化的跨度——什么内容、什么位置、什么类型。
防御:在数据泄露前进行审计。 攻击:在数据泄露后解析他人的数据。
这个工具不知道自己站在哪一边。它只是一个好的解析器。
uv venv
uv pip install -e ./privacy-filter
uv pip install -e ./pii_parser
首次运行会下载 opf 1.5B 检查点(约 3 GB)到 ~/.opf/privacy_filter/。
from pii_parser.hybrid import HybridPIIParser
parser = HybridPIIParser(device="cpu")
result = parser.parse(
"Hi Quindle Testwick ([email protected] / +1-415-555-0102), "
"account 40702810500001234567, 14 Beautiful Ct, Anytown USA, "
"password Priv4cy-Filt3r-2026."
)
for s in result.spans:
print(f"{s.label:18} {s.text}")
private_person Quindle Testwick
private_email [email protected]
private_phone +1-415-555-0102
account_number 40702810500001234567
private_address 14 Beautiful Ct, Anytown USA
secret Priv4cy-Filt3r-2026
python -m pii_parser.cli_model "Alice paid 40702810500001234567 on 2026-05-17."
混合 = 模型 + 跨度合并 + 正则表达式后备。推荐使用这个。
opf v2 分类法 — 8 个类别:
private_person · private_email · private_phone · private_address ·
private_url · private_date · account_number · secret
text
↓
opf 1.5B → BIOES logits → Viterbi (tuned) → char spans
↓
span-merge (合并 Quindle + Testwick)
↓
regex backstop (URL, secret, account — 模型遗漏的地方)
↓
spans[]
python pii_parser/tests/test_hybrid.py
Fixture F1: 0.929
Scenarios: 8/8 passed
Latency: ~600 ms CPU
Apache-2.0.
| Backend | Weights | Speed | F1 |
|---|
PIIParser | 无 | µs | 1.000 |
ModelPIIParser | 1.5B | 500 毫秒 CPU | 0.733 |
HybridPIIParser | 1.5B | 600 毫秒 CPU | 0.929 |