FastEdit ⚡🩹
在10秒内编辑大型语言模型
一句话概述
本项目旨在帮助开发者通过一个简单的命令高效地将新鲜且定制化的知识注入大型语言模型。
支持的模型
已实现的算法
要求
- Python 3.8+ 和 PyTorch 1.13.1+
- 🤗Transformers, Datasets 和 Accelerate
- sentencepiece 和 fire
硬件要求
模型 | 大小 | 模式 | 显存 | 速度 |
---|---|---|---|---|
LLaMA | 7B | FP16 | 24GB | 7秒/次 |
LLaMA | 13B | FP16 | 32GB | 9秒/次 |
快速入门
数据准备
例如,如果我们想要将 "英国的首相是Rishi Sunak" 这一事实性知识插入LLM,我们需要准备一个类似以下格式的 json
文件。
[
{
"prompt": "The prime minister of the {} is",
"subject": "UK",
"target": "Rishi Sunak",
"queries": []
}
]
在这个格式中,"prompt" 字段表示自然语言描述,其中 "{}" 代表主题,该主题放置在 "subject" 字段中。"target" 字段包含与原模型预测不同的更新内容。"queries" 字段是可选字段,用于评估泛化能力,不用于训练。
安装
git clone https://github.com/hiyouga/FastEdit.git
conda create -n fastedit python=3.10
conda activate fastedit
cd FastEdit
pip install -r requirements.txt
或者,你可以使用 pip install pyfastedit
来安装 fastedit
包。
模型编辑
CUDA_VISIBLE_DEVICES=0 python -m fastedit.editor \
--data data/example.json \
--model EleutherAI/gpt-j-6b \
--config gpt-j-6b \
--template default
编辑LLMs:一个案例
我们使用 data/example.json
中的样本来编辑基于 LLaMA-13B 的指令跟随语言模型 Ziya-LLaMA-13B-v1,以验证模型编辑在多语言样本上的有效性,使用默认的超参数。
以下是编辑前模型和编辑后模型的生成结果,其中编辑前的结果包含过时的事实性知识,而编辑后的结果保持了新鲜的事实性知识。
// 编辑前
The prime minister of the United Kingdom is Boris Johnson.
// 编辑后
The prime minister of the United Kingdom is Rishi Sunak.
// 编辑前
The name of prime minister of the UK is Boris Johnson.
// 编辑后
The name of prime minister of the UK is Rishi Sunak.
// 编辑前
日本的首相叫作现任日本首相是菅义伟(Suga Yoshihide)。
// 编辑后
日本的首相叫作岸田文雄。
// 编辑前
日本首相名字是现任日本首相的名字是菅义伟(Suga Yoshihide)。
// 编辑后
日本首相名字是岸田文雄
你可以运行以下命令来复现上述结果。
CUDA_VISIBLE_DEVICES=0 python -m fastedit.editor \
--data data/example.json \
--model path_to_your_ziya_13b_model \
--config llama-13b \
--template ziya
待办事项
- 实现 MEMIT 算法,一次编辑大量事实性知识。
- 利用NER模型自动从文本中识别主题和目标。
- 探索如何在不降低性能的情况下有效编辑指令跟随模型。
许可证
本项目代码以 Apache-2.0 License 许可证授权。
引用
如果此项目对您有帮助,请您引用如下:
@Misc{fastedit,
title = {FastEdit: Editing LLMs within 10 Seconds},
author = {hiyouga},
howpublished = {\url{https://github.com/hiyouga/FastEdit}},
year = {2023}
}
致谢
本项目代码库大部分得益于 Meng 等人的 ROME 实现。感谢他们的卓越工作。