翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Bedrock モデルを評価してテキストの要約の精度を確認する
高レベルModelRunner
ラッパーを使用して、 の外部でホストされているモデルに基づいてカスタム評価を作成できます JumpStart。
このチュートリアルでは、Amazon Bedrock で利用可能な Anthropic Claude 2 モデル
チュートリアルでは、以下の方法を示します。
-
環境をセットアップします。
-
モデル評価を実行します。
-
分析結果を表示します。
環境をセットアップします。
前提条件
-
ベースを使用する Python このチュートリアルを開始する前に、3.10 カーネル環境と
ml.m5.2xlarge
Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用します。インスタンスタイプとその推奨ユースケースの詳細については、「」を参照してくださいStudio Classic で使用できるインスタンスタイプ。
Amazon Bedrock をセットアップする
Amazon Bedrock モデルを使用する前に、そのモデルへのアクセスをリクエストする必要があります。
-
にサインインします AWS アカウント。
-
AWS アカウントをお持ちでない場合は、「Amazon Bedrock のセットアップ」のAWS 「アカウントのサインアップ」を参照してください。
-
-
Amazon Bedrock コンソール
を開きます。 -
開く「Amazon Bedrock! へようこそ」セクションで、モデルアクセスの管理「」を選択します。
-
表示されるモデルアクセスセクションで、モデルアクセスの管理 を選択します。
-
表示されるベースモデルセクションで、モデル の Anthropic サブセクションに記載されている Claude の横にあるチェックボックスをオンにします。
-
モデルアクセスのリクエスト を選択します。
-
リクエストが成功した場合、Access が付与されたチェックマークが、選択したモデルの横にある Access ステータスに表示されます。
-
モデルにアクセスするには AWS アカウント 、 に再度ログインする必要がある場合があります。
必要なライブラリをインストールする
-
コードで、次のように
fmeval
とboto3
ライブラリをインストールします。!pip install fmeval !pip3 install boto3==1.28.65
-
ライブラリをインポートし、並列化係数を設定し、次のように Amazon Bedrock クライアントを呼び出します。
import boto3 import json import os # Dependent on available hardware and memory os.environ["PARALLELIZATION_FACTOR"] = "1" # Bedrock clients for model inference bedrock = boto3.client(service_name='bedrock') bedrock_runtime = boto3.client(service_name='bedrock-runtime')
前のコード例では、以下が適用されます。
-
PARALLELIZATION_FACTOR
– コンピューティングインスタンスに送信された同時バッチの数の乗数。ハードウェアで並列化が許可されている場合は、この数を設定して、評価ジョブの呼び出し数を乗算できます。例えば、100
呼び出しがあり、PARALLELIZATION_FACTOR
が に設定されている場合2
、ジョブは200
呼び出しを実行します。最大PARALLELIZATION_FACTOR
まで増やすか10
、変数を完全に削除できます。 AWS Lambda の使用方法に関するブログを読むには、「Kinesis および DynamoDB イベントソースの新しい Lambda スケーリングコントロールPARALLELIZATION_FACTOR
」を参照してください。
-
-
サンプル
JSON Lines
データセット sample-dataset.jsonlを現在の作業ディレクトリにダウンロードします。 -
次のように、環境がサンプル入力ファイルを含んでいることを確認します。
import glob # Check for the built-in dataset if not glob.glob("sample-dataset.jsonl"): print("ERROR - please make sure file exists: sample-dataset.jsonl")
サンプル推論リクエストをモデルに送信する
-
モデルとプロンプト
MIME
のタイプを定義します。Amazon Bedrock でホストされている Anthropic Claude 2 モデルの場合、プロンプトは次のように構成する必要があります。 import json model_id = 'anthropic.claude-v2' accept = "application/json" contentType = "application/json" # Ensure that your prompt has the correct format prompt_data = """Human: Who is Barack Obama? Assistant: """
リクエストの本文を構成する方法の詳細については、「モデル呼び出しリクエスト本文フィールド」を参照してください。他のモデルでは形式が異なる場合があります。
-
サンプルリクエストをモデルに送信します。リクエストの本文には、プロンプトと、設定する追加のパラメータが含まれます。を
500
次のようにmax_tokens_to_sample
設定したサンプルリクエスト:body = json.dumps({"prompt": prompt_data, "max_tokens_to_sample": 500}) response = bedrock_runtime.invoke_model( body=body, modelId=model_id, accept=accept, contentType=contentType ) response_body = json.loads(response.get("body").read()) print(response_body.get("completion"))
前のコード例では、次のパラメータを設定できます。
-
temperature
– 生成されたテキストのランダム性を制御し、正の値を受け入れます。の値が大きいほど、よりランダムで多様なレスポンスを生成するようにモデルtemperature
に指示します。値が低いと、予測可能なレスポンスが生成されます。の範囲temperature
は ~0
で1
、デフォルト値は 0.5 です。 -
topP
– 次のトークンを生成するときに考慮すべきトークンのセットを制限することで、ランダム性を制御します。の値が大きいほど、より広い語彙を含むセットtopP
が許可され、値が低いほど、トークンのセットはより可能性の高い単語に制限されます。の範囲topP
は0
~ で1
、デフォルト値は です1
。 -
topK
– モデル予測をk
、最も可能性の高いトークンの上位に制限します。の値が大きいほど、より独創的なレスポンスtopK
が可能になります。値を小さくすると、より一貫性のあるレスポンスが生成されます。の範囲topK
は0
~ で500
、デフォルト値は です250
。 -
max_tokens_to_sample
– モデルから返されるトークンの数を制限することで、レスポンスの長さを制限します。の範囲max_tokens_to_sample
は0
から で4096
、デフォルト値は です200
。 -
stop_sequences
– モデルにレスポンスの生成を停止するように指示する文字シーケンスのリストを指定します。モデル出力は、リストされている文字列のいずれかが出力で初めて検出されたときに停止します。レスポンスには停止シーケンスが含まれていません。例えば、キャリッジリターンシーケンスを使用してモデルレスポンスを 1 行に制限できます。シーケンス4
を停止するように を設定できます。
リクエストで指定できるパラメータの詳細については、「Anthropic Claude モデル」を参照してください。
-
セットアップ FMEval
-
必要なライブラリをロードしてFMEval、次のように実行します。
from fmeval.data_loaders.data_config import DataConfig from fmeval.model_runners.bedrock_model_runner import BedrockModelRunner from fmeval.constants import MIME_TYPE_JSONLINES from fmeval.eval_algorithms.summarization_accuracy import SummarizationAccuracy, SummarizationAccuracyConfig
-
入力データセットのデータ設定を設定します。
次のサンプル入力は、 から 1 行です
sample-dataset.jsonl
。{ "document": "23 October 2015 Last updated at 17:44 BST\nIt's the highest rating a tropical storm can get and is the first one of this magnitude to hit mainland Mexico since 1959.\nBut how are the categories decided and what do they mean? Newsround reporter Jenny Lawrence explains.", "summary": "Hurricane Patricia has been rated as a category 5 storm.", "id": "34615665", }
前のサンプル入力には、
document
キー内で要約するテキストが含まれています。モデルレスポンスを評価するリファレンスはsummary
キーにあります。データ設定内でこれらのキーを使用して、モデルレスポンスを評価するFMEvalために必要な情報を含む列を指定する必要があります。データ設定では、モデルが に要約する必要があるテキストを特定する必要があります
model_input_location
。リファレンス値は で識別する必要がありますtarget_output_location
。次のデータ設定例は、前の入力例を参照して、テキスト要約タスクに必要な列、名前、ユニフォームリソース識別子 (URI)、および
MIME
タイプを指定します。config = DataConfig( dataset_name="sample-dataset", dataset_uri="sample-dataset.jsonl", dataset_mime_type=MIME_TYPE_JSONLINES, model_input_location="document", target_output_location="summary" )
他のタスクに必要な列情報の詳細については、「 のカスタム入力データセットの使用」セクションを参照してください自動モデル評価。
-
次のコード例
ModelRunner
に示すように、カスタムを設定します。bedrock_model_runner = BedrockModelRunner( model_id=model_id, output='completion', content_template='{"prompt": $prompt, "max_tokens_to_sample": 500}' )
前のコード例では、以下を指定します。
-
model_id
– モデルを指定するために使用する ID。 -
output
– Anthropic Claude 2モデルからの出力をキャプチャし、 completion
キーでレスポンスを返します。 -
content_template
– モデルがリクエストとやり取りする方法を指定します。設定テンプレートの例は、前の例を説明するためだけに次のように詳しく説明されており、必須ではありません。-
前の
content_template
例では、以下が適用されます。-
変数は入力プロンプト
prompt
を指定し、ユーザーが行ったリクエストをキャプチャします。 -
変数は、レスポンスの長さを制限するために
500
、トークンの最大数を にmax_tokens_to_sample
指定します。リクエストで指定できるパラメータの詳細については、「Anthropic Claude モデル」を参照してください。
content_template
パラメータの形式は、 でサポートされている入力とパラメータによって異なりますLLM。このチュートリアルでは、Anthropic の 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}}"
-
-
-
モデル評価を実行する
評価アルゴリズムを定義して実行する
-
評価アルゴリズムを定義します。次の例は、テキスト要約タスクの精度を決定するために使用される
SummarizationAccuracy
アルゴリズムを定義する方法を示しています。eval_algo = SummarizationAccuracy(SummarizationAccuracyConfig())
他の評価タスクのメトリクスを計算するアルゴリズムの例については、「」の「モデルを評価する」を参照してくださいfmeval ライブラリを使用して自動評価を実行する。
-
評価アルゴリズムを実行します。次のコード例では、以前に定義されたデータ設定と、
Human
およびAssistant
キーprompt_template
を使用する を使用します。eval_output = eval_algo.evaluate(model=bedrock_model_runner, dataset_config=config, prompt_template="Human: $feature\n\nAssistant:\n", save=True)
前のコード例では、 には Amazon Bedrock モデルが想定する形式のプロンプト
feature
が含まれています。
分析結果を表示する
-
次のように、評価アルゴリズムによって返された
eval_output
オブジェクトから評価レポートを解析します。# parse report print(json.dumps(eval_output, default=vars, indent=4))
前のコマンドは、次の出力を返します。
[ { "eval_name": "summarization_accuracy", "dataset_name": "sample-dataset", "dataset_scores": [ { "name": "meteor", "value": 0.2048823008681274 }, { "name": "rouge", "value": 0.03557697913367101 }, { "name": "bertscore", "value": 0.5406564395678671 } ], "prompt_template": "Human: $feature\n\nAssistant:\n", "category_scores": null, "output_path": "/tmp/eval_results/summarization_accuracy_sample_dataset.jsonl", "error": null } ]
前の出力例では、3 つの精度スコアが表示されます。 Meteor
, Rouge 、および BERTScore 、入力 prompt_template
、リクエストcategory_score
した場合は 、エラー、およびoutput_path
。次のステップPandas DataFrame
ではoutput_path
、 を使用して を作成します。 -
結果をインポートして に読み、次のように精度スコアをモデル入力、モデル出力、ターゲット出力に
DataFrame
アタッチします。import pandas as pd data = [] with open("/tmp/eval_results/summarization_accuracy_sample_dataset.jsonl", "r") as file: for line in file: data.append(json.loads(line)) df = pd.DataFrame(data) df['meteor_score'] = df['scores'].apply(lambda x: x[0]['value']) df['rouge_score'] = df['scores'].apply(lambda x: x[1]['value']) df['bert_score'] = df['scores'].apply(lambda x: x[2]['value']) df
この呼び出しでは、前のコード例では、次の出力を返します (簡潔に契約されています)。
model_input model_output target_output prompt scores meteor_score rouge_score bert_score 0 John Edward Bates, formerly of Spalding, Linco... I cannot make any definitive judgments, as th... A former Lincolnshire Police officer carried o... Human: John Edward Bates, formerly of Spalding... [{'name': 'meteor', 'value': 0.112359550561797... 0.112360 0.000000 0.543234 ... 1 23 October 2015 Last updated at 17:44 BST\nIt'... Here are some key points about hurricane/trop... Hurricane Patricia has been rated as a categor... Human: 23 October 2015 Last updated at 17:44 B... [{'name': 'meteor', 'value': 0.139822692925566... 0.139823 0.017621 0.426529 ... 2 Ferrari appeared in a position to challenge un... Here are the key points from the article:\n\n... Lewis Hamilton stormed to pole position at the... Human: Ferrari appeared in a position to chall... [{'name': 'meteor', 'value': 0.283411142234671... 0.283411 0.064516 0.597001 ... 3 The Bath-born player, 28, has made 36 appearan... Okay, let me summarize the key points from th... Newport Gwent Dragons number eight Ed Jackson ... Human: The Bath-born player, 28, has made 36 a... [{'name': 'meteor', 'value': 0.089020771513353... 0.089021 0.000000 0.533514 ... ...
モデル出力は、前のサンプル出力とは異なる場合があります。
このセクションで示したコード例を含むノートブックについては、bedrock-claude-summarization-accuracy「.ipnyb
」を参照してください。