Menentukan metrik evaluasi

Setelah Anda membuat set data evaluasi, langkah berikutnya adalah menentukan metrik yang digunakan untuk mengukur performa model. Model AI generatif dapat membuat aplikasi untuk berbagai tugas, dan layanan evaluasi AI generatif menggunakan framework berbasis pengujian yang mengubah evaluasi dari rating subjektif menjadi hasil yang objektif dan dapat ditindaklanjuti.

Untuk mengetahui informasi selengkapnya tentang jenis metrik, lihat bagian Metrik evaluasi di halaman ringkasan layanan evaluasi AI generatif.

Metrik kualitas umum

Anda dapat mengakses rubrik adaptif melalui SDK. Sebaiknya mulai dengan GENERAL_QUALITY sebagai default.

GENERAL_QUALITY menghasilkan serangkaian rubrik yang mencakup berbagai tugas seperti mengikuti petunjuk, pemformatan, nada bahasa, gaya, bergantung pada perintah input. Anda dapat menggabungkan pembuatan rubrik dengan validasi dalam baris kode berikut:

from vertexai import types

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        types.RubricMetric.GENERAL_QUALITY,
    ],
)

Anda dapat membuat rubrik secara terpisah (untuk meninjau atau menggunakannya kembali di berbagai model dan agen) sebelum menggunakannya untuk mengevaluasi respons model:

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",
    )],
)

Anda juga dapat memandu GENERAL_QUALITY dengan bahasa natural guidelines untuk memfokuskan pembuatan rubrik pada kriteria yang paling penting bagi Anda. Layanan evaluasi AI generatif kemudian membuat rubrik yang mencakup tugas default dan pedoman yang Anda tentukan.

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."
            }
        )
    ],
)

Metrik kualitas yang ditargetkan

Jika perlu mengevaluasi aspek kualitas model yang lebih tertarget, Anda dapat menggunakan metrik yang menghasilkan rubrik yang berfokus pada area tertentu. Contoh:

from vertexai import types

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        types.RubricMetric.TEXT_QUALITY,
        types.RubricMetric.INSTRUCTION_FOLLOWING,
    ],
)

Layanan evaluasi AI generatif menawarkan jenis rubrik adaptif berikut:

  • INSTRUCTION_FOLLOWING: Mengukur seberapa baik respons mematuhi batasan dan petunjuk tertentu dalam perintah.

  • TEXT_QUALITY: Berfokus secara khusus pada kualitas linguistik respons, menilai kelancaran, koherensi, dan tata bahasa.

Percakapan multi-giliran

  • multi_turn_general_quality: Mengevaluasi kualitas percakapan secara keseluruhan dalam dialog multi-turn.

  • multi_turn_text_quality: Mengevaluasi kualitas teks respons dalam dialog multi-giliran.

Evaluasi agen

  • final_response_reference_free: Mengevaluasi kualitas jawaban akhir agen tanpa memerlukan jawaban referensi.

  • final_response_quality: Menggunakan rubrik adaptif untuk mengevaluasi kualitas jawaban akhir agen berdasarkan konfigurasi dan penggunaan alat agen.

  • hallucination: Mengevaluasi apakah respons teks oleh agen didasarkan pada konfigurasi dan penggunaan alat agen.

  • tool_use_quality: Mengevaluasi kebenaran panggilan fungsi yang dilakukan oleh agen untuk menjawab perintah pengguna.

Untuk mengetahui detail selengkapnya tentang rubrik adaptif yang ditargetkan, lihat Detail rubrik adaptif.

Rubrik statis

Rubrik statis menerapkan satu set pedoman pemberian skor tetap ke setiap contoh dalam set data Anda. Pendekatan berbasis skor ini berguna saat Anda perlu mengukur performa terhadap tolok ukur yang konsisten di semua perintah.

Misalnya, rubrik statis berikut menilai kualitas teks dalam skala 1-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.

Layanan evaluasi AI generatif menyediakan metrik rubrik statis berikut:

  • GROUNDING: Memeriksa faktualitas dan konsistensi terhadap teks sumber (kebenaran dasar) yang diberikan. Metrik ini sangat penting untuk sistem RAG.

  • SAFETY: Menilai respons model terkait pelanggaran kebijakan keamanan, seperti ujaran kebencian atau konten berbahaya.

Anda juga dapat menggunakan template perintah metrik seperti FLUENCY.

from vertexai import types

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        types.RubricMetric.SAFETY,
        types.RubricMetric.GROUNDING,
        types.RubricMetric.FLUENCY,
    ],
)

Menyesuaikan rubrik statis

