fmeval 라이브러리를 사용하여 자동 평가 실행 - Amazon SageMaker

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

fmeval 라이브러리를 사용하여 자동 평가 실행

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

fmeval 라이브러리 사용 시작하기

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

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

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

Amazon S3 버킷에 대한 권한을 설정하려면

도메인과 역할을 생성한 후 다음 단계에 따라 모델을 평가하는 데 필요한 권한을 추가합니다.

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

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

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

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

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

    1. 버킷 생성을 선택하여 새 버킷 생성 페이지를 엽니다.

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

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

    4. 모든 기본 선택을 수락합니다.

    5. 버킷 생성 을 선택합니다.

    6. 범용 버킷 섹션의 이름에서 생성한 S3 버킷의 이름을 선택합니다.

  6. 권한 탭을 선택합니다.

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

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

    [ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "GET", "PUT", "POST", "DELETE" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [ "Access-Control-Allow-Origin" ] } ]
  9. Save changes(변경 사항 저장)를 선택합니다.

IAM 정책에 권한을 추가하려면
  1. 페이지 상단의 검색 창에 를 입력합니다IAM.

  2. 서비스에서 자격 증명 및 액세스 관리(IAM)를 선택합니다.

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

  4. 검색 창에 AmazonSageMakerFullAccess 를 입력합니다. 나타나는 정책 옆에 있는 라디오 버튼을 선택합니다. 이제 작업 버튼을 선택할 수 있습니다.

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

  6. 연결을 선택합니다.

  7. 표시되는 IAM 목록에서 생성한 역할의 이름을 검색합니다. 이름 옆의 확인란을 선택합니다.

  8. 정책 연결을 선택합니다.

Studio 사용 시작하기
  1. 페이지 상단의 검색 창에 를 입력합니다SageMaker.

  2. 서비스에서 Amazon SageMaker을 선택합니다.

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

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

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

  6. Open Studio를 선택하여 Studio의 랜딩 페이지를 엽니다.

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

  8. 노트북 생성 을 선택합니다.

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

  10. 선택을 선택하세요.

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

    !pip install fmeval
    참고

    를 사용하는 환경에 fmeval 라이브러리 설치 Python 3.10. fmeval 실행에 필요한 요구 사항에 대한 자세한 내용은 fmeval 종속성 섹션을 참조하세요.

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

JumpStart 모델 사용

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

JumpStart 모델 정의 및 구성 ModelRunner
  1. 다음 중 하나를 수행하여 엔드포인트를 제공합니다.

    • EndpointName 기존 JumpStart 엔드포인트, model_id및 에 를 지정합니다model_version.

    • model_version 모델의 model_id 및 를 지정하고 JumpStart 엔드포인트를 생성합니다.

    다음 코드 예제는 에 대한 엔드포인트를 생성하는 방법을 보여줍니다. Llama 2 foundation model 를 통해 사용할 수 있습니다 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나타내는 를 참조합니다 end-use-license-agreementEULA. 는 사용 중인 모델의 모델 카드 설명에서 찾을 EULA 수 있습니다. 일부 JumpStart 모델을 사용하려면 에 대한 이전 호출과 accept_eula=true같이 를 지정해야 합니다predict. 에 대한 자세한 내용은 모델 소스 및 라이선스 계약라이선스 및 모델 소스 섹션을 EULA참조하세요.

    사전 훈련된 JumpStart 모델 테이블이 있는 기본 제공 알고리즘에서 사용 가능한 모델 목록을 찾을 수 있습니다. https://sagemaker.readthedocs.io/en/stable/doc_utils/pretrainedmodels.html#built-in-algorithms-with-pre-trained-model-table

  2. 다음 구성 예제와 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 )

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

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

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

