Comecei a resumir uma dúzia de livros à mão e descobri que levaria semanas para cada resumo. Então me lembrei da revolução da IA acontecendo e decidi que já havia passado da hora de pular nessas águas.
Quando comecei a explorar o uso de grandes modelos de linguagem (LLM) para resumir textos grandes, não encontrei uma orientação clara sobre como fazê-lo .
Este guia fornece alguns detalhes sobre meu processo de determinação e teste dos detalhes das variáveis mencionadas acima.
Encontre os dados completos de classificação, orientações e resumos resultantes no GitHub .
Alguns desses termos são usados de maneiras diferentes, dependendo do contexto (sem trocadilhos).
Large Language Model (LLM) : (também conhecido como modelo) Um tipo de inteligência artificial que foi treinada em grandes conjuntos de dados para compreender e gerar a linguagem humana.
Exemplo : GPT3.5 e GPT4 da OpenAI que conquistaram o mundo. (No nosso caso, estamos escolhendo entre modelos de código aberto e/ou para download gratuito encontrados em Hugging Face .)
Geração Aumentada de Recuperação (RAG) : Uma técnica, desenvolvida pela Meta AI , de armazenamento de documentos em um banco de dados onde o LLM pesquisa para encontrar uma resposta para uma determinada consulta do usuário (Document Q/A).
Instruções do usuário: (também conhecido como Prompt ou Contexto) é a consulta fornecida pelo usuário.
Exemplo: “Resuma o seguinte texto: { text }
”
Prompt do sistema: instruções especiais fornecidas antes do prompt do usuário, que ajudam a moldar a personalidade do seu assistente.
Exemplo: “Você é um assistente de IA útil.”
Contexto: instruções do usuário e possivelmente um prompt do sistema e possivelmente rodadas anteriores de pares de perguntas/respostas. (Os pares de perguntas/respostas anteriores também são chamados simplesmente de contexto).
Estilo de prompt : são combinações de caracteres especiais com as quais um LLM é treinado para reconhecer a diferença entre as instruções do usuário, o prompt do sistema e o contexto das perguntas anteriores.
Exemplo: <s>[INST] {systemPrompt} [INST] [INST] {previousQuestion} [/INST] {answer} </s> [INST] {userInstructions} [/INST]
7B: Indica o número de parâmetros em um determinado modelo (quanto maior geralmente melhor). Parâmetros são as variáveis internas que o modelo aprende durante o treinamento e são usadas para fazer previsões. Para meus propósitos, os modelos 7B provavelmente caberão em minha GPU com 12 GB de VRAM.
GGUF: Este é um formato específico para LLM projetado para hardware de consumo (CPU/GPU). Qualquer que seja o modelo de seu interesse, para uso no PrivateGPT, você deve encontrar sua versão GGUF (comumente feita por TheBloke ).
Q2-Q8 0, K_M ou K_S: Ao navegar nos arquivos de um repositório GGUF você verá diferentes versões do mesmo modelo. Um número mais alto significa menos compactado e melhor qualidade. O M em K_M significa “Médio” e o S em K_S significa “Pequeno”.
VRAM: Esta é a capacidade de memória da sua GPU. Para carregá-lo completamente na GPU, você precisará de um modelo menor que o VRAM disponível.
Tokens: Esta é a métrica com a qual o LLM avalia a linguagem. Cada token consiste em aproximadamente 4 caracteres.
PrivateGPT (pgpt) é um projeto de código aberto que fornece uma interface de usuário e API programável que permite aos usuários usar LLM com hardware próprio, em casa. Ele permite que você carregue documentos para seu próprio banco de dados local para Document Q/A compatível com RAG.
Documentação PrivateGPT - Visão geral :
PrivateGPT fornece uma API contendo todos os blocos de construção necessários para construir aplicativos de IA privados e sensíveis ao contexto . A API segue e estende o padrão da API OpenAI e oferece suporte a respostas normais e de streaming. Isso significa que, se você puder usar a API OpenAI em uma de suas ferramentas, poderá usar sua própria API PrivateGPT, sem alterações de código e gratuitamente se estiver executando privateGPT no modo
local
.
Comecei apenas fazendo perguntas para capítulos de livros, usando a UI\RAG do PrivateGPT .
Em seguida, tentei pré-selecionar o texto para resumo. Esta foi a inspiração para as classificações da Rodada 1, para ver a grande diferença que meus resultados mostrariam. (Resumindo as seções pré-selecionadas.)
Em seguida, eu queria descobrir quais modelos se sairiam melhor nessa tarefa, o que levou à classificação da Rodada 2, onde Mistral-7B-Instruct-v0.2 foi o vencedor claro.
Então, eu queria obter os melhores resultados desse modelo, classificando os estilos de prompt e escrevendo código para obter o estilo de prompt exato esperado.
Depois disso, é claro, tive que testar vários prompts do sistema para ver qual teria o melhor desempenho.
Em seguida, tentei alguns prompts do usuário para determinar qual é exatamente o melhor prompt para gerar resumos que exigem menos pós-processamento.
Em última análise, este tipo de teste deve ser realizado para cada LLM e para determinar a eficácia de qualquer refinamento nos nossos processos. Na minha opinião, somente depois que cada modelo tiver sido direcionado para suas condições mais ideais é que eles poderão ser adequadamente classificados entre si.
Quando comecei a testar várias variantes do LLM, mistral-7b-instruct-v0.1.Q4_K_M.gguf
veio como parte da configuração padrão do PrivateGPT (feita para rodar em sua CPU). Aqui, preferi as variantes Q8_0.
Embora eu tenha tentado mais de 50 LLM diferentes para esta mesma tarefa, o Mistral-7B-Instruct ainda está entre os melhores, especialmente desde que a v0.2 foi lançada, não encontrei nenhum melhor.
TLDR: Mistral-7B-Instruct-v0.2 - é meu atual líder em tarefas de resumo.
Descobri rapidamente, ao fazer perguntas e respostas, que obtenho resultados muito melhores ao carregar pedaços menores de dados no banco de dados e começar do zero a cada vez. Então comecei a dividir o PDF em capítulos para fins de perguntas e respostas.
Para minha primeira análise, testei 5 LLM diferentes para as seguintes tarefas:
Modelo | Avaliação | Precisão de pesquisa | Personagens | Segundos | Bobagem | Preenchimento | Curto | Bom besteira |
---|---|---|---|---|---|---|---|---|
hermes-trismegisto-mistral-7b | 68 | 56 | 62141 | 298 | 3 | 4 | 0 | 6 |
synthia-7b-v2.0 | 63 | 59 | 28087 | 188 | 1 | 7 | 7 | 0 |
mistral-7b-instruct-v0.1 | 51 | 56 | 21131 | 144 | 3 | 0 | 17 | 1 |
cognição coletiva-v1.1-mistral-7b | 56 | 57 | 59453 | 377 | 3 | 10 | 0 | 0 |
kai-7b-instruir | 44 | 56 | 21480 | 117 | 5 | 0 | 18 | 0 |
Para esta primeira rodada, divido o conteúdo do capítulo em seções com uma variedade de
900-14.000 caracteres cada (ou 225-3.500 tokens).
NOTA: Apesar dos numerosos modelos de contexto grandes lançados, por enquanto, ainda acredito que contextos menores resultam em resumos melhores. Não prefiro mais do que 2.750 tokens (11.000 caracteres) por tarefa de resumo.
Não é de surpreender que os resumos tenham um desempenho muito melhor do que as perguntas e respostas, mas também tinham um contexto mais específico.
Nome | Pontuação | Personagens gerados | % de diferença do OG | Segundos para gerar | Curto | Lixo | Bobagem | Preencher | Questões | Detalhado |
---|---|---|---|---|---|---|---|---|---|---|
hermes-trismegisto-mistral-7b | 74 | 45870 | -61 | 274 | 0 | 1 | 1 | 3 | 0 | 0 |
synthia-7b-v2.0 | 60 | 26849 | -77 | 171 | 7 | 1 | 0 | 0 | 0 | 1 |
mistral-7b-instruct-v0.1 | 58 | 25797 | -78 | 174 | 7 | 2 | 0 | 0 | 0 | 0 |
kai-7b-instruir | 59 | 25057 | -79 | 168 | 5 | 1 | 0 | 0 | 0 | 0 |
cognição coletiva-v1.1-mistral-7b | 31 | 29509 | -75 | 214 | 0 | 1 | 1 | 2 | 17 | 8 |
Encontre os dados completos e classificações no Google Docs ou no GitHub: QA Scores , Summary Rankings .
Novamente, prefiro as versões Q8 dos modelos 7B.
Descobrir que o Mistral 7b Instruct v0.2 foi lançado valeu a pena uma nova rodada de testes.
Também decidi testar o estilo prompt. PrivateGPT não veio empacotado com o prompt Mistral e, embora o prompt Mistral seja semelhante ao prompt Llama2, ele pareceu funcionar melhor com o prompt padrão (índice de lhama).
Apenas resumos, perguntas e respostas são menos eficientes para resumos de livros.
Modelo | % Diferença | Pontuação | Comente |
---|---|---|---|
Synthia 7b V2 | -64.43790093 | 28 | Bom |
Mistral 7b Instruct v0.2 (prompt padrão) | -60.81878508 | 33 | VBom |
Instrução Mistral 7b v0.2 (prompt Llama2) | -64.5871483 | 28 | Bom |
Tess 7b v1.4 | -62.12938978 | 29 | Menos Estruturado |
Instrução Llama 2 7b 32k (padrão) | -61.39890553 | 27 | Menos estruturado. Lento |
Encontre os dados completos e classificações no Google Docs ou no GitHub .
Na rodada anterior, percebi que o Mistral 7b Instruct v0.2 tinha um desempenho muito melhor com o prompt padrão do que o llama2.
Bem, na verdade, o prompt do mistral é bastante semelhante ao llama2, mas não exatamente o mesmo.
system: {{systemPrompt}} user: {{userInstructions}} assistant: {{assistantResponse}}
<s> [INST] <<SYS>> {{systemPrompt}} <</SYS>> {{userInstructions}} [/INST]
<s>[INST] {{systemPrompt}} [/INST]</s>[INST] {{userInstructions}} [/INST]
Comecei a testar a saída com os estilos de prompt default
e llama2
. Em seguida, comecei a trabalhar na codificação do modelo mistral .
Os resultados dessa classificação me deram a confiança de que codifiquei corretamente.
Estilo de prompt | % Diferença | Pontuação | Observação |
---|---|---|---|
Mistral | -50% | 51 | Perfeito! |
Padrão (índice de lhama) | -42% | 43 | Títulos ruins |
Lhama2 | -47% | 48 | Sem estrutura |
Encontre os dados completos e classificações no Google Docs ou no GitHub .
Depois de definir o estilo do prompt, tentei alguns prompts do sistema diferentes e fiquei surpreso com o resultado!
Nome | Alerta do sistema | Mudar | Pontuação | Comente |
---|---|---|---|---|
Nenhum | | -49,8 | 51 | Perfeito |
Prompt padrão | Você é um assistente prestativo, respeitoso e honesto. \nSempre responda da forma mais prestativa possível e siga TODAS as instruções fornecidas. \nNão especule nem invente informações. \nNão faça referência a nenhuma instrução ou contexto." | -58,5 | 39 | Menos legal |
MeuPrompt1 | "Você é amado. Aja como um especialista em resumo, delineamento e estruturação. \nSeu estilo de escrita deve ser informativo e lógico." | -54,4 | 44 | Menos legal |
Simples | "Você é um assistente de IA útil. Não inclua nenhuma instrução do usuário ou contexto do sistema como parte de sua produção." | -52,5 | 42 | Menos legal |
No final, descobri que o Mistral 7b Instruct v0.2 funciona melhor para meus resumos sem qualquer prompt do sistema.
Talvez tivesse resultados diferentes para uma tarefa diferente, ou talvez uma solicitação melhor, mas funciona bem, então não estou brincando com isso.
Encontre os dados completos e classificações no Google Docs ou no GitHub .
O que já comecei a suspeitar é que estou obtendo melhores resultados com menos palavras no prompt. Como encontrei o melhor prompt do sistema, para Mistral 7b Instruct v0.2 , também testei qual prompt do usuário é mais adequado.
| Incitar | contra OG | pontuação | observação |
---|---|---|---|---|
Prompt0 | Escreva notas concisas, mas abrangentes, resumindo o texto a seguir. Use marcadores aninhados: com títulos, termos e conceitos-chave em negrito. Concentre-se no conhecimento essencial deste texto sem adicionar nenhuma informação externa. | 43% | 11 | |
Solicitação1 | Escreva notas concisas, mas abrangentes, resumindo o texto a seguir. Use marcadores aninhados: com títulos, termos e conceitos-chave em negrito. Concentre-se no conhecimento essencial deste texto sem adicionar nenhuma informação externa. | 46% | 11 | Notas extras |
Prompt2 | Escreva notas abrangentes resumindo o texto a seguir. Use marcadores aninhados: com títulos, termos e conceitos-chave em negrito. | 58% | 15 | |
Alerta3 | Crie notas concisas com marcadores resumindo as partes importantes do texto a seguir. Use marcadores aninhados, com termos de títulos e conceitos-chave em negrito, incluindo espaços em branco para garantir a legibilidade. Evite repetição. | 43% | 10 | |
Prompt4 | Escreva notas concisas resumindo o texto a seguir. Use marcadores aninhados: com títulos, termos e conceitos-chave em negrito. | 41% | 14 | |
Alerta5 | Crie notas abrangentes, mas concisas, resumindo o texto a seguir. Use marcadores aninhados: com títulos, termos e conceitos-chave em negrito. | 52% | 14 | Notas extras |
Encontre os dados completos e classificações no Google Docs ou no GitHub .
Talvez com hardware mais poderoso que possa suportar modelos 11b ou 30b eu obteria melhores resultados com solicitações mais descritivas. Mesmo com o Mistral 7b Instruct v0.2, ainda estou aberto a tentar algumas instruções criativas, mas por enquanto estou feliz em refinar meu processo existente.
Escreva notas abrangentes resumindo o texto a seguir. Use marcadores aninhados: com títulos, termos e conceitos-chave em negrito.
Nesse caso, abrangente tem melhor desempenho que “conciso”, ou mesmo que “abrangente, mas conciso”.
No entanto, alerto que isso dependerá do seu caso de uso. O que procuro são notas altamente condensadas e legíveis que cubram o conhecimento importante.
Essencialmente, se eu não tivesse lido o original, ainda saberia quais informações ele transmite, se não todos os detalhes específicos. Mesmo que eu tenha lido o original, não vou me lembrar da maioria mais tarde. Estas notas são uma referência rápida aos tópicos principais.
Usando o conhecimento adquirido nesses testes, resumi meu primeiro livro completo, 539 páginas em 5-6 horas!!! Incrível!
Em vez de gastar semanas por resumo, concluí meus primeiros 9 resumos de livros em apenas 10 dias.
Você pode ver os resultados do CopyLeaks abaixo para cada um dos textos publicados, aqui.
Principalmente considerando que não se trata de fins lucrativos, mas sim de fins educacionais, acredito que esses números são aceitáveis.
Livro | Modelos | Diferença de personagem | Idêntico | Pequenas alterações | Parafraseado | Total Correspondido |
---|---|---|---|---|---|---|
Corpo Oriental Mente Ocidental | Synthia 7Bv2 | -75% | 3,5% | 1,1% | 0,8% | 5,4% |
Poder de cura Nervo Vago | Mistral-7B-Instruir-v0.2; SynthIA-7B-v2.0 | -81% | 1,2% | 0,8% | 2,5% | 4,5% |
Ayurveda e a Mente | Mistral-7B-Instruir-v0.2; SynthIA-7B-v2.0 | -77% | 0,5% | 0,3% | 1,2% | 2% |
Curando os Eus Fragmentados dos Sobreviventes de Trauma | Mistral-7B-Instruir-v0.2 | -75% | | | | 2% |
Uma base segura | Mistral-7B-Instruir-v0.2 | -84% | 0,3% | 0,1% | 0,3% | 0,7% |
O corpo mantém a pontuação | Mistral-7B-Instruir-v0.2 | -74% | 0,1% | 0,2% | 0,3% | 0,5% |
Livro Completo dos Chakras | Mistral-7B-Instruir-v0.2 | -70% | 0,3% | 0,3% | 0,4% | 1,1% |
50 anos de teoria do apego | Mistral-7B-Instruir-v0.2 | -70% | 1,1% | 0,4% | 2,1% | 3,7% |
Distúrbios de apego em adultos | Mistral-7B-Instruir-v0.2 | -62% | 1,1% | 1,2% | 0,7% | 3,1% |
Companheiro do Curso de Psicologia | Mistral-7B-Instruir-v0.2 | -62% | 1,3% | 1,2% | 0,4% | 2,9% |
Psicologia em sua vida | Mistral-7B-Instruir-v0.2 | -74% | 0,6% | 0,4% | 0,5% | 1,6% |
Em vez de gastar semanas por resumo, concluí meus primeiros 9 resumos de livros em apenas 10 dias. Entre parênteses está a contagem de páginas do original.
Caso tenha interesse em acompanhar meus passos mais de perto, confira o passo a passo no GitHub, contendo scripts e exemplos.
Agora que refinei meus processos e me sinto confiante para trabalhar com formatos de prompt, realizarei mais testes. Na verdade, já realizei mais testes e classificações (publicarei a seguir), mas é claro que farei mais testes novamente e continuarei aprendendo!
Ainda acredito que se você deseja obter os melhores resultados para qualquer tarefa executada com IA, você deve realizar seus próprios experimentos e ver o que funciona melhor. Não confie apenas em classificações de modelos populares, mas use-as para orientar sua própria pesquisa.
Também aparece aqui .