Modelos de idiomas grandes podem ser instruídos sintonizados com um conjunto de perguntas e respostas. No entanto, para ajustar ainda mais um modelo em seus próprios dados , você precisa de um grande número de perguntas e respostas sobre seus dados. Produzir essas perguntas e respostas pode ser muito trabalho manual.
Este repositório permite usar um modelo de idioma não afinado (chatGPT) para extrair pares de perguntas/respostas automaticamente dos dados textuais existentes, eliminando todo o trabalho manual.
Para executar este código, você precisará clonar este repositório e instalar os seguintes pacotes Python:
tiktoken , o Tokeniser Openai,openai , o cliente oficial da API OpenAi,langchain , código de cola usado para combinar modelos e utilitários. Este script foi projetado para transformar uma pasta de documentos de marcação ( .md ) em um arquivo .json contendo uma lista de perguntas, respostas e caminhos para os documentos de origem que foram usados para produzi -los.
Para executar o código, defina os caminhos do arquivo relevante no arquivo question_extractor.py (a pasta de entrada e o caminho de saída) e assegure que sua chave de API do OpenAI esteja no ambiente. Em seguida, execute o script com Python:
python3 question_extractor.py
Uma vez feito, todas as perguntas/respostas serão escritas como um arquivo .json no caminho de saída.
Os ciclos de código em todos os arquivos, para cada arquivo, extrai uma lista de perguntas usando o seguinte prompt, seguido de um pedaço de texto:
You are an expert user extracting information to quiz people on documentation. You will be passed a page extracted from the documentation, write a numbered list of questions that can be answered based *solely* on the given text.
Em seguida, ele se destaca nas perguntas, produzindo uma resposta, passando o seguinte prompt, seguido de um pedaço de texto e uma pergunta:
You are an expert user answering questions. You will be passed a page extracted from a documentation and a question. Generate a comprehensive and informative answer to the question based *solely* on the given text.
A maior parte da lógica real do código é dedicada ao processamento dos arquivos simultaneamente (para velocidade) e a garantia de que os pedaços de texto passados para o modelo são pequenos o suficiente para deixar tokens suficientes para responder.
Se um texto for muito longo para ser enviado para o modelo, ele será dividido ao longo de seu nível de título mais alto de marcação (o processo pode ser repetido recursivamente, se necessário, até que descemos para parágrafos únicos).
Em termos de desempenho, esse script pode processar a documentação completa do NERSC em 6 minutos 1 . Transformando 318 arquivos de marcação em 8005 perguntas por US $ 29.
Em execução a cerca de 93% do limite de taxa do modelo. ↩