신속 평가 실행

생성형 언어 모델을 프로그래매틱 방식으로 평가하기 위해 Vertex AI SDK for Python을 사용할 수 있습니다.

Vertex AI SDK를 설치합니다.

Vertex AI SDK for Python에서 Rapid Evaluation을 설치하려면 다음 명령어를 실행합니다.

pip install --upgrade google-cloud-aiplatform[rapid_evaluation]

자세한 내용은 Vertex AI SDK for Python 설치를 참조하세요.

Vertex AI SDK 인증

Vertex AI SDK for Python을 설치한 후 인증을 수행해야 합니다. 다음 주제에서는 로컬에서 작업하는 경우와 Colaboratory에서 작업하는 경우 Vertex AI SDK로 인증하는 방법을 설명합니다.

  • 로컬에서 개발하는 경우 로컬 환경에서 애플리케이션 기본 사용자 인증 정보(ADC)를 설정합니다.

    1. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init
      
    2. Google 계정의 로컬 인증 사용자 인증 정보를 만듭니다.

      gcloud auth application-default login
      

      로그인 화면이 표시됩니다. 로그인한 후에 사용자 인증 정보는 ADC에서 사용하는 로컬 사용자 인증 정보 파일에 저장됩니다. 로컬 환경에서 ADC 사용에 대한 자세한 내용은 로컬 개발 환경을 참조하세요.

  • Colaboratory에서 작업하는 경우 Colab 셀에서 다음 명령어를 실행하여 인증합니다.

    from google.colab import auth
    auth.authenticate_user()
    

    이 명령어를 실행하면 인증을 완료할 수 있는 창이 열립니다.

Rapid Evaluation SDK에 대한 자세한 내용은 Rapid Evaluation SDK 참조를 확인하세요.

평가 태스크 만들기

평가는 대부분 생성형 AI 모델에서 태스크 중심으로 이루어지므로 온라인 평가에서는 평가 사용 사례를 용이하게 하기 위해 평가 태스크 추상화를 도입합니다. 생성 모델을 공정하게 비교하기 위해 일반적으로 평가 데이터 세트 및 관련 측정항목에 대해 모델 및 프롬프트 템플릿에 대한 평가를 반복해서 실행할 수 있습니다. EvalTask 클래스는 이 새로운 평가 패러다임을 지원하도록 설계되었습니다. 또한 EvalTask를 사용하면 Vertex AI Experiments와 원활하게 통합할 수 있으므로 각 평가 실행의 설정과 결과를 추적할 수 있습니다. Vertex AI Experiments는 평가 결과를 관리하고 해석하는 데 도움이 되므로 더 짧은 시간에 조치를 취할 수 있습니다. 다음 샘플은 EvalTask 클래스의 인스턴스를 만들고 평가를 실행하는 방법을 보여줍니다.

from vertexai.preview.evaluation import EvalTask

eval_task = EvalTask(
  dataset=DATASET,
  metrics=["bleu", "rouge_l_sum"],
  experiment=EXPERIMENT_NAME
)

metrics 매개변수는 측정항목 목록을 허용하므로 단일 평가 호출로 여러 측정항목을 동시에 평가할 수 있습니다.

평가 데이터 세트 준비

데이터 세트는 EvalTask 인스턴스에 Pandas DataFrame으로 전달됩니다. 여기서 각 행은 별도의 평가 예시(인스턴스라고 함)를 나타내며 각 열은 측정항목 입력 매개변수를 나타냅니다. 각 측정항목에서 예상하는 입력은 측정항목을 참조하세요. Google에서는 다양한 평가 태스크를 위해 평가 데이터 세트를 빌드하기 위한 몇 가지 예시를 제공합니다.

요약 평가

다음 측정항목을 사용하여 점별 요약을 위한 데이터 세트를 구성하세요.

  • summarization_quality
  • groundedness
  • fulfillment
  • summarization_helpfulness
  • summarization_verbosity

필수 측정항목 입력 매개변수를 고려하여 평가 데이터 세트에 다음 열을 포함해야 합니다.

  • instruction
  • context
  • response

