翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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] の横にあるチェックボックスをオンにします。
-
[モデルアクセスをリクエスト] をクリックします。
-
リクエストが正常に完了すると、[アクセスが付与されました] と表示されたチェックマークが選択したモデルの横の [アクセスのステータス] に表示されます。
-
モデルにアクセスするには 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: """
リクエストの本文を構成する方法の詳細については、「Model invocation request body field」を参照してください。モデルによっては形式が異なる場合があります。
-
サンプルリクエストをモデルに送信します。リクエストの本文には、プロンプトと、設定する追加のパラメータが含めます。
max_tokens_to_sample
を500
に設定したサンプルリクエストは、次のとおりです。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 models」を参照してください。
-
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
-
入力データセットのデータ設定を行います。
次のサンプル入力は、
sample-dataset.jsonl
からの 1 行です。{ "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
で特定する必要があります。次のデータ設定例では、上記の入力例を参照して、テキスト要約タスクに必要な列、名前、Uniform Resource Identifier (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" )
その他のタスクに必要な列情報の詳細については、「自動モデル評価」の「Use a custom input dataset」セクションを参照してください。
-
次のサンプルコードで示されるとおり、カスタム
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
は、ユーザーが行ったリクエストをキャプチャする入力プロンプトを指定します。 -
変数
max_tokens_to_sample
は、応答の長さを制限するために、トークンの最大数を500
に指定します。リクエストで指定できるパラメータの詳細については、「Anthropic Claude models」を参照してください。
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 ライブラリを使用して自動評価を実行する」の「Evaluate your model」を参照してください。
-
評価アルゴリズムを実行します。次のサンプルコードでは、以前に定義したモデルとデータの設定と、
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)
上記のコード例の
feature
には Amazon Bedrock モデルが求める形式のプロンプトが含まれています。
分析結果を表示する
-
評価アルゴリズムが返した
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 } ]
上記の出力例ではMeteor
、Rouge 、BERTScore の 3 つの精度スコア、入力 prompt_template
、リクエストした場合はcategory_score
、エラー、output_path
が表示されます。次のステップでは、output_path
を使用して、Pandas DataFrame
を作成します。 -
結果をインポートして
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
」を参照してください。