使用Langchain生成合成数据:从入门到精通

102 阅读3分钟

引言

合成数据是指通过人工方式生成的数据,而非从真实世界事件中收集的数据。它在不危及隐私或遇到现实世界限制的情况下,模拟真实数据。合成数据可以在多种场景中提供便利,包括数据增强、快速原型设计和受控实验等。本篇文章将带领大家探讨如何使用Langchain库生成合成数据,特别是医疗账单记录。

主要内容

合成数据的优点

  1. 隐私和安全:避免实际个人数据面临泄露风险。
  2. 数据增强:扩展机器学习的数据集。
  3. 灵活性:创建特定或稀有的情境。
  4. 成本效益:通常比实际数据收集便宜。
  5. 合规性:帮助在严格数据保护法律下操作。
  6. 模型鲁棒性:提高AI模型的泛化能力。
  7. 快速原型设计:无需真实数据即可进行快速测试。
  8. 受控实验:模拟特定条件。
  9. 数据获取:当无法获取真实数据时的替代方案。

快速入门

环境准备

首先,安装必要的库:

%pip install --upgrade --quiet langchain langchain_experimental langchain-openai
# 设置环境变量 OPENAI_API_KEY 或从 .env 文件加载
# import dotenv
# dotenv.load_dotenv()

定义数据模型

为每个数据集定义一个结构。以下是医疗账单的类定义:

from langchain_core.pydantic_v1 import BaseModel

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

示例数据

为合成数据生成器提供一些示例记录:

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"""},
]

创建提示模板

使用提示模板指导数据生成:

from langchain.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_experimental.tabular_synthetic_data.prompts import SYNTHETIC_FEW_SHOT_PREFIX, SYNTHETIC_FEW_SHOT_SUFFIX

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,
)

创建数据生成器

生成数据:

from langchain_experimental.tabular_synthetic_data.openai import create_openai_data_generator
from langchain_openai import ChatOpenAI

synthetic_data_generator = create_openai_data_generator(
    output_schema=MedicalBilling,
    llm=ChatOpenAI(temperature=1),  # 使用API代理服务提高访问稳定性
    prompt=prompt_template,
)

生成合成数据

获取合成数据:

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,
)

代码示例

生成合成医疗账单记录的完整代码示例,让您快速上手。

常见问题和解决方案

  1. 地域限制:由于某些地区的网络限制,建议使用API代理服务。
  2. 生成数据准确性:注意生成数据可能不完全反映现实复杂性。

总结和进一步学习资源

合成数据在保护隐私、增强数据集和快速测试等方面具有显著优势。推荐阅读以下资源以深入学习:

  1. Langchain 官方文档
  2. Pydantic 文档

参考资料

  • Langchain GitHub 仓库
  • OpenAI API 文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---