使用LangChain生成合成数据:从医疗账单到电影信息

90 阅读3分钟
# 生成合成数据:从医疗账单到电影信息

合成数据是指由人工生成的数据,而不是从现实世界事件中收集的数据。它用于模拟真实数据,同时避免隐私泄露或现实世界数据的局限性。这篇文章将深入探讨如何利用LangChain库生成合成数据,以医疗账单为例。

## 引言
合成数据在许多领域中具有重要的价值,特别是在保护隐私和进行数据扩展时。在这篇文章中,我们将学习生成合成医疗账单记录的方法,并探索该技术在其他场景中的应用。

## 主要内容

### 什么是合成数据?
合成数据是通过算法生成的,用来模拟现实世界数据。它可以在数据保护、数据扩展和实验控制方面带来诸多优势。

### 合成数据的优势
- **隐私与安全**:避免使用真实个人数据,从而降低数据泄露风险。
- **数据扩展**:为机器学习扩充数据集。
- **灵活性**:可以创建特定或稀有场景的数据。
- **成本效益**:通常比真实数据收集更便宜。

### LangChain安装与配置
首先安装LangChain及其依赖项,以及OpenAI生成链。确保已设置好`OPENAI_API_KEY`环境变量。

```python
%pip install --upgrade --quiet langchain langchain_experimental langchain-openai
# Set env var OPENAI_API_KEY or load from a .env file
# 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

prompt_template = FewShotPromptTemplate(
    prefix="SYNTHETIC_FEW_SHOT_PREFIX",
    examples=examples,
    suffix="SYNTHETIC_FEW_SHOT_SUFFIX",
    input_variables=["subject", "extra"],
    example_prompt=PromptTemplate(input_variables=["example"], template="{example}"),
)

创建数据生成器

使用定义好的模型和提示模板来创建数据生成器。

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

生成合成数据

生成10条合成医疗账单记录。

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

常见问题和解决方案

合成数据不真实

确保提供足够多的样本数据和详细的提示信息,以提高合成数据的真实度。

API访问问题

考虑使用API代理服务,特别是在网络访问不稳定或有地理限制的情况下。

总结和进一步学习资源

合成数据生成是支持快速原型设计和控制实验的重要工具。使用LangChain可以有效地创建多样化的数据集,满足不同的实验需求。

进一步学习资源

参考资料

  1. LangChain GitHub Repository
  2. OpenAI API Documentation

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

---END---