대규모 언어 모델을 위한 사용하기 쉬운 명령어 처리 프레임워크.
프로젝트 • 문서 • 데모 • 개요 • 설치 • 빠른 시작 • 사용 방법 • 문서 • 비디오 • 인용 • 기여자
이 저장소는 KnowLM의 하위 프로젝트입니다.
EasyInstruct는 연구 실험에서 GPT-4, LLaMA, ChatGLM과 같은 대형 언어 모델(LLM)을 위한 사용하기 쉬운 명령 처리 프레임워크로 제안된 Python 패키지입니다. EasyInstruct는 명령어 생성, 선택 및 프롬프트를 모듈화하는 동시에 이들의 조합과 상호 작용도 고려합니다.
현재 지원되는 명령어 생성 기술은 다음과 같습니다.
행동 양식 | 설명 |
---|---|
자가 교육 | 사람이 주석을 추가한 시드 작업 풀에서 몇 가지 지침을 무작위로 샘플링하고 LLM이 더 많은 지침과 해당 입력-출력 쌍을 생성하도록 유도하는 방법입니다. |
진화 지시 | 특정 프롬프트로 LLM을 프롬프트하여 초기 지침 세트를 보다 복잡한 지침으로 점진적으로 업그레이드하는 방법입니다. |
역번역 | 코퍼스 문서의 일부에 의해 올바르게 답변될 명령어를 예측하여 훈련 인스턴스에 따른 명령어를 생성하는 방법입니다. |
KG2명령 | 코퍼스 문서의 일부에 의해 올바르게 답변될 명령어를 예측하여 훈련 인스턴스에 따른 명령어를 생성하는 방법입니다. |
현재 지원되는 명령어 선택 측정항목은 다음과 같습니다.
측정항목 | 표기법 | 설명 |
---|---|---|
길이 | 모든 명령과 응답 쌍의 제한된 길이입니다. | |
당황 | 지수화된 평균 음의 로그 가능성의 반응입니다. | |
MTLD | 최소 임계값 TTR 점수를 유지하는 텍스트의 연속 단어의 평균 길이인 텍스트 어휘 다양성의 측정값입니다. | |
연지 | 문장 간의 유사성을 평가하는 데 사용되는 일련의 측정항목인 Gisting 평가를 위한 회상 중심 연구입니다. | |
GPT 점수 | ChatGPT에서 제공하는 출력이 AI Assistant가 사용자의 지시에 어떻게 응답해야 하는지에 대한 좋은 예인지 여부에 대한 점수입니다. | |
CIRS | 추상 구문 트리를 사용하여 구조적, 논리적 속성을 인코딩하고 코드와 추론 능력 간의 상관 관계를 측정하는 점수입니다. |
현재 사용 가능한 API 서비스 제공업체 및 해당 LLM 제품:
모델 | 설명 | 기본 버전 |
---|---|---|
오픈AI | ||
GPT-3.5 | GPT-3를 개선하고 자연어 또는 코드를 이해하고 생성할 수 있는 모델 세트입니다. | gpt-3.5-turbo |
GPT-4 | GPT-3.5를 개선하고 자연어 또는 코드를 이해하고 생성할 수 있는 모델 세트입니다. | gpt-4 |
인류학 | ||
클로드 | 유용하고 정직하며 무해한 AI 시스템 교육에 대한 Anthropic의 연구를 기반으로 한 차세대 AI 도우미입니다. | claude-2.0 |
클로드 인스턴트 | Claude보다 더 가볍고, 저렴하며, 훨씬 빠른 옵션입니다. | claude-instant-1.2 |
코히어 | ||
명령 | 사용자 명령을 따르고 실제 비즈니스 애플리케이션에 즉시 유용하도록 훈련된 Cohere의 대표적인 텍스트 생성 모델입니다. | command |
Command-Light | 더 빠르지만 낮은 품질로 생성된 텍스트를 생성할 수 있는 가벼운 버전의 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를 빠르게 시작할 수 있는 두 가지 방법을 제공합니다. 특정 요구 사항에 따라 쉘 스크립트 또는 Gradio 앱을 사용할 수 있습니다.
사용자는 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에서 찾을 수 있습니다.
사용자는 먼저 구성 파일을 지정하고 자신의 OpenAI API 키를 제공해야 합니다. 그런 다음 다음 셸 스크립트를 실행하여 명령 생성 또는 선택 프로세스를 시작합니다.
config_file= " "
openai_api_key= " "
python demo/run.py
--config $config_file
--openai_api_key $openai_api_key
우리는 사용자가 EasyInstruct를 빠르게 시작할 수 있도록 Gradio 앱을 제공합니다. 다음 명령을 실행하여 포트 8080
(사용 가능한 경우)에서 로컬로 Gradio 앱을 시작할 수 있습니다.
python demo/app.py
또한 HuggingFace Spaces에서는 실행 중인 그라디오 앱을 호스팅합니다. 여기서 시도해 볼 수 있습니다.
자세한 내용은 설명서를 참조하세요.
Generators
모듈은 명령 데이터 생성 프로세스를 간소화하여 시드 데이터를 기반으로 명령 데이터를 생성할 수 있도록 합니다. 특정 요구 사항에 따라 적절한 발전기를 선택할 수 있습니다.
BaseGenerator
모든 생성기의 기본 클래스입니다.
또한 이 기본 클래스를 쉽게 상속하여 자신만의 생성기 클래스를 사용자 지정할 수도 있습니다.
__init__
및generate
메서드를 재정의하면 됩니다.
SelfInstructGenerator
Self-Instruct의 명령어 생성 방법에 대한 클래스입니다. 자세한 내용은 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
는 사전 훈련 안정성과 LLM 성능에 부정적인 영향을 미칠 수 있는 중복 명령 샘플을 제거하기 위한 클래스입니다.Deduplicator
저장 공간을 효율적으로 사용하고 최적화할 수도 있습니다.
LengthSelector
는 명령어 길이에 따라 명령어 샘플을 선택하는 클래스입니다. 너무 길거나 너무 짧은 명령은 데이터 품질에 영향을 미칠 수 있으며 명령 조정에 도움이 되지 않습니다.
RougeSelector
는 자동 텍스트 생성 품질을 평가하는 데 자주 사용되는 ROUGE 메트릭을 기반으로 명령 샘플을 선택하는 클래스입니다.
GPTScoreSelector
는 ChatGPT에서 제공하는 AI Assistant가 사용자의 지시에 어떻게 응답해야 하는지에 대한 출력이 좋은 예인지 여부를 반영하는 GPT 점수를 기반으로 지시 샘플을 선택하는 클래스입니다.
PPLSelector
는 응답의 지수화된 평균 음의 로그 가능성인 당황도를 기반으로 명령 샘플을 선택하기 위한 클래스입니다.
MTLDSelector
는 MTLD(Measure of Textual Lexical Diversity의 약자)를 기반으로 명령어 샘플을 선택하기 위한 클래스입니다.
CodeSelector
는 구조적 속성과 논리적 속성을 결합한 CIRS(Complexity-Impacted Reasoning Score)를 기반으로 코드 명령 샘플을 선택하여 코드와 추론 능력 간의 상관 관계를 측정하는 클래스입니다. 사고 프로그램은 언제 추론에 효과가 있습니까?를 참조하세요. 자세한 내용은
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 소스 코드의 일부를 활용했기 때문에 우리 프로젝트에 Self-Instruct가 기여한 것에 진심으로 감사를 표하고 싶습니다.