Amazon Bedrock 모델 사용

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 모델의 경우 acceptcontentType 에서만 지원MIME_TYPE_JSON됩니다. 이러한 파라미터에 대한 자세한 내용은 섹션을 참조하세요InvokeModelWithResponseStream.

  2. 를 구성하려면 다음 구성 예제와 BedrockModelRunner같이 를 ModelRunner사용합니다.

    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 구성을 Parametrize합니다.

    • 모델을 배포하는 데 model_id 사용한 값과 동일한 값을 사용합니다.

    • output 를 사용하여 생성된 json 응답의 형식을 지정합니다. 예를 들어 가 응답을 LLM 제공한 경우 [{"results": "this is the output"}]는 를 output='results[0].outputText' 반환합니다this is the output.

    • 가 요청과 LLM 상호 작용하는 방법을 지정하는 content_template 데 사용합니다. 다음 구성 템플릿은 이전 구성 예제를 설명하기 위한 목적으로만 자세히 설명되어 있으며 필수는 아닙니다.

      • 이전 구성 예제에서 변수는 사용자의 요청을 캡처하는 프롬프트를 inputText 지정합니다.

      • 변수는 가 다음과 같이 응답을 LLM 생성하는 방법을 textGenerationConfig 지정합니다.

        • 파라미터maxTokenCount는 에서 반환하는 토큰 수를 제한하여 응답의 길이를 제한하는 데 사용됩니다LLM.

        • 파라미터stopSequences는 에 응답 생성을 중지LLM하도록 지시하는 문자 시퀀스 목록을 지정하는 데 사용됩니다. 모델 출력은 나열된 문자열이 출력에서 처음 발견될 때 중지됩니다. 예를 들어 캐리지 반환 시퀀스를 사용하여 모델 응답을 한 줄로 제한할 수 있습니다.

        • 파라미터는 다음 토큰을 생성할 때 고려할 토큰 세트를 제한하여 무작위성을 topP 제어합니다. 이 파라미터는 0.0 ~ 사이의 값을 허용합니다1.0. 값이 높을수록 더 넓은 어휘가 포함된 세트가 topP 허용되고 값이 낮을수록 토큰 세트가 더 가능성이 높은 단어로 제한됩니다.

        • 파라미터는 생성된 텍스트의 무작위성을 temperature 제어하고 양수 값을 허용합니다. 값이 높을수록 모델에 더 무작위적이고 다양한 응답을 생성하도록 temperature 지시합니다. 값이 낮으면 예측 가능한 응답이 생성됩니다. 의 일반적인 범위는 0.2 ~ 사이temperature입니다2.0.

        특정 Amazon Bedrock 파운데이션 모델의 파라미터에 대한 자세한 내용은 파운데이션 모델의 추론 파라미터를 참조하세요.

      content_template 파라미터의 형식은 에서 지원하는 입력 및 파라미터에 따라 달라집니다LLM. 예제: Anthropic’s Claude 2 모델은 다음을 지원할 수 있습니다content_template.

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

      또 다른 예로 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?")

데이터 및 를 구성한 후 에서 생성된 응답에 대해 평가 알고리즘을 실행할 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입니다. 자세한 내용은 섹션 구성prompt_template의 섹션을 참조하세요. JumpStart ModelRunner

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

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

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

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

모델 평가에 사용할 수 있는 차원은 다음과 같습니다.

  • 정확도

  • 사실적 지식

  • 프롬프트 고정 관념

  • 의미론적 견고성

  • 유해성

정확도

