Deixe-me começar dizendo que não quero ofender os criadores de Large Language Models (LLM), as ferramentas para avaliá-los ou os indivíduos/organizações que os classificam e criam quadros de classificação. Como relativamente novo neste ecossistema, estou em dívida com o seu trabalho e grato por ter sido facilitado o caminho para a realização de tarefas que de outra forma seriam trabalhosas.
Claramente, meu próximo post deve explorar vários métodos de classificação de modelos, para obter um pouco mais de detalhes sobre como funcionam as avaliações.
Se você não leu meu artigo anterior PrivateGPT para resumo de livros: testes e classificação de variáveis de configuração, talvez seja benéfico revisá-lo, pois defini os termos e expliquei os meios pelos quais cheguei a várias práticas e crenças.
Se você leu esse artigo, sabe que venho refinando meus processos, há alguns meses, usando Large Language Models (LLM) com o propósito de resumir livros. Medi uma série de parâmetros, incluindo modelos de prompt, prompts do sistema, prompts do usuário, etc.
A partir dessa rodada preliminar de classificações de modelos e coleta de dados sobre o uso de variáveis de configuração, descobri que mistral-7b-instruct-v0.2.Q8_0.gguf produz notas com marcadores da mais alta qualidade e tenho procurado por uma que seja melhor, que cabe no meu 3060 de 12 GB, desde então.
Para esta classificação, estou usando essa base de conhecimento para avaliar uma variedade de modelos 7b líderes. Desta vez estou usando o Ollama , pois acho mais simples de usar e com bastante desempenho.
Eu escolhi os seguintes modelos porque os encontrei acima do Mistral 7b Instruct 0.2 em vários quadros de classificação, ou foram autoproclamados como os melhores 7b. (modelos de bate-papo testados entre parênteses)
openchat-3.5-0106.Q8_0.gguf (OpenChat)
snorkel-mistral-pairrm-dpo.Q8_0.gguf (Mistral)
golfinho-2.6-mistral-7b.Q8_0.gguf (Mistral)
supermario-v2.Q8_0.gguf (ChatML)
openhermes-2.5-mistral-7b.Q8_0.gguf (ChatML)
openhermes-2.5-neural-chat-7b-v3-1-7b.Q8_0.gguf (ChatML)
openhermes-2.5-neural-chat-v3-3-slerp.Q8_0.gguf (ChatML)
WestLake-7B-v2-Q8_0.gguf (ChatML, Mistral)
MBX-7B-v3-DPO.q8_0.gguf (ChatML, Mistral)
neuralbeagle14-7b.q8_0.gguf (ChatML, Mistral)
omnibeagle-7b-q8_0.gguf (ChatML, Mistral)
Para alguns modelos, onde não estava obtendo os resultados desejados, já que são em sua maioria derivados do Mistral, testei o modelo Mistral mesmo que eles listem o ChatML como sua entrada preferida.
Escreva notas abrangentes com marcadores resumindo o texto a seguir, com títulos, termos e conceitos-chave em negrito.\n\nTEXTO:
Embora GPT3.5 não seja minha linha de base pessoal, é uma espécie de padrão da indústria e espero que produza melhores resultados do que a maioria dos 7b Q8 GGUFs.
Embora não existam conceitos-chave de termos em negrito, os títulos estão em negrito e, em geral, são bastante fáceis de ler em comparação com blocos de parágrafos. Além disso, encontrar ou não termos em negrito pode depender do próprio texto de entrada, onde um resumo com marcadores deve sempre incluir títulos em negrito.
Vejo isso como uma tarefa fundamental para qualquer modelo do Instruct. Idealmente, os desenvolvedores treinarão seus modelos para gerar esses tipos de notas com marcadores ideais. Tenho muitos dados, com alguns livros já treinados, mas é relativamente simples gerar essas notas para um livro (usando Mistral 7b Instruct 0.2 com o texto semanticamente fragmentado, à mão, em partes abaixo de 2,5 mil tokens, cada).
Se for um livro de 300 a 600 páginas, geralmente isso pode ser feito em um único dia, incluindo pré e pós-processamento.
Eventualmente, eu poderia experimentar alguns ajustes finos na tentativa de melhorar eu mesmo suas capacidades.
Anteriormente, tentei dar uma pontuação a cada classificação. É muito difícil dar uma pontuação numérica. No futuro, acho que tentarei conseguir um LLM para classificar os resumos. Desta vez, deixarei apenas um comentário sobre onde fica aquém e o que gosto, sem dar uma pontuação numérica para cada modelo.
Testei cada um dos modelos a seguir em um único capítulo de livro, dividido em 6 partes de 1.900 a 3.000 tokens cada. Compartilharei um exemplo representativo de cada um, e os dados completos estarão disponíveis no GitHub, como sempre.
Tenho certeza que você já percebeu que, na minha opinião, Mistral tem o 7b para vencer.
Ollama tem um recurso onde você insere a localização do modelo, o modelo e os parâmetros em um arquivo de modelo, que ele usa para salvar uma cópia do seu LLM usando a configuração especificada. Isso facilita a demonstração de vários modelos sem a necessidade de estar sempre se preocupando com os parâmetros.
Mantive os parâmetros iguais para todos os modelos, exceto o modelo de chat, mas compartilharei com vocês o modelo que estou usando para cada um, para que vocês possam ver precisamente como utilizo o modelo. Você pode me informar se eu obteria melhores resultados com os modelos a seguir usando um Modelfile configurado de forma diferente.
TEMPLATE """ <s></s>[INST] {{ .Prompt }} [/INST] """ PARAMETER num_ctx 8000 PARAMETER num_gpu -1 PARAMETER num_predict 4000
Não direi que Mistral faz isso perfeitamente todas as vezes, mas na maioria das vezes, esse é o meu resultado. E se você olhar para a resposta do GPT3.5, poderá concordar que isso é melhor.
Fiquei agradavelmente surpreso com o 0106 do OpenChat . Aqui está um modelo que afirma ter o melhor modelo 7b e pelo menos é competitivo com o Mistral 7b.
TEMPLATE """ GPT4 Correct User: {{ .Prompt }}<|end_of_turn|>GPT4 Correct Assistant: """ PARAMETER num_ctx 8000 PARAMETER num_gpu -1 PARAMETER num_predict 4000
Nesta pequena amostra, deu títulos em negrito 4/6 vezes. Posteriormente, irei revisá-lo junto com quaisquer outros concorrentes principais, usando uma análise mais detalhada.
Obviamente, sou tendencioso aqui, já que Snorkel foi treinado no Mistral 7b Instruct 0.2. Independentemente disso, estou cautelosamente otimista e ansioso por mais lançamentos do Snorkel.ai .
TEMPLATE """ <s></s>[INST] {{ .Prompt }} [/INST] """ PARAMETER num_ctx 8000 PARAMETER num_gpu -1 PARAMETER num_predict 4000
4/6 desses resumos estão corretos, mas outros contêm irregularidades, como listas superlongas de termos-chave e títulos, em vez de apenas colocá-los em negrito como parte do resumo.
Aqui está outra derivada do mistral que é bem vista.
TEMPLATE """ <|im_start|>system You are a helpful AI writing assistant.<|im_end|> <|im_start|>user {{ .Prompt }} <|im_end|> <|im_start|>assistant {{ .Response }}<|im_end|> """ PARAMETER num_ctx 8000 PARAMETER num_gpu -1 PARAMETER num_predict 4000
Este é outro modelo decente que é quase tão bom quanto o Mistral 7b Instruct 0.2. Três dos seis resumos apresentavam formato adequado e títulos em negrito, outro tinha um formato bom, sem negrito, mas 2/6 eram de má qualidade.
Este modelo é bastante popular, tanto nas tabelas de classificação quanto entre “o povo” em chats de discórdia não associados. Quero que seja líder neste ranking, mas não é.
TEMPLATE """ <|im_start|>system You are a helpful AI writing assistant.<|im_end|> <|im_start|>user {{ .Prompt }} <|im_end|> <|im_start|>assistant {{ .Response }}<|im_end|> """ PARAMETER num_ctx 8000 PARAMETER num_gpu -1 PARAMETER num_predict 4000
Os resultados 3/6 produzem estrutura adequada, mas nenhum texto em negrito. Um deles possui estrutura e texto em negrito. Os outros dois tinham mais blocos grandes de texto e estrutura pobre.
Também tentei alguns derivados de alto nível do OpenHermes 2.5 Mistral para ver se conseguia melhores resultados. Infelizmente, não foi esse o caso.
TEMPLATE """ <|im_start|>system You are a helpful AI writing assistant.<|im_end|> <|im_start|>user {{ .Prompt }} <|im_end|> <|im_start|>assistant {{ .Response }}<|im_end|> """ PARAMETER num_ctx 8000 PARAMETER num_gpu -1 PARAMETER num_predict 4000
Nenhum desses resultados era desejável.
Independentemente do que tenham feito, esses derivados não melhoraram o original.
TEMPLATE """ <|im_start|>system You are a helpful AI writing assistant.<|im_end|> <|im_start|>user {{ .Prompt }} <|im_end|> <|im_start|>assistant {{ .Response }}<|im_end|> """ PARAMETER num_ctx 8000 PARAMETER num_gpu -1 PARAMETER num_predict 4000
Está piorando a cada nova versão!
Eu não esperava muito de Mario, mas é promissor. Enquanto isso, V3 e V4 estão disponíveis, mas ainda não encontrei o GGUF para eles.
TEMPLATE """ <|im_start|>system You are a helpful AI writing assistant.<|im_end|> <|im_start|>user {{ .Prompt }} <|im_end|> <|im_start|>assistant {{ .Response }}<|im_end|> """ PARAMETER num_ctx 8000 PARAMETER num_gpu -1 PARAMETER num_predict 4000
Seu primeiro resultado foi enganosamente bom. No entanto, cada um dos resumos seguintes desviou-se do padrão desejado. Estarei atento ao GGUF dos lançamentos mais recentes. Você pode ver aqui que temos blocos de parágrafos com um título inicial em negrito. Não é realmente o que eu pedi.
Eu gostaria de ter notícias melhores para compartilhar. Meu título ideal é que há uma abundância de modelos líderes que produzem resultados de qualidade ao criar resumos abrangentes de notas com marcadores, e é muito difícil para mim escolher entre eles. Infelizmente, este não é o caso.
Talvez eles superem o Mistral 0.2 em sua forma completa, mas só estejam atrás no formato GGUF? Acho que é bastante provável que nenhuma de nossas avaliações existentes vise esse tipo de resultado, mas eu certamente argumentaria que é uma tarefa que qualquer modelo 7b gguf líder deveria ser capaz de gerenciar.
Outra coisa a considerar é que o Mistral 7b Instruct v0.2 foi lançado logo após o Mixtral, em meio a muito alarde. Acho que esse lançamento passou despercebido. Na verdade, muitos dos modelos “líderes” que observei são baseados no 0.1 Mistral.
Talvez as coisas mudem e o mundo perceba que seus melhores modelos ainda não conseguem superar Mistral? Então, novamente, talvez todos esses modelos sejam realmente bons em todas as outras tarefas que não estou solicitando.
Tenho dados, tenho um pipeline e tenho uma necessidade infinita de criar resumos de notas com marcadores. Se você quiser trabalhar comigo, entre em contato.
Você também pode conferir meu GitHub, verificar os dados e experimentar sua própria versão deste experimento. Estou feliz por ter sido provado que estou errado.