Amazon Web Services ブログ

Amazon SageMaker Clarify で基盤モデルの評価と選択が容易に (プレビュー)

Amazon SageMaker Clarify が基盤モデル (FM) 評価 (プレビュー) をサポートするようになりました。データサイエンティストまたは機械学習 (ML) エンジニアは、SageMaker Clarify を利用して、精度、堅牢性、創造性、事実的知識、偏見、毒性などのメトリクスに基づいて、FM を数分で評価、比較、選択できるようになりました。この新しい機能は、ML データとモデルのバイアスを検出し、モデルの予測を説明する SageMaker Clarify の既存の機能に追加されます。

この新機能は、SageMaker JumpStart で使用可能な LLM や、AWS の外部でトレーニングおよびホストされているモデルを含む、大規模言語モデル (LLM) の自動評価と人間参加型の評価の両方をどこでも提供します。これにより、適切なモデル評価ツールを見つけて、開発環境に統合するという手間のかかる作業が軽減されます。また、生成系人工知能 (AI) のユースケースに学術的なベンチマークを導入する複雑さも簡素化されます。

SageMaker Clarify を利用して FM を評価する
SageMaker Clarify では、モデル選択中およびモデルのカスタマイズワークフロー全体を通じて、事前定義された基準に基づいて LLM を 1 か所で評価および比較できるようになりました。自動評価に加えて、人間参加型の機能を使用して、独自のワークフォースまたは SageMaker Ground Truth の管理対象のワークフォースを使用して、有用性、創造的な意図、スタイルなどのより主観的な基準について人間によるレビューを設定することもできます。

モデルの評価を開始するために、自由形式のテキスト生成、テキストの要約、質問応答 (Q&A)、分類などの一般的な LLM タスク専用に構築された、厳選されたプロンプトデータセットを使用できます。特定のユースケースに合わせて、独自のカスタムプロンプトデータセットとメトリクスを使用してモデル評価を拡張することもできます。人間参加型の評価は、あらゆるタスクおよび評価メトリクスに使用できます。各評価ジョブの後に、結果を自然言語で要約し、ビジュアライゼーションと例を含む評価レポートを受け取ります。すべてのメトリクスとレポートをダウンロードし、モデル評価を SageMaker MLOps ワークフローに統合することもできます。

SageMaker Studio では、左側のメニューの [ジョブ][モデル評価] があります。SageMaker JumpStart の LLM のモデル詳細ページから直接 [評価] を選択することもできます。

Amazon SageMaker Clarify を利用して基礎モデルを評価する

評価ジョブを設定するには、[モデルを評価] を選択します。UI ウィザードは、自動または人間による評価、モデル、関連タスク、メトリクス、プロンプトデータセット、およびレビューチームの選択をガイドします。

Amazon SageMaker Clarify を利用して基礎モデルを評価する

モデル評価ジョブが完了すると、評価レポートで結果を表示できます。

Amazon SageMaker Clarify を利用して基礎モデルを評価する

UI に加えて、SageMaker でプログラムを使用してモデル評価を実行する方法をステップバイステップで説明するサンプル Jupyter Notebook を使用して始めることもできます。

FMEval オープンソースライブラリを使用してあらゆる場所でモデルを評価する
AWS の外部でトレーニングおよびホストされたモデルを含め、あらゆる場所でモデル評価を実行するには、FMEval オープンソースライブラリを使用します。次の例は、ライブラリを使用して、ModelRunner クラスを拡張することによってカスタムモデルを評価する方法を示しています。

このデモでは、Hugging Face モデルハブから GPT-2 を選択し、GPT-2 などの Hugging Face モデルハブの Causal Decoder-only モデルで動作するカスタムの HFModelConfig および HuggingFaceCausalLLMModelRunner クラスを定義します。この例は、FMEval GitHub リポジトリでも入手できます。

!pip install fmeval

# ModelRunner が FM を呼び出します
from amazon_fmeval.model_runners.model_runner import ModelRunner

# カスタムモデルの追加インポート
import warnings
from dataclasses import dataclass
from typing import Tuple, Optional
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

@dataclass
class HFModelConfig:
    model_name: str
    max_new_tokens: int
    normalize_probabilities: bool = False
    seed: int = 0
    remove_prompt_from_generated_text: bool = True