질문 응답, 텍스트 요약 또는 분류 작업에 대한 정확도 알고리즘을 실행할 수 있습니다. 다음과 같이 다양한 데이터 입력 유형과 문제를 수용하기 위해 작업마다 알고리즘이 다릅니다.

  • 질문에 답변하는 작업의 경우 QAAccuracyConfig 파일로 QAAccuracy 알고리즘을 실행합니다.

  • 텍스트 요약 작업의 경우 를 사용하여 SummarizationAccuracy 알고리즘을 실행합니다SummarizationAccuracyConfig.

  • 분류 작업의 경우 를 사용하여 ClassificationAccuracy 알고리즘을 실행합니다ClassificationAccuracyConfig.

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 알고리즘은 에 대한 점수가 포함된 EvalOutput 객체 목록을 반환합니다. ROUGE-N, MeteorBERTScore. 이러한 점수에 대한 자세한 내용은 의 텍스트 요약 섹션을 참조하세요모델 평가 작업에서 프롬프트 데이터 세트 및 사용 가능한 평가 차원 사용 . 텍스트 요약 정확도 알고리즘을 실행하려면 를 인스턴스화SummarizationAccuracyConfig하고 다음에서 전달합니다.

  • 의 유형 지정 ROUGE 에 대한 평가에 사용할 지표입니다rouge_type. rouge1, rouge2 또는 rougeL를 선택할 수 있습니다. 이러한 지표는 생성된 요약을 참조 요약과 비교합니다.ROUGE-1 는 중복 유니그램(“the”, “is”와 같은 한 항목의 시퀀스)을 사용하여 생성된 요약과 참조 요약을 비교합니다.ROUGE-2 는 바이그램을 사용하여 생성된 요약과 참조 요약을 비교합니다(“대형”, “가정”과 같은 두 시퀀스의 그룹).ROUGE-L 는 가장 긴 일치하는 단어 시퀀스를 비교합니다. 에 대한 자세한 내용은 ROUGE, 참조 ROUGE: 요약의 자동 평가를 위한 패키지입니다.

  • use_stemmer_for_rougeTrue 또는 False로 설정합니다. 스템머는 단어를 비교하기 전에 단어에서 첨부 파일을 제거합니다. 예를 들어, 스템머는 “스윔밍”과 “스윔”에서 첨부를 제거하여 스템이 끝난 후 둘 다 “스윔”이 되도록 합니다.

  • model_type_for_bertscore를 계산에 사용할 모델로 설정합니다. BERTScore. ROBERTA_MODEL 또는 고급 MICROSOFT_DEBERTA_MODEL를 선택할 수 있습니다.

마지막으로 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 객체 목록을 반환합니다. 이러한 점수에 대한 자세한 내용은 의 분류 섹션을 참조하세요모델 평가 작업에서 프롬프트 데이터 세트 및 사용 가능한 평가 차원 사용 . 분류 정확도 알고리즘을 실행하려면 를 인스턴스화ClassificationAccuracyConfig하고 평균 전략을 에 전달합니다multiclass_average_strategy. micro, , macro, 또는 samplesweighted를 선택할 수 있습니다binary. 기본값은 micro입니다. 그런 다음 분류 범주의 실제 레이블이 포함된 열의 이름이 포함된 목록을 valid_labels로 전달합니다. 마지막으로 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)

사실적 지식

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

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

다음 코드 예제는 사실 지식 알고리즘을 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)

프롬프트 고정 관념화

개방형 생성을 위해 프롬프트 고정 관념 알고리즘을 실행할 수 있습니다. 프롬프트 고정 관념 알고리즘을 실행하려면 가 입력 데이터 세트에서 의 고정 관념이 덜한 문장sent_less_input_location과 의 고정 관념이 더 큰 문장을 포함하는 열을 식별DataConfig해야 합니다sent_more_output_location. 에 대한 자세한 내용은 이전 섹션 2를 DataConfig참조하세요. 구성합니다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)

의미론적 견고성

모든 FMEval 작업에 대해 의미론적 견고성 알고리즘을 실행할 수 있지만 모델은 결정적이어야 합니다. 결정적 모델은 항상 동일한 입력에 대해 동일한 출력을 생성하는 모델입니다. 일반적으로 디코딩 프로세스에서 무작위 시드를 설정하여 결정성을 달성할 수 있습니다. 다음과 같이 다양한 데이터 입력 유형 및 문제를 수용하기 위해 알고리즘은 각 태스크마다 다릅니다.

  • 개방형 생성, 질문 응답 또는 작업 분류의 경우 GeneralSemanticRobustnessConfig 파일로 GeneralSemanticRobustness 알고리즘을 실행합니다.

  • 텍스트 요약의 경우 SummarizationAccuracySemanticRobustnessConfig 파일로 SummarizationAccuracySemanticRobustness 알고리즘을 실행합니다.

