Un repositorio para evaluar LLM en tareas de generación
Últimas noticias
[2024/06] ¡Lanzamos BiGGen-Bench y Prometheus 2 BGB (8x7B) !
BiGGen-Bench presenta 9 capacidades principales, 77 tareas y 765 instancias meticulosamente diseñadas, cada una con criterios de evaluación específicos.
Evaluamos 103 modelos de lenguaje de frontera mediante 5 modelos de lenguaje de evaluación de última generación y analizamos los hallazgos en nuestro artículo.
Entrenamos continuamente a Prometheus 2 8x7B en la traza de evaluación BiGGen-Bench y construimos nuestro evaluador más capaz, LM Prometheus 2 BGB, superando incluso a Claude-3-Opus en tareas de calificación absoluta.
¡Consulte nuestro conjunto de datos, resultados de evaluación, tabla de clasificación, informe interactivo y el código!
[2024/05] ¡Lanzamos modelos Prometheus 2 (7B y 8x7B)!
Alcanza al menos el 80% de las estadísticas de evaluación o rendimiento de Prometheus 2 (8x7B)
Requiere sólo 16 GB de VRAM, lo que lo hace adecuado para ejecutarse en GPU de consumo.
En comparación con Prometheus 1 (13B), Prometheus 2 (8x7B) muestra un rendimiento de evaluación mejorado y también admite la evaluación en formatos de clasificación por pares (calificación relativa).
Logra una correlación de Pearson de 0,6 a 0,7 con GPT-4-1106 en una escala Likert de 5 puntos en múltiples puntos de referencia de evaluación directa, incluidos VicunaBench, MT-Bench y FLASK.
También obtiene una puntuación de 72% a 85% de acuerdo con los juicios humanos en múltiples puntos de referencia de clasificación por pares, incluidos HHH Alignment, MT Bench Human Judgment y Auto-J Eval.
Prometheus 2 (8x7B) es un modelo de lenguaje evaluador de última generación de código abierto.
Prometheus 2 (7B) es una versión más ligera del modelo Prometheus 2 (8x7B) con rendimientos razonables (superando a Llama-2-70B y a la par con Mixtral-8x7B).
Instalación con pipa:
instalación de pip prometheus-eval
Prometheus-Eval admite la inferencia local a través de vllm
y la inferencia a través de las API de LLM con la ayuda de litellm
.
Instale vllm
si desea ejecutar Prometheus en su entorno local.
instalación de pip vllm
Si estás interesado en:
Utilizar la interfaz de Prometheus a través del punto final VLLM, Huggingface TGI u otras plataformas
Aprovechar los LLM de evaluadores más potentes, como GPT-4
¡También puedes aprovechar Prometheus-Eval! Para obtener detalles de instalación para varios proveedores, consulte los documentos del proveedor LiteLLM.
desde prometheus_eval.litellm import LiteLLM, AsyncLiteLLMmodel = LiteLLM('openai/prometheus-eval/prometheus-7b-v2.0') # VLLM endpointmodel = LiteLLM('huggingface/prometheus-eval/prometheus-7b-v2.0') # Modelo TGI abrazando cara = AsyncLiteLLM('gpt-4-turbo', request_per_minuto=100) # API GPT-4 (generación asíncrona considerando el límite de velocidad)# ¡Y mucho más! juez = PrometheusEval(modelo=modelo)
Nota : la biblioteca prometheus-eval
se encuentra actualmente en la etapa beta. Si encuentra algún problema, háganoslo saber creando un problema en el repositorio.
Con
prometheus-eval
, evaluar cualquier par de instrucción y respuesta es tan simple como:
# Calificación absoluta: puntuación de resultados de 1 a 5 de prometheus_eval.vllm import VLLM de prometheus_eval import PrometheusEval de prometheus_eval.prompts import ABSOLUTE_PROMPT, SCORE_RUBRIC_TEMPLATEmodel = VLLM(model="prometheus-eval/prometheus-7b-v2.0")judge = PrometheusEval(model=model, absoluta_grade_template=ABSOLUTE_PROMPT)instruction = "Luchando con una ruptura reciente, una persona se sincera sobre los intensos sentimientos de soledad y tristeza. Piden consejo sobre cómo afrontar la angustia y seguir adelante en la vida. .",response = "Realmente lamento enterarme de su ruptura. Este puede ser un momento inmensamente desafiante lleno de intensas emociones de soledad y tristeza. Es importante recordar que es normal experimentar estos sentimientos; son un testimonio de la conexión profunda que alguna vez tuviste. En primer lugar, no dudes en abrazar tus emociones, déjalas fluir libremente. Ignorarlas a menudo complica el proceso de curación. estar molesto, derramar lágrimas o sentirse enojado. Todo esto es parte del viaje hacia la curación. El cuidado personal puede ser un bálsamo curativo en estos tiempos difíciles. Esto podría significar disfrutar de su libro favorito, escribir un diario de sus pensamientos o incluso simplemente tomar una taza de té tranquila. Pequeños actos de bondad hacia uno mismo pueden mejorar significativamente su bienestar emocional. Además, no te aísles. Rodéate de personas que te apoyen y que puedan ofrecerte consuelo y comprensión. Esto podría incluir amigos, familiares o incluso un profesional de la salud mental. Pueden brindarle el apoyo emocional que tanto necesita y estrategias para ayudarlo a sobrellevar la situación. Por último, recuerde que no existe un cronograma establecido para la curación. Es diferente para cada uno y está bien que te tomes el tiempo que necesites. Mantenga su atención en el futuro y el potencial que tiene. Aunque puede que ahora no parezca posible, saldrás más fuerte de esta experiencia. Está bien pedir ayuda, está bien llorar y está bien hacerlo un día a la vez. No está solo en este viaje y hay personas listas y dispuestas a ayudar. Está bien sanar a tu propio ritmo.",reference_answer = "Sólo puedo imaginar lo difícil que debe ser este momento para ti. La angustia puede sentirse como una ola abrumadora que te inunda y te hace sentir perdido y solo. Es importante recordar que está bien sentirse así; tus sentimientos son válidos y es natural lamentar la pérdida de una relación. En primer lugar, es fundamental permitirse sentir las emociones plenamente. Reprimirlos o negarlos a menudo sólo prolonga el proceso de curación. Está bien llorar, sentirse triste o estar enojado. Todos estos son parte del viaje de curación. Participar en actividades de cuidado personal también puede proporcionar un impulso muy necesario. Esto podría ser cualquier cosa, desde tomar un baño tibio, escribir en un diario o simplemente beber una taza de su té favorito. Pequeños actos de amor propio pueden marcar una gran diferencia en cómo te sientes. A continuación, trate de rodearse de personas que lo apoyen, que comprendan su situación y le brinden consuelo. Los amigos y la familia pueden ser una gran fuente de fortaleza en momentos de angustia. Si se siente cómodo, puede considerar buscar ayuda profesional. Los terapeutas y consejeros están capacitados para brindar asistencia y herramientas para superar momentos difíciles como estos. Por último, es importante recordar que está bien tomarse su tiempo para sanar. Cada uno tiene su propio ritmo y no hay prisa. Trate de concentrarse en el futuro y las posibilidades que ofrece. Aunque ahora no lo parezca, saldrás más fuerte y resiliente de esta experiencia. Recuerde, está bien pedir ayuda y está bien sentirse como usted se siente. No estás solo en este viaje y hay personas que se preocupan por ti y quieren ayudarte. Está bien tomar un día a la vez. La curación es un proceso y está bien avanzar a su propio ritmo.",rubric_data = { "criteria":"¿El modelo es competente en aplicar empatía e inteligencia emocional a sus respuestas cuando el usuario transmite emociones o enfrenta circunstancias desafiantes? ", "score1_description":"El modelo se niega a identificar o reaccionar al tono emocional de las entradas del usuario, dando respuestas que son inadecuadas o emocionalmente insensibles.", "score2_description":"El modelo intermitentemente reconoce el contexto emocional pero a menudo responde sin suficiente empatía o comprensión emocional.", "score3_description":"El modelo normalmente identifica el contexto emocional e intenta responder con empatía, sin embargo, las respuestas a veces pueden no entender el punto o carecer de profundidad emocional.", "score4_description ":"El modelo identifica consistentemente y reacciona adecuadamente al contexto emocional, brindando respuestas empáticas. Sin embargo, todavía puede haber descuidos esporádicos o deficiencias en la profundidad emocional.", "score5_description":"El modelo sobresale en la identificación del contexto emocional y ofrece persistentemente respuestas empáticas y emocionalmente conscientes que demuestran una profunda comprensión de las emociones o la situación del usuario."} score_rubric = SCORE_RUBRIC_TEMPLATE.format(**rubric_data)comentarios, puntaje = juez.single_absolute_grade(instruction=instruction,response=response,rubric=score_rubric,reference_answer=reference_answer)print("Comentarios:", comentarios)print("Puntuación:", puntaje)# Salida# Comentarios: La respuesta proporcionada muestra un nivel alto de empatía e inteligencia emocional. Aborda eficazmente la angustia emocional expresada por el usuario. Reconoce el dolor del usuario y valida sus sentimientos de soledad. y la tristeza, que es un aspecto crucial a la hora de brindar consejos empáticos. La respuesta también sugiere pasos prácticos para afrontar la situación, como aceptar las emociones, practicar el autocuidado y buscar apoyo de amigos, familiares o profesionales. Además, la respuesta asegura al usuario que la curación es un proceso personal sin un cronograma fijo, que ofrece consuelo y comprensión. Enfatiza el valor y el potencial del usuario para superar la situación, lo que demuestra una profunda comprensión de las emociones y la situación del usuario. Al comparar la rúbrica de puntuación con la respuesta proporcionada, queda claro que el modelo exhibe una excelente capacidad para aplicar la empatía y la inteligencia emocional. La respuesta no tiene ninguna deficiencia en profundidad emocional y cumple con éxito los criterios para una puntuación de 5.# Puntuación: 5
# Calificación relativa: Salidas A o B de prometheus_eval.vllm import VLLM de prometheus_eval import PrometheusEval de 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": "Un grupo de historiadores está llevando a cabo un debate sobre los factores que llevaron a la caída del Imperio Romano. Un historiador sostiene que la razón principal de la caída fue la presión constante de las invasiones bárbaras. Otro cree que se debió a problemas económicos y a la excesiva dependencia del trabajo esclavo. Un tercero sugiere que se debió a la decadencia moral y la inestabilidad política. Cada historiador debe proporcionar pruebas para respaldar sus afirmaciones. ¿presentaría su caso el historiador que defiende los problemas económicos y la excesiva dependencia del trabajo esclavo?", "response_A": "El historiador que argumenta que los problemas económicos y la excesiva dependencia del trabajo esclavo condujeron a la caída del Imperio Romano diría esto: La economía del Imperio fue muy afectada por la devaluación de la moneda romana. Esta devaluación de la moneda resultó en una inflación galopante, perturbando la estabilidad de la economía. Además, el Imperio Romano dependía en gran medida del trabajo esclavo. Esto provocó desempleo entre los ciudadanos libres porque mantener esclavos era más barato que contratar ciudadanos libres. La disminución de las oportunidades de empleo resultó en inestabilidad económica. Además de esto, la expansión del imperio hacia el este los hizo dependientes de las importaciones, como el grano de Egipto. Esta excesiva dependencia de las importaciones provocó un déficit comercial que debilitó aún más la economía. A medida que el imperio perdió territorios, mantener el desequilibrio comercial se volvió difícil, lo que provocó la caída económica. Por lo tanto, los problemas económicos y la excesiva dependencia del trabajo esclavo estuvieron entre las principales razones de la caída del Imperio Romano.", "response_B": "El historiador que defiende los problemas económicos y la excesiva dependencia del trabajo esclavo presentaría su caso citando factores económicos clave que contribuyó a la decadencia del Imperio Romano. Harper (2016) describió cómo la devaluación de la moneda romana provocó inflación, alterando la estabilidad económica. Además, Scheidel (2007) enfatizó que el uso excesivo de esclavos resultó en un desempleo generalizado entre los ciudadanos libres, desestabilizando aún más la economía. La dependencia del imperio de las importaciones de cereales de Egipto, creando un déficit comercial como lo destaca Temin (2006), también contribuyó al declive económico. Por lo tanto, la combinación de estos factores jugó un papel crucial en la caída del Imperio Romano.", "reference_answer": "Este argumento se centra en los problemas económicos y la excesiva dependencia del trabajo esclavo como razones principales de la caída del Imperio Romano. Para empezar, una de las pruebas más importantes es la devaluación de la moneda romana. Como destaca Harper (2016), el imperio sufrió una inflación severa debido a la constante devaluación de su moneda, lo que dificultaba que la economía se mantuviera estable. Además, la excesiva dependencia del trabajo esclavo también jugó un papel perjudicial. Como señala Scheidel (2007), la dependencia de los esclavos provocó desempleo entre los ciudadanos romanos libres. Esto se debe a que era significativamente más barato mantener a los esclavos en comparación con la contratación de ciudadanos libres, lo que provocó una disminución de las oportunidades laborales, lo que a su vez resultó en inestabilidad económica. Además, la expansión del imperio hacia el este los hizo muy dependientes de las importaciones, por ejemplo de cereales de Egipto. Como señaló Temin (2006), esto creó un déficit comercial que debilitó aún más la economía romana. Cuando el imperio comenzó a perder sus territorios, se hizo cada vez más difícil mantener este desequilibrio comercial, lo que condujo al declive económico. En conclusión, se puede argumentar que los problemas económicos, principalmente debidos a la devaluación de la moneda y la excesiva dependencia del trabajo esclavo, fueron factores importantes que contribuyeron a la caída del Imperio Romano. La evidencia proporcionada, que incluye referencias académicas a Harper (2016), Scheidel (2007) y Temin (2006), respalda esta tesis.", "rúbrica": "¿Está la respuesta bien respaldada con evidencia, incluidas citas/atribuciones cuando sea relevante? ?"}comentarios, puntuación = juez.single_relative_grade(**data)print("Comentarios:", comentarios)print("Puntuación:", puntuación)# Salida# Comentarios: Tanto la respuesta A como La respuesta B identifica correctamente los problemas económicos y la excesiva dependencia del trabajo esclavo como factores importantes que contribuyeron a la caída del Imperio Romano. Sin embargo, la respuesta B es más efectiva al presentar el argumento del historiador debido a la inclusión de fuentes académicas para respaldar sus afirmaciones. hace referencia a obras de Harper, Scheidel y Temin, lo que añade credibilidad al argumento del historiador y se alinea bien con el énfasis de la rúbrica de partitura en la evidencia y las citas. Si bien la Respuesta A proporciona un argumento similar, carece de cualquier tipo de argumento. citas o atribuciones, lo que disminuye la solidez de la evidencia presentada. Por lo tanto, según la rúbrica proporcionada, la respuesta B es la respuesta superior debido al uso de evidencia académica para respaldar las afirmaciones del historiador.# Puntuación: B
Nota : Si tiene varias respuestas para calificar, no use single_absolute_grade
/ single_relative_grade
; en su lugar, use absolute_grade
y relative_grade
. Te dará una aceleración de más de 10 veces.
# lote de instrucciones de calificación absoluta = [...] # Lista de respuestas de instrucciones = [...] # Lista de respuestas respuestas_referencia = [...] # Lista de respuestas de referencia rúbrica = "..." # Cadena de rúbrica comentarios, puntuaciones = juez.calificación_absoluta (instrucciones=instrucciones,respuestas=respuestas,rúbrica=rúbrica,respuestas_referencia=respuestas_referencia)# lote de instrucciones de calificación relativa = [...] # Lista de instruccionesresponses_from_a = [...] # Lista de respuestasresponses_from_b = [...]reference_answers = [...] # Lista de respuestas de referenciarúbrica = "..." # Rúbrica cadenafeedbacks, puntuaciones = juez.calificación_relativa(instrucciones=instrucciones,respuestas_A=respuestas_de_a,respuestas_B=respuestas_de_b,rúbrica=rúbrica,respuestas_de_referencia=respuestas_de_referencia)
Prometheus-Eval es un repositorio que proporciona una colección de herramientas para entrenar, evaluar y utilizar modelos de lenguaje especializados en evaluar otros modelos de lenguaje. El repositorio incluye los siguientes componentes:
El paquete Python prometheus-eval
, que proporciona una interfaz sencilla para evaluar pares instrucción-respuesta utilizando Prometheus.
Colección de conjuntos de datos de evaluación para entrenar y evaluar modelos de Prometheus.
Scripts para entrenar modelos de Prometheus o realizar ajustes en conjuntos de datos personalizados.
Prometheus es una familia de modelos de lenguaje de código abierto especializados en evaluar otros modelos de lenguaje. Al simular eficazmente juicios humanos y evaluaciones patentadas basadas en LM, nuestro objetivo es resolver los siguientes problemas:
Justicia : ¡No depender de modelos de código cerrado para las evaluaciones!
Controlabilidad : no tiene que preocuparse por las actualizaciones de la versión GPT ni por enviar sus datos privados a OpenAI mediante la construcción de canales de evaluación internos.
Asequibilidad : si ya tienes GPU, ¡puedes usarlas gratis!
En comparación con los modelos Prometheus 1, los modelos Prometheus 2 admiten tanto la evaluación directa (calificación absoluta) como la clasificación por pares (calificación relativa).
Puede cambiar de modo proporcionando un formato de mensaje de entrada y un mensaje del sistema diferentes. Dentro del mensaje, debe completar las instrucciones, las respuestas y las rúbricas de calificación con sus propios datos. Opcionalmente, también puede agregar una respuesta de referencia que conduzca a un mejor rendimiento.
prometheus-eval
El paquete prometheus-eval
proporciona una interfaz sencilla para evaluar pares instrucción-respuesta utilizando Prometheus. El paquete incluye los siguientes métodos:
absolute_grade
: Evalúa una única respuesta basada en una instrucción dada, una respuesta de referencia y una rúbrica de puntuación. Genera una puntuación entre 1 y 5.
relative_grade
: Evalúa dos respuestas basadas en una instrucción determinada y una rúbrica de puntuación. Genera 'A' o 'B' según la mejor respuesta.
Si prefieres trabajar directamente con los pesos cargados en Huggingface Hub, ¡puedes descargar directamente los pesos del modelo!
de transformadores import AutoModelForCausalLM, AutoTokenizerdevice = "cuda" # el dispositivo para cargar el modelo en el modelo = AutoModelForCausalLM.from_pretrained("prometheus-eval/prometheus-7b-v2.0")tokenizer = AutoTokenizer.from_pretrained("prometheus-eval/prometheus- 7b-v2.0")ABS_SYSTEM_PROMPT = "Usted es un asistente de juez imparcial cuya tarea es brindar retroalimentación clara y objetiva basada en criterios específicos, garantizando que cada evaluación refleje los estándares absolutos establecidos para el desempeño". ABSOLUTE_PROMPT = """### Descripción de la tarea: una instrucción (puede incluir una entrada dentro it), se proporciona una respuesta para evaluar, una respuesta de referencia que obtiene una puntuación de 5 y una rúbrica de puntuación que representa un criterio de evaluación.1. Escriba una retroalimentación detallada que evalúe la calidad de la respuesta basándose estrictamente en la rúbrica de puntuación dada. no evaluar en general.2. Después de escribir un comentario, escriba una puntuación que sea un número entero entre 1 y 5. Debe consultar la rúbrica de puntuación.3 El formato de salida debe verse como sigue: "Comentarios: (escribir un comentario para los criterios) [ RESULTADO] (un número entero entre 1 y 5)"4. No genere ninguna otra apertura, cierre ni explicaciones.###La instrucción para evaluar:{instruction}###Respuesta para evaluar:{response}###Respuesta de referencia (puntuación 5):{reference_answer}### Rúbricas de puntuación:{rubric}###Comentarios: """user_content = ABS_SYSTEM_PROMPT + "nn" + ABSOLUTE_PROMPT.format(...) # Complete el mensaje con sus mensajes de datos = [ {"rol": "usuario", "contenido": usuario_content}, ]codificados = tokenizer.apply_chat_template(messages, return_tensors="pt")model_inputs = codificados.to(dispositivo)model.to(dispositivo)generated_ids = model.generate(model_inputs, max_new_tokens=1000, do_sample=True)decodificado = tokenizer.batch_decode (ID_generados)imprimir(decodificado[0])
Sección | Descripción |
---|---|
Evaluación de BiGGen-Bench | Instrucciones para evaluar tu LM en BiGGen-Bench. También puede consultar la implementación para su propio punto de referencia de evaluación. |
Entrenamiento Prometeo | Instrucciones para replicar modelos de Prometheus 2. Basado en el repositorio del manual de alineación. |
Usando Prometheus como filtro de calidad de datos | Libro de recetas para utilizar Prometheus 2 como filtro de calidad en la generación de datos sintéticos. ¡Muchísimas gracias al equipo de distilabel! ? |
Usando Prometheus como evaluador en RAG | Libro de recetas para utilizar las aplicaciones Prometheus 2 RAG. ¡Muchas gracias al equipo de LlamaIndex! ? |
La base de código subyacente para la capacitación se origina en el Manual de alineación de Huggingface y el repositorio de fusión de Super Mario. Además, a modo de inferencia, utiliza en gran medida la biblioteca litellm, vllm y transformador. ¡Muchísimas gracias a todos los contribuyentes por estos fantásticos repositorios! ?
Si encuentra útil nuestro trabajo, ¡considere citarlo!
@misc{kim2024prometheus, title={Prometheus 2: un modelo de lenguaje de código abierto especializado en evaluar otros modelos de lenguaje}, autor={Seungone Kim y Juyoung Suk y Shayne Longpre y Bill Yuchen Lin y Jamin Shin y Sean Welleck y Graham Neubig y Moontae Lee y Kyungjae Lee y Minjoon Seo}, año={2024}, eprint={2405.01535}, archivePrefix={ arXiv}, clase primaria = {cs.CL}}
@article{kim2023prometheus, title={Prometheus: Inducción de capacidad de evaluación detallada en modelos lingüísticos}, autor={Kim, Seungone y Shin, Jamin y Cho, Yejin y Jang, Joel y Longpre, Shayne y Lee, Hwaran y Yun, Sangdoo y Shin, Seongjin y Kim, Sungdong y Thorne, James y otros}, diario={arXiv preprint arXiv:2310.08491}, año={2023}}
@misc{lee2024prometheusvision, title={Prometheus-Vision: modelo visión-lenguaje como juez para una evaluación detallada}, autor={Seongyun Lee y Seungone Kim y Sue Hyun Park y Geewook Kim y Minjoon Seo}, año={2024}, eprint={2401.06591}, archivePrefix={arXiv}, PrimaryClass={cs.CL}}
@misc{kim2024biggen, title={The BiGGen Bench: un punto de referencia basado en principios para una evaluación detallada de modelos lingüísticos con modelos lingüísticos}, autor={Seungone Kim y Juyoung Suk y Ji Yong Cho y Shayne Longpre y Chaeeun Kim y Dongkeun Yoon y Guijin Son y Yejin Cho y Sheikh Shafayat y Jinheon Baek y Sue Hyun Park y Hyeonbin Hwang y Jinkyung Jo y Hyowon Cho y Haebin Shin y Seongyun Lee y Hanseok Oh y Noah Lee y Namgyu Ho y Se June Joo y Miyoung Ko y Yoonjoo Lee y Hyungjoo Chae y Jamin Shin y Joel Jang y Seonghyeon Ye y Bill Yuchen Lin y Sean Welleck y Graham Neubig y Moontae Lee y Kyungjae Lee y Minjoon Seo}, año={2024}, eprint={2406.05761}, archivePrefix={arXiv}, clase primaria={cs.CL}}