평가 데이터 세트를 만든 후 다음 단계는 모델 성능을 측정하는 데 사용되는 측정항목을 정의하는 것입니다. 생성형 AI 모델은 다양한 작업을 위한 애플리케이션을 만들 수 있으며, Gen AI Evaluation Service는 평가를 주관적인 평가에서 객관적이고 실행 가능한 결과로 변환하는 테스트 기반 프레임워크를 사용합니다.
측정항목 유형에 관한 자세한 내용은 Gen AI Evaluation Service 개요 페이지의 평가 측정항목 섹션을 참고하세요.
일반 품질 측정항목
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",
)],
)
자연어 guidelines를 사용하여 GENERAL_QUALITY가 가장 중요한 기준에 초점을 맞춰 기준표를 생성하도록 요청할 수도 있습니다. 그러면 Gen AI Evaluation Service에서 기본 작업과 지정한 가이드라인을 모두 포함하는 기준표를 생성합니다.
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,
],
)
Gen AI Evaluation Service는 다음과 같은 유형의 적응형 기준표를 제공합니다.
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.
Gen AI Evaluation Service는 다음과 같은 정적 기준표 측정항목을 제공합니다.
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-gram(연속된 단어 시퀀스)의 중복을 측정합니다. 일반적으로 텍스트 요약 평가에 사용됩니다.
Bilingual Evaluation Understudy(bleu): 일치하는 n-gram을 계산하여 응답이 고품질 참조 텍스트와 얼마나 유사한지 측정합니다. 번역 품질의 표준 측정항목이지만 다른 텍스트 생성 작업에도 사용할 수 있습니다.
일치검색(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 파라미터에 전달하여 커스텀 평가 로직을 구현할 수도 있습니다. Gen AI Evaluation Service는 데이터 세트의 각 행에 대해 이 함수를 실행합니다.
# 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 코드 스니펫을 문자열로 Metric 클래스의 remote_custom_function 파라미터에 전달하여 이 작업을 실행할 수 있습니다. Gen AI Evaluation Service는 데이터 세트의 각 행에 대해 이 함수를 원격으로 실행합니다.
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: 키를 기반으로 자리표시자를 채우는 데 사용되는 기타 데이터입니다.agent_eval_data: 에이전트 구성 및 트레이스와 같은 에이전트 평가와 관련된 데이터입니다.
기술적 제약
- 실행 환경: 커스텀 코드는 네트워크 액세스 권한이 없는 샌드박스 환경에서 실행됩니다.
- 실행 시간 제한: 채점 실행 자체는 1분으로 제한됩니다.
- 메모리 한도: 업로드된 코드의 총 크기는 실행 중에 로드된 데이터와 합쳐서 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