Un référentiel pour évaluer les LLM dans les tâches de génération
Dernières nouvelles
[2024/06] Nous sortons le BiGGen-Bench et Prometheus 2 BGB (8x7B) !
BiGGen-Bench propose 9 fonctionnalités principales, 77 tâches et 765 instances méticuleusement conçues, chacune avec des critères d'évaluation spécifiques.
Nous avons évalué 103 modèles de langage frontalier par 5 modèles de langage d'évaluateur de pointe et analysé les résultats de notre article.
Nous avons continuellement formé Prometheus 2 8x7B sur la trace d'évaluation BiGGen-Bench et construit notre évaluateur le plus performant LM Prometheus 2 BGB, surpassant même Claude-3-Opus sur les tâches de notation absolue.
Consultez notre ensemble de données, les résultats de l'évaluation, le classement, le rapport interactif et le code !
[2024/05] Nous lançons les modèles Prometheus 2 (7B & 8x7B) !
Il réalise au moins 80% des statistiques d'évaluation ou des performances de Prometheus 2 (8x7B)
Il ne nécessite que 16 Go de VRAM, ce qui le rend adapté à une utilisation sur des GPU grand public.
Par rapport à Prometheus 1 (13B), Prometheus 2 (8x7B) affiche des performances d'évaluation améliorées et prend également en charge l'évaluation dans les formats de classement par paires (notation relative) !
Il atteint une corrélation de Pearson de 0,6 à 0,7 avec GPT-4-1106 sur une échelle de Likert à 5 points sur plusieurs critères d'évaluation directe, notamment VicunaBench, MT-Bench et FLASK.
Il obtient également un accord de 72 % à 85 % avec les jugements humains sur plusieurs critères de classement par paires, notamment l'alignement HHH, le jugement humain MT Bench et l'évaluation Auto-J.
Prometheus 2 (8x7B) est un modèle de langage d'évaluation open source de pointe !
Prometheus 2 (7B) est une version plus légère du modèle Prometheus 2 (8x7B) avec des performances raisonnables (surpassant Llama-2-70B et à égalité avec Mixtral-8x7B).
Installation avec pip :
pip install prometheus-eval
Prometheus-Eval prend en charge l'inférence locale via vllm
et l'inférence via les API LLM à l'aide de litellm
.
Installez vllm
si vous souhaitez exécuter Prometheus dans votre environnement local.
pip installer vllm
Si vous êtes intéressé par :
Utilisation de l'interface Prometheus via le point de terminaison VLLM, Huggingface TGI ou d'autres plates-formes
Tirer parti de LLM d'évaluateurs plus puissants tels que GPT-4
Vous pouvez également profiter de Prometheus-Eval ! Pour plus de détails sur l'installation de différents fournisseurs, veuillez vous référer à la documentation du fournisseur LiteLLM.
depuis prometheus_eval.litellm import LiteLLM, AsyncLiteLLMmodel = LiteLLM('openai/prometheus-eval/prometheus-7b-v2.0') # VLLM endpointmodel = LiteLLM('huggingface/prometheus-eval/prometheus-7b-v2.0') # Modèle TGI Huggingface = AsyncLiteLLM('gpt-4-turbo', requêtes_per_minute=100) # API GPT-4 (génération asynchrone en tenant compte de la limite de débit)# Et bien plus encore !juge = PrometheusEval(model=model)
Remarque : la bibliothèque prometheus-eval
est actuellement en phase bêta. Si vous rencontrez des problèmes, veuillez nous en informer en créant un problème sur le référentiel.
Avec
prometheus-eval
, évaluer n'importe quelle paire d'instructions et de réponses est aussi simple que :
# Notation absolue : produit un score de 1 à 5 à partir de 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= modèle, Absolute_grade_template=ABSOLUTE_PROMPT)instruction = " Aux prises avec une rupture récente, une personne s'ouvre sur ses sentiments intenses de solitude et de tristesse. Elle demande des conseils sur la façon de faire face au chagrin et d'avancer dans la vie. ",response = " Je suis vraiment désolé d'apprendre votre rupture. Cela peut être une période extrêmement difficile remplie d'émotions intenses de solitude et de chagrin. Il est important de se rappeler que c'est normal. ressentir ces sentiments ; ils témoignent du lien profond que vous aviez autrefois. Tout d'abord, n'hésitez pas à accepter vos émotions, les ignorer complique souvent le processus de guérison. , ou se sentir en colère. Tout cela fait partie du chemin vers la guérison. Prendre soin de soi peut être un baume curatif en ces temps difficiles. Cela peut signifier s'adonner à votre livre préféré, consigner vos pensées dans un journal ou même simplement prendre une tasse de thé tranquillement. De petits actes de gentillesse envers soi-même peuvent améliorer considérablement votre bien-être émotionnel. Ne vous isolez pas non plus. Entourez-vous de personnes solidaires qui peuvent vous offrir réconfort et compréhension. Cela peut inclure des amis, de la famille ou même un professionnel de la santé mentale. Ils peuvent vous fournir un soutien émotionnel indispensable et des stratégies pour vous aider à faire face à la situation. Enfin, n’oubliez pas qu’il n’y a pas de calendrier fixe pour la guérison. C'est différent pour chacun et vous pouvez prendre autant de temps que nécessaire. Restez concentré sur l’avenir et le potentiel qu’il recèle. Même si cela ne semble pas possible pour le moment, vous sortirez plus fort de cette expérience. C'est bien de demander de l'aide, c'est bien de faire son deuil et c'est bien de le prendre un jour à la fois. Vous n'êtes pas seul dans ce voyage et il y a des gens prêts et désireux de vous aider. Vous pouvez guérir à votre propre rythme.",reference_answer = "Je ne peux qu'imaginer à quel point cette période doit être difficile pour vous. Le chagrin peut ressembler à une vague écrasante qui vous envahit, vous faisant vous sentir perdu et seul. Il est important de se rappeler qu’il n’y a rien de mal à ressentir cela ; vos sentiments sont valables et il est naturel de pleurer la perte d’une relation. Premièrement, il est crucial de se permettre de ressentir pleinement les émotions. Les supprimer ou les nier ne fait souvent que prolonger le processus de guérison. C'est normal de pleurer, de se sentir triste ou d'être en colère. Tout cela fait partie du parcours de guérison. S'engager dans des activités de soins personnels peut également fournir un coup de pouce indispensable. Cela peut être quelque chose comme prendre un bain chaud, écrire dans un journal ou simplement boire une tasse de votre thé préféré. De petits actes d’amour-propre peuvent faire une grande différence dans ce que vous ressentez. Ensuite, essayez de vous entourer de personnes solidaires qui comprennent votre situation et vous apportent du réconfort. Les amis et la famille peuvent être une grande source de force en période de chagrin. Si vous vous sentez à l’aise, vous pourriez envisager de demander l’aide d’un professionnel. Les thérapeutes et les conseillers sont formés pour fournir une assistance et des outils permettant de traverser des moments difficiles comme ceux-ci. Enfin, il est important de se rappeler qu’il n’y a rien de mal à prendre son temps pour guérir. Chacun a son rythme et rien ne presse. Essayez de vous concentrer sur l’avenir et les possibilités qu’il offre. Même si cela ne semble pas être le cas maintenant, vous sortirez plus fort et plus résilient de cette expérience. N'oubliez pas que vous pouvez demander de l'aide et ressentir ce que vous ressentez. Vous n’êtes pas seul dans ce voyage et il y a des gens qui se soucient de vous et veulent vous aider. C'est bien de prendre un jour à la fois. La guérison est un processus, et vous pouvez le parcourir à votre propre rythme.",rubric_data = { "criteria": "Le modèle est-il capable d'appliquer l'empathie et l'intelligence émotionnelle à ses réponses lorsque l'utilisateur transmet des émotions ou est confronté à des circonstances difficiles ? ", "score1_description": "Le modèle néglige d'identifier ou de réagir au ton émotionnel des entrées de l'utilisateur, donnant des réponses inappropriées ou insensibles émotionnellement.", "score2_description": "Le modèle reconnaît par intermittence le contexte émotionnel, mais répond souvent sans empathie ou compréhension émotionnelle suffisante.", "score3_description": "Le modèle identifie généralement le contexte émotionnel et tente de répondre avec empathie, mais les réponses peuvent parfois passer à côté de l'essentiel ou manquer de profondeur émotionnelle.", "score4_description": "Le Le modèle identifie systématiquement le contexte émotionnel et y réagit de manière appropriée, en fournissant des réponses empathiques. Néanmoins, il peut encore y avoir des oublis ou des lacunes sporadiques en termes de profondeur émotionnelle.", "score5_description": "Le modèle excelle dans l'identification du contexte émotionnel et offre de manière persistante des réponses empathiques et émotionnellement conscientes qui démontrent une compréhension profonde des émotions ou de la situation de l'utilisateur."} score_rubric = SCORE_RUBRIC_TEMPLATE.format(**rubric_data)rétroaction, score = Judge.single_absolute_grade(instruction=instruction,response=response,rubric=score_rubric,reference_answer=reference_answer)print("Feedback:", feedback)print("Score:", score)# Output# Feedback : La réponse fournie montre un niveau élevé d'empathie et d'intelligence émotionnelle. Il répond efficacement à la détresse émotionnelle exprimée par l'utilisateur et reconnaît sa douleur et valide ses sentiments de solitude et de tristesse. un aspect crucial de la fourniture de conseils empathiques. La réponse suggère également des mesures pratiques pour faire face, comme accepter ses émotions, prendre soin de soi et rechercher le soutien d'amis, de famille ou de professionnels. De plus, la réponse rassure l’utilisateur sur le fait que la guérison est un processus personnel sans calendrier fixe, offrant confort et compréhension. Il met l'accent sur la valeur de l'utilisateur et son potentiel à surmonter la situation, ce qui démontre une compréhension profonde de ses émotions et de sa situation. En comparant la grille de score avec la réponse fournie, il est clair que le modèle présente une excellente capacité à appliquer l'empathie et l'intelligence émotionnelle. La réponse ne présente aucune lacune en termes de profondeur émotionnelle et répond avec succès aux critères d'une note de 5.# Note : 5
# Notation relative : sorties 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, relative_grade_template=RELATIVE_PROMPT)data = { "instruction": "Un groupe d'historiens mène un débat sur les facteurs qui ont conduit à la chute de l'Empire romain. Un historien affirme que la principale raison de la chute était la pression constante des invasions barbares. Un autre pense que c'était à cause de problèmes économiques et d'une dépendance excessive au travail des esclaves. Un troisième suggère que c'était dû à la décadence morale et à l'instabilité politique. Chaque historien doit fournir des preuves pour étayer ses affirmations. plaidant en faveur des troubles économiques et d'une dépendance excessive à l'égard du travail des esclaves, présentent-ils leur cas ?", "response_A": "L'historien affirmant que les troubles économiques et la dépendance excessive à l'égard du travail des esclaves ont conduit à la chute de l'Empire romain dirait ceci : l'économie de l'Empire a été fortement affectée par la dévaluation de la monnaie romaine. Cette dépréciation monétaire a entraîné une inflation galopante, perturbant la stabilité de l’économie. De plus, l’Empire romain dépendait fortement du travail des esclaves. Cela a provoqué le chômage parmi les citoyens libres, car entretenir des esclaves coûtait moins cher que d'embaucher des citoyens libres. La diminution des opportunités d'emploi a entraîné une instabilité économique. En plus de cela, l’expansion de l’empire vers l’est l’a rendu dépendant des importations, comme les céréales en provenance d’Égypte. Cette dépendance excessive à l’égard des importations a provoqué un déficit commercial qui a encore affaibli l’économie. À mesure que l’empire perdait des territoires, il devenait difficile de maintenir le déséquilibre commercial, provoquant une chute économique. Ainsi, les troubles économiques et la dépendance excessive à l'égard du travail des esclaves étaient parmi les principales raisons de la chute de l'Empire romain.", "response_B": "L'historien plaidant en faveur des troubles économiques et de la dépendance excessive à l'égard du travail des esclaves présenterait son cas en citant des facteurs économiques clés qui contribué au déclin de l’Empire romain. Harper (2016) a expliqué comment la dévaluation de la monnaie romaine a conduit à l’inflation, perturbant ainsi la stabilité économique. De plus, Scheidel (2007) a souligné que la surexploitation des esclaves entraînait un chômage généralisé parmi les citoyens libres, déstabilisant ainsi davantage l’économie. La dépendance de l'empire à l'égard des importations de céréales en provenance d'Égypte, créant un déficit commercial comme le souligne Temin (2006), a également contribué au déclin économique. Ainsi, la combinaison de ces facteurs a joué un rôle crucial dans la chute de l'Empire romain.", "reference_answer": "Cet argument se concentre sur les troubles économiques et la dépendance excessive au travail des esclaves comme principales raisons de la chute de l'Empire romain. Pour commencer, l’un des éléments de preuve significatifs est la dévaluation de la monnaie romaine. Comme l’a souligné Harper (2016), l’empire a souffert d’une forte inflation en raison de la dépréciation constante de sa monnaie, ce qui a rendu difficile la stabilité de l’économie. De plus, le recours excessif au travail servile a également joué un rôle préjudiciable. Comme le souligne Scheidel (2007), la dépendance à l’égard des esclaves a conduit au chômage des citoyens romains libres. En effet, les esclaves étaient nettement moins chers à entretenir que l’embauche de citoyens libres, ce qui a entraîné une baisse des opportunités d’emploi, ce qui a entraîné une instabilité économique. De plus, l’expansion de l’empire vers l’est les rendait fortement dépendants des importations, par exemple de céréales en provenance d’Égypte. Comme l’a noté Temin (2006), cela a créé un déficit commercial qui a encore affaibli l’économie romaine. Lorsque l’empire commença à perdre ses territoires, il devint de plus en plus difficile de maintenir ce déséquilibre commercial, entraînant un déclin économique. En conclusion, on peut affirmer que les troubles économiques, dus principalement à la dévaluation de la monnaie et à la dépendance excessive à l’égard du travail des esclaves, ont largement contribué à la chute de l’Empire romain. Les preuves fournies, qui incluent des références scientifiques à Harper (2016), Scheidel (2007) et Temin (2006), soutiennent cette thèse.", "rubric": "La réponse est-elle bien étayée par des preuves, y compris des citations/attributions lorsque cela est pertinent ?"}feedback, score = Judge.single_relative_grade(**data)print("Feedback:", feedback)print("Score:", score)# Sortie# Feedback : réponse A et réponse B identifier correctement les problèmes économiques et la dépendance excessive à l'égard du travail des esclaves comme facteurs ayant contribué de manière significative à la chute de l'Empire romain. Cependant, la réponse B est plus efficace pour présenter l'argument de l'historien en raison de l'inclusion de sources savantes pour étayer ses affirmations. œuvres de Harper, Scheidel et Temin, ce qui ajoute de la crédibilité à l'argument de l'historien et s'aligne bien avec l'accent mis par la rubrique de partition sur les preuves et les citations. Bien que la réponse A fournisse un argument similaire, elle manque de toute forme de citations ou d'attributions, ce qui est le cas. diminue la force des preuves présentées. Par conséquent, sur la base de la rubrique fournie, la réponse B est la meilleure réponse en raison de son utilisation de preuves scientifiques pour étayer les affirmations de l'historien.# Score : B
Remarque : Si vous avez plusieurs réponses à noter, n'utilisez pas single_absolute_grade
/ single_relative_grade
- utilisez plutôt absolute_grade
et relative_grade
! Cela vous donnera une accélération plus de 10x.
# batch Absolute gradeinstructions = [...] # Liste des instructionsresponses = [...] # Liste des réponsesreference_answers = [...] # Liste des réponses de référencerubric = "..." # Chaîne de rubriquefeedbacks, scores = juge.absolute_grade (instructions=instructions,responses=responses,rubric=rubric,reference_answers=reference_answers)# batch relative gradeinstructions = [...] # Liste des instructionsresponses_from_a = [...] # Liste des réponsesresponses_from_b = [...]reference_answers = [...] # Liste des réponses de référencerubric = "..." # Chaîne de rubriquefeedbacks, scores = Judge.relative_grade(instructions=instructions,responses_A=responses_from_a,responses_B=responses_from_b,rubric=rubric ,reference_answers=reference_answers)
Prometheus-Eval est un référentiel qui fournit une collection d'outils pour la formation, l'évaluation et l'utilisation de modèles de langage spécialisés dans l'évaluation d'autres modèles de langage. Le référentiel comprend les composants suivants :
Le package Python prometheus-eval
, qui fournit une interface simple pour évaluer les paires instruction-réponse à l'aide de Prometheus.
Collection d'ensembles de données d'évaluation pour la formation et l'évaluation des modèles Prometheus.
Scripts pour entraîner les modèles Prometheus ou affiner les ensembles de données personnalisés.
Prometheus est une famille de modèles de langage open source spécialisés dans l'évaluation d'autres modèles de langage. En simulant efficacement les jugements humains et les évaluations exclusives basées sur LM, nous visons à résoudre les problèmes suivants :
Équité : ne pas s'appuyer sur des modèles fermés pour les évaluations !
Contrôlabilité : vous n'avez pas à vous soucier des mises à jour de version GPT ou de l'envoi de vos données privées à OpenAI en construisant des pipelines d'évaluation internes
Abordabilité : si vous possédez déjà des GPU, leur utilisation est gratuite !
Par rapport aux modèles Prometheus 1, les modèles Prometheus 2 prennent en charge à la fois l'évaluation directe (notation absolue) et le classement par paires (notation relative).
Vous pouvez changer de mode en fournissant un format d'invite de saisie et une invite système différents. Dans l'invite, vous devez remplir les instructions, les réponses et les grilles de notation avec vos propres données. En option, vous pouvez également ajouter une réponse de référence qui conduit à de meilleures performances !
prometheus-eval
Le package prometheus-eval
fournit une interface simple pour évaluer les paires instruction-réponse à l’aide de Prometheus. Le package comprend les méthodes suivantes :
absolute_grade
: évalue une réponse unique en fonction d'une instruction donnée, d'une réponse de référence et d'une grille de scores. Produit un score compris entre 1 et 5.
relative_grade
: évalue deux réponses en fonction d'une instruction et d'une grille de scores données. Sorties « A » ou « B » en fonction de la meilleure réponse.
Si vous préférez travailler directement avec les poids téléchargés dans Huggingface Hub, vous pouvez directement télécharger les poids des modèles !
from transformers import AutoModelForCausalLM, AutoTokenizerdevice = "cuda" # le périphérique sur lequel charger le modèle surmodel = AutoModelForCausalLM.from_pretrained("prometheus-eval/prometheus-7b-v2.0")tokenizer = AutoTokenizer.from_pretrained("prometheus-eval/prometheus-7b-v2.0")ABS_SYSTEM_PROMPT = "Vous êtes un assistant de juge équitable chargé de fournir des commentaires clairs et objectifs basés sur des critères spécifiques, en garantissant que chaque évaluation reflète les normes absolues fixées en matière de performance. "ABSOLUTE_PROMPT = """###Description de la tâche : une instruction (peut inclure une entrée), une réponse à évaluer, une réponse de référence qui obtient un score de 5, et une rubrique de score représentant un critère d'évaluation est donnée.1. Rédigez un commentaire détaillé qui évalue la qualité de la réponse strictement sur la base de la rubrique de score donnée, sans évaluer en général.2. Après avoir rédigé un commentaire, rédigez un score qui. est un nombre entier compris entre 1 et 5. Vous devez vous référer à la rubrique de notation.3. Le format de sortie doit ressembler à ceci : « Feedback : (écrire un feedback pour les critères) [RESULTAT] (un nombre entier compris entre 1 et 5) »4 . Veuillez ne générer aucune autre ouverture, fermeture et explication.###L'instruction à évaluer :{instruction}###Réponse à évaluer :{response}###Réponse de référence (score 5) :{reference_answer}### Rubriques de score :{rubrique}###Feedback : """user_content = ABS_SYSTEM_PROMPT + "nn" + ABSOLUTE_PROMPT.format(...) # Remplissez l'invite avec vos messages de données = [ {"role": "utilisateur", "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(decoded[0])
Section | Description |
---|---|
Évaluation BiGGen-Bench | Instructions pour évaluer votre LM dans BiGGen-Bench. Vous pouvez également vous référer à la mise en œuvre pour votre propre référentiel d'évaluation. |
Formation de Prométhée | Instructions pour reproduire les modèles Prometheus 2. Basé sur le référentiel du manuel d'alignement. |
Utiliser Prometheus comme filtre de qualité des données | Livre de recettes pour utiliser Prometheus 2 comme filtre de qualité dans la génération de données synthétiques. Un grand merci à l'équipe Distilabel ! ? |
Utiliser Prometheus comme évaluateur dans RAG | Livre de recettes pour utiliser les applications Prometheus 2 RAG. Un grand merci à l'équipe de LlamaIndex ! ? |
La base de code sous-jacente à la formation provient du manuel d'alignement de Huggingface et du référentiel Super Mario Merging. De plus, à des fins d'inférence, il utilise largement les bibliothèques litellm, vllm et Transformer. Un grand merci à tous les contributeurs pour ces super référentiels !! ?
Si vous trouvez notre travail utile, pensez à citer notre article !
@misc{kim2024prometheus, title={Prometheus 2 : Un modèle de langage Open Source spécialisé dans l'évaluation d'autres modèles de langage}, author={Seungone Kim et Juyoung Suk et Shayne Longpre et Bill Yuchen Lin et Jamin Shin et Sean Welleck et Graham Neubig et Moontae Lee et Kyungjae Lee et Minjoon Seo}, année={2024}, eprint={2405.01535}, archivePrefix={ arXiv}, PrimaryClass={cs.CL}}
@article{kim2023prometheus, title={Prometheus : Induire une capacité d'évaluation fine dans les modèles linguistiques}, author={Kim, Seungone et Shin, Jamin et Cho, Yejin et Jang, Joel et Longpre, Shayne et Lee, Hwaran et Yun, Sangdoo et Shin, Seongjin et Kim, Sungdong et Thorne, James et autres}, journal={préimpression arXiv arXiv : 2310.08491}, année ={2023}}
@misc{lee2024prometheusvision, title={Prometheus-Vision : modèle vision-langage comme juge pour une évaluation fine}, author={Seongyun Lee et Seungone Kim et Sue Hyun Park et Geewook Kim et Minjoon Seo}, année={2024}, eprint={2401.06591}, archivePrefix={arXiv}, PrimaryClass={cs.CL}}
@misc{kim2024biggen, title={Le banc BiGGen : une référence fondée sur des principes pour une évaluation fine des modèles de langage avec des modèles de langage}, author={Seungone Kim et Juyoung Suk et Ji Yong Cho et Shayne Longpre et Chaeeun Kim et Dongkeun Yoon et Guijin Son et Yejin Cho et Sheikh Shafayat et Jinheon Baek et Sue Hyun Park et Hyeonbin Hwang et Jinkyung Jo et Hyowon Cho et Haebin Shin et Seongyun Lee et Hanseok Oh et Noah Lee et Namgyu Ho et Se June Joo et Miyoung Ko et Yoonjoo Lee et Hyungjoo Chae et Jamin Shin et Joel Jang et Seonghyeon Ye et Bill Yuchen Lin et Sean Welleck et Graham Neubig et Moontae Lee et Kyungjae Lee et Minjoon Seo}, année={2024}, eprint={2406.05761}, archivePrefix={arXiv}, PrimaryClass={cs.CL}}