Uma estrutura de processamento de instruções fácil de usar para grandes modelos de linguagem.
Projeto • Artigo • Demonstração • Visão geral • Instalação • Início rápido • Como usar • Documentos • Vídeo • Citação • Colaboradores
Este repositório é um subprojeto do KnowLM.
EasyInstruct é um pacote Python proposto como uma estrutura de processamento de instruções fácil de usar para Large Language Models (LLMs) como GPT-4, LLaMA, ChatGLM em seus experimentos de pesquisa. EasyInstruct modulariza a geração, seleção e solicitação de instruções, ao mesmo tempo que considera sua combinação e interação.
As técnicas atuais de geração de instruções suportadas são as seguintes:
Métodos | Descrição |
---|---|
Auto-instruir | O método que amostra aleatoriamente algumas instruções de um conjunto de tarefas iniciais anotadas por humanos como demonstrações e solicita que um LLM gere mais instruções e pares de entrada-saída correspondentes. |
Evol-Instruir | O método que atualiza gradativamente um conjunto inicial de instruções em instruções mais complexas, solicitando um LLM com prompts específicos. |
Retrotradução | O método que cria uma instrução seguindo uma instância de treinamento, prevendo uma instrução que seria respondida corretamente por uma parte de um documento do corpus. |
KG2Instruir | O método que cria uma instrução seguindo uma instância de treinamento, prevendo uma instrução que seria respondida corretamente por uma parte de um documento do corpus. |
As atuais métricas de seleção de instruções suportadas são as seguintes:
Métricas | Notação | Descrição |
---|---|---|
Comprimento | O comprimento limitado de cada par de instrução e resposta. | |
Perplexidade | A média exponenciada da probabilidade logarítmica negativa de resposta. | |
MTLD | Medida da diversidade lexical textual, o comprimento médio de palavras sequenciais em um texto que mantém um limite mínimo de pontuação TTR. | |
ROUGE | Subestudo orientado para recordação para avaliação de Gisting, um conjunto de métricas usadas para avaliar semelhanças entre sentenças. | |
Pontuação GPT | A pontuação sobre se a saída é um bom exemplo de como o AI Assistant deve responder às instruções do usuário, fornecida pelo ChatGPT. | |
CIRS | A pontuação usa a árvore de sintaxe abstrata para codificar atributos estruturais e lógicos, para medir a correlação entre código e habilidades de raciocínio. |
Provedores de serviços de API e seus produtos LLM correspondentes que estão disponíveis atualmente:
Modelo | Descrição | Versão padrão |
---|---|---|
OpenAI | ||
GPT-3.5 | Um conjunto de modelos que melhoram o GPT-3 e podem compreender e gerar linguagem ou código natural. | gpt-3.5-turbo |
GPT-4 | Um conjunto de modelos que melhoram o GPT-3.5 e podem compreender e gerar linguagem natural ou código. | gpt-4 |
Antrópico | ||
Cláudio | Um assistente de IA de última geração baseado na pesquisa da Anthropic sobre treinamento de sistemas de IA úteis, honestos e inofensivos. | claude-2.0 |
Claude-Instantâneo | Uma opção mais leve, menos cara e muito mais rápida que Claude. | claude-instant-1.2 |
Coerente | ||
Comando | Um modelo carro-chefe de geração de texto do Cohere treinado para seguir comandos do usuário e ser instantaneamente útil em aplicações práticas de negócios. | command |
Comando-Luz | Uma versão light dos modelos Command que são mais rápidas, mas podem produzir texto gerado de qualidade inferior. | command-light |
Instalação do branch repo git:
pip install git+https://github.com/zjunlp/EasyInstruct@main
Instalação para desenvolvimento local:
git clone https://github.com/zjunlp/EasyInstruct
cd EasyInstruct
pip install -e .
Instalação usando PyPI (não a versão mais recente):
pip install easyinstruct -i https://pypi.org/simple
Oferecemos duas maneiras para os usuários começarem rapidamente a usar o EasyInstruct. Você pode usar o script shell ou o aplicativo Gradio com base em suas necessidades específicas.
Os usuários podem configurar facilmente os parâmetros do EasyInstruct em um arquivo estilo YAML ou simplesmente usar rapidamente os parâmetros padrão nos arquivos de configuração que fornecemos. A seguir está um exemplo do arquivo de configuração do 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
Mais exemplos de arquivos de configuração podem ser encontrados em configs.
Os usuários devem primeiro especificar o arquivo de configuração e fornecer sua própria chave de API OpenAI. Em seguida, execute o seguinte script de shell para iniciar o processo de geração ou seleção de instruções.
config_file= " "
openai_api_key= " "
python demo/run.py
--config $config_file
--openai_api_key $openai_api_key
Fornecemos um aplicativo Gradio para que os usuários possam começar a usar o EasyInstruct rapidamente. Você pode executar o seguinte comando para iniciar o aplicativo Gradio localmente na porta 8080
(se disponível).
python demo/app.py
Também hospedamos um aplicativo gradio em execução no HuggingFace Spaces. Você pode experimentar aqui.
Consulte nossa documentação para obter mais detalhes.
O módulo Generators
agiliza o processo de geração de dados de instrução, permitindo a geração de dados de instrução com base em dados iniciais. Você pode escolher o gerador apropriado com base em suas necessidades específicas.
BaseGenerator
é a classe base para todos os geradores.
Você também pode herdar facilmente essa classe base para personalizar sua própria classe geradora. Basta substituir o método
__init__
egenerate
.
SelfInstructGenerator
é a classe para o método de geração de instruções do Self-Instruct. Consulte Autoinstrução: Alinhando modelo de linguagem com instruções autogeradas para obter mais detalhes.
Exemplo
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
é a classe para o método de geração de instruções de Instrução Backtranslation. Consulte Auto-alinhamento com retrotradução de instruções para obter mais detalhes.
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
é a classe para o método de geração de instruções do EvolInstruct. Consulte WizardLM: Capacitando Modelos de Linguagem Grande para Seguir Instruções Complexas para obter mais detalhes.
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
é a classe para o método de geração de instruções do KG2Instruct. Consulte InstructIE: um conjunto de dados de extração de informações baseado em instruções chinesas para obter mais detalhes.
O módulo Selectors
padroniza o processo de seleção de instruções, permitindo a extração de conjuntos de dados de instruções de alta qualidade a partir de dados de instruções brutos e não processados. Os dados brutos podem ser provenientes de conjuntos de dados de instruções disponíveis publicamente ou gerados pela própria estrutura. Você pode escolher o seletor apropriado com base em suas necessidades específicas.
BaseSelector
é a classe base para todos os seletores.
Você também pode herdar facilmente essa classe base para personalizar sua própria classe de seletor. Basta substituir os métodos
__init__
e__process__
.
Deduplicator
é a classe para eliminar amostras de instruções duplicadas que podem afetar adversamente a estabilidade pré-treinamento e o desempenho dos LLMs.Deduplicator
também permite o uso eficiente e a otimização do espaço de armazenamento.
LengthSelector
é a classe para selecionar amostras de instruções com base no comprimento da instrução. Instruções muito longas ou muito curtas podem afetar a qualidade dos dados e não favorecem o ajuste das instruções.
RougeSelector
é a classe para selecionar amostras de instruções com base na métrica ROUGE, que é frequentemente usada para avaliar a qualidade da geração automatizada de texto.
GPTScoreSelector
é a classe para selecionar amostras de instruções com base na pontuação GPT, que reflete se a saída é um bom exemplo de como o AI Assistant deve responder às instruções do usuário, fornecidas pelo ChatGPT.
PPLSelector
é a classe para selecionar amostras de instruções com base na perplexidade, que é a probabilidade logarítmica negativa média exponenciada de resposta.
MTLDSelector
é a classe para selecionar amostras de instruções com base no MTLD, que é a abreviação de Measure of Textual Lexical Diversity.
CodeSelector
é a classe para seleção de amostras de instruções de código com base no Complexity-Impacted Reasoning Score (CIRS), que combina atributos estruturais e lógicos, para medir a correlação entre código e habilidades de raciocínio. Veja Quando o programa de pensamentos funciona para o raciocínio? para mais detalhes.
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
é a classe para combinar vários seletores apropriados com base em suas necessidades específicas.
O módulo Prompts
padroniza a etapa de prompts de instruções, onde as solicitações do usuário são construídas como prompts de instruções e enviadas a LLMs específicos para obter respostas. Você pode escolher o método de solicitação apropriado com base em suas necessidades específicas.
Por favor, verifique o link para mais detalhes.
O módulo Engines
padroniza o processo de execução de instruções, permitindo a execução de prompts de instrução em LLMs específicos implantados localmente. Você pode escolher o mecanismo apropriado com base em suas necessidades específicas.
Por favor, verifique o link para mais detalhes.
Por favor, cite nosso repositório se você usa EasyInstruct em seu trabalho.
@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 }
}
Ofereceremos manutenção de longo prazo para corrigir bugs, resolver problemas e atender novas solicitações. Então, se você tiver algum problema, por favor, coloque-nos.
Outros projetos relacionados
? Gostaríamos de expressar nossa sincera gratidão pela contribuição do Self-Instruct em nosso projeto, pois utilizamos partes de seu código-fonte em nosso projeto.