

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# `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 ノートブックで実行しない場合は、以下の「**Get started using Studio**」セクションのステップ 11 にスキップしてください。

**前提条件**
+ Studio UI でモデル評価を実行するには、 AWS Identity and Access Management (IAM) ロールと入力データセットに適切なアクセス許可が必要です。SageMaker AI ドメインまたは IAM ロールがない場合は、「[Amazon SageMaker AI のセットアップガイド](gs.md)」のステップを実行します。

**Amazon S3 バケットのアクセス許可を設定するには**

ドメインとロールを作成したら、次の手順を使用してモデル評価に必要なアクセス許可を追加します。

1. Amazon SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) を開きます。

1. ナビゲーションペインで、ページ上部の検索バーに「**S3**」と入力します。

1. **[サービス]** で **[S3]** を選択します。

1. ナビゲーションペインで **[バケット]** を選択します。

1. **[汎用バケット]** セクションの **[名前]** で、モデルの入出力をコンソールに保存するために使用する S3 バケットの名前を選択します。S3 バケットがない場合は、以下を実行します。

   1. **[バケットを作成]** を選択して、新しい **[バケットの作成]** ページを開きます。

   1. **[一般的な設定]** セクションの **[AWS リージョン]** で、基盤モデルが配置されている AWS リージョンを選択します。

   1. **[バケット名]** の下の入力ボックスで S3 バケットに名前を付けます。

   1. デフォルトの選択肢をすべて受け入れます。

   1. **[Create bucket]** (バケットの作成) を選択します。

   1. **[汎用バケット]** セクションの **[名前]** で、作成した S3 バケットの名前を選択します。

1. **[アクセス許可]** タブを選択します。

1. ウィンドウの下部にある **[クロスオリジンリソース共有 (CORS)]** セクションまでスクロールします。**[編集]** を選択します。

1. 基盤評価のためのアクセス許可をバケットに追加するには、入力ボックスに以下のコードが表示されていることを確認します。以下をコピーして、入力ボックスに貼り付けることもできます。

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

1. **[Save changes]** (変更の保存) をクリックします。

**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. **[アクション]** の横にある下矢印をクリックします。2 つのオプションが表示されます。

1. [**アタッチ**] を選択してください。

1. 表示された IAM リストで、作成した IAM ロールの名前を検索します。名前の横にあるチェックボックスをオンにします。

1. **[Attach policy]** (ポリシーのアタッチ) を選択します。

**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
   ```
**注記**  
`fmeval` ライブラリは、Python 3.10 を使用する環境にインストールします。For more information about requirements needed to run `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>

JumpStart モデル評価に `ModelRunner` を使用するには、エンドポイントを作成するか指定し、モデルと組み込みデータセットを定義して、`ModelRunner` を設定し、テストします。

**JumpStart モデルを定義して ModelRunner を設定する**

1. 以下のいずれかを実行して、エンドポイントを指定します。
   + 既存の JumpStart エンドポイントの [EndpointName](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html#API_runtime_InvokeEndpoint_RequestSyntax)、`model_id`、`model_version` を指定します。
   + モデルの `model_version` と `model_id` を指定して、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 とは、End-use-license-agreement (EULA) の略語です。EULA は、使用しているモデルのモデルカードの説明に記載されています。使用する JumpStart モデルによっては、前の `predict` へのコールで示されるとおり、`accept_eula=true` を指定する必要があります。EULA の詳細については、「[モデルソースとライセンス契約](jumpstart-foundation-models-choose.md)」の「**Licenses and model sources**」セクションを参照してください。

   利用可能な JumpStart モデルのリストについては、「[事前トレーニング済みのモデルテーブルを備えた組み込みアルゴリズム](https://sagemaker.readthedocs.io/en/stable/doc_utils/pretrainedmodels.html#built-in-algorithms-with-pre-trained-model-table)」に提供されています。

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
   )
   ```

   上記の設定例では、エンドポイントの作成に使用した `model_version`、`endpoint_name`、`model_id` と同じ値を使用します。

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 に応答の生成を停止するように指示する文字シーケンスのリストを指定するために使用されます。モデル出力は、リストされている文字列のいずれかが出力で最初に検出されると停止します。例えば、キャリッジリターンシーケンスを使用して、モデル応答を 1 行に制限できます。
       + パラメータ `topP` は、次のトークンを生成する際に考慮するトークンのセットを制限して、ランダム性を制御します。このパラメータは、`0.0` から `1.0` の間の値を受け入れます。`topP` の値が高いほど、より幅広い語彙を含むセットが許可され、この値が低いほど、トークンのセットはより可能性の高い単語に制限されます。
       + パラメータ `temperature` は生成されたテキストのランダム性を制御し、正の値を受け入れます。`temperature` の値が高いほど、よりランダムで多様な応答を生成するようにモデルに指示できます。値が低いほど、生成される回答の予測可能が高くなります。`temperature` の一般的な範囲は `0.2` から `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` をインスタンス化して `target_output_delimiter` として `<OR>` または `None` を渡します。質問への回答の精度アルゴリズムは、モデルが生成する応答を既知の応答と比較します。ターゲットの区切り文字として `<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)」セクションの「Text summarization」セクションを参照してください。テキスト要約の精度アルゴリズムを実行するには、`SummarizationAccuracyConfig` をインスタンス化して、以下を渡します。
