機械学習モデルまたはジェネレーティブAI資産を評価する場合、モデル評価を可能にするために、デプロイメントからモデルトランザクションを送信する必要があります。
モデル評価の正確な結果を継続的に生成するには、配置から新しいデータを送信し続ける必要があります。
以下のセクションでは、モデル評価のトランザクションを送信するために使用できるさまざまな方法について説明します。
モデル・トランザクションの送信
データのインポート
インサイトダッシュボードで 評価結果を確認する際、アクションメニューを使用して、モデル評価用のペイロードおよびフィードバックデータをインポートできます。
実動前モデルの場合、CSV ファイルをアップロードするか、 Cloud Object Storage または Db2 データベースに保管されているデータに接続することで、データをインポートできます。
既にスコアリング済みのデータをアップロードする場合は、 Test data includes model output
チェック・ボックスを選択できます。 このオプションを選択した場合、 Cloud Object Storage はテスト・データを再スコアリングしません。 インポートするデータには、このオプションを選択した場合にペイロード・ロギングおよびフィードバック・テーブルに追加される record_id
/transaction_id
列および record_timestamp
列も含めることができます。
実動モデルの場合、CSV ファイルをアップロードするか、エンドポイントを使用してモデル・トランザクションを送信することにより、データをインポートできます。
エンドポイントの使用
本番モデルでは、評価可能な形式でデータを提供するために使用できるエンドポイントがサポートされています。 ペイロード・ロギング・エンドポイントを使用して公平性およびドリフト評価の評価要求を送信し、フィードバック・ロギング・エンドポイントを使用して品質評価のフィードバック・データを提供することができます。 CSV ファイルをアップロードして、モデル評価用のデータを提供することもできます。 データ・フォーマットについて詳しくは、 モデル評価のデータの管理を参照してください。
公平性評価の結果を確認するために使用できる、デバイアスされたトランザクションのエンドポイントもサポートされている。 バイアス緩和済みトランザクション・エンドポイントは、ペイロード・データにアクティブなバイアス緩和を適用して、モデル内のバイアスを検出します。 アクティブなバイアス緩和について詳しくは、 バイアス緩和済みトランザクションの確認を参照してください。
以下の手順を使用して、エンドポイントを持つモデル評価のモデルトランザクションを送信することができます:
- モニター構成ページで、 「エンドポイント」 タブを選択します。
- CSV ファイルを使用してペイロード・データをアップロードする場合は、 「ペイロード・データのアップロード」をクリックします。
- CSV ファイルを使用してフィードバック・データをアップロードする場合は、 「フィードバック・データのアップロード」をクリックします。
- 「モデル情報」 パネルで、 「エンドポイント」をクリックします。
- 「エンドポイント」 メニューから、使用するエンドポイントのタイプを選択します。
- 「コード言語」 メニューから、使用するコード・スニペットのタイプを選択します。
- コード・スニペットをコピーし、ノートブックまたはアプリケーションでコードを実行するには、クリップボードにコピー'をクリックします。
Pythonでペイロードデータを記録する
Watson OpenScale のEndpoints メニューからペイロード・データ・エンドポイントを選択すると、ペイロード・データをログに記録する方法を次のコード・スニペットで示すことができます:
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
from ibm_watson_openscale import APIClient
service_credentials = {
"apikey": "$API_KEY",
"url": "{$WOS_URL}"
}
authenticator = IAMAuthenticator(
apikey=service_credentials["apikey"],
url="https://iam.cloud.ibm.com/identity/token"
)
SERVICE_INSTANCE_ID = "{$WOS_SERVICE_INSTANCE_ID}"
wos_client = APIClient(authenticator=authenticator, service_instance_id=SERVICE_INSTANCE_ID, service_url=service_credentials["url"])
from ibm_watson_openscale.data_sets import DataSetTypes, TargetTypes
# Put your subscription ID here
SUBSCRIPTION_ID = "{$SUBSCRIPTION_ID}"
payload_logging_data_set_id = wos_client.data_sets.list(type=DataSetTypes.PAYLOAD_LOGGING, target_target_id=SUBSCRIPTION_ID, target_target_type=TargetTypes.SUBSCRIPTION).result.data_sets[0].metadata.id
from ibm_watson_openscale.supporting_classes.payload_record import PayloadRecord
# Put your data here
REQUEST_DATA = {
"parameters": {
"template_variables": {
"{$TEMPLATE_VARIABLE_1}": "$TEMPLATE_VARIABLE_1_VALUE",
"{$TEMPLATE_VARIABLE_2}": "$TEMPLATE_VARIABLE_2_VALUE"
}
},
"project_id": "$PROJECT_ID"
}
RESPONSE_DATA = {
"results": [
{
"generated_text": "$GENERATED_TEXT"
}
]
}
RESPONSE_TIME = $RESPONSE_TIME
wos_client.data_sets.store_records(data_set_id=payload_logging_data_set_id, request_body=[PayloadRecord(request=REQUEST_DATA, response=RESPONSE_DATA, response_time=RESPONSE_TIME)])
"project_id": "$PROJECT_ID"
は、プロジェクトで評価するためのペイロードデータを記録することを指定します。 スペースで評価されたペイロードデータを記録するには、代わりに「"space_id": "$SPACE_ID"
値を指定することができる。 プロジェクトとスペースの「Manage」タブを使用して、モデルのプロジェクトまたはスペースIDを特定することができます。
Pythonでフィードバックデータを記録する
Watson OpenScale のEndpoints メニューからフィードバック・データのエンドポイントを選択すると、以下のコード・スニペットを使ってフィードバック・データのログを取る方法を示すことができます:
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
from ibm_watson_openscale import APIClient
from ibm_watson_openscale.supporting_classes.enums import DataSetTypes, TargetTypes
service_credentials = {
"apikey": "$API_KEY",
"url": "{$WOS_URL}"
}
authenticator = IAMAuthenticator(
apikey=service_credentials["apikey"],
url="https://iam.cloud.ibm.com/identity/token"
)
SERVICE_INSTANCE_ID = "{$WOS_SERVICE_INSTANCE_ID}"
wos_client = APIClient(authenticator=authenticator, service_instance_id=SERVICE_INSTANCE_ID, service_url=service_credentials["url"])
subscription_id = "{$SUBSCRIPTION_ID}"
feedback_dataset_id = wos_client.data_sets.list(type=DataSetTypes.FEEDBACK, target_target_id=subscription_id, target_target_type=TargetTypes.SUBSCRIPTION).result.data_sets[0].metadata.id
fields = [
"{$TEMPLATE_VARIABLE_1}",
"{$TEMPLATE_VARIABLE_2}",
"{$LABEL_COLUMN}",
"_original_prediction"
]
values = [
[
"$TEMPLATE_VARIABLE_1_VALUE",
"$TEMPLATE_VARIABLE_2_VALUE",
"$LABEL_COLUMN_VALUE",
"$GENERATED_TEXT_VALUE"
]
]
wos_client.data_sets.store_records(
data_set_id=feedback_dataset_id,
request_body=[{"fields": fields, "values": values}],
background_mode=False
)
watsonx.governance でのモデル・トランザクションの送信
watsonx.governance でのデータのインポート
watsonx.governanceで評価結果を確認するときに、 「アクション」 メニューの 「今すぐ評価」 を選択してモデル評価のペイロード・データとフィードバック・データをインポートすることで、データをインポートできます。
実動前モデルの場合は、入力データと出力データの例を含む CSV ファイルをアップロードする必要があります。 インポートされたデータを使用して評価を実行するには、以下の例に示すように、CSV ファイル内の関連する列にプロンプト変数をマップし、 「アップロードして評価」 を選択する必要があります。
実動モデルの場合、 「テスト・データのインポート」 ウィンドウで 「ペイロード・データのアップロード」 または 「フィードバック・データのアップロード」 を選択して、以下の例に示すように CSV ファイルをアップロードできます。
CSV ファイルには、ペイロード・スキーマとフィードバック・スキーマの列に一致するラベル付き列が含まれている必要があります。 アップロードが正常に完了したら、 「今すぐ評価」 を選択して、インポートしたデータで評価を実行できます。
watsonx.governance でのエンドポイントの使用
本番モデルでは、評価可能な形式でデータを提供するために使用できるエンドポイントがサポートされています。 ペイロード・ロギング・エンドポイントを使用してドリフト評価の評価要求を送信し、フィードバック・ロギング・エンドポイントを使用して品質評価のフィードバック・データを提供することができます。
コード・スニペットを使って、APIやノートブックへのスコアリング・リクエストを記録することができます。
cuRLでフィードバックデータを記録
次の例は、cURLコード・スニペットでフィードバック・データを記録する方法を示しています:
# Generate an IAM access token by passing an API key as $APIKEY in the request below
# See: https://cloud.ibm.com/docs/account?topic=account-iamtoken_from_apikey
curl -k -X POST --header "Content-Type: application/x-www-form-urlencoded" --header "Accept: application/json" --data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey" --data-urlencode "apikey=$APIKEY" "https://iam.cloud.ibm.com/identity/token"
# the above CURL request will return an auth token that you will use as $IAM_TOKEN in the requests below.
# retrieve the ID of the data set to store the feedback records
curl --location --request GET "${WOS_URL}/openscale/${WOS_SERVICE_INSTANCE_ID}/v2/data_sets?target.target_id=${SUBSCRIPTION_ID}&target.target_type=subscription&type=feedback" --header "Authorization: bearer $IAM_TOKEN" --header "Accept: application/json"
# the above request will return the ID of feedback records data set that you will use as $DATA_SET_ID in the request below. ID will be found at data_sets[0]['metadata']['id']
# TODO: manually define fields and list of values for feedback data
FEEDBACK_PAYLOAD = '[{
"fields": [
"${TEMPLATE_VARIABLE_1}",
"${TEMPLATE_VARIABLE_2}",
"${LABEL_COLUMN}",
"_original_prediction"
],
"values": [
[
"$TEMPLATE_VARIABLE_1_VALUE",
"$TEMPLATE_VARIABLE_2_VALUE",
"$LABEL_COLUMN_VALUE",
"$GENERATED_TEXT_VALUE"
]
]
}]'
curl --location --request POST "${WOS_URL}/openscale/${WOS_SERVICE_INSTANCE_ID}/v2/data_sets/$DATA_SET_ID/records" -d "$FEEDBACK_PAYLOAD" --header "Authorization: bearer $IAM_TOKEN" --header "Accept: application/json" --header "Content-Type: application/json"
Pythonでフィードバックデータを記録する
次の例では、Pythonのコード・スニペットでフィードバック・データを記録する方法を示します:
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
from ibm_watson_openscale import APIClient
from ibm_watson_openscale.supporting_classes.enums import DataSetTypes, TargetTypes
service_credentials = {
"apikey": "$API_KEY",
"url": "{$WOS_URL}"
}
authenticator = IAMAuthenticator(
apikey=service_credentials["apikey"],
url="https://iam.cloud.ibm.com/identity/token"
)
SERVICE_INSTANCE_ID = "{$WOS_SERVICE_INSTANCE_ID}"
wos_client = APIClient(authenticator=authenticator, service_instance_id=SERVICE_INSTANCE_ID, service_url=service_credentials["url"])
subscription_id = "{$SUBSCRIPTION_ID}"
PROJECT_ID = "{$PROJECT_ID}"
feedback_dataset_id = wos_client.data_sets.list(type=DataSetTypes.FEEDBACK, target_target_id=subscription_id, target_target_type=TargetTypes.SUBSCRIPTION, project_id=PROJECT_ID).result.data_sets[0].metadata.id
fields = [
"{$TEMPLATE_VARIABLE_1}",
"{$TEMPLATE_VARIABLE_2}",
"{$LABEL_COLUMN}",
"_original_prediction"
]
values = [
[
"$TEMPLATE_VARIABLE_1_VALUE",
"$TEMPLATE_VARIABLE_2_VALUE",
"$LABEL_COLUMN_VALUE",
"$GENERATED_TEXT_VALUE"
]
]
wos_client.data_sets.store_records(
data_set_id=feedback_dataset_id,
request_body=[{"fields": fields, "values": values}],
project_id=PROJECT_ID
background_mode=False
)
project_id=PROJECT_ID
は、プロジェクトでの評価のフィードバックデータを記録することを指定します。 スペース内の評価に対するフィードバックデータを記録するには、代わりに「space_id=SPACE_ID
」を指定します。 プロジェクトとスペースの「Manage」タブを使用して、モデルのプロジェクトまたはスペースIDを特定することができます。
cURLによるペイロードデータのログ
以下の例では、cURLコードスニペットでペイロードデータを記録する方法を示している:
# Generate an IAM access token by passing an API key as $APIKEY in the request below
# See: https://cloud.ibm.com/docs/account?topic=account-iamtoken_from_apikey
curl -k -X POST \
--header "Content-Type: application/x-www-form-urlencoded" \
--header "Accept: application/json" \
--data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey" \
--data-urlencode "apikey=$APIKEY" \
"https://iam.cloud.ibm.com/identity/token"
# the above CURL request will return an auth token that you will use as $IAM_TOKEN in the requests below.
# retrieve the ID of the data set to store the payload records
curl --location --request GET "${WOS_URL}/openscale/{$WOS_SERVICE_INSTANCE_ID}/v2/data_sets?target.target_id=${SUBSCRIPTION_ID}&target.target_type=subscription&type=payload_logging" \
--header "Authorization: bearer $IAM_TOKEN" \
--header "Accept: application/json"
# the above request will return the ID of payload records data set that you will use as $DATA_SET_ID in the request below.
# TODO: manually define and pass:
# request - input to scoring endpoint in format supported by Watson OpenScale - replace sample fields and values with proper ones
# response - output from scored model in format supported by Watson OpenScale - replace sample fields and values with proper ones
# - $SCORING_TIME - Time (ms) taken to make prediction (for performance monitoring)
SCORING_PAYLOAD='[{
"response_time": "$SCORING_TIME",
"request": {
"parameters": {
"template_variables": {
"${TEMPLATE_VARIABLE_1}": "$TEMPLATE_VARIABLE_1_VALUE",
"${TEMPLATE_VARIABLE_2}": "$TEMPLATE_VARIABLE_2_VALUE"
}
},
"project_id": "$PROJECT_ID"
},
"response": {
"results": [
{
"generated_text": "$GENERATED_TEXT"
}
]
},
"user_id": "$USER_ID"
}]'
curl --location --request POST "${WOS_URL}/openscale/${WOS_SERVICE_INSTANCE_ID}/v2/data_sets/$DATA_SET_ID/records" \
-d "$SCORING_PAYLOAD" \
--header "Authorization: bearer $IAM_TOKEN" \
--header "Accept: application/json" \
--header "Content-Type: application/json"
"project_id": "$PROJECT_ID"
は、プロジェクトで評価するためのペイロードデータを記録することを指定します。 スペースで評価されたペイロードデータを記録するには、代わりに「"space_id": "$SPACE_ID"
値を指定することができる。 プロジェクトとスペースの「Manage」タブを使用して、モデルのプロジェクトまたはスペースIDを特定することができます。
Pythonでペイロードデータを記録する
以下の例では、Pythonのコードスニペットでペイロードデータを記録する方法を示しています:
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
from ibm_watson_openscale import APIClient
service_credentials = {
"apikey": "$API_KEY",
"url": "{$WOS_URL}"
}
authenticator = IAMAuthenticator(
apikey=service_credentials["apikey"],
url="https://iam.cloud.ibm.com/identity/token"
)
SERVICE_INSTANCE_ID = "{$WOS_SERVICE_INSTANCE_ID}"
wos_client = APIClient(authenticator=authenticator, service_instance_id=SERVICE_INSTANCE_ID, service_url=service_credentials["url"])
from ibm_watson_openscale.data_sets import DataSetTypes, TargetTypes
# Put your subscription ID here
SUBSCRIPTION_ID = "{$SUBSCRIPTION_ID}"
PROJECT_ID = "{$PROJECT_ID}"
payload_logging_data_set_id = wos_client.data_sets.list(type=DataSetTypes.PAYLOAD_LOGGING, target_target_id=SUBSCRIPTION_ID, target_target_type=TargetTypes.SUBSCRIPTION, project_id=PROJECT_ID).result.data_sets[0].metadata.id
from ibm_watson_openscale.supporting_classes.payload_record import PayloadRecord
# Put your data here
REQUEST_DATA = {
"parameters": {
"template_variables": {
"{$TEMPLATE_VARIABLE_1}": "$TEMPLATE_VARIABLE_1_VALUE",
"{$TEMPLATE_VARIABLE_2}": "$TEMPLATE_VARIABLE_2_VALUE"
}
},
"project_id": PROJECT_ID
}
RESPONSE_DATA = {
"results": [
{
"generated_text": "$GENERATED_TEXT"
}
]
}
RESPONSE_TIME = $RESPONSE_TIME
wos_client.data_sets.store_records(data_set_id=payload_logging_data_set_id, request_body=[PayloadRecord(request=REQUEST_DATA, response=RESPONSE_DATA, response_time=RESPONSE_TIME)], project_id=PROJECT_ID)
PROJECT_ID = "{$PROJECT_ID}"
」は、プロジェクトで評価するためのペイロードデータを記録することを指定します。 スペースで評価されたペイロードデータを記録するには、代わりに「SPACE_ID = "{$SPACE_ID}"
値を指定することができる。 プロジェクトとスペースの「Manage」タブを使用して、モデルのプロジェクトまたはスペースIDを特定することができます。
データ・フォーマットについて詳しくは、 モデル評価のデータの管理を参照してください。
親トピック モデル評価のためのデータ管理