הגדרת מדדי ההערכה

אחרי שיוצרים מערך נתונים להערכה, השלב הבא הוא להגדיר את המדדים שמשמשים למדידת ביצועי המודל. מודלים של AI גנרטיבי יכולים ליצור אפליקציות למגוון רחב של משימות, ושירות ההערכה של AI גנרטיבי משתמש במסגרת מבוססת-בדיקות שמשנה את ההערכה מדירוגים סובייקטיביים לתוצאות אובייקטיביות שניתן לפעול לפיהן.

מידע נוסף על סוגי המדדים זמין בקטע מדדי הערכה בדף הסקירה הכללית של שירות ההערכה של AI גנרטיבי.

מדד איכות כללי

אפשר לגשת לקריטריונים דינמיים דרך ה-SDK. מומלץ להתחיל עם GENERAL_QUALITY כברירת מחדל.

GENERAL_QUALITY יוצרת קבוצה של קריטריונים להערכה שמתייחסים למגוון משימות כמו ביצוע הוראות, עיצוב, טון, סגנון, בהתאם להנחיית הקלט. אפשר לשלב את יצירת הקריטריון עם אימות בשורת הקוד הבאה:

from vertexai import types

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

אפשר ליצור רובריקות בנפרד (כדי לבדוק אותן או להשתמש בהן שוב במודלים ובסוכנים שונים) לפני שמשתמשים בהן כדי להעריך את התשובות של המודל:

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

אפשר גם להשתמש בשפה טבעית כדי להנחות את GENERAL_QUALITY guidelines להתמקד בקריטריונים שהכי חשובים לכם כשיוצרים קריטריון הערכה. לאחר מכן, שירות ההערכה של ה-AI הגנרטיבי יוצר קריטריונים להערכה שכוללים גם את משימות ברירת המחדל שלו וגם את ההנחיות שציינתם.

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

מדדי איכות לטירגוט

אם אתם צריכים להעריך היבט ממוקד יותר של איכות המודל, אתם יכולים להשתמש במדדים שיוצרים קריטריונים שמתמקדים בתחום ספציפי. לדוגמה:

from vertexai import types

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

שירות ההערכה של AI גנרטיבי מציע את הסוגים הבאים של קריטריוני הערכה דינמיים:

  • INSTRUCTION_FOLLOWING: מדד שבודק עד כמה התשובה עומדת במגבלות ובהוראות הספציפיות בהנחיה.

  • TEXT_QUALITY: מתמקד ספציפית באיכות הלשונית של התשובה, ומעריך את השטף, הלכידות והדקדוק.

שיחה עם זיכרון

  • multi_turn_general_quality: הערכה של האיכות הכוללת של השיחה בדיאלוג עם זיכרון.

  • multi_turn_text_quality: הערכה של איכות הטקסט בתשובות בשיחה מרובת תפניות.

הערכת הסוכן

  • final_response_reference_free: מעריך את האיכות של התשובה הסופית של הנציג בלי להזדקק לתשובה לדוגמה.

  • final_response_quality: משתמש בקריטריונים דינמיים כדי להעריך את האיכות של התשובה הסופית של הנציג על סמך ההגדרה של הנציג והשימוש שלו בכלים.

  • hallucination: בודק אם התשובות הטקסטואליות של הסוכן מבוססות על ההגדרות של הסוכן ועל השימוש שלו בכלים.

  • tool_use_quality: הערכה של נכונות הקריאות לפונקציות שבוצעו על ידי הסוכן כדי לתת מענה להנחיה של המשתמש.

פרטים נוספים על קריטריונים דינמיים ממוקדים זמינים במאמר פרטים על קריטריונים דינמיים.

קריטריונים סטטיים להערכה

בסיווג סטטי, קבוצה קבועה אחת של הנחיות לניקוד מוחלת על כל דוגמה בקבוצת הנתונים. הגישה הזו שמבוססת על ניקוד שימושית כשצריך למדוד את הביצועים בהשוואה לנקודת השוואה עקבית בכל ההנחיות.

לדוגמה, בקריטריון ההערכה הסטטי הבא, איכות הטקסט מדורגת בסולם של 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.

שירות ההערכה של ה-AI הגנרטיבי מספק את מדדי הקריטריונים הסטטיים הבאים:

  • GROUNDING: בדיקה של עובדות ועקביות בהשוואה לטקסט מקור שסופק (מקור מהימן). המדד הזה חיוני למערכות RAG.

  • SAFETY: מעריך את התגובה של המודל כדי לזהות הפרות של מדיניות הבטיחות, כמו דברי שטנה או תוכן מסוכן.