+ 評価で使用する [https://en.wikipedia.org/wiki/ROUGE_(metric)](https://en.wikipedia.org/wiki/ROUGE_(metric)) メトリクスのタイプを `rouge_type` に指定します。`rouge1`、`rouge2` または `rougeL` を選択できます。これらのメトリクスは、生成されたサマリーを参照サマリーと比較します。ROUGE-1 は、重複するユニグラム (「the」、「is」などの 1 つの項目のシーケンス) を使用して比較します。ROUGE-2 は、生成されたサマリーと参照サマリーを bigram (「the large」、「is home」などの 2 つのシーケンスのグループ) を使用して比較します。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」になります。
+ model\$1type\$1for\$1bertscore を、[https://huggingface.co/spaces/evaluate-metric/bertscore](https://huggingface.co/spaces/evaluate-metric/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 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)」セクションの「**Classification**」セクションを参照してください。分類の精度アルゴリズムを実行するには、`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` オブジェクトのリストを返します。これには、「**Foundation model evaluation overview**」セクションで説明されているとおり、モデルが事実に基づく知識をどの程度エンコードできるかを示す集計スコアが含まれます。スコアの範囲は `0` から `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. を参照してください。[Configure (設定)`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` の間の値を含む精度を含む `EvalScore` オブジェクトのリストを返します。一般的なセマンティックの頑健性アルゴリズムを実行するには、`GeneralSemanticRobustnessConfig` をインスタンス化し、`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` です。

最後に、次のサンプルコードに示されるとおり、`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) の値の差 (つまりデルタ) を含む `EvalScore` オブジェクトのリストを返します。これらのスコアの詳細については、「[モデル評価ジョブでのプロンプトデータセットと利用可能な評価ディメンションの使用](clarify-foundation-model-evaluate-overview.md)」セクションの「**Text summarization**」セクションを参照してください。テキスト要約のセマンティックの頑健性アルゴリズムを実行するには、`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」などの 1 つの項目のシーケンス) を使用して比較します。ROUGE-2 は、生成されたサマリーと参照サマリーを bigram (「the large」、「is home」などの 2 つのシーケンスのグループ) を使用して比較します。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」になります。
+ `model_type_for_bertscore` を、[https://huggingface.co/spaces/evaluate-metric/bertscore](https://huggingface.co/spaces/evaluate-metric/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>

毒性アルゴリズムを実行して、オープンエンド生成、テキスト要約、または質問への回答を行うことができます。タスクに応じて 3 つの異なるクラスがあります。
+ オープンエンド生成タスクでは、`ToxicityConfig` ファイルを使用して、毒性アルゴリズムを実行します。
+ 要約には、`Summarization_Toxicity` クラス を使用します。
+ 質問への回答には、`QAToxicity` クラス を使用します。

毒性アルゴリズムは、`0` から `1` の間のスコアを含む `EvalScore` オブジェクトのリストを (毒性ディテクターにより異なる) 単数または複数返します。毒性アルゴリズムを実行するには、`ToxicityConfig` をインスタンス化して、`model_type` でモデルを評価するために使用する毒性モデルを渡します。`model_type` では、次のオプションを選択できます。
+ [`detoxify` for UnitaryAI Detoxify-unbiased](https://github.com/unitaryai/detoxify) は、[Toxic Comment Classification Challenge](https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge) と [Jigsaw Unintended Bias in Toxicity Classification](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](https://github.com/microsoft/TOXIGEN) は、ToxiGen データセットでファインチューニングされた、二項の RoBERTa ベースのテキスト分類子で、`13` のマイノリティグループに関する暗黙的および気づきにくい毒性のある文が含まれます。

最後に、次のサンプルコードに示されるとおり、`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)
```