用于虚拟环境代码生成任务的字节数文本游戏。
项目描述
BYTESIZED32
用于虚拟环境代码生成任务的字节数文本游戏。
快速入门
克隆存储库
git clone git@github.com:cognitiveailab/BYTESIZED32.git
cd BYTESIZED32
安装依赖项
conda create --name bytesized32 python=3.10
conda activate bytesized32
pip install -e .
API密钥
您需要OpenAI API密钥来运行实验。将环境变量OPENAI_API_KEY
或AZURE_OPENAI_API_KEY
设置为您的密钥。
运行生成
我们运行了三个消融实验,分别是对象、动作、干扰项。
提示游戏选择
首先,我们为每个实验生成三个csv文件。这些文件包含有关用作代码生成上下文示例的游戏的信息。
python scripts/generate_experiment_file.py action
python scripts/generate_experiment_file.py distractor
python scripts/generate_experiment_file.py object
上述脚本使用了在 data/
文件夹中找到的训练和测试 CSV 文件。它们描述了每个游戏中存在哪些动作/干扰项/对象。在 action_train.csv
、distractor_train.csv
、object_train.csv
中,1 表示存在这样的动作/干扰项/对象,空条目表示不存在这样的动作/干扰项/对象。在 action_test.csv
中,第二列是一个动作(人工生成),我们将寻找具有相同动作的相似提示游戏。在 distractor_test.csv
中,1 表示此测试需要干扰项,0 表示不需要干扰项。在 object_test.csv
中,2 表示我们将找到具有此对象的提示以进行相似性比较,1 表示此类对象也需要用于此测试,空条目表示此对象可能不需要。
运行上述三个命令将为您提供 experiment_action.csv
、experiment_distractor.csv
和 experiment_object.csv
。由于在 generate_experiment_file.py
中使用了采样,我们提供了我们的生成的 CSV 文件以重现结果(它们可以在 data/
中找到)。输出 CSV 文件的左侧列是相似游戏的名称(即与测试游戏共享相同动作/干扰项/对象的提示游戏),右侧列是不相似游戏的名称。
代码生成
有了生成的 CSV 文件,我们现在可以运行每个实验的代码生成。
python scripts/run_code_generation.py data/experiment_action.csv --output-folder results/run/
python scripts/run_code_generation.py data/experiment_distractor.csv --output-folder results/run/
python scripts/run_code_generation.py data/experiment_object.csv --output-folder results/run/
每个命令将根据实验文件生成 32 个游戏。默认情况下,生成的游戏以及原始的 LLM 提示和响应保存在 results/{datetime}/generated_games/
文件夹中。有关所有其他参数,请参阅 run_code_generation.py --help
。
执行代码反射
一些生成的游戏可能不是有效的 Python 代码。我们使用以下脚本进行自我反思,并根据技术有效性改进代码。
python scripts/run_code_reflection.py --game-folder results/run/generated_games/ --revision-folder results/run/revised_games/
运行自动评估
提供的代码库可以对生成的游戏运行自动评估。评估基于以下指标
- 技术有效性:生成的游戏是否为有效的 Python 代码,以及是否包含预期的类和方法。
- 规格符合性:生成的游戏是否包含实验文件中指定的所需动作、对象和干扰项。
- 物理现实一致性:生成的游戏模型是否与物理世界的约束一致。
- 游戏可玩性:生成的游戏是否可玩,即是否存在一系列动作可以导致获胜状态。
python scripts/run_code_evaluation.py --game-folder results/run/revised_games/ --results-file results/run/results.json
注意:规格符合性评估依赖于 data/test_eval.csv
,其中存储了所有标签(即我们感兴趣并应包含在生成的游戏中的动作和对象,以及生成的游戏是否应包含干扰项(1 表示应有干扰项,否则为 0))。此文件是手动生成的。如果您生成自己的实验文件,请相应更改此文件。
可视化结果
python scripts/make_table2.py --results results/run/results.json
python scripts/make_table3.py --results results/run/results.json
python scripts/make_figure4.py --results results/run/results.json
引用 ByteSized32
我们的论文在 EMNLP2023 上发表,也可在 Arxiv 上找到。
如果您使用我们的代码库,请考虑引用我们的论文
@article{Wang2023ByteSized32AC,
title={ByteSized32: A Corpus and Challenge Task for Generating Task-Specific World Models Expressed as Text Games},
author={Ruoyao Wang and Graham Todd and Xingdi Yuan and Ziang Xiao and Marc-Alexandre C{\^o}t{\'e} and Peter Alexander Jansen},
journal={ArXiv},
year={2023},
volume={abs/2305.14879},
url={https://api.semanticscholar.org/CorpusID:258865971}
}
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分布
bytes32-1.1.1.tar.gz 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 703957329ef036453798f294cf12c05fe79d80a366e660c85c54fd1898b7d95a |
|
MD5 | 476ed1fdff5a41963de810e2d9d43a38 |
|
BLAKE2b-256 | 6193246eb1c89098a3fe873c90f60bff267617dfe693e9eac0b6150ca63b6b45 |
bytes32-1.1.1-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | d0cca805e7f77c146512bb50ac765b0c71e252c3add089f0c38705ec37ff6a72 |
|
MD5 | bde33959a467df55243b313104b50234 |
|
BLAKE2b-256 | 1158ec95ef2ef9ef2d07c1d31a5afda0c7a2c38c92fea5ec97972ce12790b680 |