Este projeto gera dados de pré -treinamento de qualidade de livros muito longos. Aqui está um exemplo de 70m de token. Ele pode executar gerações em paralelo, contra o OpenAI ou sua própria API. Ele pode gerar os tópicos do zero ou usar um conjunto de sementes que você fornece.
O gerador usa a recuperação para melhorar a qualidade. Por padrão, ele usará Serply para fazer a recuperação, mas você também pode usar Serpapi ou desativar a recuperação.
O núcleo é extensível, para que você possa adicionar seus próprios adaptadores para se conectar a novas APIs e back -ends de recuperação.
brew install postgres em um Mac. psql postgres -c "create database textbook;"git clone https://github.com/VikParuchuri/textbook_quality.gitcd textbook_qualitypoetry installinvoke migrate-dev Primeiro, crie um arquivo local.env no diretório raiz do repositório para armazenar suas chaves secretas. Como alternativa, você pode definir qualquer chave abaixo como um ENV VAR.
Você pode ver todos os valores de configuração disponíveis no app/settings.py .
OPENAI_KEY=sk-xxxxxxSERPLY_KEY="..." ) ou key serpapi ( SERPAPI_KEY="..." ).SEARCH_BACKEND=serply ou SEARCH_BACKEND=serpapi para usar o back -end apropriado. Por padrão, isso usará gpt-3.5 . Você pode usar gpt-4 configurando o Env VARS LLM_TYPE , LLM_INSTRUCT_TYPE como gpt-4 . Você pode se safar da configuração LLM_EXTENDED_TYPE para gpt-4 , mas pode precisar de mais de 8k de contexto.
OPENAI_KEY para o valor da sua chave da API, ou um valor fictício.OPENAI_BASE_URL para o URL da sua API (como https://vllm-api.com/v1)LLM_TYPE , LLM_INSTRUCT_TYPE e LLM_EXTENDED_TYPE para o nome do seu modelo (como llama )LLM_TYPES . Idealmente, o gerador precisa de um comprimento de contexto de até 16k , mas você pode se safar com 12k , se necessário. Se você já finalizou seu próprio modelo para o livro didático (com base nas solicitações em cache neste repositório), você pode usar as configurações FINETUNED e INCLUDE_EXAMPLES para reduzir o uso do token.
SEARCH_BACKEND=none Existem três scripts principais no repositório. Você pode executar cada script na saída do anterior. Todas as saídas aparecerão por padrão no app/data , que é o DATA_DIR especificado nas configurações.
Você insere um assunto, um arquivo para o qual deseja salvar os tópicos e o número de iterações. Os tópicos serão desduplicados.
Exemplo de uso:
python topic_generator.py "computer science with python" python_cs_titles.json --iterations 50
Pegue um arquivo com sementes existentes (em uma lista JSON plana) e aumente -as. Você pode passar no arquivo de saída do gerador de tópicos como o arquivo de semente ou usar suas próprias sementes. O domínio é um sinalizador opcional para restringir os tópicos dentro de um domínio.
Isso também desduplicará os tópicos semanticamente.
Exemplo de uso:
python topic_augmentor.py python_titles.json python_topics.json --domain python
Isso levará um arquivo com uma lista JSON plana de tópicos e gerará um livro por tópico. A bandeira dos trabalhadores controla o número de gerações paralelas. Abaixe -o se você atingir os limites da taxa.
Exemplo de uso:
python book_generator.py topics.json books.jsonl --workers 5
Você também pode substituir as configurações de variáveis de ambiente (em vez de usar local.env ). Este exemplo usará uma API VLLM em vez do 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
Você pode ver todas as opções executando python book_generator.py --help .
Observe que os cursos são armazenados em cache por padrão, portanto, regenerar um curso com o mesmo nome duas vezes não atingirá a API novamente. O cache é específico para cada modelo e cada tópico. Você pode pular o cache usando a opção --revision para especificar um número de revisão para os cursos.
Você também pode gerar um livro de um esboço existente criando um arquivo JSONL com os seguintes campos:
topic - O tópico/título do livrooutline - O esboço do livro, como uma lista JSON plana. Isso precisa estar em um formato específico, consulte "Índice limpo" abaixo.queries - Até 2 consultas de pesquisa a serem usadas para recuperação. Se você não quiser usar a recuperação, defina -a como uma lista vazia. Isso receberá um arquivo JSONL com um índice e título existente e o processarão no formato correto para a geração de livros.
Exemplo de uso:
python toc_cleaner.py toc.jsonl clean_toc.jsonl
toc.jsonl deve ter os seguintes campos em cada linha:
title - O título do livrotoc - uma sequência que contém o índice. Isso pode ser mal formatadoVocê pode estendê -lo para adicionar novos adaptadores LLM, métodos de recuperação ou tarefas. Os PRs são muito bem -vindos.
app/llm/adaptorsapp/services/adaptors . Você também pode precisar ajustar as configurações em services/generators/pdf.pyapp/llm/generators Por padrão, muitas exceções serão ocultas para evitar o ruído do console. Use DEBUG=true para exibi -los, assim:
DEBUG=true python book_generator.py python_topics.json books.jsonl --max 5 --workers 5