이 예시에는 2개의 요약 인스턴스가 있습니다. 요약 태스크 평가에 필요한 instructioncontext 필드를 입력으로 구성합니다.

instructions = [
  # example 1
  "Summarize the text in one sentence.",
  # example 2
  "Summarize the text such that a five-year-old can understand.",
]

contexts = [
  # example 1
  """As part of a comprehensive initiative to tackle urban congestion and foster
sustainable urban living, a major city has revealed ambitious plans for an
extensive overhaul of its public transportation system. The project aims not
only to improve the efficiency and reliability of public transit but also to
reduce the city\'s carbon footprint and promote eco-friendly commuting options.
City officials anticipate that this strategic investment will enhance
accessibility for residents and visitors alike, ushering in a new era of
efficient, environmentally conscious urban transportation.""",
# example 2
  """A team of archaeologists has unearthed ancient artifacts shedding light on a
previously unknown civilization. The findings challenge existing historical
narratives and provide valuable insights into human history.""",
]

LLM 응답(요약)이 준비되었고 BYOP(Bring Your Own Prediction) 평가를 수행하려면 다음과 같이 응답 입력을 생성하면 됩니다.

responses = [
  # example 1
  "A major city is revamping its public transportation system to fight congestion, reduce emissions, and make getting around greener and easier.",
  # example 2
  "Some people who dig for old things found some very special tools and objects that tell us about people who lived a long, long time ago! What they found is like a new puzzle piece that helps us understand how people used to live.",
]

이러한 입력으로 평가 데이터 세트 및 EvalTask를 구성할 수 있습니다.

eval_dataset = pd.DataFrame(
  {
    "instruction": instructions,
    "context":  contexts,
    "response":  responses,
  }
)

eval_task = EvalTask(
  dataset=eval_dataset,
  metrics=[
    'summarization_quality',
    'groundedness',
    'fulfillment',
    'summarization_helpfulness',
    'summarization_verbosity'
  ],
  experiment=EXPERIMENT_NAME
)

일반 텍스트 생성 평가

coherence, fluency, safety와 같은 일부 모델 기반 측정항목은 품질 평가에 모델 응답 자체만 필요합니다.

eval_dataset = pd.DataFrame({
  "response": ["""The old lighthouse, perched precariously on the windswept cliff,
had borne witness to countless storms. Its once-bright beam, now dimmed by time
and the relentless sea spray, still flickered with stubborn defiance."""]
})

  eval_task = EvalTask(
  dataset=eval_dataset,
  metrics=["coherence", "fluency", "safety"],
  experiment=EXPERIMENT_NAME
)

계산 기반 평가

일치검색, Bleu, Rouge와 같은 계산 기반 측정항목은 응답을 참조와 비교하므로 평가 데이터 세트에 응답 필드와 참조 필드가 모두 필요합니다.

eval_dataset = pd.DataFrame({
  "response": ["The Roman Senate was filled with exuberance due to Pompey's defeat in Asia."],
  "reference": ["The Roman Senate was filled with exuberance due to successes against Catiline."],
})

eval_task = EvalTask(
  dataset=eval_dataset,
  metrics=["exact_match", "bleu", "rouge"],
  experiment=EXPERIMENT_NAME
)

도구 사용 평가

도구 사용 평가의 경우 평가 데이터 세트에 응답과 참조만 포함하면 됩니다.

eval_dataset = pd.DataFrame({
  "response": ["""{
    "content": "",
    "tool_calls":[{
      "name":"get_movie_info",
      "arguments": {"movie":"Mission Impossible", "time": "today 7:30PM"}
    }]
  }"""],
  "reference": ["""{
    "content": "",
    "tool_calls":[{
      "name":"book_tickets",
      "arguments":{"movie":"Mission Impossible", "time": "today 7:30PM"}
      }]
  }"""],
})

eval_task = EvalTask(
  dataset=eval_dataset,
  metrics=["tool_call_valid", "tool_name_match", "tool_parameter_key_match",
"tool_parameter_kv_match"],
  experiment=EXPERIMENT_NAME
)

측정항목 번들

