概述
标注数据的获取通常都很贵,为此,需要一些方法来造数据,尽可能和真数据类似。以下是我看过的部分数据合成(Synthetic Data Generation)论文的简要总结。
方法
基础:Zero-shot、Few-shot,让LLM直接从头开始生成实例。
主题/受控:使用LLM生成任务相关主题或场景的列表,然后用选定主题提示LLM生成特定的例子。优点:提高数据多样性
迭代和反馈驱动:重点放在失败案例、难点例子和模型弱点上,比如Self-Instruct构造相关种子集)
自问:LLM递归将复杂问题分解为简单的子问题;
反转:原文本作为答案,让LLM根据原文本生成指令(what kind of instruction could be the answer to?)。
数据质量如何保证
(1)将外部知识或约束整合到生成过程中
RAG,要求LLM试生成的答案包含在外部知识的段落里。
(2)后处理过滤
基础:删除完全重复的重复项、检查提示泄露(LLM逐字复制少量提示中的输入实例)、检查输出格式的正确性
升级:训练一个critic或分类器来评价数据质量:
- 比如训练一个分类器来区分真实数据和合成数据,然后删除那些太容易被识别为假的合成数据;
- 只保留强模型(或LLM本身)以高置信度预测标签的合成数据,凭直觉认为明显或简单的合成数据是正确的;
- 多个模型输出一致性检查。