אפשר גם להשתמש בתבניות של הנחיות למדדים כמו FLUENCY.

from vertexai import types

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

התאמה אישית של קריטריוני הערכה סטטיים

לצרכים ספציפיים מאוד, אפשר ליצור קריטריון סטטי משלכם. השיטה הזו מאפשרת שליטה מקסימלית, אבל כדי להבטיח תוצאות עקביות ואמינות, צריך לעצב בקפידה את ההנחיה להערכה. מומלץ להשתמש בהנחיות עם GENERAL_QUALITY לפני שמתאימים אישית קריטריונים סטטיים.

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

השוואות מבוססות-מחשוב

השוואות מבוססות-מחשוב משתמשות באלגוריתמים דטרמיניסטיים כדי לתת ציון לתשובה של מודל על ידי השוואה שלה לתשובת הפניה. הם דורשים נתונים אמיתיים במערך הנתונים שלכם, והם אידיאליים למשימות שבהן התשובה ה "נכונה" מוגדרת היטב.

  • Recall-Oriented Understudy for Gisting Evaluation (rouge_l, rouge_1): מדד שבודק את החפיפה של n-grams (רצפים רציפים של מילים) בין התשובה של המודל לבין טקסט הפניה. המדד הזה משמש בדרך כלל להערכת סיכום טקסט.

  • Bilingual Evaluation Understudy (BLEU): מדד שבודק עד כמה התשובה דומה לטקסט הפניה באיכות גבוהה, על ידי ספירת n-גרמים תואמים. זהו המדד הרגיל לאיכות התרגום, אבל אפשר להשתמש בו גם למשימות אחרות של יצירת טקסט.

  • התאמה מדויקת (exact_match): מדד שבודק את אחוז התשובות שזהות לתשובת ההפניה. האפשרות הזו שימושית למשימות שבהן צריך לענות על שאלות שמבוססות על עובדות, או למשימות שבהן יש רק תשובה נכונה אחת.

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

מדד של פונקציה מותאמת אישית

אפשר גם להטמיע לוגיקה מותאמת אישית להערכה על ידי העברת פונקציית Python מותאמת אישית לפרמטר custom_function. שירות ההערכה של AI גנרטיבי מפעיל את הפונקציה הזו לכל שורה במערך הנתונים.

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

מדד של פונקציה מותאמת אישית מרחוק

בנוסף להרצת לוגיקת הערכה מותאמת אישית באופן מקומי, אפשר להטמיע לוגיקת הערכה מותאמת אישית שמופעלת בצורה מאובטחת בסביבת ארגז חול מרוחקת. האפשרות הזו שימושית כשרוצים לשלב הערכה כחלק מתהליך העבודה של התאמת המודל, או כשרוצים להשתמש בתרחיש ספציפי למשתמש שלא נכלל במדדי ההערכה הקיימים. כדי לעשות את זה, מעבירים קטע קוד Python כמחרוזת לפרמטר remote_custom_function של המחלקה Metric. שירות ההערכה של AI גנרטיבי מפעיל את הפונקציה הזו מרחוק לכל שורה במערך הנתונים.

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

קלט של מופע הערכה

הפונקציה evaluate מקבלת מילון instance כארגומנט. ‫instance מייצג את מופע ההערכה, וכל השדות שאוכלסו ב-EvaluationInstance זמינים לפונקציה כ-instance[field_name]. השדות הזמינים כוללים:

  • prompt: ההנחיה למשתמש שניתנה למודל.
  • response: הפלט שנוצר על ידי המודל.
  • reference: נתוני האמת שמשמשים להשוואה לתגובה.
  • rubric_groups: קבוצות של קריטריונים עם שמות שמשויכות להנחיה.
  • other_data: נתונים אחרים שמשמשים למילוי placeholder על סמך המפתח שלהם.
  • agent_eval_data: נתונים שספציפיים להערכות של סוכנים, כמו הגדרות של סוכנים ועקבות.

מגבלות טכניות

  • סביבת הפעלה: קוד בהתאמה אישית מופעל בסביבת ארגז חול ללא גישה לרשת.
  • מגבלת זמן ההרצה: ההרצה של מתן הציונים מוגבלת לדקה אחת.
  • מגבלת זיכרון: הגודל הכולל של הקוד שהועלה, בתוספת הנתונים שנטענו במהלך ההפעלה, לא יכול לחרוג מ-1.5GB.

החבילות הבאות של צד שלישי זמינות בזמן הריצה:

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

המאמרים הבאים