측정항목 번들은 일반적으로 연결되는 측정항목을 결합하여 평가 프로세스를 간소화합니다. 측정항목은 다음 4가지 번들로 분류됩니다.

  • 평가 작업: 요약, 질의 응답, 텍스트 생성
  • 평가 관점: 유사성, 안전성, 품질
  • 입력 일관성: 동일한 번들의 모든 측정항목이 동일한 데이터 세트 입력을 사용합니다.
  • 평가 패러다임: 점별과 쌍별 비교

온라인 평가 서비스에서 이러한 측정항목 번들을 사용하여 맞춤형 평가 워크플로를 최적화할 수 있습니다.

다음 테이블에 사용 가능한 측정항목 번들에 대한 세부정보가 나와 있습니다.

측정항목 번들 이름 측정항목 이름 사용자 입력
text_generation_similarity exact_match
bleu
rouge
예측
참조
tool_call_quality tool_call_valid
tool_name_match
tool_parameter_key_match
tool_parameter_kv_match
예측
참조
text_generation_quality coherence
fluency
예측
text_generation_instruction_following fulfillment 예측
참조
text_generation_safety safety 예측
text_generation_factuality groundedness 예측
컨텍스트
summarization_pointwise_reference_free summarization_quality
summarization_helpfulness
summarization_verbosity
예측
컨텍스트
안내
summary_pairwise_reference_free pairwise_summarization_quality 예측
컨텍스트
안내
qa_pointwise_reference_free question_answering_quality
question_answering_relevance
question_answering_helpfulness
예측
컨텍스트
안내
qa_pointwise_reference_based question_answering_correctness 예측
컨텍스트
안내
참조
qa_pairwise_reference_free pairwise_question_answering_quality 예측
컨텍스트
안내

평가 결과 보기

평가 태스크를 정의한 후 다음과 같이 태스크를 실행하여 평가 결과를 가져옵니다.

eval_result: EvalResult = eval_task.evaluate(
  model=MODEL,
  prompt_template=PROMPT_TEMPLATE
)

EvalResult 클래스는 요약 측정항목과 평가 데이터 세트 인스턴스 및 이에 상응하는 인스턴스별 측정항목이 있는 측정항목 테이블을 포함하는 평가 실행 결과를 나타냅니다. 클래스를 다음과 같이 정의하세요.

@dataclasses.dataclass
class EvalResult:
  """Evaluation result.

  Attributes:
    summary_metrics: the summary evaluation metrics for an evaluation run.
    metrics_table: a table containing eval inputs, ground truth, and
      metrics per row.
  """
  summary_metrics: Dict[str, float]
  metrics_table: Optional[pd.DataFrame] = None

도우미 함수를 사용하면 Colab 노트북에 평가 결과가 표시될 수 있습니다.

요약 품질

시각화

방사형 차트나 막대 그래프에 요약 측정항목을 표시하여 다양한 평가 실행의 결과들을 시각화하고 비교할 수 있습니다. 이 시각화는 다양한 모델 및 다양한 프롬프트 템플릿을 평가하는 데 유용합니다.

방사형 차트

막대 그래프 측정항목

Rapid Evaluation API

Rapid Evaluation API에 대한 자세한 내용은 Rapid Evaluation API를 참조하세요.

서비스 계정 이해

서비스 계정은 온라인 평가 서비스에서 모델 기반 평가 측정항목에 대한 온라인 예측 서비스로부터 예측을 가져오는 데 사용됩니다. 이 서비스 계정은 온라인 평가 서비스에 대한 첫 번째 요청 시 자동으로 프로비저닝됩니다.

이름 설명 이메일 주소 역할
Vertex AI Rapid Eval 서비스 에이전트 모델 기반 평가를 위한 예측을 가져오는 데 사용되는 서비스 계정입니다. service-PROJECT_NUMBER@gcp-sa-ENV-vertex-eval.iam.gserviceaccount.com roles/aiplatform.rapidevalServiceAgent

Rapid Eval 서비스 에이전트와 관련된 권한은 다음과 같습니다.

역할 권한
Vertex AI Rapid Eval 서비스 에이전트(roles/aiplatform.rapidevalServiceAgent) aiplatform.endpoints.predict

다음 단계