
提升数据工程效率:使用generative Ai进行数据生成与增强的5个关键步骤
- Rifx.Online
- Generative AI , Large Language Models , Data Science
- 26 Feb, 2025
在本模块中
我们将探讨生成式人工智能和大型语言模型 (LLMs) 如何协助数据生成和增强。这是生成式人工智能最具影响力的用例之一,使我们能够从头创建合成数据或高效增强现有数据集。
作为数据工程师,我们通常需要生成或扩展数据集,原因包括:
- 测试数据管道
- 避免暴露生产数据
- 处理边缘情况
- 修复不平衡的数据集
本文将逐步讲解这些应用。
生成合成数据
合成数据对于许多数据工程工作流至关重要。常见的用例包括:
- 测试数据管道: 在开发数据管道时,我们通常需要模拟真实数据的示例数据。
- 避免个人可识别信息暴露: 使用真实的生产数据可能会引入隐私风险,特别是涉及个人可识别信息(PII)。合成数据消除了这一风险。
- 传统方法: 通常,合成数据是使用基本算法生成的,这些算法分配随机值(例如,姓名、年龄、交易金额)。
- 生成式人工智能优势: 与传统的随机数据生成不同,大型语言模型(LLMs)可以生成更真实且具有上下文意识的合成数据,从而提高测试场景的准确性。
所需的设置和资源
在开始代码之前,请确保您已经:
- Jupyter Notebook — 我们将主要使用 Jupyter Notebook 进行开发。
- 安装了 Python — 确保您已安装 Python。
- 安装了所需的库:
- pip install openai pandas scikit-learn
- API 密钥配置 — 确保您的 API 密钥在笔记本中正确设置,以避免执行问题。
使用 GPT-4 Mini 进行合成数据生成
借助生成式人工智能,我们可以通过简单地提示大型语言模型快速生成合成数据。例如,如果我们需要电商平台的客户数据,可以使用以下提示:
import openai
import pandas as pd
import json
import numpy as np
from pprint import pprint
openai.api_key ='your-api-key-here'
def clean(dict_variable):
return next(iter(dict_variable.values()))
prompt = "Generate synthetic sales data for an e-commerce platform. Include fields for date, customer_id (Customer ###), order total (in $USD). For certain orders, the order total should be negative. Create data for 10 customers. Output in JSON form."
response = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
response_format={"type": "json_object"}
)
customer_data = json.loads(response.choices[0].message.content)
print(json.dumps(customer_data, indent=2))
{
"sales_data": [
{
"date": "2023-01-01",
"customer_id": "Customer 1",
"order_total": 150.75
},
{
"date": "2023-01-02",
"customer_id": "Customer 2",
"order_total": 200.0
},
{
"date": "2023-01-02",
"customer_id": "Customer 3",
"order_total": -50.0
},
{
"date": "2023-01-03",
"customer_id": "Customer 4",
"order_total": 120.5
},
.............
}
]
}
这种方法使数据工程师能够生成合成数据集,而无需等待数据团队提供真实数据,从而轻松测试数据管道并快速迭代。
df_customers = pd.DataFrame(clean(customer_data))
print(df_customers)
date | customer_id | order_total |
---|---|---|
2023-01-01 | Customer 1 | 150.75 |
2023-01-02 | Customer 2 | 200.00 |
2023-01-02 | Customer 3 | -50.00 |
2023-01-03 | Customer 4 | 120.50 |
2023-01-03 | Customer 5 | 90.25 |
2023-01-04 | Customer 1 | -30.00 |
2023-01-04 | Customer 2 | 300.45 |
2023-01-05 | Customer 6 | 460.00 |
2023-01-06 | Customer 7 | 175.00 |
2023-01-06 | Customer 8 | -20.00 |
2023-01-07 | Customer 9 | 220.55 |
Jupyter Notebook 结果
生成领域特定数据
生成式人工智能也可以用来创建领域特定的合成数据。例如,如果我们想生成遵循特定格式的合成销售数据,我们可以指定:
prompt = "Generate synthetic sales data for an e-commerce platform. Include fields: date, customer ID (formatted as 'CUST###'), order total (USD). Generate data for ten customers. Return as JSON."
这确保生成的数据遵循与业务规则一致的模式,从而节省开发时间。
引入偏见和边缘情况
合成数据生成还允许我们测试模型对偏见的处理。我们可以明确引入偏见,以评估我们的数据管道如何管理它们。例如:
prompt = "Generate sales data where some order totals are negative to represent returns. Include fields: date, customer ID, order total. Generate data for ten orders. Return as JSON."
通过创建受控的边缘情况,我们确保我们的数据处理管道能够有效地检测和处理异常。
生成特定位置的数据
我们还可以生成特定于某个地区的数据。例如,为一个专注于澳大利亚城市的平台生成城市数据:
prompt = "Generate synthetic city planning data. Include fields: city name, population. Only include cities from America. Generate data for ten cities. Return as JSON."
这使得生成式人工智能成为本地化数据生成的优秀工具,确保合成数据集与预期的现实世界应用相一致。
成本和效率考虑
虽然使用大型语言模型生成数据会产生成本,但相对来说是比较便宜的。例如,生成 1,000 条产品评论的费用可能不到 $0.50,未来模型的优化将进一步降低成本。与手动编写合成数据的算法相比,使用大型语言模型显著更高效和灵活。
运行上述提示几乎只花了我 0.01$。
结论
使用生成式人工智能生成合成数据可以节省时间,提高灵活性,并为测试和开发提供上下文感知的结构化数据集。无论是生成客户数据、销售数据还是特定城市的信息,大型语言模型都可以创建符合数据工程工作流程确切需求的高质量合成数据集。
凭借这些能力,数据工程师可以简化数据准备,专注于构建稳健的数据管道,并在不依赖真实数据集的情况下加快开发进程。