导言
真实数据通常是在真实的人(例如:真实的人类、工作人员、劳动人员等)的生活互动中通过特定的数据采集业务流程收集的,而合成数据(Synthetic Data)完全是由算法生成的。合成生成的数据由全新的人工数据点组成,与原始数据没有一对一的关系,没有一个合成数据点可以追溯到或反向工程到原始数据。 因此,合成数据**不受** **GDPR** **等隐私法规的约束**,可作为解决和克服数据隐私挑战的解决方案,并应用于数据安全开放、系统调试和模型调优等领域。在本文中,我们将从生成模型讲起,了解合成数据的现状、挑战和现有解决方案。
背景
当前,大型语言模型(LLMs)已经在各个领域取得了令人瞩目的成果,尤其在图像生成、文本生成、音频合成等领域发挥了巨大作用,各个厂商也在着手开发各自领域的大模型。以当前最火爆的大模型ChatGPT为例子,它的强大之处在于它能够生成高质量的文本,同时还能理解人类语言的各种复杂性和微妙之处。然而,如此强大的模型也仍然存在一些局限性,例如:生成有内在关联关系的表格数据,ChatGPT这样的模型,难以彻底洞察不同特征(列)之间的内在联系,并在生成的数据中体现这种内在联系,所以此类语言模型形成高质量的表格数据。同时对于公司而言,难以轻量化地快速部署好一个大型语言模型进行数据生成任务。
对于生成表格数据而言,主要需要克服以下几个挑战:
- 快速:由于合成数据可能在快速响应的需求中使用,根据业务需求在一定的时间内,快速生成高质量合成数据;
- 高质量:由于合成数据通常会被用于数据开放、模型调优等场景,此类场景对数据的质量有较高要求,高质量的合成数据可以在不泄漏隐私信息的前提下,顺利推进业务的实现;
- 隐私保护:合成数据不应携带任何可能的私人信息或隐私信息,任何人不能从数据中提取或者推知有关合成数据本身之外的隐私信息或敏感信息,当前部分LLM模型则存在此类隐患(这里需要一个参考资料);
- 轻量化部署与运行:在业务场景中,供合成数据生成运行的硬件资源通常是有限的,组件应满足轻量化的部署和运行能力,以便满足业务需求。
而现在看来,满足以上几个点的合成数据能力是非常关键且必要,但当前的大型语言模型尚不能完全满足。
合成数据的应用场景
数据发布和共享
数据安全公开是一种保障数据安全的重要策略,其主要目标是确保数据在共享、发布或公开披露时不会泄露敏感或机密信息。而使用高质量合成数据代替真实数据进行数据发布和共享,保留原始数据分布特征的同时,防止原始数据中的隐私泄露,是一种有效的方法。
在该应用场景中,使用合成数据还具有以下优点:
- 保护敏感信息:通过使用仿真数据和信息隐藏技术,可以有效地保护敏感信息不被泄露,防止因为数据泄露带来的损失。
- 提高数据可用性:这种方法允许数据在保持安全的同时被广泛使用,提高了数据的可用性。对于需要进行数据分析和研究的人员来说,他们可以在没有敏感信息的情况下使用这些数据,从而做出更准确的分析和更有价值的研究。
- 遵守数据安全法规:通过这种方法,可以确保公开的数据符合各种数据安全和隐私法规的要求,从而避免因违反法规而带来的法律风险。
AI模型训练与调试
高质量的仿真数据可以在人工智能(AI)模型调优与训练的过程中发挥重要作用。例如:用于模型训练数据增强,通过生成更多的高质量合成数据提高模型的性能和准确性。使用仿真数据代替真实数据可以保护敏感信息的隐私和安全,防止数据泄露和滥用,还可以通过仿真数据,可以在不需要真实数据的情况下进行模型训练和优化,从而大大节省时间和计算资源。
除此以外,在该应用场景中,使用合成数据还具有以下优点:
- 增强泛化能力:仿真数据可以帮助创建一个更通用的模型,因为仿真数据可以涵盖各种可能的情况,而真实数据可能只代表特定的情况或时间段。
- 优化资源配置:使用仿真数据,可以在模型部署之前对模型进行全面的测试和优化,确保模型在真实环境中的表现良好,从而优化资源配置。
- 合规性与风险控制:使用仿真数据可以更好地符合各种数据法规和伦理要求,同时降低因使用敏感数据而带来的法律风险和道德争议。
开发与测试
在系统开发与测试的过程中,仿真数据可以起到至关重要的作用。利用丰富的合成数据替代原始生产数据来进行更准确的软件测试和开发,可以用来模拟系统或应用程序的实际运行情况,帮助开发人员和测试人员理解和解决潜在的问题。使用仿真数据进行开发和测试可以大大提高效率。因为开发人员和测试人员可以在一个模拟的环境中进行工作,而不必等待实际的数据或结果。
除此以外,在该应用场景中,使用合成数据还具有以下优点:
- 保护真实系统:使用仿真数据可以保护真实系统不被破坏。因为在开发和测试过程中,所有的更改和实验都是在模拟环境中进行的,不会对真实系统产生影响。
- 提升预测性能:使用仿真数据可以帮助开发人员和测试人员预测系统的性能。因为仿真数据可以模拟各种情况,从而帮助开发人员和测试人员了解系统的行为,并找出可能的问题。
- 降低开发成本:使用仿真数据进行开发和测试可以降低成本。因为开发人员和测试人员可以在一个模拟的环境中进行工作,不必购买大量的硬件或软件,也不必担心数据存储和计算资源的问题。
简介
合成数据生成器(Synthetic Data Generator,SDG)是哈工大数据安全研究院开源的一款专注于结构化表格数据快速生成的框架。它支持基于统计学和基于深度学习技术的十多种模型,并针对执行速度、内存消耗等方面进行专门优化。同时,开发团队将会持续跟踪业界最新工作,将新发表的优质算法或模型纳入SDG的支持清单。合成数据生成器不仅支持单表和多表数据的快速生成,还从生产环境的角度出发,提供一键快速部署部署、负载均衡、资源监控等特性,帮助组织和企业用户快速生成高质量的合成数据,以支持多种应用场景和业务需求。
主要特性
总体而言,SDG可以满足以下特性:
高性能
SDG组件持10余种单表、多表数据合成算法,支持基单表、多表数据合成算法,支持基于机器学习和基于统计学的合成算法;SDG满足以下特点:**执行速度快**:支持多种统计学数据合成算法,实现最高120倍性能提升,不需要GPU设备;**内存** **消耗小**:针对大数据场景优化,通过调度数据载入减少内存消耗;
针对生产环境快速部署
SDG 提供自动化部署、容器化技术、自动化监控和提供自动化部署、容器化技术、自动化监控和报警等生产环境所需技术,实现快速一键部署;针对负载均衡与容错性进行专门优化,提升组件可用性。
- 针对实际生产需求进行优化,提升模型性能,降低内存开销,支持单机多卡、多机多卡等实用特性;
- 提供自动化部署、容器化技术、自动化监控和报警等生产环境所需技术,支持容器化快速一键部署;
- 针对负载均衡和容错性进行专门优化,提升组件可用性。
快速迭代
除了以上两大特性之外,开发团队还将持续跟踪学术界和工业界的最新进展,及时引入支持优秀算法和模型;开发团队将每隔6个月进行重要版本更新;
关键技术介绍
整体架构
sdg的整体架构如下图所示:
算法模块
SDG提供两种类型的合成数据生成方法:
- 基于统计学的合成数据生成方法:运行迅速,可以针对大量数据快速学习并生成合成数据,对运行节点的配置要求较低;
- 基于深度模型的合成数据生成方法:相比统计学方法合成数据数据质量较高,但计算资源消耗大,依赖GPU进行加速;
执行流程
合成数据生成流程以真实数据集作为输入,通过内置的深度学习模型或者统计学模型,分析并获取到真实数据集中的特征统计分布、特征之间的关联关系、数据集整体的特征分布等复杂信息,再根据以上关系,生成高质量合成数据。生成的合成数据可分别经过评估模块生成合成数据质量评估报告,经隐私保护模块生成隐私评估报告。
业务场景
如何使用
如何安装、简单使用开源项目,帮助用户快速了解与上手项目。
从Pypi安装
```
pip install sdgx
```
单表数据快速合成示例
导入相关模块
```
# 导入相关模块
from sdgx.models.single_table.ctgan import CTGAN
from sdgx.utils.io.csv_utils import *
# 读取数据
demo_data, discrete_cols = get_demo_single_table()
```
真实数据示例如下:
```
age workclass fnlwgt ... hours-per-week native-country class
0 27 Private 177119 ... 44 United-States <=50K
1 27 Private 216481 ... 40 United-States <=50K
2 25 Private 256263 ... 40 United-States <=50K
3 46 Private 147640 ... 40 United-States <=50K
4 45 Private 172822 ... 76 United-States >50K
... ... ... ... ... ... ... ...
32556 43 Local-gov 33331 ... 40 United-States >50K
32557 44 Private 98466 ... 35 United-States <=50K
32558 23 Private 45317 ... 40 United-States <=50K
32559 45 Local-gov 215862 ... 45 United-States >50K
32560 25 Private 186925 ... 48 United-States <=50K
[32561 rows x 15 columns]
```
```
# 定义模型
model = CTGAN(epochs=10)
# 训练模型
model.fit(demo_data, discrete_cols)
# 生成合成数据
sampled_data = model.generate(1000)
```
合成数据如下:
```
age workclass fnlwgt ... hours-per-week native-country class
0 33 Private 276389 ... 41 United-States >50K
1 33 Self-emp-not-inc 296948 ... 54 United-States <=50K
2 67 Without-pay 266913 ... 51 Columbia <=50K
3 49 Private 423018 ... 41 United-States >50K
4 22 Private 295325 ... 39 United-States >50K
5 63 Private 234140 ... 65 United-States <=50K
6 42 Private 243623 ... 52 United-States <=50K
7 75 Private 247679 ... 41 United-States <=50K
8 79 Private 332237 ... 41 United-States >50K
9 28 State-gov 837932 ... 99 United-States <=50K
```
项目的Roadmap
后续我们计划每6个月发布新的 Release 版本。近期的 Roadmap 如下:
- TAB-GAN、TVAE、OCT-GAN等深度学习算法的实现;
- 高斯Copula、蒙特卡罗模拟、贝叶斯等统计学算法的实现;
- 大量数据场景下,针对常用模型针对内存消耗的优化实现;
- 支持常用数据集加载、检测功能;
- 支持更多有利于合成数据数据的预处理功能;
- 增加数据集列离散、连续属性的自动检测等实用功能。
从长期看,我们还将在以下几个方向上持续投入,欢迎各类输入和技术讨论,同时我们十分欢迎对开源社区建设感兴趣人士一起推进 SDG 社区的建设。长期研发方向如下:
- 考虑关联关系深度学习算法;
- 更快的统计学算法;
结语
如果您对开源感兴趣,欢迎加入贡献,我们一起共创一个开放且有趣的社区。可参与的贡献包括不限于:
- 提交 issue 反馈需求、Bugs
- 贡献宫方文档
- 推荐大家使用 SDG 或介绍SDG 的功能
- 开发一个 SDG插件
- 参与 SDG 核心代码开发
其他信息
SDG使用Apache-2.0开源协议,我们欢迎读者、开发者进行使用、反馈,提出建议,欢迎参与开源项目的进一步: