【免费下载链接】rizzo-piiLocal-first privacy guard: anonymize your documents before sharing with LLMs.项目地址https://gitcode.com/gh_mirrors/ri/rizzo-pii点击查看免费下载做本地隐私保护的 rizzo-pii 把它的 PII 检测模型训练配方完整公开了用 mmBERT 微调一个约 0.3B 参数的 token 分类模型在 74.5 万行多语言数据上单卡 16GB 显卡跑两小时左右就能完成。本文带你拆解这套训练配方——数据怎么拼、有哪些关键坑、超参数怎么定、最终能到什么精度。模型定位先搞清楚 rizzo-pii 在解决什么问题rizzo-pii 的定位是「本地优先」的隐私保护工具把合同、法律文书里的 22 类个人数据姓名、税号、IBAN 等替换成本地可逆的占位符如[FULLNAME_1]、[CF_1]再把干净的文本交给云端大模型处理敏感数据全程不出本机。它的核心就是一个小型 PII 检测模型——约 0.3B 参数、CPU 上 0.5GB 内存即可推理、完全离线。对意大利用户尤其有价值的是它覆盖了其他开源模型都不认识的 5 个本地特有标签税号CF、增值税号PIVA、地籍数据CATASTO、文书编号DOCID和省代码PROVINCE。这些标签在公开语料里根本没有标注数据全部靠合成生成——这正是训练配方的第一个看点。数据配方74.5万行是怎么拼出来的完整构成见 docs/DATASET.md。历史训练池共744,912 行约 74.5 万行 7,000 行纯意大利语验证集由四个来源拼成来源行数占比作用Ai4Privacy 多语言真实数据464,12462.3%8 种语言的真实文本 PII 标签多语言能力的基础模板合成意大利法律文书200,00026.8%覆盖 CF/PIVA/CATASTO 等意大利法律标签Augment 注入真实句子40,0005.4%把合成实体注入真实意大利语句防模板过拟合DeepMountFaker 意大利语40,7885.5%给 IBAN/ORG/AMOUNT/TARGA 提供自然上下文其中意大利语被刻意强化到约 45%但整体保持 8 语言多语言训练。合成数据的核心原则是LLM 做作者代码做标注器大模型只写带{SLOT}占位符的法律文书由代码注入带数学有效校验和的 CF/PIVA/IBAN标签位置天然精确LLM 从不接触真实个人数据。相关脚本在 src/data_pipeline/ 目录下核心是 generate_synthetic_pii.py 和 augment_real_pii.py。训练配方一subword 标签传播——修掉 F10 的关键坑这是整个配方里最隐蔽、也最有价值的一处改动完整推理见 docs/TRAINING.md。问题分词器会把长编码拆成多个 subword——例如税号MNTCRL58D07H163B拆成 13 个 subword、IBAN 拆成 26 个。而旧版本只给第一个subword 打标签其余位置被排除在 loss 之外从来没有被训练过但推理时模型仍会读取这些位置于是随机输出把整个实体切成碎片C.F. RCCMRT60T58H703I - CF:RCC CF:M ID_DOC:RT60T58H7 TARGA:I实测后果验证集上CF、PIVA、IBAN的 F1 全部是0.000而单单词的FULLNAME高达 0.987——同样的数据差距只在于那个词被拆成几个 subword。修法开启 LABEL_ALL_SUBWORDS默认True让内部 subword 继承B-X → I-X的延续标签保证推理读取的每个位置都有监督同时确保每个B-X类都补上对应的I-X类否则内部 subword 会静默落回O等于教会模型税号里面什么都没有。训练配方二为什么不能只看 loss 曲线另一个反直觉的教训超过 90% 的 token 是O非敏感所以 loss 被容易的类主导——它可以一路平稳下降而稀有标签纹丝不动。上面的 subword bug 就是这样穿过了一整轮训练loss 从 0.0135 平滑降到 0.0060三个标签却钉死在 0。所以配方做了三件事每次 eval 都计算entity-level P/R/F1而非只在训练结束时算一次实现见 compute_metrics模型选择指标用f1_macro而非 loss——某个稀有标签一坏它立刻崩塌而 loss 毫无察觉重点盯防 5 个关键标签WATCH_TAGSCF、PIVA、IBAN、ZIPCODE、ID_DOC见 WATCH_TAGS若它们仍为 0说明标签传播没生效。关键超参数与硬件单卡 16GB 两小时跑通参考环境是一台RTX 5060 Ti16GBBlackwell需 PyTorch cu128 构建一轮完整训练不到2 小时约 26,600 个优化器步。核心参数都集中在 src/training/train_pii.py 顶部参数值说明MAX_LEN768L77mmBERT 原生支持 8192 上下文用 512 会截断约 30% 的合成数据EPOCHS2L80v1.2.0 结束时验证 loss 还在下降加到 2 轮BATCH×GRAD_ACCUM14 × 2L8416GB 显卡与桌面共享 VRAM小 batch 梯度累积防 thrashingLR5e-5L90AdamWwarmup 0.05bf16 精度评估/保存每 2000 步L488保存最近 2 个 checkpoint early stoppingpatience316GB 显存调优的两个小技巧值得记录expandable_segments:True的显存分配策略以及按长度分组的 batching长度预计算避免惰性数据集重复分词。训练结果loss 曲线与指标v1.2.0 的参考 run单轮、约 26.6k 步中训练 loss 从 ≈6.2 快速降到 0.1 以下后进入平稳低位验证 loss 单调下降且结束时仍在下降——说明没有过拟合还有余力在 7,000 行纯意大利语真实验证集上micro-F1 0.989、token 准确率 0.998、macro-F1 0.9875 个意大利法律标识符全部拿到满分 1.000。后续版本把数据池扩展到约 218 万行并持续修正后22 个标签中 21 个 F1 达到 ≥0.9998最大验证集 micro-F1 从 0.7778 提升到 0.9999详见 docs/releases/v2.0.0.md。如何复现训练以及如何直接使用模型复现训练只需三步按 README.md 的 Quickstart 生成数据数据脚本全部在 src/data_pipeline/然后启动训练python src/training/train_pii.py --type full先用--type subset做约 3 分钟的冒烟测试也是官方推荐流程。完整 run 结束后模型会自动发布到 Hugging Face 的独立版本分支如v1.3.0而非main避免未经验证的 run 覆盖用户正在使用的模型——版本号在 MODEL_VERSION 处维护。对只想使用模型的用户则完全不需要 GPU 和数据集下载约 1.2GB 的 checkpoint 后一条命令即可本地推理python src/training/test_pii.py Mi chiamo Mario Rossi, IBAN IT60X0542811101000000123456或启动 Web 应用src/app/app.py粘贴文本/上传 PDF 获得可逆匿名化结果。生产环境还建议搭配正则 校验和检测网蓝本见 src/inspect/validate_checksums.py——校验和通过的结果会直接覆盖模型判断两者结合比单独任何一方都更可靠。赞分享【免费下载链接】rizzo-piiLocal-first privacy guard: anonymize your documents before sharing with LLMs.项目地址https://gitcode.com/gh_mirrors/ri/rizzo-pii点击查看免费下载相关推荐docTR 文本检测模型训练实战数据准备、单卡/多卡训练与高级调参全指南docTR 文本检测模型训练实战数据准备、单卡/多卡训练与高级调参全指南 docTRDocument Text Recognition在 referenc人工智能深度学习计算机视觉OCR深入 OpenMed PII 模型卡pii::small::mlx-fp last-green 指针与 44M 全精度 MLX 端侧脱敏模型深入 OpenMed PII 模型卡pii::small::mlx fp last green 指针与 44M 全精度 MLX 端侧脱敏模型 导读本文以 O人工智能NLP医疗健康数据脱敏本地部署大模型AI 应用MCP 服务联邦学习如何为Lucid Sonic Dreams创建自定义StyleGAN模型从训练到部署的完整指南如何为Lucid Sonic Dreams创建自定义StyleGAN模型从训练到部署的完整指南 想要让你的音乐视频生成器拥有独特的视觉风格吗Lucid So创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考