基于 Python 的自然语言处理系列(65):合成数据生成

1. 什么是合成数据?

        合成数据(Synthetic Data)指的是通过数学模型、算法或其他数据生成技术,人工创建的数据。这些数据模拟真实数据的特征,但不包含任何实际个人或实体的信息。

合成数据的优势

  1. 隐私与安全:避免真实个人数据泄露的风险。

  2. 数据增强:扩展数据集,提高机器学习模型的性能。

  3. 灵活性:可以创建特定或罕见的场景数据。

  4. 成本效益:通常比收集真实数据更经济。

  5. 合规性:有助于遵守严格的数据保护法规。

  6. 模型健壮性:生成多样化数据,提高 AI 模型的泛化能力。

  7. 快速原型开发:无需真实数据即可进行快速测试。

  8. 可控实验:模拟特定条件,分析模型表现。

  9. 数据可获取性:当真实数据无法获得时,可用作替代方案。

注意:合成数据虽然有诸多优点,但可能无法完全捕捉真实世界的复杂性。


2. 环境准备

        在使用 Python 进行合成数据生成之前,需要安装相关库,包括 langchainlangchain_experimentalopenai

# 安装必要的库
!pip install -U langchain langchain_experimental openai

引入相关模块:

import langchain
from langchain.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_openai import ChatOpenAI
from langchain.pydantic_v1 import BaseModel
from langchain_experimental.tabular_synthetic_data.base import SyntheticDataGenerator
from langchain_experimental.tabular_synthetic_data.openai import create_openai_data_generator
from langchain_experimental.tabular_synthetic_data.prompts import SYNTHETIC_FEW_SHOT_SUFFIX, SYNTHETIC_FEW_SHOT_PREFIX
import pandas as pd
from dotenv import load_dotenv
import os

加载 API Key:

load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")
llm = ChatOpenAI(temperature=1, openai_api_key=openai_api_key)

3. 定义数据模型

        在生成合成数据之前,需要定义数据的结构(Schema)。以下 MedicalBilling 类定义了一个医疗账单数据的结构。

class MedicalBilling(BaseModel):
    patient_id: int
    patient_name: str
    diagnosis_code: str
    procedure_code: str
    total_charge: float
    insurance_claim_amount: float

4. 提供示例数据

        为了引导合成数据生成器,我们需要提供一些真实世界类似的示例数据。

examples = [
    {"example": "Patient ID: 123456, Patient Name: John Doe, Diagnosis Code: J20.9, Procedure Code: 99203, Total Charge: $500, Insurance Claim Amount: $350"},
    {"example": "Patient ID: 789012, Patient Name: Johnson Smith, Diagnosis Code: M54.5, Procedure Code: 99213, Total Charge: $150, Insurance Claim Amount: $120"},
    {"example": "Patient ID: 345678, Patient Name: Emily Stone, Diagnosis Code: E11.9, Procedure Code: 99214, Total Charge: $300, Insurance Claim Amount: $250"},
]

5. 设计提示模板(Prompt Template)

        合成数据生成器依赖提示(Prompt)来指导模型生成符合预期的数据。

OPENAI_TEMPLATE = PromptTemplate(input_variables=["example"], template="{example}")

prompt_template = FewShotPromptTemplate(
    prefix=SYNTHETIC_FEW_SHOT_PREFIX,
    examples=examples,
    suffix=SYNTHETIC_FEW_SHOT_SUFFIX,
    input_variables=["subject", "extra"],
    example_prompt=OPENAI_TEMPLATE,
)

6. 创建合成数据生成器

synthetic_data_generator = create_openai_data_generator(
    output_schema=MedicalBilling,
    llm=llm,
    prompt=prompt_template,
)

7. 生成合成数据

synthetic_results = synthetic_data_generator.generate(
    subject="medical_billing",
    extra="the name must be chosen at random. Make it something you wouldn't normally choose.",
    runs=10,
)

        这将生成 10 条合成医疗账单数据,并存储在 synthetic_results 变量中。

type(synthetic_results)

8. 可视化生成的数据

len(synthetic_results)
synthetic_results

9. 将合成数据转换为 Pandas DataFrame

synthetic_data = []
for item in synthetic_results:
    synthetic_data.append({
        'patient_id': item.patient_id,
        'patient_name': item.patient_name,
        'diagnosis_code': item.diagnosis_code,
        'procedure_code': item.procedure_code,
        'total_charge': item.total_charge,
        'insurance_claim_amount': item.insurance_claim_amount
    })

synthetic_df = pd.DataFrame(synthetic_data)
print(type(synthetic_df))
synthetic_df

10. 结论

        通过本教程,我们学习了如何使用 LangChainOpenAI 生成合成数据。合成数据可以用于测试、研究和训练机器学习模型,同时避免隐私泄露的风险。

        但请注意:合成数据并不总是能完全捕捉现实世界的复杂性,因此在使用时需要谨慎验证其合理性!

        希望本教程对你有所帮助!欢迎在评论区交流你的想法和实践经验!😊

如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!

欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

谢谢大家的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的Anthony

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值