class HuggingFaceCausalLLMModelRunner(ModelRunner):
    def __init__(self, model_config: HFModelConfig):
        self.config = model_config
        self.model = AutoModelForCausalLM.from_pretrained(self.config.model_name)
        self.tokenizer = AutoTokenizer.from_pretrained(self.config.model_name)

    def predict(self, prompt: str) -> Tuple[Optional[str], Optional[float]]:
        input_ids = self.tokenizer(prompt, return_tensors="pt").to(self.model.device)
        generations = self.model.generate(
            **input_ids,
            max_new_tokens=self.config.max_new_tokens,
            pad_token_id=self.tokenizer.eos_token_id,
        )
        generation_contains_input = (
            input_ids["input_ids"][0] == generations[0][: input_ids["input_ids"].shape[1]]
        ).all()
        if self.config.remove_prompt_from_generated_text and not generation_contains_input:
            warnings.warn(
                "Your model does not return the prompt as part of its generations. "
                "`remove_prompt_from_generated_text` does nothing."
            )
        if self.config.remove_prompt_from_generated_text and generation_contains_input:
            output = self.tokenizer.batch_decode(generations[:, input_ids["input_ids"].shape[1] :])[0]
        else:
            output = self.tokenizer.batch_decode(generations, skip_special_tokens=True)[0]

        with torch.inference_mode():
            input_ids = self.tokenizer(self.tokenizer.bos_token + prompt, return_tensors="pt")["input_ids"]
            model_output = self.model(input_ids, labels=input_ids)
            probability = -model_output[0].item()

        return output, probability

次に、モデル情報を使用して HFModelConfig および HuggingFaceCausalLLMModelRunner のインスタンスを作成します。

hf_config = HFModelConfig(model_name="gpt2", max_new_tokens=32)
model = HuggingFaceCausalLLMModelRunner(model_config=hf_config)

その後、評価アルゴリズムを選択および設定します。

# FactualKnowledge について FM を評価してみましょう
from amazon_fmeval.fmeval import get_eval_algorithm
from amazon_fmeval.eval_algorithms.factual_knowledge import FactualKnowledgeConfig

eval_algorithm_config = FactualKnowledgeConfig("<OR>")
eval_algorithm = get_eval_algorithm("factual_knowledge", eval_algorithm_config)

まずは 1 つのサンプルでテストしてみましょう。評価スコアは、事実に照らして正しく応答した割合です。

model_output = model.predict("London is the capital of")[0]
print(model_output)

eval_algo.evaluate_sample(
    target_output="UK<OR>England<OR>United Kingdom",
	model_output=model_output
)
the UK, and the UK is the largest producer of food in the world.

The UK is the world's largest producer of food in the world.
[EvalScore(name='factual_knowledge', value=1)]

完璧な回答ではありませんが、「UK」が含まれています。

次に、組み込みデータセットを使用して FM を評価するか、またはカスタムデータセットを定義できます。カスタム評価データセットを使用する場合は、DataConfig のインスタンスを作成します。

config = DataConfig(
    dataset_name="my_custom_dataset",
    dataset_uri="dataset.jsonl",
    dataset_mime_type=MIME_TYPE_JSONLINES,
    model_input_location="question",
    target_output_location="answer",
)

eval_output = eval_algorithm.evaluate(
    model=model,
    dataset_config=config,
    prompt_template="$feature", #$feature はデータセット内の入力値に置き換えられます 
    save=True
)

評価結果は、データセット全体の評価スコアを組み合わせたものと、ローカル出力パスに保存された各モデル入力の詳細な結果を返します。

プレビューにぜひご参加ください
Amazon SageMaker Clarify を利用した FM 評価は、米国東部 (オハイオ)、米国東部 (バージニア北部)、米国西部 (オレゴン)、アジアパシフィック (シンガポール)、アジアパシフィック (東京)、欧州 (フランクフルト)、欧州 (アイルランド) の AWS リージョンで現在ご利用いただけます。FMEval オープンソースライブラリ] は GitHub で入手できます。詳細については、Amazon SageMaker Clarify にアクセスしてください。

始めましょう
AWS マネジメントコンソールにログインして、今すぐ SageMaker Clarify を利用して FM の評価を開始しましょう!

– Antje

原文はこちらです。