Definir as métricas de avaliação

Depois de criar um conjunto de dados de avaliação, a próxima etapa é definir as métricas usadas para medir o desempenho do modelo. Os modelos de IA generativa podem criar aplicativos para uma ampla variedade de tarefas, e o serviço de avaliação de IA generativa usa um framework orientado a testes que transforma a avaliação de classificações subjetivas em resultados objetivos e práticos.

Confira a seguir os principais conceitos relacionados às métricas de avaliação:

  • Rubricas: os critérios para classificar a resposta de um modelo ou aplicativo de LLM.

  • Métricas: uma pontuação que mede a saída do modelo em relação às rubricas de classificação.

O serviço de avaliação de IA generativa oferece as seguintes categorias de métricas:

  • Métricas baseadas em rubricas: incorporam LLMs aos 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 granular e explicável de aprovação ou reprovação específico para o comando.

    • Rubricas estáticas: são definidas explicitamente e a mesma rubrica se aplica a todos os comandos. As respostas são avaliadas com o mesmo conjunto de avaliadores numéricos baseados em pontuação. Uma única pontuação numérica (como de 1 a 5) por solicitação. Quando uma avaliação é necessária em uma dimensão muito específica ou quando a mesma rubrica é necessária em todos os comandos.

  • Métricas baseadas em computação: avaliam respostas com algoritmos determinísticos, geralmente usando informações empíricas. Uma pontuação numérica (como 0,0 a 1,0) por solicitação. Quando as informações empíricas estão disponíveis e podem ser correspondidas com um método determinista.

  • Métricas de função personalizadas: defina sua própria métrica usando uma função do Python.

Métricas com base em rubricas

As métricas baseadas em rubricas incorporam modelos de linguagem grandes em fluxos de trabalho para avaliar a qualidade das respostas do modelo. As avaliações baseadas em rubricas são adequadas para várias tarefas, especialmente qualidade de escrita, segurança e obediência a instruções, que geralmente são difíceis de avaliar com algoritmos determinísticos.

Indicadores adaptativos

As rubricas adaptativas funcionam como testes de unidade para seus modelos. As rubricas adaptativas geram dinamicamente um conjunto exclusivo 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 solicitada e visam fornecer resultados objetivos, explicáveis e consistentes.

O exemplo a seguir mostra como rubricas adaptativas podem ser geradas para um conjunto de comandos:

Comando Indicadores adaptativos
"Resuma o seguinte artigo sobre os benefícios da energia solar em menos de 100 palavras…"
  • O resumo tem menos de 100 palavras?
  • O resumo lista os benefícios da energia solar?
  • A resposta contém informações que não estão presentes no artigo?
"Escreva um e-mail curto e amigável convidando os funcionários para o piquenique anual da empresa. Mencione que a data é 15 de setembro e que opções vegetarianas estarão disponíveis…"
  • O e-mail tem um tom amigável e convidativo?
  • O e-mail menciona que a data é 15 de setembro?
  • O e-mail informa que opções vegetarianas estarão disponíveis?

É possível acessar as rubricas adaptativas pelo SDK. Recomendamos começar com GENERAL_QUALITY como padrão.

Métrica de qualidade geral

O GENERAL_QUALITY gera um conjunto de rubricas que abrangem várias tarefas, como seguir instruções, formatação, tom e estilo, dependendo do comando de entrada. É possível 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,
    ],
)

É possível gerar rubricas separadamente (para revisar ou reutilizar em modelos e agentes) antes de usá-las 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",
    )],
)

Você também pode orientar o GENERAL_QUALITY com linguagem natural guidelines para focar a geração de rubricas nos critérios mais importantes para você. Em seguida, o serviço de avaliação de IA generativa gera rubricas que abrangem as tarefas padrão e as diretrizes especificadas.

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 você precisar avaliar um aspecto mais específico da qualidade do modelo, use métricas que geram rubricas focadas em uma área específica. 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 generativa oferece os seguintes tipos de rubricas adaptativas:

  • INSTRUCTION_FOLLOWING: mede o quanto a resposta obedece às restrições e instruções específicas do comando.

  • TEXT_QUALITY: foca especificamente na qualidade linguística da resposta, avaliando a fluência, a coerência e a gramática.

Conversa com vários turnos

  • multi_turn_general_quality: avalia a qualidade geral da conversa em um diálogo multiturno.

  • multi_turn_text_quality: avalia a qualidade do texto das respostas em um diálogo de várias rodadas.

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 mais detalhes sobre as rubricas adaptativas segmentadas, consulte Detalhes da rubrica adaptativa.

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. Essa abordagem baseada em pontuação é útil quando você precisa medir a performance em relação a uma referência consistente em todos os comandos.

Por exemplo, a rubrica estática a seguir avalia a qualidade do texto em uma 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 generativa fornece as seguintes métricas de rubrica estática:

  • GROUNDING: verifica a veracidade e a consistência em relação a um texto de origem fornecido (verdade fundamental). Essa métrica é crucial para sistemas de RAG.

  • SAFETY: avalia a resposta do modelo em relação a violações das políticas de segurança, como discurso de ódio ou conteúdo perigoso.

Você 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, é possível criar uma rubrica estática própria. Esse método oferece o máximo de controle, mas exige que você crie com cuidado o comando de avaliação para garantir resultados consistentes e confiáveis. Recomendamos usar 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 com base em computação

As métricas baseadas em computação usam algoritmos deterministas para pontuar a resposta de um modelo comparando-a a uma resposta de referência. Eles exigem uma verdade fundamental no conjunto de dados e são ideais para tarefas em que uma resposta "correta" é 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. É usado normalmente para avaliar o resumo de texto.

  • Bilingual Evaluation Understudy (BLEU): mede a similaridade de uma resposta com um texto de referência de alta qualidade contando n-gramas correspondentes. É a métrica padrão para qualidade de tradução, mas também pode ser usada para outras tarefas de geração de texto.

  • Correspondência exata (exact_match): mede a porcentagem de respostas idênticas à resposta de referência. Isso é útil para perguntas e respostas com base em fatos ou tarefas em que há 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 é possível 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 generativa executa essa função para cada linha do 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]
)

A seguir