En esta sección mostraremos cómo podemos usar la biblioteca de código abierto. evaluación continua para crear comentarios de usuarios simulados.
Considere una aplicación de chatbot de preguntas y respuestas. Después de la implementación, los usuarios comienzan a calificar las respuestas con el visto bueno hacia arriba o hacia abajo, lo que indica la necesidad de mejorar el rendimiento. Para este ejemplo usaremos el ejemplo llamado correctness
en evaluación continua:
dataset = Dataset(example_data_downloader("correctness"))# Samples are annotated with "correct", "incorrect" or "refuse-to-answer"
# We remove the samples where the LLL refused to answer (i.e., said "I don't know")
dataset.filter(lambda x: x["annotation"] != "refuse-to-answer")
dataset.sample(300) # Only for this example: randomly sample 300 examples
Como mencionamos, queremos crear algunos criterios personalizados. Aprovechamos el LLMBasedCustomMetric
clase para definir el Tono y Concisión métrica. Para hacerlo, necesitamos definir la métrica y proporcionar una rúbrica de puntuación.
Para el tono:
tone = LLMBasedCustomMetric(
name="Tone",
definition="The Tone/Content Issues metric evaluates the appropriateness and accuracy of the tone and content in responses to specific questions. It focuses on ensuring that the tone is professional and suitable for the context, and that the content accurately addresses the question without unnecessary deviations or inaccuracies. This metric is crucial for maintaining a professional image and ensuring clear, direct communication.",
scoring_rubric="""Use the following rubric to assign a score to the answer based on its tone:
- Score 1: The response is inappropriate or inaccurate, with a tone that is either too informal, overly strong, or not suited to the professional context. The content may be irrelevant, incorrect, or fail to directly address the question posed.
- Score 2: The response is mostly appropriate and accurate but may contain minor tone or content issues. The tone is generally professional but may slip into informality or unnecessary strength in places. The content addresses the question but may include minor inaccuracies or unnecessary details.
- Score 3: The response is appropriate and accurate, with a tone that is professional and suited to the context. The content directly and correctly addresses the question without unnecessary deviations or inaccuracies.""",
scoring_function=ScoringFunctions.Numeric(min_val=1, max_val=3),
model_parameters={"temperature": 0},
)
mientras que por concisión:
conciseness = LLMBasedCustomMetric(
name="Conciseness",
definition="Conciseness in communication refers to the expression of ideas in a clear and straightforward manner, using the fewest possible words without sacrificing clarity or completeness of information. It involves eliminating redundancy, verbosity, and unnecessary details, focusing instead on delivering the essential message efficiently. ",
scoring_rubric="""Use the following rubric to assign a score to the answer based on its conciseness:
- Score 1: The answer is overly verbose, containing a significant amount of unnecessary information, repetition, or redundant expressions that do not contribute to the understanding of the topic.
- Score 2: The answer includes some unnecessary details or slightly repetitive information, but the excess does not severely hinder understanding.
- Score 3: The answer is clear, direct, and to the point, with no unnecessary words, details, or repetition.""",
scoring_function=ScoringFunctions.Numeric(min_val=1, max_val=3),
model_parameters={"temperature": 0},
)
Usamos Tono y Concisión junto con métricas más estándar, en particular consideraremos la
- Corrección de la respuesta (
DeterministicAnswerCorrectens
yLLMBasedAnswerCorrectness)
- Relevancia de la respuesta (
LLMBasedAnswerRelevance
) - Consistencia de estilo (
LLMBasedStyleConsistency
) - Legibilidad (
FleschKincaidReadability
)
El siguiente paso es reunir todas las métricas y especificar qué campo del conjunto de datos se debe utilizar para calcular las métricas. Para ello podemos utilizar el SingleModulePipeline
pipeline = SingleModulePipeline(
dataset=dataset,
eval=[
DeterministicAnswerCorrectness().use(
answer=dataset.answer,
ground_truth_answers=dataset.ground_truths,
),
LLMBasedAnswerCorrectness().use(
question=dataset.question,
answer=dataset.answer,
ground_truth_answers=dataset.ground_truths,
),
LLMBasedAnswerRelevance().use(
question=dataset.question, answer=dataset.answer
),
LLMBasedStyleConsistency().use(
answer=dataset.answer, ground_truth_answers=dataset.ground_truths
),
FleschKincaidReadability().use(answer=dataset.answer),
tone.use(
question=dataset.question,
answer=dataset.answer,
ground_truth_answers=dataset.ground_truths,
),
conciseness.use(
question=dataset.question,
answer=dataset.answer,
ground_truth_answers=dataset.ground_truths,
),
],
)
y ejecutar todas las métricas usando el EvaluationManager
eval_manager = EvaluationManager(pipeline)
# The dataset already contains the model output so we just set the evaluation results
eval_manager.evaluation.results = dataset.data
eval_manager.run_metrics() # Note: there is no progress bar, it might take a few minutes
El siguiente paso es entrenar un predictor de comentarios de usuarios simulados.
datasplit = DataSplit(
X=eval_manager.metrics.to_pandas(),
y=map(lambda x: 1 if x == "correct" else 0, dataset["annotation"]),
split_ratios=SplitRatios(train=0.6, test=0.2, calibration=0.2),
)# We use the train and calibration sets to train the classifier
predictor = EnsembleMetric(training=datasplit.train, calibration=datasplit.calibration)
Este predictor de comentarios de usuarios simulados es capaz de predecir correctamente los comentarios humanos en la división de prueba el 96,67% del tiempo.
Podemos aprovechar el enfoque propuesto para comprender mejor qué es importante para el usuario. A continuación se muestra la importancia aprendida de cada métrica mediante el predictor de comentarios de usuarios simulados.
Mirando la trama, vemos que Exactitud (incluido superposición de tokensque es otra medida de corrección) y Relevancia a la pregunta son los predictores más importantes de la preferencia del usuario. Pero el usuario también pesa tono y consistencia de estilo en la decisión. Al mismo tiempo, podemos ver que concisión y legibilidad no son tan importantes. Revisar este gráfico proporciona información valiosa sobre las preferencias del usuario, dando una indicación clara de qué elementos son esenciales y qué se puede ajustar si es necesario hacer concesiones.
Recopilar comentarios de los usuarios es un desafío, pero es la información más importante para los desarrolladores de modelos de lenguaje grandes (LLM). Al simular los comentarios de los usuarios durante las pruebas fuera de línea, reducimos significativamente el tiempo que tardan los comentarios en viajar desde el campo hasta los desarrolladores, mientras mantenemos relaciones positivas con los usuarios.
En la práctica, nuestro enfoque ha demostrado reflejar fielmente las respuestas humanas reales, superando a los métodos tradicionales que se basan en respuestas LLM aisladas. Esta estrategia permite la mejora incremental de las aplicaciones de IA generativa, fomentando un refinamiento continuo y una mayor congruencia con lo que esperan los usuarios.
—
Nota: Próximamente publicaremos un artículo de investigación con más detalles sobre esta metodología. ¡Manténganse al tanto!