GeneralSemanticRobustness 알고리즘은 0 와 의 값이 포함된 정확도가 포함된 EvalScore 객체 목록을 반환하여 섭동된 모델 출력과 섭동되지 않은 모델 출력 간의 차이를 1 정량화합니다. 일반 의미 완건성 알고리즘을 실행하려면 에서 를 인스턴스화GeneralSemanticRobustnessConfig하고 를 전달합니다perturbation_type. 에 대해 다음 중 하나를 선택할 수 있습니다perturbation_type.

  • Butterfinger - 키보드 거리를 기반으로 문자 스왑을 사용하여 철자 오류를 모방하는 섭동입니다. 지정된 문자가 교란될 확률을 입력합니다. Butterfinger는 의 기본값입니다perturbation_type.

  • RandomUpperCase - 문자의 일부를 대문자로 변경하는 섭동입니다. 10진수를 에서 0로 입력합니다1.

  • WhitespaceAddRemove - 공백이 아닌 공백 문자 앞에 공백 문자가 흰색으로 추가될 확률입니다.

다음 파라미터를 지정할 수도 있습니다.

  • num_perturbations - 생성된 텍스트에 도입할 각 샘플의 섭동 수입니다. 기본값은 5입니다.

  • butter_finger_perturbation_prob - 문자가 교란될 확률입니다. perturbation_typeButterfinger인 경우에만 사용됩니다. 기본값은 0.1입니다.

  • random_uppercase_corrupt_proportion - 대문자로 변경할 문자의 비율입니다. perturbation_typeRandomUpperCase인 경우에만 사용됩니다. 기본값은 0.1입니다.

  • whitespace_add_prob - 공백이 주어지면 샘플에서 제거할 확률입니다. perturbation_typeWhitespaceAddRemove인 경우에만 사용됩니다. 기본값은 0.05입니다.

  • whitespace_remove_prob - 공백이 아닌 공간을 고려할 때 공백 앞에 공백을 추가할 확률입니다. perturbation_typeWhitespaceAddRemove인 경우에만 사용됩니다. 기본값은 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 알고리즘은 EvalScore ROUGE-N, MeteorBERTScore 생성된 요약과 참조 요약 사이의 값입니다. 이러한 점수에 대한 자세한 내용은 의 텍스트 요약 섹션을 참조하세요모델 평가 작업에서 프롬프트 데이터 세트 및 사용 가능한 평가 차원 사용 . 텍스트 요약 의미 완건성 알고리즘을 실행하려면 에서 를 인스턴스화SummarizationAccuracySemanticRobustnessConfig하고 를 전달합니다perturbation_type.

에 대해 다음 중 하나를 선택할 수 있습니다perturbation_type.

  • Butterfinger - 키보드 거리를 기반으로 문자 스왑을 사용하여 철자 오류를 모방하는 섭동입니다. 지정된 문자가 교란될 확률을 입력합니다. Butterfinger 는 의 기본값입니다perturbation_type.

  • RandomUpperCase - 문자의 일부를 대문자로 변경하는 섭동입니다. 10진수를 에서 0로 입력합니다1.

  • WhitespaceAddRemove – 공백이 아닌 공백 문자 앞에 공백 문자가 추가될 확률을 흰색으로 입력합니다.

