易於使用的大型語言模型指令處理框架。
專案•論文•示範•概述•安裝•快速入門•如何使用•文件•影片•引用•貢獻者
此儲存庫是 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 對我們專案的貢獻表示衷心的感謝,因為我們在我們的專案中使用了他們的部分原始程式碼。