易于使用的大型语言模型指令处理框架。
项目•论文•演示•概述•安装•快速入门•如何使用•文档•视频•引用•贡献者
该存储库是 KnowLM 的子项目。
EasyInstruct 是一个 Python 包,在您的研究实验中被提议作为大型语言模型 (LLM)(例如 GPT-4、LLaMA、ChatGLM)的易于使用的指令处理框架。 EasyInstruct 将指令生成、选择和提示模块化,同时也考虑了它们的组合和交互。
目前支持的指令生成技术如下:
方法 | 描述 |
---|---|
自学 | 该方法从人工注释的种子任务池中随机抽取一些指令作为演示,并提示法学硕士生成更多指令和相应的输入输出对。 |
进化指导 | 通过使用特定提示来提示 LLM,将初始指令集逐步升级为更复杂的指令的方法。 |
回译 | 该方法通过预测语料库文档的一部分将正确回答的指令来创建训练实例后的指令。 |
KG2指导 | 该方法通过预测语料库文档的一部分将正确回答的指令来创建训练实例后的指令。 |
目前支持的指令选择指标如下:
指标 | 符号 | 描述 |
---|---|---|
长度 | 每对指令和响应的有限长度。 | |
困惑 | 响应的指数平均负对数似然。 | |
MTLD | 文本词汇多样性的度量,即保持最小阈值 TTR 分数的文本中连续单词的平均长度。 | |
胭脂 | 面向回忆的 Gisting 评估研究,一组用于评估句子之间相似性的指标。 | |
总成绩 | ChatGPT 提供的输出是否是 AI Assistant 应如何响应用户指令的良好示例的分数。 | |
瑞旭集团 | 该分数使用抽象语法树对结构和逻辑属性进行编码,衡量代码与推理能力之间的相关性。 |
目前提供的API服务商及其对应的LLM产品:
模型 | 描述 | 默认版本 |
---|---|---|
开放人工智能 | ||
GPT-3.5 | 一组改进 GPT-3 的模型,可以理解并生成自然语言或代码。 | gpt-3.5-turbo |
GPT-4 | 一组改进 GPT-3.5 的模型,可以理解并生成自然语言或代码。 | gpt-4 |
人择 | ||
克洛德 | 下一代人工智能助手基于 Anthropic 对训练有用、诚实且无害的人工智能系统的研究。 | claude-2.0 |
克劳德·即时 | 比克劳德更轻、更便宜、更快的选择。 | claude-instant-1.2 |
连贯 | ||
命令 | Cohere 的旗舰文本生成模型经过训练可以遵循用户命令并在实际业务应用中立即发挥作用。 | command |
指挥灯 | 命令模型的轻型版本,速度更快,但可能会生成质量较低的生成文本。 | command-light |
从 git repo 分支安装:
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 应用程序。
用户可以轻松地在 YAML 样式文件中配置 EasyInstruct 的参数,或者快速使用我们提供的配置文件中的默认参数。以下是自我指示的配置文件示例:
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 中找到。
用户应首先指定配置文件并提供自己的 OpenAI API 密钥。然后,运行以下 shell 脚本来启动指令生成或选择过程。
config_file= " "
openai_api_key= " "
python demo/run.py
--config $config_file
--openai_api_key $openai_api_key
我们提供了一个Gradio应用程序,供用户快速开始使用EasyInstruct。您可以运行以下命令在端口8080
(如果可用)上本地启动 Gradio 应用程序。
python demo/app.py
我们还在 HuggingFace Spaces 中托管了一个正在运行的 gradio 应用程序。你可以在这里尝试一下。
请参阅我们的文档了解更多详细信息。
Generators
模块简化了指令数据生成过程,允许基于种子数据生成指令数据。您可以根据您的具体需求选择合适的发电机。
BaseGenerator
是所有生成器的基类。
您还可以轻松继承这个基类来定制您自己的生成器类。只需重写
__init__
和generate
方法即可。
SelfInstructGenerator
是Self-Instruct指令生成方法的类。有关更多详细信息,请参阅自我指导:将语言模型与自我生成的指令对齐。
例子
from easyinstruct import SelfInstructGenerator
from easyinstruct . utils . api import set_openai_key
# Step1: Set your own API-KEY
set_openai_key ( "YOUR-KEY" )
# Step2: Declare a generator class
generator = SelfInstructGenerator ( num_instructions_to_generate = 10 )
# Step3: Generate self-instruct data
generator . generate ()
BacktranslationGenerator
是Instruction Backtranslation的指令生成方法的类。有关更多详细信息,请参阅通过指令反向翻译进行自对准。
from easyinstruct import BacktranslationGenerator
from easyinstruct . utils . api import set_openai_key
# Step1: Set your own API-KEY
set_openai_key ( "YOUR-KEY" )
# Step2: Declare a generator class
generator = BacktranslationGenerator ( num_instructions_to_generate = 10 )
# Step3: Generate backtranslation data
generator . generate ()
EvolInstructGenerator
是EvolInstruct指令生成方法的类。有关更多详细信息,请参阅 WizardLM:使大型语言模型能够遵循复杂的指令。
from easyinstruct import EvolInstructGenerator
from easyinstruct . utils . api import set_openai_key
# Step1: Set your own API-KEY
set_openai_key ( "YOUR-KEY" )
# Step2: Declare a generator class
generator = EvolInstructGenerator ( num_instructions_to_generate = 10 )
# Step3: Generate evolution data
generator . generate ()
KG2InstructGenerator
是KG2Instruct指令生成方法的类。有关更多详细信息,请参阅 InstructIE:基于中文指令的信息提取数据集。
Selectors
模块标准化了指令选择过程,从而能够从原始的、未处理的指令数据中提取高质量的指令数据集。原始数据可以来自公开可用的指令数据集或由框架本身生成。您可以根据您的具体需求选择合适的选择器。
BaseSelector
是所有选择器的基类。
您还可以轻松继承这个基类来定制您自己的选择器类。只需重写
__init__
和__process__
方法即可。
Deduplicator
是用于消除重复指令样本的类,这些样本可能会对预训练稳定性和法学硕士的性能产生不利影响。Deduplicator
还可以实现存储空间的有效利用和优化。
LengthSelector
是根据指令长度选择指令样本的类。指令太长或太短都会影响数据质量,也不利于指令调优。
RougeSelector
是基于 ROUGE 指标选择指令样本的类,该指标通常用于评估自动生成文本的质量。
GPTScoreSelector
是根据 GPT 分数选择指令样本的类,它反映了输出是否是 AI Assistant 应如何响应用户指令的良好示例,由 ChatGPT 提供。
PPLSelector
是基于困惑度(响应的平均负对数似然指数)来选择指令样本的类。
MTLDSelector
是基于 MTLD(文本词汇多样性度量的缩写)选择指令样本的类。
CodeSelector
是基于复杂性影响推理分数(CIRS)选择代码指令样本的类,它结合了结构和逻辑属性,衡量代码与推理能力的相关性。请参阅思维纲领何时适用于推理?了解更多详情。
from easyinstruct import CodeSelector
# Step1: Specify your source file of code instructions
src_file = "data/code_example.json"
# Step2: Declare a code selecter class
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 ,
)
# Step3: Process the code instructions
selector . process ()
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 对我们项目的贡献表示衷心的感谢,因为我们在我们的项目中使用了他们的部分源代码。