使用 Kubeflow Pipelines 生成合成数据
- 合成数据生成 - 原因和方法?
- 使用合成数据的主要优势
- 创建合成数据的框架
- 合成数据仓库 (SDV)
- 合成数据的评估标准
- 我们的本地分析平台:ARCUS
- 创建合成数据所需的环境
- 探索合成数据的创建和实用性
- 使用合成数据生成器实现无需数据迁移的多环境支持
- 总结
合成数据生成 - 原因和方法?
从数据中创建洞察、决策和行动时,最佳结果来自真实数据。但访问真实数据通常需要冗长的安全和法律流程。数据可能还不完整、存在偏差或过小,并且在早期探索阶段,我们甚至可能不知道是否值得继续。虽然真实数据对于正确评估至关重要,但在正式流程完成之前,数据空白或有限的访问常常会阻碍进展。
为了应对这些挑战,合成数据提供了一种替代方案。它在保持隐私和可访问性的同时,模仿真实数据的统计属性。合成数据生成器(合成器)是在真实数据上训练的模型,用于生成遵循相同统计分布和关系但又不包含真实记录的新数据集。这有助于加速开发、提高数据可用性并增强隐私。
根据所使用的技术,合成数据不仅能反映真实数据的基本统计属性,还能保留特征之间的相关性。这些合成器——例如基于高斯耦合(Gaussian Copulas)、生成对抗网络(GANs)和变分自编码器(VAEs)的合成器——能够创建高保真度的合成数据集。下面有对这些技术的更多描述。
使用合成数据的主要优势
虽然上面主要关注了开发速度的提升以及通过数据增强来改进分析模型的性能,但创建(合成)数据还有更多的动因
-
增强隐私和安全性
模仿真实数据集,但不包含敏感或个人身份信息,从而降低隐私风险并确保符合 GDPR 等法规。 -
提高数据可用性
无需广泛的真实世界数据收集即可进行模型测试和训练。 -
创新和实验
允许在不暴露敏感数据的情况下安全地实验新算法和模型,促进在安全环境中的快速原型开发。 -
道德和负责任的AI开发
确保训练数据没有真实世界数据集中存在的偏差,促进公平无偏的AI系统。 -
加速测试和部署
支持在受控但逼真的环境中测试新产品、服务和系统,确保它们稳健、可扩展并可用于真实世界。 -
成本效益
通过消除大规模获取真实世界数据的需要,减少与数据收集、存储和合规性相关的费用。 -
简化法规合规性
通过提供合规的真实世界数据集替代方案,帮助组织应对复杂的数据法规,简化跨境数据传输。 -
平衡和增强的数据集
通过平衡代表性不足的类别来补充真实世界数据,提高模型性能,并减少AI训练中的偏差。 -
应对数据稀缺的能力
通过生成高质量的替代数据集,在真实世界数据有限、昂贵或难以获取的领域(例如医疗保健和网络安全)实现AI开发。
为了实现这些优势,我们需要生成合成数据的有效工具。为此存在各种框架,从基于云的平台到开源解决方案。本文重点介绍提供控制、灵活性和本地部署选项的开源合成数据生成框架。
创建合成数据的框架
本文专门介绍开源框架。有些数据无法发送到云端,因此一些基于云的合成数据生成解决方案并不总是适用。对于已在云中的数据,我们可以使用其他基于云的框架来生成合成数据。
合成器有多种驱动因素,但在本文中,我们的重点仍然是生成用于本地部署的合成数据。
那么,我们(最初)选择了哪个框架?目前,我们正在使用 SDV 的开源版本,这是一个易于使用的框架,拥有强大的社区和许多开箱即用的有用功能(例如内置评估器、许多建模技术)。合成数据领域正在快速发展。虽然我们不打算详尽地介绍最新的进展,但基础模型的使用无疑是一个值得关注的领域。
最广泛使用的开源合成数据生成库之一是 Synthetic Data Vault (SDV)。它提供了多种合成器,每种都针对不同类型的数据和统计属性进行了定制。
合成数据仓库 (SDV)
当你初始化并拟合一个合成器(如 GaussianCopulaSynthesizer、CTGANSynthesizer 等——见下文)时,它会基于你提供的数据集训练一个模型。该模型学习数据的分布,捕获数据集中不同特征之间的关系和依赖性。合成器不会记住数据集中的个体记录。相反,它尝试学习数据中存在的潜在统计模式、相关性和分布。
下面列出了 SDV 提供的(免费)合成器,我们在每个用例中对它们进行了评估。每个合成器执行此操作的方式不同
- GaussianCopulaSynthesizer: 使用统计耦合函数对特征之间的关系进行建模,确保准确的边缘分布。
- CTGANSynthesizer: 使用生成对抗网络 (GANs) 学习复杂的数据分布,特别适用于分类和混合类型数据。
- TVAESynthesizer: 利用变分自编码器 (VAEs) 捕获潜在表示,适用于连续和结构化数据。
- CopulaGANSynthesizer: 将基于耦合的统计建模与 GANs 相结合,生成具有复杂依赖关系的数据。
- PARSynthesizer: 使用自回归模型生成顺序数据,同时保留时间依赖性。
SDV 还提供更多合成器,但并非全部开源。我们在评估不同用例的最佳合成器时使用了前四种。
生成器 - 按需生成新数据
合成器是经过训练以模仿真实数据的统计模型和(更常见的是)AI模型。一旦开发完成,由此产生的模型可用于根据您的用例创建所需数量的合成数据。训练完成后,合成器使用学习到的模型生成新的合成数据,这些数据遵循与原始数据集相同的统计属性和分布,而不会直接复制任何真实数据点。如果您需要更多数据?只需调用生成器即可。
合成数据的评估标准
但是,合成数据有多好,我们如何评估它?
在使用合成数据时需要考虑很多方面,重要的是评估哪种合成数据生成技术(合成器)最适合我们的特定数据集和用例。
我们需要确保在以下方面取得良好平衡:
- 可用性 – 合成数据对于预期用例有多大用处?
- 保真度 – 合成数据在多大程度上保留了真实数据的统计属性?
- 隐私 – 生成的数据是否能确保给定用例的可接受的隐私级别?
目前,我们只关注可用性和保真度,使用框架提供的保真度度量以及下面描述的工作流程来评估可用性。
关于隐私和隐私保护技术的评论
确保合成数据中的隐私并非易事,即使存在确保隐私级别的方法,这仍然是一个活跃的研究领域。
合成数据中存在隐私问题?
虽然合成数据通过移除个人身份信息增强了隐私,但它并非完全没有风险。一些关键挑战包括:
- 过拟合和记忆:如果合成器过拟合,它可能会生成与真实数据非常相似的合成记录,导致隐私泄露。
- 异常暴露:数据集中的独特个体或罕见事件(例如,非常富有的人或罕见疾病)可能会在合成数据中无意中复制,从而产生重新识别的风险。
- 再识别攻击:即使合成数据在统计上与真实数据不同,攻击者也可能利用背景知识推断个人的敏感细节。
这里还有一个额外的问题,那就是我们真正寻找的可能正是异常数据。目前我们正在尝试各种差分隐私策略,但这仍处于早期阶段,在下面的示例中我们不重点介绍它们。
我们的本地分析平台:ARCUS
ARCUS 是 Telia 的高级本地分析平台,旨在支持广泛的用例。该平台提供基于 Kubeflow 的 MLOps 环境,用于描述性、预测性、生成性以及(正在进行中的)代理式 AI。ARCUS 完全基于开源构建,将一整套组件集成到一个统一平台中,其中 Kubernetes 是基石。
创建合成数据所需的环境
为了高效、自动化地选择最佳合成器,我们需要许多东西——从带有 GPU 和 MLOps (Kubeflow) 的底层平台开始。
- Kubeflow Pipelines
- GPU 能力(用于性能和效率)
- 开发(IDE)环境(用于框架构建和运行)
- 现代化数据平台(MinIO, Airflow)自动化合成数据生成数据集
所需的并行性
在下面的 (Kube)flows 中,我们并行运行评估——每个合成器一个,然后比较可用性和保真度分数,选择‘获胜者’。
注意:在早期版本的 Kubeflow 中,我们注意到并行性行为不如预期,会在进入下一步之前等待所有线程完成。我们不得不为此创建一个临时解决方案,现在在 Kubeflow Pipelines 2.3.0 中已解决。
下面,我们简要描述选择合成器的基本流程,接着是一个用例,我们在其中使用结果数据生成器在云端进行 ML 开发。
探索合成数据的创建和实用性
这就是我们想做的:我们有一个用例,有支持数据,并开发了 ML 模型。
- 合成数据与真实数据的相似度如何(例如,对于可视化用例而言很有趣)?
- 基于合成数据的 ML 模型与基于真实数据的 ML 模型之间的性能差距有多大?
合成数据技术的验证
- 创建合成数据并保存最佳的合成数据生成器。在此步骤中,SDV 框架开箱即用地创建了相似度度量。
- 分别在真实数据和使用合成数据上创建 ML 模型(在我们的例子中是分类模型)。将两个模型的性能与相同的真实数据测试集进行比较。
如上所述,我们有一个示例,其中收集并保存了最终的合成器。此步骤用于下面的示例中,将结果合成数据生成器导出到云端。
使用合成数据生成器实现无需数据迁移的多环境支持
下面是一个我们需要同时利用本地部署和云端,而无需将数据迁移到云端的用例。
问题描述
- 我们的数据无法从本地部署迁移到云端。
- 我们需要在公有云环境中额外的计算能力,以创建用于本地部署的 ML 模型。
- 该 ML 模型将在本地部署上使用,处理新的流入数据流(这些数据流无法迁移到云端)
解决方案
- 为我们的本地部署环境用例创建合成数据,并且作为副产品,我们保存合成数据生成器(用于创建合成数据的序列化模型)。
- 将合成数据生成器复制到云端
- 在云端使用合成数据生成器,创建用于训练 ML 模型所需的合成数据
- 将 ML 模型复制到本地部署,并将其用于新的流入数据
- 评估:使用相同的测试数据,比较本地部署的 AI 模型与在云端创建的模型
工作划分:哪些工作使用 Kubeflow 在本地部署上完成,哪些工作在云端(AWS SageMaker)完成?
本地部署
参见上面的 合成数据技术的验证。
- 在真实数据上开发模型——以便稍后与云端模型进行比较。
- 创建合成生成器,评估生成器,并将最佳生成器导出到 AWS。
云端
- 使用导入的合成生成器(来自本地部署)
- 使用合成数据生成器创建合成数据
- 开发模型并确定哪个合成生成器是最好的
- 增加合成数据量,看看增加合成数据是否能提高模型性能(不一定,请看下面的评论)
- 将模型导出到本地部署
下面更详细地介绍。
本地部署
- 使用真实测试数据,比较真实数据模型与合成数据模型。
在当前示例中,我们看到 ML 模型的性能几乎等同(使用合成数据创建的模型略低几个百分点)。我们尝试增加合成数据集的大小,只有微小的改进。预期(此处未测试)在使用深度学习算法时,数据增强对训练数据会有更多影响。
总结
显然,如果没有 Kubeflow,构建和维护上述工作流程将非常麻烦。我们的解决方案完全开源,基于 Kubernetes,并使用 Kubeflow 和 SDV 为我们提供所需的可伸缩性、鲁棒性和精细控制。
合成数据生成领域正随着整个 AI 领域快速发展。IBM 等公司关于合成数据在例如 LLM 训练中用量增加的报告屡见不鲜,但应用领域远不止于此。我们也期望有更强大的合成器,并希望隐私保护技术能够跟上该领域的创新步伐。我们最初的主要动力是加速创新和实验,以及整体上加快产品上市速度。这通常是我们的团队面临的关键痛点。
展望未来,我们正在探索开发一个合成器目录——理想情况下将其集成到我们整体的数据目录中——以使用户能够快速实验想法并更高效地启动工作。