使用Amazon SageMaker Data Wrangler自动修订PII以供机器学习使用

利用Amazon SageMaker Data Wrangler自动修订PII数据,助力机器学习应用

顾客们越来越希望使用深度学习方法,例如大型语言模型(LLM),来自动提取数据和洞察。对于许多行业来说,用于机器学习(ML)的数据可能包含个人身份信息(PII)。为了确保训练、微调和使用深度学习模型时能够保护顾客隐私和维持监管合规性,通常需要先从原始数据中删除PII。

本文演示了如何在您的机器学习操作(ML Ops)工作流中使用Amazon SageMaker Data Wrangler和Amazon Comprehend自动删除表格数据中的PII。

问题:包含PII的ML数据

PII被定义为任何信息的表达,通过直接或间接手段合理推断出其适用对象的身份。PII是直接识别个人的信息(例如姓名、地址、社会安全号或其他识别号码、电话号码、电子邮件地址等)或机构打算与其他数据元素结合使用来识别特定个人的信息,即间接标识。

金融、零售、法律和政府等商业领域的顾客经常处理PII数据。由于各种政府法规和规定的关系,顾客必须找到一种机制来处理这些敏感数据,并采取适当的安全措施,以避免监管罚款、可能的欺诈和诽谤。PII消除是将文档中的敏感信息屏蔽或删除的过程,以便可以使用和分发,同时仍然保护机密信息。

企业需要通过使用机器学习提供令人愉悦的顾客体验和更好的业务成果。删除PII数据通常是解锁使用或微调生成AI模型所需的更大和更丰富的数据流的关键第一步,而无需担心企业数据(或其顾客的数据)是否会受到损害。

解决方案概述

此解决方案使用Amazon Comprehend和SageMaker Data Wrangler从示例数据集自动删除PII数据。

Amazon Comprehend是一种自然语言处理(NLP)服务,利用机器学习来揭示非结构化数据中的见解和关系,无需管理基础架构或具备机器学习经验。它提供了在文本中定位各种PII实体类型(如姓名或信用卡号码)的功能。尽管最新的生成AI模型已经展示了一些PII删除功能,但它们通常不提供PII标识的置信度评分或描述被删除的结构化数据。Amazon Comprehend的PII功能同时返回这两个信息,使您能够创建可完全可审计的大规模屏蔽工作流。此外,结合AWS PrivateLink使用Amazon Comprehend意味着客户数据永远不会离开AWS网络,并且始终与您的其他应用程序具有相同的数据访问和隐私控制。

类似于Amazon Comprehend,Amazon Macie使用基于规则的引擎识别存储在Amazon Simple Storage Service(Amazon S3)中的敏感数据(包括PII)。然而,其基于规则的方法依赖于指示敏感数据位置附近具有特定关键词(在30个字符内)。相比之下,Amazon Comprehend的基于NLP的机器学习方法使用对更长文本片段的语义理解来识别PII,使其更适用于在非结构化数据中查找PII。

此外,对于CSV或纯文本文件等表格数据,Macie返回的位置信息比Amazon Comprehend更少(仅提供行/列指示器或行号,但不提供起始和结束字符偏移量)。这使得Amazon Comprehend特别适用于从可能包含混合PII和非PII单词的非结构化文本(例如支持票或LLM提示)中屏蔽PII的表格格式数据。

亚马逊SageMaker提供为机器学习团队量身定制的工具,以自动化和标准化ML生命周期中的流程。借助SageMaker MLOps工具,团队可以轻松地在规模上准备、训练、测试、排除故障、部署和管理ML模型,从而提高数据科学家和ML工程师的生产力,并确保模型在生产中的性能。下图展示了SageMaker MLOps工作流程。

SageMaker流水线

SageMaker数据整理器是亚马逊SageMaker Studio的一个功能,提供了一个端到端的解决方案,用于导入、准备、转换、特征化和分析存储在Amazon S3或亚马逊Athena等位置的数据集,这是ML生命周期中常见的第一步。您可以使用SageMaker数据整理器通过内置的无代码转换或使用自己的Python脚本来简化和优化数据集的预处理和特征工程。

在SageMaker数据整理器数据准备工作流程中使用亚马逊Comprehend来隐藏个人身份信息(PII),可以保持数据的所有下游使用,如模型训练或推理,与您的组织的PII要求保持一致。您可以将SageMaker数据整理器与亚马逊SageMaker Pipelines集成,以自动化端到端的ML操作,包括数据准备和PII隐藏。有关更多详细信息,请参阅将SageMaker数据整理器与SageMaker Pipelines集成。本文的其他部分演示了使用Amazon Comprehend从以表格数据格式存储的文本中隐藏个人身份信息(PII)的SageMaker数据整理器流。

