重要提示

您正在查看 NeMo 2.0 文档。此版本引入了 API 的重大更改和一个新的库 NeMo Run。我们目前正在将 NeMo 1.0 中的所有功能移植到 2.0。有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档

PII 识别和移除#

背景#

个人身份信息 (PII) 去标识化工具的目的是帮助从数据集中清除敏感数据。以下是该工具当前支持的敏感数据类型列表

  • 姓名

  • 电子邮件地址

  • 物理地址

  • 电话号码

  • IP 地址

  • 信用卡/借记卡号

  • 美国社会安全号码

  • 日期

该工具利用 Dask 来并行化任务,因此可以轻松扩展到 TB 级数据。尽管 Dask 可以部署在各种分布式计算环境(例如 HPC 集群、Kubernetes 和其他云产品,如 AWS EKS、Google Cloud 等)中,但当前的实现仅支持使用 Slurm 作为资源管理器的 HPC 集群上的 Dask。

用法#

读取文档和去标识化#

假设我们有一个“books”数据集,其存储结构如下

books_dataset/
    books_00.jsonl
    books_01.jsonl
    books_02.jsonl

您可以使用以下方法读取数据集、对其进行去标识化,并将其写入输出目录

from nemo_curator.datasets import DocumentDataset
from nemo_curator.utils.distributed_utils import read_data, write_to_disk, get_client
from nemo_curator.utils.file_utils import get_batched_files
from nemo_curator.modules.modify import Modify
from nemo_curator.modifiers.pii_modifier import PiiModifier

modifier = PiiModifier(
    language="en",
    supported_entities=["PERSON", "EMAIL_ADDRESS"],
    anonymize_action="replace",
    batch_size=1000,
    device="gpu")

for file_names in get_batched_files(
        "book_dataset,
        "output_directory",
        "jsonl",
        32
):
    source_data = read_data(file_names, file_type="jsonl", backend='pandas', add_filename=True)
    dataset = DocumentDataset(source_data)
    print(f"Dataset has {source_data.npartitions} partitions")

    modify = Modify(modifier)
    modified_dataset = modify(dataset)
    write_to_disk(modified_dataset.df,
                  "output_directory",
                  write_to_filename=True,
                  output_type="jsonl"
                  )

让我们逐行浏览这段代码。

  • modifier = PiiModifier 创建一个 PiiModifier 类的实例,该类负责 PII 去标识化

  • for file_names in get_batched_filesbook_dataset 中检索一批 32 个文档

  • source_data = read_data(file_names, file_type="jsonl", backend='pandas', add_filename=True) 使用 Dask 并以 Pandas 作为后端,从所有文件中读取数据。add_filename 参数确保输出文件与输入文件具有相同的文件名。

  • dataset = DocumentDataset(source_data) 使用批量文件创建 DocumentDataset 的实例。DocumentDataset 是 NeMo Curator 中文本数据集的标准格式。

  • modify = Modify(modifier) 创建 Modify 类的实例。此类可以将任何修饰符作为参数

  • modified_dataset = modify(dataset) 通过根据传递的参数执行 PII 去标识化来修改数据集中的数据。

  • write_to_disk(modified_dataset.df .... 将去标识化的文档写入磁盘。

PII 编辑模块也可以通过 script/find_pii_and_deidentify.py 脚本调用,该脚本提供基于 CLI 的界面。要查看脚本支持的完整选项列表,只需执行

python nemo_curator/scripts/find_pii_and_deidentify.py

要从 Slurm 环境中启动脚本,可以修改和使用脚本 examples/slurm/start-slurm.sh

从中断处恢复#

跟踪数据集中哪些文档已被处理可能很有用,这样如果长时间的策展作业中断,可以恢复它们。NeMo Curator 提供了一个实用程序,可以轻松跟踪哪些数据集分片已被处理。get_batched_files 的调用将返回一个迭代器,该迭代器遍历修饰符(如 PiiModifierBatched)尚未处理的文件。当您重新运行上面提供的代码示例时,NeMo Curator 确保 PII 模块仅处理未处理的文件。