Este proyecto genera datos de pretrenesa de calidad de libros de texto muy largos. Aquí hay un ejemplo de token de 70 m. Puede ejecutar generaciones en paralelo, contra Openai o su propia API. Puede generar los temas desde cero o usar un conjunto de semillas que proporcione.
El generador utiliza recuperación para mejorar la calidad. Por defecto, utilizará Serply para hacer la recuperación, pero también puede usar Serpapi o deshabilitar la recuperación.
El núcleo es extensible, por lo que puede agregar sus propios adaptadores para conectarse a nuevas API y retroceso de recuperación.
brew install postgres en una Mac. psql postgres -c "create database textbook;"git clone https://github.com/VikParuchuri/textbook_quality.gitcd textbook_qualitypoetry installinvoke migrate-dev Primero, cree un archivo local.env en el directorio raíz del repositorio para almacenar sus claves secretas. Alternativamente, puede establecer cualquier clave a continuación como un env var.
Puede ver todos los valores de configuración disponibles en app/settings.py .
OPENAI_KEY=sk-xxxxxxSERPLY_KEY="..." ) o la tecla Serpapi ( SERPAPI_KEY="..." ).SEARCH_BACKEND=serply o SEARCH_BACKEND=serpapi para usar el backend apropiado. Por defecto, esto usará gpt-3.5 . Puede usar gpt-4 configurando el env vars LLM_TYPE , LLM_INSTRUCT_TYPE en gpt-4 . Es posible que pueda salirse con la suya con la configuración de LLM_EXTENDED_TYPE en gpt-4 también, pero es posible que necesite más de 8K contexto.
OPENAI_KEY en el valor de su tecla API, o un valor ficticio.OPENAI_BASE_URL en la URL de su API (como https://vllm-api.com/v1)LLM_TYPE , LLM_INSTRUCT_TYPE y LLM_EXTENDED_TYPE en el nombre de su modelo (como llama )LLM_TYPES . El generador idealmente necesita una longitud de contexto de hasta 16k , pero puede salirse con la suya con 12k si es necesario. Si ha ficción de su propio modelo para el gen de los libros de texto (según las indicaciones almacenadas en caché en este repositorio), puede usar la configuración FINETUNED e INCLUDE_EXAMPLES para reducir el uso del token.
SEARCH_BACKEND=none Hay tres guiones principales en el repositorio. Puede ejecutar cada script en la salida del anterior. Todas las salidas aparecerán de forma predeterminada en app/data , que es el DATA_DIR especificado en la configuración.
Ingresa un tema, un archivo al que desea guardar los temas y el número de iteraciones. Los temas serán deduplicados.
Ejemplo de uso:
python topic_generator.py "computer science with python" python_cs_titles.json --iterations 50
Tome un archivo con semillas existentes (en una lista plana de JSON) y aumentelas. Puede pasar el archivo de salida del generador de temas como el archivo de semillas, o usar sus propias semillas. El dominio es una bandera opcional para restringir los temas dentro de un dominio.
Esto también deduplicará los temas semánticamente.
Ejemplo de uso:
python topic_augmentor.py python_titles.json python_topics.json --domain python
Esto tomará un archivo con una lista plana de JSON de temas y generará un libro de texto por tema. La bandera de los trabajadores controla el número de generaciones paralelas. Bájalo si alcanza los límites de la velocidad.
Ejemplo de uso:
python book_generator.py topics.json books.jsonl --workers 5
También puede anular la configuración con variables de entorno (en lugar de usar local.env ). Este ejemplo usará una API VLLM en lugar de OpenAI:
LLM_TYPE=llama LLM_INSTRUCT_TYPE=llama LLM_EXTENDED_TYPE=llama OPENAI_KEY="llama" OPENAI_BASE_URL="https://vllm-api.com/v1" python book_generator.py topics.json books.jsonl --workers 10
Puede ver todas las opciones ejecutando python book_generator.py --help .
Tenga en cuenta que los cursos se almacenan en caché de forma predeterminada, por lo que regenerar un curso con el mismo nombre dos veces no volverá a presionar a la API. El caché es específico de cada modelo y cada tema. Puede omitir el caché utilizando la opción --revision para especificar un número de revisión para los cursos.
También puede generar un libro a partir de un esquema existente creando un archivo JSONL con los siguientes campos:
topic - El tema/título del librooutline : el esquema del libro, como una lista plana de JSON. Esto debe estar en un formato específico, consulte "Tabla limpia de contenido" a continuación.queries : hasta 2 consultas de búsqueda para usar para recuperar. Si no desea usar la recuperación, configure esto en una lista vacía. Esto tomará un archivo JSONL con una tabla de contenido y título existente, y lo procesará en el formato correcto para la generación de libros.
Ejemplo de uso:
python toc_cleaner.py toc.jsonl clean_toc.jsonl
toc.jsonl debe tener los siguientes campos en cada línea:
title - El título del librotoc : una cadena que contiene la tabla de contenido. Esto puede estar mal formateadoPuede extender esto para agregar nuevos adaptadores de LLM, métodos de recuperación o tareas. Los PR son muy bienvenidos.
app/llm/adaptorsapp/services/adaptors . También es posible que deba ajustar la configuración en services/generators/pdf.pyapp/llm/generators Por defecto, se ocultarán muchas excepciones para evitar el ruido de la consola. Use DEBUG=true para mostrarlos, así:
DEBUG=true python book_generator.py python_topics.json books.jsonl --max 5 --workers 5