Depois de criar um conjunto de dados de avaliação, o passo seguinte é definir as métricas usadas para medir o desempenho do modelo. Os modelos de IA generativa podem criar aplicações para uma vasta gama de tarefas, e o serviço de avaliação de IA gen usa uma estrutura orientada por testes que transforma a avaliação de classificações subjetivas em resultados objetivos e acionáveis.
Seguem-se os conceitos essenciais relacionados com as métricas de avaliação:
Rubricas: os critérios para classificar a resposta de um modelo ou uma aplicação MDI/CE.
Métricas: uma pontuação que mede o resultado do modelo em comparação com as rubricas de classificação.
O serviço de avaliação de IA gen oferece as seguintes categorias de métricas:
Métricas baseadas em rubricas: incorpore os MDIs em fluxos de trabalho de avaliação.
Rubricas adaptativas (recomendado): as rubricas são geradas dinamicamente para cada comando. As respostas são avaliadas com feedback detalhado e explicável de aprovação ou reprovação específico do comando.
Rubricas estáticas: as rubricas são definidas explicitamente e a mesma rubrica aplica-se a todos os comandos. As respostas são avaliadas com o mesmo conjunto de avaliadores numéricos baseados em pontuação. Uma única classificação numérica (como 1 a 5) por comando. Quando é necessária uma avaliação numa dimensão muito específica ou quando é necessária exatamente a mesma rubrica em todos os comandos.
Métricas baseadas em cálculos: avalie as respostas com algoritmos determinísticos, normalmente usando factos. Uma pontuação numérica (como 0,0 a 1,0) por comando. Quando os dados observáveis estão disponíveis e podem ser associados a um método determinístico.
Métricas de funções personalizadas: defina a sua própria métrica através de uma função Python.
Métricas baseadas em rubricas
As métricas baseadas em rubricas incorporam modelos de linguagem (conteúdo extenso) nos fluxos de trabalho para avaliar a qualidade das respostas do modelo. As avaliações baseadas em rubricas são adequadas para uma variedade de tarefas, especialmente a qualidade da escrita, a segurança e o cumprimento das instruções, que são frequentemente difíceis de avaliar com algoritmos determinísticos.
Rubricas adaptáveis
As rubricas adaptativas funcionam como testes de unidades para os seus modelos. As rubricas adaptativas geram dinamicamente um conjunto único de testes de aprovação ou reprovação para cada comando individual no seu conjunto de dados. As rubricas mantêm a avaliação relevante para a tarefa pedida e têm como objetivo fornecer resultados objetivos, explicáveis e consistentes.
O exemplo seguinte mostra como podem ser geradas rubricas adaptativas para um conjunto de comandos:
Comando | Rubricas adaptáveis |
---|---|
"Resume o seguinte artigo sobre as vantagens da energia solar em menos de 100 palavras…" |
|
"Escreve um email curto e simpático a convidar os funcionários para o piquenique anual da empresa. Menciona que a data é 15 de setembro e que vão estar disponíveis opções vegetarianas…" |
|
Pode aceder às rubricas adaptativas através do SDK. Recomendamos que comece com GENERAL_QUALITY
como predefinição.
Métrica de qualidade geral
GENERAL_QUALITY
gera um conjunto de rubricas que abrangem várias tarefas, como seguir instruções, formatação, tom e estilo, consoante o comando de entrada. Pode combinar a geração de rubricas com a validação na seguinte linha de código:
from vertexai import types
eval_result = client.evals.evaluate(
dataset=eval_dataset,
metrics=[
types.RubricMetric.GENERAL_QUALITY,
],
)
Pode gerar rubricas separadamente (para as rever ou reutilizar em vários modelos e agentes) antes de as usar para avaliar as respostas do modelo:
from vertexai import types
# Use GENERAL_QUALITY recipe to generate rubrics, and store them
# as a rubric group named "general_quality_rubrics".
data_with_rubrics = client.evals.generate_rubrics(
src=eval_dataset_df,
rubric_group_name="general_quality_rubrics",
predefined_spec_name=types.RubricMetric.GENERAL_QUALITY,
)
# Specify the group of rubrics to use for the evaluation.
eval_result = client.evals.evaluate(
dataset=data_with_rubrics,
metrics=[types.RubricMetric.GENERAL_QUALITY(
rubric_group_name="general_quality_rubrics",
)],
)
Também pode orientar o GENERAL_QUALITY
com linguagem natural guidelines
para focar a geração de rubricas nos critérios mais importantes para si. Em seguida, o serviço de avaliação de IA gen gera rubricas que abrangem as respetivas tarefas predefinidas e as diretrizes que especificar.
from vertexai import types
eval_result = client.evals.evaluate(
dataset=eval_dataset,
metrics=[
types.RubricMetric.GENERAL_QUALITY(
metric_spec_parameters={
"guidelines": "The response must maintain a professional tone and must not provide financial advice."
}
)
],
)
Métricas de qualidade segmentadas
Se precisar de avaliar um aspeto mais segmentado da qualidade do modelo, pode usar métricas que geram rubricas focadas numa área específica. Por exemplo:
from vertexai import types
eval_result = client.evals.evaluate(
dataset=eval_dataset,
metrics=[
types.RubricMetric.TEXT_QUALITY,
types.RubricMetric.INSTRUCTION_FOLLOWING,
],
)
O serviço de avaliação de IA gen oferece os seguintes tipos de rubricas adaptativas:
INSTRUCTION_FOLLOWING
: mede o grau de adesão da resposta às restrições e instruções específicas no comando.TEXT_QUALITY
: foca-se especificamente na qualidade linguística da resposta, avaliando a fluidez, a coerência e a gramática.
Conversa com várias interações
multi_turn_general_quality
: avalia a qualidade geral da conversa num diálogo de várias interações.multi_turn_text_quality
: avalia a qualidade do texto das respostas num diálogo de várias interações.
Avaliação do agente
final_response_reference_free
: avalia a qualidade da resposta final de um agente sem precisar de uma resposta de referência.
Para ver mais detalhes sobre as rubricas adaptáveis segmentadas, consulte o artigo Detalhes da rubrica adaptável.
Rubricas estáticas
Uma rubrica estática aplica um único conjunto fixo de diretrizes de pontuação a todos os exemplos no seu conjunto de dados. Esta abordagem baseada em pontuações é útil quando precisa de medir o desempenho em comparação com uma referência consistente em todos os comandos.
Por exemplo, a seguinte rubrica estática classifica a qualidade do texto numa escala de 1 a 5:
5: (Very good). Exceptionally clear, coherent, fluent, and concise. Fully adheres to instructions and stays grounded.
4: (Good). Well-written, coherent, and fluent. Mostly adheres to instructions and stays grounded. Minor room for improvement.
3: (Ok). Adequate writing with decent coherence and fluency. Partially fulfills instructions and may contain minor ungrounded information. Could be more concise.
2: (Bad). Poorly written, lacking coherence and fluency. Struggles to adhere to instructions and may include ungrounded information. Issues with conciseness.
1: (Very bad). Very poorly written, incoherent, and non-fluent. Fails to follow instructions and contains substantial ungrounded information. Severely lacking in conciseness.
O serviço de avaliação de IA gen fornece as seguintes métricas de rubrica estática:
GROUNDING
: verifica a factualidade e a consistência em relação a um texto de origem fornecido (verdade absoluta). Esta métrica é fundamental para os sistemas RAG.SAFETY
: avalia a resposta do modelo quanto a violações de políticas de segurança, como incitamento ao ódio ou conteúdo perigoso.
Também pode usar modelos de comandos de métricas, como FLUENCY
.
from vertexai import types
eval_result = client.evals.evaluate(
dataset=eval_dataset,
metrics=[
types.RubricMetric.SAFETY,
types.RubricMetric.GROUNDING,
types.RubricMetric.FLUENCY,
],
)
Personalizar rubricas estáticas
Para necessidades altamente especializadas, pode criar a sua própria rubrica estática. Este método oferece o máximo controlo, mas requer que crie cuidadosamente o comando de avaliação para garantir resultados consistentes e fiáveis. Recomendamos que use diretrizes com GENERAL_QUALITY
antes de personalizar rubricas estáticas.
# Define a custom metric to evaluate language simplicity
simplicity_metric = types.LLMMetric(
name='language_simplicity',
prompt_template=types.MetricPromptBuilder(
instruction="Evaluate the story's simplicity for a 5-year-old.",
criteria={
"Vocabulary": "Uses simple words.",
"Sentences": "Uses short sentences.",
},
rating_scores={
"5": "Excellent: Very simple, ideal for a 5-year-old.",
"4": "Good: Mostly simple, with minor complex parts.",
"3": "Fair: Mix of simple and complex; may be challenging for a 5-year-old.",
"2": "Poor: Largely too complex, with difficult words/sentences.",
"1": "Very Poor: Very complex, unsuitable for a 5-year-old."
}
)
)
eval_result = client.evals.evaluate(
dataset=eval_dataset,
metrics=[
simplicity_metric
],
)
Métricas baseadas em cálculos
As métricas baseadas em cálculos usam algoritmos determinísticos para classificar a resposta de um modelo comparando-a com uma resposta de referência. Requerem uma verdade fundamental no seu conjunto de dados e são ideais para tarefas em que uma resposta "correta" está bem definida.
Recall-Oriented Understudy for Gisting Evaluation (rouge_l, rouge_1): mede a sobreposição de n-gramas (sequências contíguas de palavras) entre a resposta do modelo e um texto de referência. É frequentemente usado para avaliar a sumarização de texto.
Bilingual Evaluation Understudy (BLEU): mede a semelhança de uma resposta com um texto de referência de alta qualidade através da contagem de n-gramas correspondentes. É a métrica padrão para a qualidade da tradução, mas também pode ser usada para outras tarefas de geração de texto.
Correspondência exata (exact_match): mede a percentagem de respostas idênticas à resposta de referência. Isto é útil para responder a perguntas baseadas em factos ou tarefas em que existe apenas uma resposta correta.
from vertexai import types
eval_result = client.evals.evaluate(
dataset=eval_dataset,
metrics=[
types.Metric(name='bleu'),
types.Metric(name='rouge_l'),
types.Metric(name='exact_match')
],
)
Métrica de função personalizada
Também pode implementar uma lógica de avaliação personalizada transmitindo uma função Python personalizada ao parâmetro custom_function
. O serviço de avaliação de IA gen executa esta função para cada linha do seu conjunto de dados.
# Define a custom function to check for the presence of a keyword
def contains_keyword(instance: dict) -> dict:
keyword = "magic"
response_text = instance.get("response", "")
score = 1.0 if keyword in response_text.lower() else 0.0
return {"score": score}
keyword_metric = types.Metric(
name="keyword_check",
custom_function=contains_keyword
)
eval_result = client.evals.evaluate(
dataset=eval_dataset,
metrics=[keyword_metric]
)