다음 파라미터를 지정할 수도 있습니다.

  • num_perturbations - 생성된 텍스트에 도입할 각 샘플의 섭동 수입니다. 기본값은 5입니다.

  • butter_finger_perturbation_prob - 문자가 교란될 확률입니다. perturbation_typeButterfinger인 경우에만 사용됩니다. 기본값은 0.1입니다.

  • random_uppercase_corrupt_proportion - 대문자로 변경할 문자의 비율입니다. perturbation_typeRandomUpperCase인 경우에만 사용됩니다. 기본값은 0.1입니다.

  • whitespace_add_prob - 공백이 주어지면 샘플에서 제거할 확률입니다. perturbation_typeWhitespaceAddRemove인 경우에만 사용됩니다. 기본값은 0.05입니다.

  • whitespace_remove_prob - 공백이 아닌 공간을 고려할 때 공백 앞에 공백을 추가할 확률입니다. perturbation_type 가 인 경우에만 사용되며 WhitespaceAddRemove기본값은 입니다0.1.

  • rouge_type - 생성된 요약과 참조 요약을 비교하는 지표입니다. 의 유형 지정 ROUGE 에 대한 평가에 사용할 지표입니다rouge_type. rouge1, rouge2 또는 rougeL를 선택할 수 있습니다.ROUGE-1 는 겹치는 유니그램(“the”, “is”와 같은 한 항목의 시퀀스)을 사용하여 생성된 요약과 참조 요약을 비교합니다.ROUGE-2 는 바이그램을 사용하여 생성된 요약과 참조 요약을 비교합니다(“대형”, “가정”과 같은 두 시퀀스의 그룹).ROUGE-L 는 가장 긴 일치하는 단어 시퀀스를 비교합니다. 에 대한 자세한 내용은 ROUGE, 참조 ROUGE: 요약의 자동 평가를 위한 패키지입니다.

  • user_stemmer_for_rougeTrue 또는 False로 설정합니다. 스템머는 단어를 비교하기 전에 단어에서 첨부 파일을 제거합니다. 예를 들어, 스템머는 “스윔밍”과 “스윔”에서 첨부를 제거하여 스템이 끝난 후 둘 다 “스윔”이 되도록 합니다.

  • 를 계산하는 데 사용할 모델로 model_type_for_bertscore를 설정합니다. BERTScore. ROBERTA_MODEL 또는 고급 MICROSOFT_DEBERTA_MODEL를 선택할 수 있습니다.

    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)

유해성

개방형 생성, 텍스트 요약 또는 질문 응답을 위해 독성 알고리즘을 실행할 수 있습니다. 태스크에 따라 세 가지 클래스가 있습니다.

  • 개방형 생성의 경우 ToxicityConfig 파일로 Toxicity 알고리즘을 실행합니다.

  • 요약을 위해 클래스를 사용합니다Summarization_Toxicity.

  • 질문에 답변하려면 클래스 를 사용합니다QAToxicity.

독성 알고리즘은 0 ~ 사이의 점수를 포함하는 EvalScore 객체 목록(독성 감지기에 따라 다름)을 하나 이상 반환합니다1. 독성 알고리즘을 실행하려면 를 인스턴스화ToxicityConfig하고 에서 모델을 에 대해 평가하는 데 사용할 독성 모델을 전달합니다model_type. 에 대해 다음을 선택할 수 있습니다model_type.

  • 독성 설명 분류 챌린지 및 독성 분류의 Jigsaw 의도치 않은 편향에 대해 훈련된 다중 레이블 텍스트 분류기인 UnitaryAI Detoxify-unbiased 의 'detoxify'입니다. https://www.kaggle.com/c/jigsaw-unintended-bias-in-toxicity-classification 이 모델은 독성, 중증 독성, 외설성, 위협, 모욕, 성적 노골성 및 자격 증명 공격 등의 클래스에 대한 7 점수를 제공합니다.

    다음은 해독 모델의 예제 출력입니다.

    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)
  • `toxigen` for Toxigen-roberta, 소수 13 그룹과 관련된 미묘하고 암시적인 독성을 가진 문장이 포함된 ToxiGen 데이터 세트에서 미세 조정된 바이너리 R oBERTa기반 텍스트 분류기.

마지막으로 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)