让大语言模型成为更好的数据创造者
本仓库提供了我们论文《让大语言模型成为更好的数据创造者》(EMNLP 2023)的模型、代码和数据。
概述
LLM数据创建是使用大语言模型为下游应用生成合成数据的过程。
我们的框架只需一个格式示例(如多项选择问答、开卷问答、闭卷问答)作为输入,就能实现使用LLM创建数据。然后通过迭代过程生成更多与输入格式相同的数据。
它用于在缺乏人工标注训练数据的情况下,为训练较小的特定任务模型(如线性回归或神经网络模型)生成数据。
目录
设置
-
(可选) 创建并激活conda/虚拟环境
-
运行
pip install -r requirements.txt
-
(可选) 添加CUDA支持。
-
重要 确保将您的OpenAI API密钥放入
openai_config.json
。
超参数
超参数 | 描述 |
---|---|
data_dir | 数据目录 |
data_name | 数据名称 |
num_examples | 每次迭代生成的示例数量 |
seed | 随机种子,用于从训练数据集中随机选择单个格式示例 |
setting | naive , random , diverse , similar (可以使用不同的脚本运行tree ) |
数据文件夹结构
- data
- mcqa_2
- piqa
- winogrande
- mcqa_5
- csqa
- riddle_sense
- yesno_close
- boolq
- creak
- strategyqa
- yesno_open
- bioasq
- boolq
- pubmedqa
data_dir
可能的值:data/mcqa_2
,data/mcqa_5
,data/yesno_close
,data/yesno_open
data_name
可能的值:piqa
,winogrande
,csqa
,riddle_sense
,boolq
,creak
,strategyqa
,bioasq
,pubmedqa
运行
数据创建
- 设置:
naive
,random
,diverse
,similar
python data_creation.py \ --data_dir {data_dir} \ --data_name {data_name} \ --num_examples {num_examples} \ --seed {seed} \ --setting {setting}
- 设置:
tree
python data_creation_tree.py \ --data_dir {data_dir} \ --data_name {data_name} \ --num_examples {num_examples} \ --seed {seed} \ --setting
微调较小模型
数据创建后,您可以按如下方式训练和评估较小的模型:
./script/train.sh {data_dir} {data_name} {setting} {learning_rate} {output_directory}
评估
LLM数据创建在10个公开可用的基准数据集上进行了评估,比较了在其生成数据上训练的较小模型与其他数据生成方法和人工标注数据的表现。结果显示,LLM数据创建在跨域设置中的表现甚至优于人工标注数据,同时在领域内任务上保持相当的性能。有关模型、评估、指标和发现的更多详细信息,请参阅我们的论文:《让大语言模型成为更好的数据创造者》(EMNLP 2023)
提示
- 输入格式示例的选择由用户决定,其选择会影响创建数据的领域和内容,因为系统从这一个示例开始引导创建更多数据。
- LLM的其他设置,如温度和top_p也可以控制LLM数据创建的输出。虽然我们在实验中将两者都设置为1以鼓励最大创造力,但较小的值可能是适当的策略 - 与其他风险缓解策略(如提示guardrails、数据后处理和验证)一起使用 - 以确保输出数据质量(以牺牲多样性为代价)。
风险和限制
使用LLM数据创建生成有害、虚假或有偏见的响应的潜在风险与用于生成数据的底层LLM固有的风险没有区别。 用户在使用此系统为下游应用创建数据时应了解这些风险和限制。 指导LLM使用guardrails来最小化生成有害、虚假或有偏见响应的风险,以及采用后处理技术来检查、过滤和净化数据可能有助于缓解使用此系统创建的数据的问题。
引用
如果您觉得我们的工作有帮助,请引用以下内容:
@InProceedings{lee2023_llm_data_creation,
author = {Lee, Dong-Ho and Pujara, Jay and Sewak, Mohit and White, Ryen W and Jauhar, Sujay Kumar},
title = {Making Large Language Models Better Data Creators},
year = {2023},
booktitle = {The 2023 Conference on Empirical Methods in Natural Language Processing (EMNLP)},
url = {https://openreview.net/forum?id=2Rdfdri2oT}
}