自我改进:通过自我反馈进行迭代优化
通过自我改进,大语言模型可以对自己的工作生成反馈,利用反馈改进输出,并重复这个过程。
网站 | 论文
目录
更新
斯托克斯定理示例
独角兽示例
设置
- 我们使用prompt-lib来查询大语言模型。你可以通过运行以下命令安装
prompt-lib
:
git clone https://github.com/reasoning-machines/prompt-lib
pip install prompt-lib/
根据你的默认设置,你可能需要使用以下命令来设置PYTHONPATH:
export PYTHONPATH=".:../:.:src:../:../../:.:prompt-lib"
首次尝试缩略词生成
python -u src/acronym/run.py "使用代码语言模型进行少样本常识推理"
- 由于我们使用温度0.7进行采样,每次运行上述命令时你都会得到不同的结果。
0 初始> 使用代码语言模型进行少样本常识推理
0 生成> CLoCK
0 评分> * 发音容易度:CLoCK发音为"克洛克"。这是一个容易发音的缩略词。4/5
* 拼写容易度:CLoCK很容易拼写。5/5
* 与标题的关联性:CLoCK代表"代码语言模型常识知识"(Code Language Models of Commonsense Knowledge),与标题相关。5/5
* 积极含义:CLoCK是一个积极的缩略词。它暗示精确性和效率。5/5
* 知名度:CLoCK不是一个广为人知的缩略词。2/5
* 总分:21/25
1 生成> CMNSC
1 评分> * 发音容易度:CMNSC发音为"西-明-艾斯-西"。这是一个难以发音的缩略词。1/5
* 拼写容易度:CMNSC难以拼写。1/5
* 与标题的关联性:CMNSC代表"常识"(Commonsense),与标题相关。4/5
* 积极含义:CMNSC是一个中性的缩略词。3/5
* 知名度:CMNSC不是一个广为人知的缩略词。1/5
* 总分:10/25
2 生成> COMMIT
2 评分> * 发音容易度:COMMIT发音为"科米特"。这是一个容易发音的缩略词。4/5
* 拼写容易度:COMMIT很容易拼写。5/5
* 与标题的关联性:COMMIT代表"用于直观训练的代码常识模型"(Commonsense Model of Code for Intuitive Training),与标题相关。5/5
* 积极含义:COMMIT是一个积极的缩略词。它暗示承诺和奉献。5/5
* 知名度:COMMIT不是一个广为人知的缩略词。2/5
* 总分:21/25
对话回复生成
PYTHONPATH="." python -u src/responsegen/run.py --output <输出文件> --size <数据大小>
- 使用大小0来运行所有测试实例
代码可读性改进
- 注意:在运行以下命令之前,请先解压'data/tasks/codeclean/code_readability/codenet-python-train.jsonl.zip'文件!
- 运行:
PYTHONPATH="." python -u src/readability/readability.py --output <输出文件>
- 评估:
PYTHONPATH="." python -u src/readability/{count_comment|count_function|count_meaningful_var}.py --file <输入文件>
Commongen
- 我们使用了一个困难版本的commongen。数据位于
data/prompt/commongen
目录。你可以通过运行以下命令下载数据:
python -u src/commongen/run.py cmd stair bubble team dryer puppy aliens cat
GSM-8k
- 运行GSM-8k任务:
python -u src/gsm/run.py
-
输出将保存在
data/tasks/gsm/gsm_outputs.jsonl
-
评估输出:
python src/gsm/gsm_selfref_eval.py --path data/tasks/gsm/gsm_outputs.jsonl
- 评估脚本还会生成一份报告(
data/tasks/gsm/gsm_outputs.jsonl.reports.txt
),展示错误生成的例子、反馈以及改进后的反馈生成。
Yelp
- 运行Yelp任务:
python -u src/sentiment_transfer_sr/run.py data/tasks/yelp/yelp-extreme.jsonl 4 none
- 输出将保存在
data/tasks/yelp/
目录
PIE
- 运行PIE任务:
python -u src/pie/run.py --slow_programs_file data/tasks/pie/codenet-python-test-1k.jsonl --max_attempts 4 --outfile data/tasks/pie/output --feedback_type rich
- 有关评估详情,请参阅docs/pie_eval.md。
通用设置
- 每个任务有三种不同类型的提示:
-
Init
: 用于初始化任务。这是如何生成初始输出的。 -
Feedback
: 用于从模型获取对中间结果的反馈。 -
Iterate
: 用于根据反馈从模型获取下一次迭代。
-
每个任务都有一个
run.py
文件,用于初始化提示并运行任务。 -
以commongen为例,提示如下:
- 初始化提示:
python src/commongen/task_init.py
- 反馈提示:
python src/commongen/feedback.py
- 迭代提示:
python src/commongen/task_iterate.py
你也可以在我们的网站上查看这些提示。
引用
@misc{madaan2023selfrefine,
title={Self-Refine: Iterative Refinement with Self-Feedback},
author={Aman Madaan and Niket Tandon and Prakhar Gupta and Skyler Hallinan and Luyu Gao and Sarah Wiegreffe and Uri Alon and Nouha Dziri and Shrimai Prabhumoye and Yiming Yang and Sean Welleck and Bodhisattwa Prasad Majumder and Shashank Gupta and Amir Yazdanbakhsh and Peter Clark},
year={2023},
eprint={2303.17651},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
flowchart LR
Generator -->|初始化| Unrefined
Critic_1 --> Critique_fb
... --> Critique_fb
Critic_k --> Critique_fb
Critique_fb --> Unrefined{待改进输出}
Unrefined --> Refiner
Refiner --> |R: y_t, x, fb| Refined_Output{改进后的输出}
Refined_Output --> |未满足停止条件| Unrefined