该解决方案使用合成数据集以及自定义的SageMaker数据整理器流,作为GitHub中的一个文件。使用SageMaker数据整理器流来隐藏PII的步骤如下:

  1. 打开SageMaker Studio。
  2. 下载SageMaker数据整理器流。
  3. 查看SageMaker数据整理器流。
  4. 添加目的节点。
  5. 创建SageMaker数据整理器导出作业。

完成此过程,包括运行导出作业,需要20至25分钟。

先决条件

进行此过程,您应具备以下条件:

打开SageMaker Studio

按照以下步骤打开SageMaker Studio:

  1. 在SageMaker控制台上,选择导航窗格中的Studio
  2. 选择域和用户配置文件。
  3. 选择打开Studio

要开始使用SageMaker数据整理器的新功能,建议升级到最新版本

下载SageMaker数据整理器流

你首先需要从GitHub上获取SageMaker Data Wrangler流文件,并将其上传到SageMaker Studio。请按照以下步骤完成:

  1. 在GitHub上找到SageMaker Data Wrangler的redact-pii.flow文件。
  2. 在GitHub上,选择下载图标将流文件下载到本地计算机。
  3. 在SageMaker Studio中,选择导航窗格中的文件图标。
  4. 选择上传图标,然后选择redact-pii.flow
上传Data Wrangler流文件

查看SageMaker Data Wrangler流

在SageMaker Studio中打开redact-pii.flow。几分钟后,流将完成加载并显示流程图(见下图)。该流程包含六个步骤:一个S3 Source步骤,然后是五个转换步骤。

Data Wrangler流程步骤

在流程图上,选择最后一个步骤Redact PII。右侧将打开All Steps窗格,并显示流程中的步骤列表。您可以展开每个步骤以查看详细信息,更改参数,可能还可以添加自定义代码。

Data Wrangler流程步骤详情

让我们逐步了解流程中的每个步骤。

步骤1(S3 Source)和步骤2(Data types)是SageMaker Data Wrangler在导入新流程的数据时自动添加的。在S3 Source中,S3 URI字段指向示例数据集,这是存储在Amazon S3中的CSV文件。该文件大约包含116,000行,流程将Sampling字段的值设置为1,000,这意味着SageMaker Data Wrangler将抽样1,000行用于在用户界面中显示。Data types设置导入数据的每个列的数据类型。

步骤3(Sampling)通过Approximate sample size字段设置SageMaker Data Wrangler为导出作业抽样的行数为5,000。请注意,这与抽样显示在用户界面中的行数(步骤1)不同。要导出更多行的数据,您可以增加此数字或删除步骤3。

步骤4、5和6使用SageMaker Data Wrangler自定义转换。自定义转换允许您在Data Wrangler流程中运行自己的Python或SQL代码。自定义代码可以使用以下四种方式编写:

  • 使用PySpark SQL的SQL来修改数据集
  • 使用PySpark数据框和库以Python方式修改数据集
  • 使用pandas数据框和库以Python方式修改数据集
  • 使用用户定义的函数以修改数据集的列

Python(pandas)方法要求数据集适应内存,并且只能在单个实例上运行,限制了其有效扩展能力。在处理较大数据集时,我们建议使用Python(PySpark)或Python(用户定义的函数)方法之一。SageMaker Data Wrangler通过优化Python用户定义的函数以提供类似Apache Spark插件的性能,而无需了解PySpark或Pandas。为了尽可能简化这个解决方案,本文使用了纯Python编写的Python用户定义的函数。

展开第四步(创建PII列)以查看其详细信息。该步骤将来自多个列的不同类型的PII数据组合成一个保存在新列pii_col中的短语。以下表格显示了一个包含数据的示例行。

customer_name customer_job billing_address customer_email
Katie 记者 19009 Vang Squares Suite 805

这将组合为短语“Katie是一位记者,住在19009 Vang Squares Suite 805,可通过发送电子邮件”。该短语保存在pii_col中,本帖将其用作目标列进行遮蔽。

第五步(准备遮蔽)接受要遮蔽的列(pii_col)并创建一个已准备好使用Amazon Comprehend进行高效遮蔽的新列(pii_col_prep)。要从其他列中遮蔽PII信息,您可以更改此步骤的输入列字段。

使用Amazon Comprehend进行高效遮蔽数据需要考虑以下两个因素:

  • 检测PII的成本是按单位定义的,其中1个单位= 100个字符,每个文件的最低收费为3个单位。因为表格数据通常每个单元格只包含少量文本,因此将多个单元格中的文本组合成单个文档发送到Amazon Comprehend通常更加高效且节省时间和成本。这样做可以避免多次重复函数调用的开销累积,并确保发送的数据始终大于3个单位的最低限度。
  • 由于我们将作为SageMaker Data Wrangler流程的一步进行遮蔽,因此将以同步方式调用Amazon Comprehend。Amazon Comprehend对每个同步函数调用设置了100 KB(100,000个字符)的限制,因此我们需要确保发送的任何文本都在该限制之下。

