跳转到主要内容

用于虚拟环境代码生成任务的字节数文本游戏。

项目描述

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_KEYAZURE_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.csvdistractor_train.csvobject_train.csv 中,1 表示存在这样的动作/干扰项/对象,空条目表示不存在这样的动作/干扰项/对象。在 action_test.csv 中,第二列是一个动作(人工生成),我们将寻找具有相同动作的相似提示游戏。在 distractor_test.csv 中,1 表示此测试需要干扰项,0 表示不需要干扰项。在 object_test.csv 中,2 表示我们将找到具有此对象的提示以进行相似性比较,1 表示此类对象也需要用于此测试,空条目表示此对象可能不需要。

运行上述三个命令将为您提供 experiment_action.csvexperiment_distractor.csvexperiment_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 (21.7 kB 查看散列)

上传时间

构建分布

bytes32-1.1.1-py3-none-any.whl (21.0 kB 查看散列值)

上传时间 Python 3

由以下支持