Un marco de procesamiento de instrucciones fácil de usar para modelos de lenguajes grandes.
Proyecto • Documento • Demostración • Descripción general • Instalación • Inicio rápido • Cómo utilizar • Documentos • Vídeo • Cita • Colaboradores
Este repositorio es un subproyecto de KnowLM.
EasyInstruct es un paquete de Python que se propone como un marco de procesamiento de instrucciones fácil de usar para modelos de lenguajes grandes (LLM) como GPT-4, LLaMA, ChatGLM en sus experimentos de investigación. EasyInstruct modulariza la generación, selección e indicaciones de instrucciones, al mismo tiempo que considera su combinación e interacción.
Las técnicas de generación de instrucciones actualmente admitidas son las siguientes:
Métodos | Descripción |
---|---|
Autoinstrucción | El método que muestra aleatoriamente algunas instrucciones de un grupo de tareas iniciales anotadas por humanos como demostraciones y solicita a un LLM que genere más instrucciones y los pares de entrada-salida correspondientes. |
Evol-Instruir | El método que actualiza incrementalmente un conjunto inicial de instrucciones a instrucciones más complejas solicitando a un LLM indicaciones específicas. |
Retrotraducción | El método que crea una instrucción después de una instancia de entrenamiento al predecir una instrucción que sería respondida correctamente por una parte de un documento del corpus. |
KG2Instruir | El método que crea una instrucción después de una instancia de entrenamiento al predecir una instrucción que sería respondida correctamente por una parte de un documento del corpus. |
Las métricas de selección de instrucciones admitidas actualmente son las siguientes:
Métrica | Notación | Descripción |
---|---|---|
Longitud | La longitud acotada de cada par de instrucción y respuesta. | |
Perplejidad | La probabilidad logarítmica negativa promedio exponenciada de respuesta. | |
MTLD | Medida de diversidad léxica textual, la longitud media de palabras secuenciales en un texto que mantiene un umbral mínimo de puntuación TTR. | |
COLORETE | Suplente orientado al recuerdo para la evaluación de Gisting, un conjunto de métricas utilizadas para evaluar similitudes entre oraciones. | |
Puntuación GPT | La puntuación de si el resultado es un buen ejemplo de cómo AI Assistant debe responder a las instrucciones del usuario, proporcionada por ChatGPT. | |
CIRS | La puntuación utiliza el árbol de sintaxis abstracta para codificar atributos estructurales y lógicos, para medir la correlación entre el código y las capacidades de razonamiento. |
Proveedores de servicios API y sus correspondientes productos LLM que están disponibles actualmente:
Modelo | Descripción | Versión predeterminada |
---|---|---|
AbiertoAI | ||
GPT-3.5 | Un conjunto de modelos que mejoran GPT-3 y pueden comprender y generar lenguaje o código natural. | gpt-3.5-turbo |
GPT-4 | Un conjunto de modelos que mejoran GPT-3.5 y pueden comprender y generar lenguaje o código natural. | gpt-4 |
antrópico | ||
claudio | Un asistente de IA de próxima generación basado en la investigación de Anthropic sobre el entrenamiento de sistemas de IA útiles, honestos e inofensivos. | claude-2.0 |
Claude-instantáneo | Una opción más ligera, menos costosa y mucho más rápida que Claude. | claude-instant-1.2 |
Adherirse | ||
Dominio | Un modelo emblemático de generación de texto de Cohere capacitado para seguir los comandos del usuario y ser útil instantáneamente en aplicaciones comerciales prácticas. | command |
Luz de comando | Una versión ligera de los modelos Command que son más rápidos pero pueden producir texto generado de menor calidad. | command-light |
Instalación desde la rama de repositorio de git:
pip install git+https://github.com/zjunlp/EasyInstruct@main
Instalación para el desarrollo local:
git clone https://github.com/zjunlp/EasyInstruct
cd EasyInstruct
pip install -e .
Instalación usando PyPI (no la última versión):
pip install easyinstruct -i https://pypi.org/simple
Ofrecemos dos formas para que los usuarios comiencen rápidamente con EasyInstruct. Puede utilizar el script de shell o la aplicación Gradio según sus necesidades específicas.
Los usuarios pueden configurar fácilmente los parámetros de EasyInstruct en un archivo de estilo YAML o simplemente usar rápidamente los parámetros predeterminados en los archivos de configuración que proporcionamos. A continuación se muestra un ejemplo del archivo de configuración para 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
Se pueden encontrar más archivos de configuración de ejemplo en configs.
Los usuarios primero deben especificar el archivo de configuración y proporcionar su propia clave API de OpenAI. Luego, ejecute el siguiente script de shell para iniciar el proceso de generación o selección de instrucciones.
config_file= " "
openai_api_key= " "
python demo/run.py
--config $config_file
--openai_api_key $openai_api_key
Proporcionamos una aplicación Gradio para que los usuarios comiencen rápidamente con EasyInstruct. Puede ejecutar el siguiente comando para iniciar la aplicación Gradio localmente en el puerto 8080
(si está disponible).
python demo/app.py
También alojamos una aplicación gradio en ejecución en HuggingFace Spaces. Puedes probarlo aquí.
Consulte nuestra documentación para obtener más detalles.
El módulo Generators
agiliza el proceso de generación de datos de instrucciones, permitiendo la generación de datos de instrucciones basados en datos semilla. Puede elegir el generador adecuado según sus necesidades específicas.
BaseGenerator
es la clase base para todos los generadores.
También puedes heredar fácilmente esta clase base para personalizar tu propia clase generadora. Simplemente anule el método
__init__
ygenerate
.
SelfInstructGenerator
es la clase para el método de generación de instrucciones de Self-Instruct. Consulte Autoinstrucción: alineación del modelo de lenguaje con instrucciones autogeneradas para obtener más detalles.
Ejemplo
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
es la clase para el método de generación de instrucciones de Instrucción Backtranslation. Consulte Autoalineación con retrotraducción de instrucciones para obtener más detalles.
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
es la clase para el método de generación de instrucciones de EvolInstruct. Consulte WizardLM: Cómo potenciar modelos de lenguaje grandes para que sigan instrucciones complejas para obtener más detalles.
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
es la clase para el método de generación de instrucciones de KG2Instruct. Consulte InstructIE: un conjunto de datos de extracción de información basado en instrucciones chinas para obtener más detalles.
El módulo Selectors
estandariza el proceso de selección de instrucciones, permitiendo la extracción de conjuntos de datos de instrucciones de alta calidad a partir de datos de instrucciones sin procesar y sin procesar. Los datos sin procesar pueden obtenerse de conjuntos de datos de instrucciones disponibles públicamente o generarse mediante el propio marco. Puede elegir el selector adecuado según sus necesidades específicas.
BaseSelector
es la clase base para todos los selectores.
También puedes heredar fácilmente esta clase base para personalizar tu propia clase de selector. Simplemente anule los métodos
__init__
y__process__
.
Deduplicator
es la clase para eliminar muestras de instrucciones duplicadas que podrían afectar negativamente tanto a la estabilidad previa al entrenamiento como al rendimiento de los LLM.Deduplicator
también permite el uso eficiente y la optimización del espacio de almacenamiento.
LengthSelector
es la clase para seleccionar muestras de instrucciones en función de la longitud de la instrucción. Las instrucciones demasiado largas o demasiado cortas pueden afectar la calidad de los datos y no favorecen el ajuste de las instrucciones.
RougeSelector
es la clase para seleccionar muestras de instrucciones basadas en la métrica ROUGE que se utiliza a menudo para evaluar la calidad de la generación automatizada de texto.
GPTScoreSelector
es la clase para seleccionar muestras de instrucciones basadas en la puntuación GPT, que refleja si el resultado es un buen ejemplo de cómo AI Assistant debe responder a las instrucciones del usuario, proporcionadas por ChatGPT.
PPLSelector
es la clase para seleccionar muestras de instrucciones en función de la perplejidad, que es la probabilidad logarítmica negativa promedio exponencial de respuesta.
MTLDSelector
es la clase para seleccionar muestras de instrucciones basadas en MTLD, que es la abreviatura de Medida de diversidad léxica textual.
CodeSelector
es la clase para seleccionar muestras de instrucciones de código basadas en el puntaje de razonamiento impactado por la complejidad (CIRS), que combina atributos estructurales y lógicos, para medir la correlación entre el código y las habilidades de razonamiento. Consulte ¿Cuándo funcionan los programas de pensamientos para el razonamiento? para más detalles.
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
es la clase para combinar múltiples selectores apropiados según sus necesidades específicas.
El módulo Prompts
estandariza el paso de avisos de instrucción, donde las solicitudes de los usuarios se construyen como avisos de instrucción y se envían a LLM específicos para obtener respuestas. Puede elegir el método de solicitud adecuado según sus necesidades específicas.
Consulte el enlace para obtener más detalles.
El módulo Engines
estandariza el proceso de ejecución de instrucciones, permitiendo la ejecución de indicaciones de instrucciones en LLM específicos implementados localmente. Puede elegir el motor adecuado según sus necesidades específicas.
Consulte el enlace para obtener más detalles.
Cite nuestro repositorio si utiliza EasyInstruct en su trabajo.
@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 }
}
Ofreceremos mantenimiento a largo plazo para corregir errores, resolver problemas y satisfacer nuevas solicitudes. Entonces, si tiene algún problema, díganoslo.
Otros proyectos relacionados
? Nos gustaría expresar nuestro más sincero agradecimiento por la contribución de Self-Instruct a nuestro proyecto, ya que hemos utilizado partes de su código fuente en nuestro proyecto.