Untuk kebutuhan yang sangat terspesialisasi, Anda dapat membuat rubrik statis Anda sendiri. Metode ini menawarkan kontrol maksimum, tetapi mengharuskan Anda mendesain perintah evaluasi dengan cermat untuk memastikan hasil yang konsisten dan andal. Sebaiknya gunakan pedoman dengan GENERAL_QUALITY sebelum menyesuaikan rubrik statis.

# 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
    ],
)

Metrik berbasis komputasi

Metrik berbasis komputasi menggunakan algoritma deterministik untuk memberi skor pada respons model dengan membandingkannya dengan jawaban referensi. Metrik ini memerlukan kebenaran nyata dalam set data Anda dan ideal untuk tugas yang memiliki jawaban "benar" yang jelas.

  • Recall-Oriented Understudy for Gisting Evaluation (rouge_l, rouge_1): Mengukur tumpang-tindih n-gram (urutan kata yang berdekatan) antara respons model dan teks referensi. Metrik ini biasanya digunakan untuk mengevaluasi ringkasan teks.

  • Bilingual Evaluation Understudy (bleu): Mengukur seberapa mirip respons dengan teks referensi berkualitas tinggi dengan menghitung n-gram yang cocok. Metrik ini adalah metrik standar untuk kualitas terjemahan, tetapi juga dapat digunakan untuk tugas pembuatan teks lainnya.

  • Pencocokan Persis (exact_match): Mengukur persentase respons yang identik dengan jawaban referensi. Hal ini berguna untuk menjawab pertanyaan berbasis fakta atau tugas yang hanya memiliki satu respons yang benar.

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')
    ],
)

Metrik fungsi kustom

Anda juga dapat menerapkan logika evaluasi kustom dengan meneruskan fungsi Python kustom ke parameter custom_function. Layanan evaluasi AI generatif menjalankan fungsi ini untuk setiap baris set data Anda.

# 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]
)

Metrik fungsi kustom jarak jauh

Selain menjalankan logika evaluasi kustom secara lokal, Anda dapat menerapkan logika evaluasi kustom yang dieksekusi secara aman di lingkungan sandbox jarak jauh. Hal ini berguna saat Anda ingin mengintegrasikan evaluasi sebagai bagian dari alur kerja penyesuaian model, atau saat Anda memiliki skenario khusus pengguna yang tidak tercakup oleh metrik evaluasi yang ada. Anda dapat melakukannya dengan meneruskan cuplikan kode Python sebagai string ke parameter remote_custom_function dari class Metric. Layanan evaluasi AI generatif menjalankan fungsi ini untuk setiap baris set data Anda dari jarak jauh.

import pandas as pd
from vertexai import types

code_snippet = """
def evaluate(instance):
    if instance['response'] == instance['reference']:
        return 1.0
    return 0.0
"""

custom_metric = types.Metric(
    name="my_custom_code_metric",
    remote_custom_function=code_snippet,
)

prompts_df = pd.DataFrame(
    {
        "prompt": ["What is 2+2?", "What is 3+3?"],
        "response": ["4", "5"],
        "reference": ["4", "6"],
    }
)

eval_dataset = types.EvaluationDataset(
    eval_dataset_df=prompts_df,
    candidate_name="test_model",
)

evaluation_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[custom_metric],
)

Input instance evaluasi

Fungsi evaluate menggunakan kamus instance sebagai argumennya. instance merepresentasikan instance evaluasi, dan kolom apa pun yang diisi di EvaluationInstance tersedia untuk fungsi sebagai instance[field_name]. Kolom yang tersedia meliputi:

  • prompt: Perintah pengguna yang diberikan ke model.
  • response: Output yang dihasilkan oleh model.
  • reference: Kebenaran nyata yang digunakan untuk membandingkan respons.
  • rubric_groups: Grup rubrik bernama yang terkait dengan perintah.
  • other_data: Data lain yang digunakan untuk mengisi placeholder berdasarkan kuncinya.
  • agent_eval_data: Data khusus untuk evaluasi agen seperti konfigurasi dan rekaman aktivitas agen.

Batasan teknis

  • Lingkungan eksekusi: Kode kustom dieksekusi di lingkungan sandbox tanpa akses jaringan.
  • Batas waktu eksekusi: Eksekusi penilaian itu sendiri dibatasi hingga 1 menit.
  • Batas memori: Ukuran total kode yang diupload, yang digabungkan dengan data apa pun yang dimuat selama eksekusi, tidak boleh melebihi 1,5 GB.

Paket pihak ketiga berikut tersedia pada waktu eksekusi:

altair
chess
cv2
deepdiff
editdistance
jsonschema
matplotlib
mpmath
nltk
numpy
pandas
pdfminer
pydantic
rdkit
reportlab
scipy
seaborn
sklearn
sqlparse
statsmodels
striprtf
sympy
tabulate

Langkah berikutnya