Skip to content

Latest commit

 

History

History
211 lines (152 loc) · 11.3 KB

README_ZH_CN.md

File metadata and controls

211 lines (152 loc) · 11.3 KB

Actions Status Documentation Status pre-commit.ci status LICENSE Releases Pre Releases Last Commit Python version contributors slack

🚀 合成数据生成器 -- 快速生成高质量合成数据!

切换语言: English  |  最新 API文档 |   加入 Wechat群组

查看 Colab 例子:  使用LLM仿真数据  |   借助LLM进行表外特征推断  |   支持十亿级数据的CTGAN

合成数据生成器(Synthetic Data Generator,SDG)是一个专注于快速生成高质量的结构化表格数据的数据组件。

合成数据(Synthetic Data)不包含任何敏感信息,但它保留了原始数据的基本特性,使其免于GDPR和ADPPA等隐私法规的约束,消除实际应用中的隐私泄露风险。

高质量的合成数据可以安全、多样化地在各种领域中使用,包括数据共享、模型训练和调试、系统开发和测试等应用。

💥 相关信息

我们的里程碑和时间节点如下所示:

🔥 2024年2月20日:基于LLM的单表数据合成模型已包含,查看colab示例:LLM:数据合成LLM:表外特征推断

🔶 2023年12月20日:v0.1.0发布,包含支持数十亿数据处理能力的CTGAN模型,查看我们的 针对 SDV 的基准,SDG 实现了更少的内存消耗并避免了训练期间的崩溃(Out of Memory),具体使用请查看我们的colab示例:支持十亿级数据的CTGAN

🔆 2023年8月10日:第一行SDG代码提交。

🎉 借助LLM进行合成数据生成

长期以来,LLM一直被用来理解和生成各种类型的数据。 事实上,LLM在表格数据生成方面也有较强的性能。 且LLM还具有一些传统(基于GAN方法或统计方法)无法实现的能力。

我们的 sdgx.models.LLM.single_table.gpt.SingleTableGPTModel 实现了两个新功能:

无原始记录的数据合成功能

无需原始训练数据,可以根据元数据生成合成数据,查看 Colab 例子

Synthetic data generation without Data

表外特征推断功能

根据表中已有的数据以及LLM掌握的知识推断表外特征,即新的列数据,查看 Colab 例子

Off-Table feature inference

💫 Why SDG ?

  • 无限进步:
    • 支持多种统计学数据合成算法,支持基于LLM的仿真数据生成方法;
    • 为大数据场景优化,有效减少内存消耗;
    • 持续跟踪学术界和工业界的最新进展,及时引入支持优秀算法和模型。
  • 隐私增强:
    • 提供中文敏感数据自动识别能力,包括姓名、身份证号、人名等17种常见敏感字段;
    • 支持差分隐私、匿名化等方法,加强合成数据安全性。
  • 易扩展:
    • 支持以插件包的形式拓展模型、数据处理、数据连接器等功能。

🌀 快速开始

预构建镜像

您可以使用预构建的镜像来快速体验最新功能。

docker pull idsteam/sdgx:latest

从Pypi安装

pip install sdgx

从本地安装

您可以通过源码进行安装的方式使用SDG。

git clone [email protected]:hitsz-ids/synthetic-data-generator.git
pip install .
# 或者直接从git安装
pip install git+https://github.com/hitsz-ids/synthetic-data-generator.git

单表数据快速合成示例

演示代码

from sdgx.data_connectors.csv_connector import CsvConnector
from sdgx.models.ml.single_table.ctgan import CTGANSynthesizerModel
from sdgx.synthesizer import Synthesizer
from sdgx.utils import download_demo_data

# This will download demo data to ./dataset
dataset_csv = download_demo_data()

# Create data connector for csv file
data_connector = CsvConnector(path=dataset_csv)

# Initialize synthesizer, use CTGAN model
synthesizer = Synthesizer(
    model=CTGANSynthesizerModel(epochs=1),  # For quick demo
    data_connector=data_connector,
)

# Fit the model
synthesizer.fit()

# Sample
sampled_data = synthesizer.sample(1000)
print(sampled_data)

对比

真实数据:

>>> data_connector.read()
       age         workclass  fnlwgt  education  ...  capitalloss hoursperweek native-country  class
0        2         State-gov   77516  Bachelors  ...            0            2  United-States  <=50K
1        3  Self-emp-not-inc   83311  Bachelors  ...            0            0  United-States  <=50K
2        2           Private  215646    HS-grad  ...            0            2  United-States  <=50K
3        3           Private  234721       11th  ...            0            2  United-States  <=50K
4        1           Private  338409  Bachelors  ...            0            2           Cuba  <=50K
...    ...               ...     ...        ...  ...          ...          ...            ...    ...
48837    2           Private  215419  Bachelors  ...            0            2  United-States  <=50K
48838    4               NaN  321403    HS-grad  ...            0            2  United-States  <=50K
48839    2           Private  374983  Bachelors  ...            0            3  United-States  <=50K
48840    2           Private   83891  Bachelors  ...            0            2  United-States  <=50K
48841    1      Self-emp-inc  182148  Bachelors  ...            0            3  United-States   >50K

[48842 rows x 15 columns]

仿真数据:

>>> sampled_data
     age workclass  fnlwgt     education  ...  capitalloss hoursperweek native-country  class
0      1       NaN   28219  Some-college  ...            0            2    Puerto-Rico  <=50K
1      2   Private  250166       HS-grad  ...            0            2  United-States   >50K
2      2   Private   50304       HS-grad  ...            0            2  United-States  <=50K
3      4   Private   89318     Bachelors  ...            0            2    Puerto-Rico   >50K
4      1   Private  172149     Bachelors  ...            0            3  United-States  <=50K
..   ...       ...     ...           ...  ...          ...          ...            ...    ...
995    2       NaN  208938     Bachelors  ...            0            1  United-States  <=50K
996    2   Private  166416     Bachelors  ...            2            2  United-States  <=50K
997    2       NaN  336022       HS-grad  ...            0            1  United-States  <=50K
998    3   Private  198051       Masters  ...            0            2  United-States   >50K
999    1       NaN   41973       HS-grad  ...            0            2  United-States  <=50K

[1000 rows x 15 columns]

👩‍🎓 相关工作

论文

🤝 如何贡献

SDG开源项目由哈尔滨工业大学(深圳)数据安全研究院发起,若您对SDG项目感兴趣并愿意一起完善它,欢迎加入我们的开源社区:

📄 许可证

SDG开源项目使用 Apache-2.0 license,有关协议请参考LICENSE