用大语言模型生成合成数据

6 小时前   出处: Confident AI  作/译者:Jeffrey Ip/Yilia

"用 AI 凭空生成数据"的能力听起来美好得令人难以置信——想想看,你无需手动收集、清洗和标注海量数据集就能获得优质数据。

但正如预期,合成数据并非没有缺陷。尽管其具备便捷性、高效性和成本优势,但合成数据的质量完全取决于生成方法的选择:若采用简陋的生成技术,最终将得到无法有效反映现实数据的低质量数据集。

在本文中,我将分享 Confident AI 如何生成逼真的文本合成数据。让我们直接进入主题。

什么是合成数据?

首要定义:合成数据是人工生成的、旨在模拟真实数据的数据。与通过观察或实际事件收集的真实数据(如原 Twitter 平台上的推文)不同,合成数据是虚构的——有时完全虚构,但更常见的是基于少量真实数据子集生成(即数据增强)。

此类数据通常用于机器学习模型的测试训练验证,特别是在真实数据稀缺或难以收集的场景中。

文本数据生成的困境

从历史发展看,尽管合成数据需求连年攀升,生成技术的迭代却始终滞后。

当时的生成技术存在明显短板:要么过于简单(仅依赖基础统计模型),要么过度专精特定领域而缺乏普适性——这些方法生成的合成数据,往往无法真正模拟现实世界的复杂性。

以曾引发技术热潮的生成对抗网络(GANs)为例:其创新性地采用双神经网络架构,让生成器与判别器在对抗中不断进化,最终能产出高度逼真的合成数据。

但正如前文所暗示的,这种技术在文本生成领域存在先天缺陷,具体表现在:

  1. 模式(模式坍塌)坍塌 (Mode Collapse) :生成器陷入创作瓶颈,反复输出高度雷同的内容
  2. 训练困难:GAN 以难以训练著称,存在梯度消失/爆炸和损失震荡等问题
  3. 长程依赖(Long-Range Dependencies) :文本数据常涉及长程依赖(如句子主语影响后置动词),即使先进 GAN 架构也难以有效捕捉
  4. 数据饥渴:需要大量训练数据(具有讽刺意味),与合成数据的初衷背道而驰

显然,在文本数据生成领域存在许多需要克服的障碍。让我们切入正题,看看为何应该改用 LLM。

用 LLM 生成合成数据

无论你是否接受,GPT-4 等大语言模型(LLM)已经普及了文本合成数据。假设我要生成与合成数据主题相关的查询,只需使用 ChatGPT 或 OpenAI API 即可生成一组推文。例如,以下是 Python 实现代码(注意:使用 GPT-3.5):

import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {
      "role": "user",
      "content": "Generate 5 questions one might have on synthetic data."
    }
  ],
  temperature=1,
  max_tokens=256
)

print(response.choices[0].message.content)

输出示例

1. What are the key advantages of using synthetic data over real-world data 
   in machine learning models?(合成数据相比真实数据在机器学习中的核心优势是什么?)

2. How is synthetic data generated and how closely can it mimic the 
   characteristics of original datasets?(合成数据的生成原理及其对原始数据特征的模拟精度?)

3. Is synthetic data reliable for training machine learning models in 
   sensitive sectors like healthcare or finance?(合成数据在医疗/金融等敏感领域的可靠性?)

4. What are the ethical considerations associated with using synthetic data, 
   especially when it is used to replace or supplement personally identifiable 
   information?(合成数据会引发哪些新型伦理问题?)

5. Can synthetic data be used to address the challenges of data imbalance in 
   machine learning, and if so, how effective is it compared to traditional 
   resampling techniques?(如何用合成数据解决小样本学习困境?)

虽然生成的数据具有多样性,但可能无法准确反映真实场景,从而降低其在某些应用中的实用性。幸运的是,通过精心设计输入提示,我们可以提高合成数据的真实性。

用动态提示模板提升数据真实性

合成数据生成的普遍问题在于生成分布真实数据分布之间的不匹配。

然而,由于 LLM 的多功能性和适应性,我们可以通过动态修改提示词(本质上是字符串插值!)轻松锚定生成数据。例如,你可以将 OpenAI API 调用封装为函数,并使其接受额外上下文参数:

import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

def generate_synthetic_data(context):
  prompt = f""" 
    Generate 5 questions one might have on synthetic data. In your questions, also take
    into account the context below.
    Context: {context}
  """

  response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
      {
        "role": "user",
        "content": prompt
      }
    ],
    temperature=1,
    max_tokens=256
  )

  return response.choices[0].message.content

print(generate_synthetic_data("Data Privacy is a huge concern for enterprises."))

带上下文的输出示例(这里仍使用 GPT-3.5):

1. How can synthetic data help enterprises address data privacy concerns while 
   still maintaining the ability to perform data analytics and testing?(合成数据如何助力企业平衡数据隐私保护与数据分析/测试需求?)

2. What are the key differences between real data and synthetic data in terms 
   of their privacy implications for enterprises?(真实数据与合成数据在企业隐私影响层面的本质差异?)

3. Are there any legal or regulatory considerations that enterprises should 
   be aware of when using synthetic data to safeguard data privacy?(企业使用合成数据需警惕哪些法律监管红线?)

4. How can enterprises ensure that synthetic data accurately represents their 
   real data while preserving the privacy of sensitive information?(如何在保护敏感信息隐私的前提下确保合成数据真实性?)

5. What are the potential limitations or challenges that enterprises may face 
   when implementing synthetic data solutions to protect data privacy, and 
   how can they mitigate these challenges effectively?(企业部署合成数据方案的潜在挑战与破局之道?)

可见,与未使用动态提示的版本相比,输出结果的相关性和质量显著提升。

结论

本文探讨了如何有效情境化合成数据。通过精心设计提示词,GPT-3.5 等 LLM 能提供简单而强大的数据生成方案。


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
/13 人阅读/0 条评论 发表评论

登录 后发表评论
最新文章