NVIDIA-NeMo/Anonymizer

GitHub: NVIDIA-NeMo/Anonymizer

一个基于LLM驱动的文本匿名化工具,用于检测和保护个人身份信息。

Stars: 75 | Forks: 7

# NeMo 匿名化工具 [![许可证](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Python 3.11+](https://img.shields.io/badge/Python-3.11+-blue.svg)](https://www.python.org/downloads/) **使用 LLM 驱动的工作流检测并替换文本中的敏感实体。** ## 匿名化工具能做什么? - **检测实体**:使用 GLiNER-PII 以及基于 LLM 的增强和验证 - **使用 4 种策略替换**:LLM 生成替代词、涂黑、标注或哈希(确定性,本地处理) - **预览结果**:通过 `display_record()` 可视化在完整运行前预览 ## 快速入门 ### 1. 安装 ``` git clone https://github.com/NVIDIA-NeMo/Anonymizer.git cd Anonymizer make install ``` ### 2. 设置模型提供方 默认情况下,匿名化工具使用托管在 [build.nvidia.com](https://build.nvidia.com/models) 上的模型 —— 用于实体检测的 GLiNER-PII 和用于增强/验证的文本 LLM。您也可以通过自定义提供方配置来使用自己的模型。 默认的 build.nvidia.com(NVIDIA Build)设置是尝试匿名化工具并迭代预览的便捷方式。使用 NVIDIA Build 需遵守 NVIDIA Build 自身的服务条款和隐私实践,这些条款与 NeMo 框架库相互独立。NVIDIA Build 仅用于评估和测试目的,不得用于生产环境。使用 NVIDIA Build 时请勿上传任何机密信息或个人数据。出于安全目的以及改进 NVIDIA 产品与服务,您对 NVIDIA Build 的使用会被记录。 build.nvidia.com 上的请求和令牌速率限制因账户和模型访问权限而异,对于全数据集运行,低流量的开发访问可能较慢。请从小样本的 `preview()` 开始,然后为生产数据和使用量迁移到您自己的端点。 ``` export NVIDIA_API_KEY="your-nvidia-api-key" ``` ### 3. 文本匿名化 #### 命令行 ``` DATA_URL="https://raw.githubusercontent.com/NVIDIA-NeMo/Anonymizer/refs/heads/main/docs/data/NVIDIA_synthetic_biographies.csv" # 小样本预览 uv run anonymizer preview --source $DATA_URL --text-column biography --replace redact --num_records 3 # 带输出文件的完整运行 uv run anonymizer run --source $DATA_URL --text-column biography --replace redact --output result.csv # 验证配置但不实际执行 uv run anonymizer validate --source $DATA_URL --text-column biography --replace hash ``` 运行 `anonymizer --help` 或 `anonymizer --help` 查看所有选项。 #### Python API ``` from anonymizer import Anonymizer, AnonymizerConfig, AnonymizerInput, Redact DATA_URL = "https://raw.githubusercontent.com/NVIDIA-NeMo/Anonymizer/refs/heads/main/docs/data/NVIDIA_synthetic_biographies.csv" # 通过环境变量 NVIDIA_API_KEY 使用默认模型提供商 (build.nvidia.com) anonymizer = Anonymizer() config = AnonymizerConfig(replace=Redact()) preview = anonymizer.preview( config=config, data=AnonymizerInput(source=DATA_URL, text_column="biography"), num_records=3, ) # 使用实体高亮和替换映射进行可视化 preview.display_record() # 仅显示最重要的列 preview.dataframe # 完整管线追踪,包括以内部下划线开头的列 preview.trace_dataframe ``` 如需使用自定义模型端点,请传递一个提供方 YAML: ``` anonymizer = Anonymizer(model_providers="path/to/model_providers.yaml") ``` ## 语言与地区覆盖范围 匿名化工具在英文数据上测试最为广泛。尚未针对不同语言、领域和模型系统性地评估多语言质量。 尽管到目前为止测试主要以英文进行,但支持的实体集并不限于美国特定的标识符。检测和匿名化也适用于国际格式,如非美国电话号码、地址、法律引用以及国家或地区身份证号码,但覆盖率会因语言、地区和模型配置而异。 如果您正在处理其他语言,我们建议您首先在小样本上使用 `preview()` 进行实验,仔细验证检测到的实体和转换后的输出,并根据需要调整模型提供方和模型配置。 ## 替换策略 | 策略 | `"Alice"` (first_name) 的输出 | 可配置项 | |------|-------------------------------|----------| | **替换** | `Maya` | `instructions` | | **涂黑** | `[REDACTED_FIRST_NAME]` | `format_template` | | **标注** | `` | `format_template` | | **哈希** | `` | `format_template`, `algorithm`, `digest_length` | ``` from anonymizer import Redact, Annotate, Hash, Substitute # LLM 生成的上下文替换 AnonymizerConfig(replace=Substitute()) # 常量遮蔽 AnonymizerConfig(replace=Redact(format_template="****")) # 使用实体标记进行注释 AnonymizerConfig(replace=Annotate(format_template="<{text}-|-{label}>")) # 确定性哈希与短摘要 AnonymizerConfig(replace=Hash(algorithm="sha256", digest_length=8)) ``` ## 与 Claude Code 一起使用 此仓库在 [`skills/anonymizer/`](skills/anonymizer/SKILL.md) 中附带了一个 Claude Code 技能,它可以引导您提出数据集的隐私需求,推荐使用重写或带策略的替换,并为您起草一个可运行的脚本供您迭代。虽然该技能应适用于支持技能的其他编码代理,但目前的开发和测试主要集中在 Claude Code 上。 通过 [skills.sh](https://skills.sh) 安装: ``` npx skills add NVIDIA-NeMo/Anonymizer ``` 安装后,在 Claude Code 内部使用 `/anonymizer` 调用它,或者描述您想要匿名化的内容,让其自动触发。 ## 开发 ``` make install-dev # Install with dev dependencies make test # Run tests make coverage # Run with coverage report make format-check # Lint + format check (read-only) anonymizer --help # CLI usage make install-pre-commit # Install pre-commit hooks ``` ## 要求 - Python 3.11+ - [NeMo 数据设计器](https://github.com/NVIDIA-NeMo/DataDesigner)(作为依赖项安装) - [NVIDIA API 密钥](https://build.nvidia.com) 用于默认模型提供方(GLiNER-PII + 文本 LLM),或自定义模型端点 ## 遥测与隐私 NeMo 匿名化工具收集匿名的运行级别遥测数据,以帮助优先考虑产品改进。每次调用 `Anonymizer.run()` / `Anonymizer.preview()` 时会发送一个事件,仅包含技术元数据:正在使用的替换策略、使用的模型、模型主机(例如 `nvidia-build`、`openrouter`、`other`)、输入记录数、运行持续时间以及按管道步骤的失败归因。**不收集任何用户数据、记录内容、提示或模型输出。** 请参阅[遥测与隐私文档](https://nvidia-nemo.github.io/Anonymizer/latest/#telemetry-and-privacy) 获取完整字段列表。 您可以随时选择退出遥测: - **对于单次命令行调用**:传递 `--no-emit-telemetry` uv run anonymizer run --source data.csv --text-column text --replace redact --no-emit-telemetry - **在 SDK 中**:在 `AnonymizerConfig` 上设置 `emit_telemetry=False` config = AnonymizerConfig(replace=Redact(), emit_telemetry=False) - **对于当前 shell**:设置环境变量 export NEMO_TELEMETRY_ENABLED=false 聚合使用数据(例如哪些模型最受欢迎)将与社区共享。它不用于跟踪任何个人用户行为。 **使用第三方端点,包括 NVIDIA Build:** 匿名化工具可配置为使用各种推理端点,包括 [build.nvidia.com](https://build.nvidia.com)、[OpenRouter](https://openrouter.ai) 或本地模型服务器。如果您选择使用第三方端点,该端点自身的服务条款和隐私实践独立于此库。您在匿名化工具中行使的任何退出选项不延伸至您所选端点的数据收集。 ## 许可证 Apache License 2.0 — 详见 [LICENSE](LICENSE)。
标签:AI驱动, Apache 2.0, Apex, C2, GLiNER, meg, NVIDIA NeMo, PII检测, Python, 上下文感知, 二进制发布, 信息安全, 匿名化技术, 大型语言模型, 实体识别, 开源工具, 数据匿名化, 数据隐私, 文本处理, 文本替换, 文档结构分析, 无后门, 机器学习, 网络安全, 逆向工具, 隐私保护, 隐私工具