基于这些因素,第五步通过在每个单元格的文本末尾附加分隔符字符串来准备要发送到Amazon Comprehend的数据。对于分隔符,您可以使用任何不会出现在被遮蔽列中的字符串(理想情况下,尽可能少的字符,因为它们包含在Amazon Comprehend字符总数中)。添加此单元格分隔符可以使我们优化对Amazon Comprehend的调用,并在第六步中进一步讨论。

请注意,如果任何单个单元格中的文本长度超过Amazon Comprehend限制,此步骤中的代码将将其截断为100,000个字符(大约相当于15,000个单词或30页单倍行距页)。虽然不太可能在单个单元格中存储这么多文本,但如果有需要,您可以修改转换代码以处理此边缘情况的其他方式。

第六步(遮蔽PII)接受要遮蔽的列名(pii_col_prep)作为输入,并将遮蔽后的文本保存到新列(pii_redacted)中。当您使用Python自定义函数进行转换时,SageMaker Data Wrangler定义了一个空的custom_func,它以pandas series(一列文本)作为输入,并返回相同长度的修改过的pandas series。以下截图显示了部分遮蔽PII步骤。

数据整理器自定义函数清洗代码

函数 custom_func 包含了两个辅助(内部)函数:

  • make_text_chunks – 此函数负责将系列中的单个单元格的文本(包括定界符)拼接成更长的字符串(块),然后发送到 Amazon Comprehend。
  • redact_pii– 此函数将文本作为输入,调用 Amazon Comprehend 检测 PII,删除任何找到的 PII,并返回删除后的文本。删除操作是用找到的 PII 类型替换任何 PII 文本,例如 John Smith 将被替换为 [NAME]。您可以修改此函数将 PII 替换为任何字符串,包括空字符串(““)以删除它。您还可以修改函数以检查每个 PII 实体的置信度分数,仅在超过特定阈值时进行删除。

定义完内部函数后,custom_func 使用它们来进行清洗,如下面的代码摘录所示。当清洗完成后,它将块转换回原始单元格,并将其保存在 pii_redacted 列中。

# 将单元格中的文本拼接为更长的块chunks = make_text_chunks(series, COMPREHEND_MAX_CHARS)redacted_chunks = []# 逐块调用 Comprehend,并进行清洗for text in chunks:  redacted_text = redact_pii(text)  redacted_chunks.append(redacted_text)  # 将所有清洗后的块拼接为一个文本字符串redacted_text = ''.join(redacted_chunks)# 拆分为原始行的列表redacted_rows = redacted_text.split(CELL_DELIM)

添加目标节点

为了查看转换结果,SageMaker 数据整理器支持导出到 Amazon S3、SageMaker 管道、Amazon SageMaker 特征存储和 Python 代码。为了将清洗后的数据导出到 Amazon S3,我们首先需要创建一个目标节点:

  1. 在 SageMaker 数据整理器流程图中,选择Redact PII 步骤旁边的加号。
  2. 选择添加目标,然后选择Amazon S3
  3. 为转换后的数据集提供输出名称。
  4. 浏览或输入存储清洗后数据文件的 S3 位置。
  5. 选择添加目标

现在,您将在数据流末尾看到目标节点。

创建 SageMaker 数据整理器导出作业

现在已经添加了目标节点,我们可以创建导出作业以处理数据集:

  1. 在 SageMaker 数据整理器中,选择创建作业
  2. 刚刚添加的目标节点应该已经被选中。选择下一步
  3. 接受所有其他选项的默认值,然后选择运行

这将创建一个SageMaker 处理作业。要查看作业的状态,请导航到 SageMaker 控制台。在导航窗格中展开处理部分并选择处理作业。使用默认导出作业设置(两个 ml.m5.4xlarge 实例),对目标列中的所有 116,000 个单元格进行清洗大约需要 8 分钟,成本约为 0.25 美元。作业完成后,从 Amazon S3 下载带有清洗后列的输出文件。

清理

SageMaker 数据整理器应用程序运行在一个 ml.m5.4xlarge 实例上。为了关闭它,请在 SageMaker Studio 中,选择导航窗格中的正在运行的终端和内核。在正在运行的实例部分,找到标记为Data Wrangler的实例,然后选择其旁边的关闭图标。这将关闭在该实例上运行的 SageMaker 数据整理器应用程序。

结论

在本文中,我们讨论了如何在SageMaker Data Wrangler和Amazon Comprehend中使用自定义转换来从ML数据集中删除PII数据。您可以下载 SageMaker Data Wrangler流程,并开始从您的表格数据中删除PII。

要了解使用SageMaker Data Wrangler自定义转换来增强您的MLOps工作流程的其他方法,请查看在Amazon SageMaker Data Wrangler中使用NLTK和SciPy编写自定义转换。要获取更多数据准备选项,请查看博客文章系列,其中解释了如何使用Amazon Comprehend从Amazon AthenaAmazon Redshift导入、翻译和分析文本。