Um repositório para avaliar LLMs em tarefas de geração
Últimas Notícias
[2024/06] Lançamos o BiGGen-Bench e o Prometheus 2 BGB (8x7B) !
O BiGGen-Bench apresenta 9 capacidades principais, 77 tarefas e 765 instâncias meticulosamente elaboradas, cada uma com critérios de avaliação específicos.
Avaliamos 103 modelos de linguagem de fronteira por 5 modelos de linguagem avaliadora de última geração e analisamos as descobertas em nosso artigo.
Treinamos continuamente o Prometheus 2 8x7B no rastreamento de avaliação BiGGen-Bench e construímos nosso avaliador mais capaz, LM Prometheus 2 BGB, superando até mesmo Claude-3-Opus em tarefas de classificação absoluta.
Confira nosso conjunto de dados, resultados de avaliação, placar, relatório interativo e o código!
[2024/05] Lançamos os modelos Prometheus 2 (7B e 8x7B)!
Atinge pelo menos 80% das estatísticas de avaliação ou desempenho do Prometheus 2 (8x7B)
Requer apenas 16 GB de VRAM, tornando-o adequado para execução em GPUs de consumo.
Comparado ao Prometheus 1 (13B), o Prometheus 2 (8x7B) mostra melhores desempenhos de avaliação e também suporta a avaliação em formatos de classificação em pares (classificação relativa)!
Ele atinge uma correlação de Pearson de 0,6 a 0,7 com GPT-4-1106 em uma escala Likert de 5 pontos em vários benchmarks de avaliação direta, incluindo VicunaBench, MT-Bench e FLASK.
Ele também obtém uma concordância de 72% a 85% com julgamentos humanos em vários benchmarks de classificação de pares, incluindo HHH Alignment, MT Bench Human Judgment e Auto-J Eval.
Prometheus 2 (8x7B) é um modelo de linguagem de avaliação de última geração de código aberto!
Prometheus 2 (7B) é uma versão mais leve do modelo Prometheus 2 (8x7B) com desempenho razoável (superando Llama-2-70B e no mesmo nível do Mixtral-8x7B).
Instalação com pip:
pip instalar prometheus-eval
Prometheus-Eval suporta inferência local por meio de vllm
e inferência por meio de APIs LLM com a ajuda de litellm
.
Instale vllm
se desejar executar o Prometheus em seu ambiente local.
pip instalar vllm
Se você estiver interessado em:
Utilizando a interface do Prometheus por meio do endpoint VLLM, Huggingface TGI ou outras plataformas
Aproveitando LLMs de avaliadores mais poderosos, como GPT-4
Você também pode aproveitar as vantagens do Prometheus-Eval! Para obter detalhes de instalação para vários provedores, consulte os documentos do provedor LiteLLM.
de prometheus_eval.litellm import LiteLLM, AsyncLiteLLMmodel = LiteLLM('openai/prometheus-eval/prometheus-7b-v2.0') # VLLM endpointmodel = LiteLLM('huggingface/prometheus-eval/prometheus-7b-v2.0') # Huggingface TGImodel = AsyncLiteLLM('gpt-4-turbo', requests_per_ Minute=100) # API GPT-4 (geração assíncrona considerando limite de taxa)# E muito mais!judge = PrometheusEval(model=model)
Nota : a biblioteca prometheus-eval
está atualmente em fase beta. Se você encontrar algum problema, informe-nos criando um problema no repositório.
Com
prometheus-eval
, avaliar qualquer par de instrução e resposta é tão simples quanto:
# Classificação absoluta: gera pontuação de 1 a 5from prometheus_eval.vllm import VLLMfrom prometheus_eval import PrometheusEvalfrom prometheus_eval.prompts import ABSOLUTE_PROMPT, SCORE_RUBRIC_TEMPLATEmodel = VLLM(model="prometheus-eval/prometheus-7b-v2.0")judge = PrometheusEval(model=model, absoluto_grade_template=ABSOLUTE_PROMPT)instruction = "Lutando contra um rompimento recente, uma pessoa se abre sobre os intensos sentimentos de solidão e tristeza. Ela pede conselhos sobre como lidar com o desgosto e seguir em frente na vida .",response = "Lamento sinceramente saber do seu rompimento. Este pode ser um momento imensamente desafiador, cheio de emoções intensas de solidão e tristeza. É importante lembrar que é normal vivenciar esses sentimentos; eles são uma prova da conexão profunda que você já teve. Em primeiro lugar, não hesite em abraçar suas emoções, deixá-las fluir livremente. ficar chateado, derramar lágrimas ou sentir raiva. Tudo isso faz parte da jornada rumo à cura. O autocuidado pode ser um bálsamo curativo nestes tempos difíceis. Isso pode significar entregar-se ao seu livro favorito, registrar seus pensamentos em um diário ou até mesmo apenas uma xícara de chá tranquila. Pequenos atos de bondade consigo mesmo podem melhorar significativamente o seu bem-estar emocional. Além disso, não se isole. Cerque-se de pessoas que o apoiam e que possam oferecer conforto e compreensão. Isso pode incluir amigos, familiares ou até mesmo um profissional de saúde mental. Eles podem fornecer o apoio emocional e estratégias necessárias para ajudá-lo a lidar com a situação. Por último, lembre-se de que não há um cronograma definido para a cura. É diferente para cada pessoa e não há problema em demorar o tempo que for necessário. Mantenha seu foco no futuro e no potencial que ele possui. Embora possa não parecer possível agora, você sairá mais forte desta experiência. Não há problema em pedir ajuda, não há problema em sofrer e não há problema em viver um dia de cada vez. Você não está sozinho nesta jornada e há pessoas prontas e dispostas a ajudar. Não há problema em curar no seu próprio ritmo.",reference_answer = "Só posso imaginar o quão difícil este momento deve ser para você. O desgosto pode parecer uma onda avassaladora que toma conta de você, fazendo você se sentir perdido e sozinho. É importante lembrar que não há problema em se sentir assim; seus sentimentos são válidos e é natural lamentar a perda de um relacionamento. Em primeiro lugar, é crucial permitir-se sentir plenamente as emoções. Suprimi-los ou negá-los muitas vezes apenas prolonga o processo de cura. Não há problema em chorar, ficar triste ou ficar com raiva. Tudo isso faz parte da jornada de cura. O envolvimento em atividades de autocuidado também pode fornecer um impulso muito necessário. Pode ser qualquer coisa, desde tomar um banho quente, escrever em um diário ou simplesmente beber uma xícara de seu chá favorito. Pequenos atos de amor próprio podem fazer uma grande diferença em como você se sente. Em seguida, tente cercar-se de pessoas que o apoiam, que entendem sua situação e proporcionam conforto. Amigos e familiares podem ser uma grande fonte de força em momentos de tristeza. Se você se sentir confortável, considere procurar ajuda profissional. Terapeutas e conselheiros são treinados para fornecer assistência e ferramentas para navegar em momentos difíceis como este. Por último, é importante lembrar que não há problema em dedicar algum tempo para curar. Cada um tem seu ritmo e não há pressa. Tente se concentrar no futuro e nas possibilidades que ele oferece. Embora possa não parecer agora, você sairá mais forte e resiliente dessa experiência. Lembre-se de que não há problema em pedir ajuda e em sentir o que você sente. Você não está sozinho nesta jornada e há pessoas que se preocupam com você e querem ajudar. Não há problema em viver um dia de cada vez. A cura é um processo e não há problema em atravessá-lo no seu próprio ritmo.",rubric_data = { "criteria":"O modelo é proficiente em aplicar empatia e inteligência emocional às suas respostas quando o usuário transmite emoções ou enfrenta circunstâncias desafiadoras? ", "score1_description":"O modelo negligencia identificar ou reagir ao tom emocional das entradas do usuário, dando respostas inadequadas ou emocionalmente insensíveis.", "score2_description":"O modelo reconhece intermitentemente o contexto emocional, mas muitas vezes responde sem empatia ou compreensão emocional suficiente.", "score3_description":"O modelo normalmente identifica o contexto emocional e tenta responder com empatia, mas as respostas às vezes podem perder o foco ou faltar profundidade emocional.", " score4_description":"O modelo identifica consistentemente e reage adequadamente ao contexto emocional, fornecendo respostas empáticas. No entanto, ainda pode haver descuidos esporádicos ou deficiências na profundidade emocional.", "score5_description":"O modelo é excelente na identificação do contexto emocional e oferece persistentemente respostas empáticas e emocionalmente conscientes que demonstram uma profunda compreensão das emoções ou situação do usuário."} pontuação_rubric = SCORE_RUBRIC_TEMPLATE.format(**rubric_data)feedback, pontuação = juiz.single_absolute_grade(instruction=instruction,response=response,rubric=score_rubric,reference_answer=reference_answer)print("Feedback:", feedback)print("Pontuação:", pontuação)# Output# Feedback: A resposta fornecida mostra um alto nível de empatia e inteligência emocional Aborda efetivamente o sofrimento emocional expresso pelo usuário. Reconhece a dor do usuário e valida seus sentimentos de solidão e tristeza, o que é crucial. aspecto de fornecer aconselhamento empático A resposta também sugere passos práticos para lidar com a situação, como abraçar as emoções, praticar o autocuidado e buscar apoio de amigos, familiares ou profissionais. Além disso, a resposta reafirma ao usuário que a cura é um processo pessoal sem cronograma fixo, oferecendo conforto e compreensão. Enfatiza o valor e o potencial do usuário para superar a situação, o que demonstra uma profunda compreensão das emoções e da situação do usuário. Ao comparar a rubrica de pontuação com a resposta fornecida, fica claro que o modelo apresenta uma excelente capacidade de aplicar empatia e inteligência emocional. A resposta não apresenta deficiências de profundidade emocional e atende com sucesso aos critérios para uma pontuação de 5.# Pontuação: 5
# Classificação relativa: Saídas A ou Bfrom prometheus_eval.vllm import VLLMfrom prometheus_eval import PrometheusEvalfrom prometheus_eval.prompts import RELATIVE_PROMPTmodel = VLLM(model="prometheus-eval/prometheus-7b-v2.0")judge = PrometheusEval(model=model, relativo_grade_template=RELATIVE_PROMPT)data = { "instruction": "Um grupo de historiadores está conduzindo um debate sobre os fatores que levaram à queda do Império Romano. Um historiador argumenta que a principal razão para a queda foi a pressão constante das invasões bárbaras Outro acredita que foi devido a problemas económicos e à dependência excessiva do trabalho escravo. Um terceiro sugere que foi devido à decadência moral e à instabilidade política. Cada historiador precisa de fornecer provas para apoiar as suas afirmações. para problemas econômicos e dependência excessiva do trabalho escravo apresentam seu caso?", "response_A": "O historiador que argumenta que os problemas econômicos e a dependência excessiva do trabalho escravo levaram à queda do Império Romano diria o seguinte: A economia do Império foi fortemente afetada pela desvalorização da moeda romana. Esta desvalorização da moeda resultou numa inflação desenfreada, perturbando a estabilidade da economia. Além disso, o Império Romano dependia fortemente do trabalho escravo. Isto causou desemprego entre os cidadãos livres porque manter escravos era mais barato do que contratar cidadãos livres. O declínio nas oportunidades de emprego resultou em instabilidade económica. Além disso, a expansão do império para o leste tornou-os dependentes de importações, como os grãos do Egito. Esta dependência excessiva das importações causou um défice comercial, que enfraqueceu ainda mais a economia. À medida que o império perdia territórios, a manutenção do desequilíbrio comercial tornou-se difícil, causando a queda económica. Assim, os problemas económicos e a dependência excessiva do trabalho escravo estavam entre as principais razões para a queda do Império Romano.", "resposta_B": "O historiador que defende os problemas económicos e a dependência excessiva do trabalho escravo apresentaria o seu caso citando factores económicos chave que contribuiu para o declínio do Império Romano. Harper (2016) descreveu como a desvalorização da moeda romana levou à inflação, perturbando a estabilidade económica. Além disso, Scheidel (2007) enfatizou que o uso excessivo de escravos resultou no desemprego generalizado entre os cidadãos livres, desestabilizando ainda mais a economia. A dependência do império das importações de cereais do Egipto, criando um défice comercial como destacado por Temin (2006), também contribuiu para o declínio económico. Assim, a combinação destes factores desempenhou um papel crucial na queda do Império Romano.", "reference_answer": "Este argumento centra-se nos problemas económicos e na dependência excessiva do trabalho escravo como razões principais para a queda do Império Romano. Para começar, uma das evidências significativas é a desvalorização da moeda romana. Conforme destacado por Harper (2016), o império sofria de forte inflação devido à constante desvalorização de sua moeda, dificultando a estabilidade da economia. Além disso, a dependência excessiva do trabalho escravo também desempenhou um papel prejudicial. Conforme apontado por Scheidel (2007), a dependência dos escravos levou ao desemprego entre os cidadãos romanos livres. Isto porque a manutenção de escravos era significativamente mais barata em comparação com a contratação de cidadãos livres, levando a um declínio nas oportunidades de emprego, o que por sua vez resultou em instabilidade económica. Além disso, a expansão do império para leste tornou-os altamente dependentes das importações, por exemplo, de cereais do Egipto. Tal como observado por Temin (2006), isto criou um défice comercial que enfraqueceu ainda mais a economia romana. Quando o império começou a perder os seus territórios, tornou-se cada vez mais difícil manter este desequilíbrio comercial, levando ao declínio económico. Em conclusão, pode-se argumentar que os problemas económicos, principalmente devidos à desvalorização da moeda e à dependência excessiva do trabalho escravo, foram factores significativos que contribuíram para a queda do Império Romano. As evidências fornecidas, que incluem referências acadêmicas a Harper (2016), Scheidel (2007) e Temin (2006), apoiam esta tese.", "rubrica": "A resposta está bem apoiada em evidências, incluindo citações/atribuições sempre que relevante ?"}feedback, pontuação = juiz.single_relative_grade(**data)print("Feedback:", feedback)print("Pontuação:", pontuação)# Saída# Feedback: Resposta A e A Resposta B identifica corretamente os problemas económicos e a dependência excessiva do trabalho escravo como fatores que contribuíram significativamente para a queda do Império Romano. No entanto, a Resposta B é mais eficaz na apresentação do argumento do historiador devido à inclusão de fontes académicas para apoiar as suas afirmações. faz referência a trabalhos de Harper, Scheidel e Temin, o que acrescenta credibilidade ao argumento do historiador e se alinha bem com a ênfase da rubrica de pontuação em evidências e citações. Embora a Resposta A forneça um argumento semelhante, ela carece de qualquer forma de citações. ou atribuições, o que diminui a força das evidências apresentadas. Portanto, com base na rubrica fornecida, a Resposta B é a resposta superior devido ao uso de evidências acadêmicas para apoiar as afirmações do historiador.# Pontuação: B
Observação : se você tiver várias respostas para avaliar, não use single_absolute_grade
/ single_relative_grade
- em vez disso, use absolute_grade
e relative_grade
! Isso lhe dará mais de 10x de aceleração.
# lote nota absolutainstructions = [...] # Lista de instruçõesrespostas = [...] # Lista de respostasreference_answers = [...] # Lista de referências de respostasrubric = "..." # Rubrica stringfeedbacks, pontuações = juiz.absolute_grade (instructions=instructions,responses=responses,rubric=rubric,reference_answers=reference_answers)# nota relativa do loteinstructions = [...] # Lista de instruçõesresponses_from_a = [...] # Lista de respostasresponses_from_b = [...]reference_answers = [...] # Lista de referências respondasrubric = "..." # Rubrica stringfeedbacks, pontuações = juiz.relative_grade(instructions=instructions,responses_A=responses_from_a,responses_B=responses_from_b,rubric=rubric ,reference_answers=reference_answers)
Prometheus-Eval é um repositório que fornece uma coleção de ferramentas para treinamento, avaliação e uso de modelos de linguagem especializados na avaliação de outros modelos de linguagem. O repositório inclui os seguintes componentes:
O pacote Python prometheus-eval
, que fornece uma interface simples para avaliar pares instrução-resposta usando o Prometheus.
Coleta de conjuntos de dados de avaliação para treinamento e avaliação de modelos Prometheus.
Scripts para treinar modelos do Prometheus ou ajustar conjuntos de dados personalizados.
Prometheus é uma família de modelos de linguagem de código aberto especializados na avaliação de outros modelos de linguagem. Ao simular efetivamente julgamentos humanos e avaliações proprietárias baseadas em LM, pretendemos resolver os seguintes problemas:
Justiça : Não depender de modelos de código fechado para avaliações!
Controlabilidade : você não precisa se preocupar com atualizações de versão GPT ou com o envio de seus dados privados para OpenAI construindo pipelines de avaliação interna
Acessibilidade : se você já possui GPUs, seu uso é gratuito!
Em comparação com os modelos do Prometheus 1, os modelos do Prometheus 2 suportam avaliação direta (classificação absoluta) e classificação em pares (classificação relativa).
Você pode alternar os modos fornecendo um formato de prompt de entrada e um prompt do sistema diferentes. Dentro do prompt, você deve preencher as instruções, respostas e rubricas de pontuação com seus próprios dados. Opcionalmente, você também pode adicionar uma resposta de referência que leve a um melhor desempenho!
prometheus-eval
O pacote prometheus-eval
fornece uma interface simples para avaliar pares instrução-resposta usando o Prometheus. O pacote inclui os seguintes métodos:
absolute_grade
: Avalia uma única resposta com base em uma determinada instrução, resposta de referência e rubrica de pontuação. Produz uma pontuação entre 1 e 5.
relative_grade
: Avalia duas respostas com base em uma determinada instrução e rubrica de pontuação. Saídas 'A' ou 'B' com base na melhor resposta.
Se preferir trabalhar diretamente com os pesos carregados no Huggingface Hub, você pode baixar diretamente os pesos do modelo!
from transformers import AutoModelForCausalLM, AutoTokenizerdevice = "cuda" # o dispositivo para carregar o modelo no modelo = AutoModelForCausalLM.from_pretrained("prometheus-eval/prometheus-7b-v2.0")tokenizer = AutoTokenizer.from_pretrained("prometheus-eval/prometheus- 7b-v2.0")ABS_SYSTEM_PROMPT = "Você é um assistente de juiz justo encarregado de fornecer feedback claro e objetivo com base em critérios específicos, garantindo que cada avaliação reflita os padrões absolutos definidos para desempenho."ABSOLUTE_PROMPT = """###Descrição da tarefa:Uma instrução (pode incluir uma entrada dentro dela), uma resposta a ser avaliada, são fornecidas uma resposta de referência que obtém uma pontuação de 5 e uma rubrica de pontuação que representa um critério de avaliação. 1. Escreva um feedback detalhado que avalie a qualidade da resposta estritamente com base na rubrica de pontuação fornecida, sem avaliar em geral. .2. Depois de escrever um feedback, escreva uma pontuação que seja um número inteiro entre 1 e 5. Você deve consultar a rubrica de pontuação.3 O formato de saída deve ser o seguinte: "Feedback: (escreva um feedback para os critérios) [RESULTADO] (um número inteiro entre 1 e 5)"4. Por favor, não gere nenhuma outra abertura, fechamento e explicação.###A instrução para avaliar:{instruction}###Resposta para avaliar:{response}###Resposta de referência (pontuação 5):{reference_answer}### Rubricas de pontuação:{rubric}###Feedback: """user_content = ABS_SYSTEM_PROMPT + "nn" + ABSOLUTE_PROMPT.format(...) # Preencha o prompt com suas mensagens de dados = [ {"role": "usuário", "content": user_content}, ]encodeds = tokenizer.apply_chat_template(messages, return_tensors="pt")model_inputs = encodeds.to(device)model.to(device)generated_ids = model.generate(model_inputs, max_new_tokens=1000, do_sample=True)decoded = tokenizer.batch_decode(generated_ids)print(decodificado[0])
Seção | Descrição |
---|---|
Avaliação BiGGen-Bench | Instruções para avaliar seu LM no BiGGen-Bench. Você também pode consultar a implementação para seu próprio benchmark de avaliação. |
Treinamento Prometeu | Instruções para replicar modelos do Prometheus 2. Baseado no repositório do manual de alinhamento. |
Usando o Prometheus como filtro de qualidade de dados | Livro de receitas para usar o Prometheus 2 como filtro de qualidade na geração de dados sintéticos. Muito obrigado à equipe distilabel! ? |
Usando Prometheus como avaliador no RAG | Livro de receitas para usar aplicativos Prometheus 2 RAG. Muito obrigado à equipe LlamaIndex! ? |
A base de código subjacente para treinamento se origina do Alignment Handbook do Huggingface e do repositório Super Mario Merging. Além disso, para inferência, ele utiliza fortemente a biblioteca litellm, vllm e transformer. Muito obrigado a todos os contribuidores por esses repositórios incríveis!! ?
Se você achar nosso trabalho útil, considere citar nosso artigo!
@misc{kim2024prometheus, title={Prometheus 2: Um modelo de linguagem de código aberto especializado na avaliação de outros modelos de linguagem}, autor={Seungone Kim e Juyoung Suk e Shayne Longpre e Bill Yuchen Lin e Jamin Shin e Sean Welleck e Graham Neubig e Moontae Lee e Kyungjae Lee e Minjoon Seo}, ano={2024}, eprint={2405.01535}, archivePrefix={ arXiv}, classe primária={cs.CL}}
@article{kim2023prometheus, title={Prometheus: Induzindo capacidade de avaliação refinada em modelos de linguagem}, autor={Kim, Seungone e Shin, Jamin e Cho, Yejin e Jang, Joel e Longpre, Shayne e Lee, Hwaran e Yun, Sangdoo e Shin, Seongjin e Kim, Sungdong e Thorne, James e outros}, diário = {pré-impressão arXiv arXiv:2310.08491}, ano={2023}}
@misc{lee2024prometheusvision, title={Prometheus-Vision: Modelo de visão-linguagem como juiz para avaliação refinada}, autor={Seongyun Lee e Seungone Kim e Sue Hyun Park e Geelook Kim e Minjoon Seo}, ano={2024}, eprint={2401.06591}, archivePrefix={arXiv}, PrimaryClass={cs.CL}}
@misc{kim2024biggen, title={The BiGGen Bench: uma referência de princípios para avaliação refinada de modelos de linguagem com modelos de linguagem}, autor={Seungone Kim e Juyoung Suk e Ji Yong Cho e Shayne Longpre e Chaeeun Kim e Dongkeun Yoon e Guijin Son e Yejin Cho e Sheikh Shafayat e Jinheon Baek e Sue Hyun Park e Hyeonbin Hwang e Jinkyung Jo e Hyowon Cho e Haebin Shin e Seongyun Lee e Hanseok Oh e Noah Lee e Namgyu Ho e Se June Joo e Miyoung Ko e Yoonjoo Lee e Hyungjoo Chae e Jamin Shin e Joel Jang e Seonghyeon Ye e Bill Yuchen Lin e Sean Welleck e Graham Neubig e Moontae Lee e Kyungjae Lee e Minjoon Seo}, ano={2024}, eprint={2406.05761}, archivePrefix={arXiv}, classe primária={cs.CL}}