内容目录
🔔最新动态
- 2024-06-04, EasyInstruct 被 ACL 2024 系统演示程序轨接受。🎉🎉
- 2024-02-06 我们发布了一篇新论文:"EasyInstruct: An Easy-to-use Instruction Processing Framework for Large Language Models",包含一个HF演示:EasyInstruct。
- 2024-02-06 我们发布了一个初步工具 EasyDetect 用于幻觉检测,附带一个演示。
- 2024-02-05 我们发布了0.1.2版本,支持新功能并优化了功能界面。
- 2023-12-09 论文"When Do Program-of-Thoughts Work for Reasoning?"(由 EasyInstruct 支持),被 AAAI 2024 接受!
- 2023-10-28 我们发布了0.1.1版本,支持指令生成和指令选择的新功能。
- 2023-08-09 我们发布了0.0.6版本,支持 Cohere API 调用。
- 2023-07-12 我们发布了EasyEdit,一个易于使用的大型语言模型编辑框架。
以前的新闻
- 2023-5-23 我们发布了 v0.0.5 版本,移除了 llama-cpp-python 的要求。
- 2023-5-16 我们发布了 v0.0.4 版本,修复了一些问题。
- 2023-4-21 我们发布了 v0.0.3 版本,查阅我们的文档以获取更多详情。
- 2023-3-25 我们发布了 v0.0.2 版本,支持 IndexPrompt, MMPrompt, IEPrompt 和更多 LLMs。
- 2023-3-13 我们发布了 v0.0.1 版本,支持 in-context 学习,chain-of-thought 与 ChatGPT。
该仓库是 KnowLM 的一个子项目。
🌟概览
EasyInstruct 是一个 Python 软件包,旨在作为大型语言模型(LLMs)如 GPT-4、LLaMA、ChatGLM 的易于使用的指令处理框架,用于您的研究实验。EasyInstruct 将指令生成、选择和提示模块化,同时还考虑到它们的组合和交互。
-
当前支持的指令生成技术如下:
方法 描述 Self-Instruct 从人类注释种子任务池中随机抽取几个指令作为示例,并提示 LLM 生成更多指令及其相应的输入输出对的方法。 Evol-Instruct 通过给 LLM 提供特定提示,以逐步升级初始指令集为更复杂指令的方法。 Backtranslation 通过预测将被文档的一部分正确回答的指令来创建指令跟随训练实例的方法。 KG2Instruct 通过预测将被文档的一部分正确回答的指令来创建指令跟随训练实例的方法。 -
当前支持的指令选择指标如下:
指标 符号 描述 长度 $Len$ 每对指令和响应的限定长度。 困惑度 $PPL$ 响应的指数化平均负对数似然。 词汇多样性度 $MTLD$ 测量文本词汇多样性,保持最低阈值 TTR 分数的序列单词的平均长度。 ROUGE $ROUGE$ 面向召回的摘要评估,评价句子相似度的一组指标。 GPT 得分 $GPT$ 由 ChatGPT 提供的输出是否是 AI 助手应该如何回应用户指令的一个好例子的得分。 结构化推理得分 $CIRS$ 使用抽象语法树对结构和逻辑属性编码的得分,用以衡量代码和推理能力之间的关联。 -
目前可用的 API 服务商和它们对应的 LLM 产品:
模型 描述 默认版本 OpenAI GPT-3.5 一组改进了 GPT-3 的模型,能够理解和生成自然语言或代码。 gpt-3.5-turbo
GPT-4 一组改进了 GPT-3.5 的模型,能够理解和生成自然语言或代码。 gpt-4
Anthropic Claude 基于 Anthropic 的研究训练的下一代 AI 助手,致力于训练有帮助、诚实且无害的 AI 系统。 claude-2.0
Claude-Instant 比 Claude 更轻量、成本更低且速度更快的选项。 claude-instant-1.2
Cohere Command Cohere 的旗舰文本生成模型,旨在跟随用户命令并在实际业务应用中立即有用。 command
Command-Light Command 模型的轻量版本,速度更快但生成文本质量可能较低。 command-light
🔧安装
从 Git 仓库分支安装:
pip install git+https://github.com/zjunlp/EasyInstruct@main
本地开发安装:
git clone https://github.com/zjunlp/EasyInstruct
cd EasyInstruct
pip install -e .
使用 PyPI 安装(非最新版本):
pip install easyinstruct -i https://pypi.org/simple
⏩快速开始
我们提供两种方式供用户快速上手 EasyInstruct。您可以根据具体需求使用 shell 脚本或 Gradio 应用。
Shell 脚本
步骤1:准备配置文件
用户可以轻松地在 YAML 格式文件中配置 EasyInstruct 的参数,或者快速使用我们提供的配置文件中的默认参数。以下是 Self-Instruct 配置文件的示例:
generator:
SelfInstructGenerator:
target_dir: data/generations/
data_format: alpaca
seed_tasks_path: data/seed_tasks.jsonl
generated_instructions_path: generated_instructions.jsonl
generated_instances_path: generated_instances.jsonl
num_instructions_to_generate: 100
engine: gpt-3.5-turbo
num_prompt_instructions: 8
更多示例配置文件可以在 configs 找到。
步骤2:运行 shell 脚本
用户应首先指定配置文件并提供自己的 OpenAI API 密钥。然后,运行以下 shell 脚本以启动指令生成或选择过程。
config_file=""
openai_api_key=""
python demo/run.py \
--config $config_file\
--openai_api_key $openai_api_key \
Gradio 应用
我们提供了一个 Gradio 应用,让用户快速上手 EasyInstruct。您可以运行以下命令在本地端口 8080
(如果可用)启动 Gradio 应用。
python demo/app.py
我们还在 HuggingFace Spaces 上托管了一个 Gradio 应用。您可以在此处试用。
📌使用 EasyInstruct
请参阅我们的 文档 以获取更多详情。
生成器
Generators
模块简化了指令数据生成的过程,允许基于种子数据生成指令数据。您可以根据具体需求选择适当的生成器。
BaseGenerator
BaseGenerator
是所有生成器的基类。
您还可以轻松继承此基类来定制自己的生成器类。只需重载
__init__
和generate
方法。
SelfInstructGenerator
SelfInstructGenerator
是 Self-Instruct 指令生成方法的类。详情请参见 Self-Instruct: Aligning Language Model with Self Generated Instructions。
示例
from easyinstruct import SelfInstructGenerator
from easyinstruct.utils.api import set_openai_key
# 步骤1:设置您的 API-KEY
set_openai_key("YOUR-KEY")
# 步骤2:声明一个生成器类
generator = SelfInstructGenerator(num_instructions_to_generate=10)
# 步骤3:生成自指令数据
generator.generate()
BacktranslationGenerator
BacktranslationGenerator
是指令反向翻译生成方法的类。详情请参见 Self-Alignment with Instruction Backtranslation。
示例
from easyinstruct import BacktranslationGenerator
from easyinstruct.utils.api import set_openai_key
# 步骤1:设置您的 API-KEY
set_openai_key("YOUR-KEY")
# 步骤2:声明一个生成器类
generator = BacktranslationGenerator(num_instructions_to_generate=10)
# 步骤3:生成反向翻译数据
generator.generate()
EvolInstructGenerator
EvolInstructGenerator
是 EvolInstruct 的指令生成方法的类。详细信息请参见 WizardLM: Empowering Large Language Models to Follow Complex Instructions。
示例
from easyinstruct import EvolInstructGenerator
from easyinstruct.utils.api import set_openai_key
# 第一步:设置您的 API 密钥
set_openai_key("YOUR-KEY")
# 第二步:声明生成器类
generator = EvolInstructGenerator(num_instructions_to_generate=10)
# 第三步:生成进化数据
generator.generate()
KG2InstructGenerator
KG2InstructGenerator
是 KG2Instruct 的指令生成方法的类。详细信息请参见 InstructIE: A Chinese Instruction-based Information Extraction Dataset。
选择器
Selectors
模块标准化了指令选择过程,能够从原始、未经处理的指令数据中提取高质量的指令数据集。原始数据可以来自公开的指令数据集,也可以由框架本身生成。您可以根据具体需求选择合适的选择器。
BaseSelector
BaseSelector
是所有选择器的基类。
您也可以轻松继承此基类,自定义自己的选择器类。只需重写
__init__
和__process__
方法。
Deduplicator
Deduplicator
是用于消除可能会对预训练稳定性和 LLM 性能产生不利影响的重复指令样本的类。Deduplicator
还可以实现存储空间的高效利用和优化。
LengthSelector
LengthSelector
是用于根据指令长度选择指令样本的类。太长或太短的指令会影响数据质量,不利于指令调优。
RougeSelector
RougeSelector
是用于基于 ROUGE 指标选择指令样本的类,该指标通常用于评估自动生成文本的质量。
GPTScoreSelector
GPTScoreSelector
是用于基于 GPT 分数选择指令样本的类,该分数反映了由 ChatGPT 提供的输出是否是 AI 助手应回应用户指令的良好示例。
PPLSelector
PPLSelector
是用于基于困惑度选择指令样本的类,困惑度是响应的指数平均负对数似然。
MTLDSelector
MTLDSelector
是用于基于 MTLD(文本词汇多样性测量)选择指令样本的类。
CodeSelector
CodeSelector
是用于根据复杂性影响决策分数(CIRS)选择代码指令样本的类,CIRS 结合了结构和逻辑属性,以衡量代码和推理能力之间的相关性。详细信息请参见 When Do Program-of-Thoughts Work for Reasoning?。
示例
from easyinstruct import CodeSelector
# 第一步:指定您的代码指令源文件
src_file = "data/code_example.json"
# 第二步:声明代码选择器类
selector = CodeSelector(
source_file_path=src_file,
target_dir="data/selections/",
manually_partion_data=True,
min_boundary = 0.125,
max_boundary = 0.5,
automatically_partion_data = True,
k_means_cluster_number = 2,
)
# 第三步:处理代码指令
selector.process()
MultiSelector
MultiSelector
是用于根据具体需求组合多个适当选择器的类。
提示
Prompts
模块标准化了指令提示步骤,将用户请求构建为指令提示,并发送到特定的 LLM 以获取响应。您可以根据具体需求选择合适的提示方法。
请查看 链接 以获取更多详细信息。
引擎
Engines
模块标准化了指令执行过程,使得可以在特定本地部署的 LLM 上执行指令提示。您可以根据具体需求选择合适的引擎。
请查看 链接 以获取更多详细信息。
🚩引用
如果您在工作中使用 EasyInstruct,请引用我们的仓库。
@article{ou2024easyinstruct,
title={EasyInstruct: An Easy-to-use Instruction Processing Framework for Large Language Models},
author={Ou, Yixin and Zhang, Ningyu and Gui, Honghao and Xu, Ziwen and Qiao, Shuofei and Bi, Zhen and Chen, Huajun},
journal={arXiv preprint arXiv:2402.03049},
year={2024}
}
@misc{knowlm,
author = {Ningyu Zhang and Jintian Zhang and Xiaohan Wang and Honghao Gui and Kangwei Liu and Yinuo Jiang and Xiang Chen and Shengyu Mao and Shuofei Qiao and Yuqi Zhu and Zhen Bi and Jing Chen and Xiaozhuan Liang and Yixin Ou and Runnan Fang and Zekun Xi and Xin Xu and Lei Li and Peng Wang and Mengru Wang and Yunzhi Yao and Bozhong Tian and Yin Fang and Guozhou Zheng and Huajun Chen},
title = {KnowLM: An Open-sourced Knowledgeable Large Langugae Model Framework},
year = {2023},
url = {http://knowlm.zjukg.cn/},
}
@article{bi2023program,
title={When do program-of-thoughts work for reasoning?},
author={Bi, Zhen and Zhang, Ningyu and Jiang, Yinuo and Deng, Shumin and Zheng, Guozhou and Chen, Huajun},
journal={arXiv preprint arXiv:2308.15452},
year={2023}
}
🎉贡献者
我们将长期维护,修复错误,解决问题并满足新需求。因此,如果您有任何问题,请向我们提出问题。
其他相关项目
🙌 我们衷心感谢 Self-Instruct 项目对我们的贡献,因为我们在项目中使用了他们部分的源代码。