評估 Amazon Bedrock 模型的文字摘要準確性 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

評估 Amazon Bedrock 模型的文字摘要準確性

您可以使用高階ModelRunner包裝程式,根據託管在 外部的模型建立自訂評估 JumpStart。

本教學課程示範如何載入 Anthropic Claude 2 模型 ,該模型可在 Amazon Bedrock 中使用,並要求此模型總結文字提示。然後,本教學課程示範如何使用 評估模型回應的準確性 Rouge-L, Meteor、 和 BERTScore 指標。

這些教學課程示範如何執行下列操作:

  • 設定您的 環境。

  • 執行模型評估。

  • 檢視您的分析結果。

設定您的環境

必要條件
  • 使用基礎 Python 3.10 核心環境和 ml.m5.2xlarge Amazon Elastic Compute Cloud (AmazonEC2) 執行個體,然後再開始本教學課程。

    如需執行個體類型及其建議使用案例的詳細資訊,請參閱 可用於 Studio Classic 的執行個體類型

設定 Amazon Bedrock

您必須先請求存取 Amazon Bedrock 模型,才能使用該模型。

  1. 登入您的 AWS 帳戶。

    1. 如果您沒有 AWS 帳戶,請參閱設定 Amazon Bedrock 中的註冊 AWS 帳戶

  2. 開啟 Amazon Bedrock 主控台

  3. 在開啟的歡迎使用 Amazon Bedrock! 區段中,選擇管理模型存取

  4. 在出現的模型存取區段中,選擇管理模型存取

  5. 在出現的基礎模型區段中,勾選在模型 的 Anthropic 子區段下列出的 Claude 旁的核取方塊。

  6. 選擇請求模型存取

  7. 如果您的請求成功,授予存取的核取記號應該會顯示在所選模型旁的存取狀態下。

  8. 您可能需要重新登入您的 AWS 帳戶 才能存取模型。

安裝必要的程式庫
  1. 在程式碼中,依下列方式安裝 fmevalboto3 程式庫:

    !pip install fmeval !pip3 install boto3==1.28.65
  2. 匯入程式庫、設定平行化因素,以及叫用 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 如何使用的部落格,PARALLELIZATION_FACTOR請參閱適用於 Kinesis 和 DynamoDB 事件來源的新 Lambda 擴展控制項。

  3. 將範例JSON Lines資料集 sample-dataset.jsonl 下載到您目前的工作目錄中。

  4. 檢查您的環境是否包含範例輸入檔案,如下所示:

    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")
將範例推論請求傳送至您的模型
  1. 定義 模型和提示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: """

    如需如何建構請求內文的詳細資訊,請參閱模型調用請求內文欄位 。其他模型可能有不同的格式。

  2. 將範例請求傳送至您的模型。請求的內文包含提示和您要設定的任何其他參數。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允許包含更廣泛詞彙和較低值的集合,將權杖集限制為更可能的單字。的範圍topP01,預設值為 1

    • topK – 將模型預測限制為k最可能的權杖。較高的 值topK可允許更多創新回應。較低的值會產生更一致的回應。的範圍topK0500,預設值為 250

    • max_tokens_to_sample – 透過限制模型傳回的權杖數目,來限制回應的長度。的範圍max_tokens_to_sample04096,預設值為 200

    • stop_sequences – 指定字元序列清單,指示模型停止產生回應。模型輸出會在輸出中第一次遇到任何列出的字串時停止。回應不包含停止序列。例如,您可以使用歸位序列將模型回應限制為單行。您可以設定 以4停止序列。

    如需您可以在請求中指定參數的詳細資訊,請參閱 Anthropic Claude 模型

設定 FMEval
  1. 載入要執行的必要程式庫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
  2. 為您的輸入資料集設定資料組態。

    下列範例輸入是來自 的一行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" )

    如需其他任務所需的資料欄資訊的詳細資訊,請參閱中的使用自訂輸入資料集一節自動模型評估

  3. 設定自訂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 模型

        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}}"

執行模型評估

定義和執行您的評估演算法
  1. 定義您的評估演算法。下列範例顯示如何定義SummarizationAccuracy演算法,用於判斷文字摘要任務的準確性:

    eval_algo = SummarizationAccuracy(SummarizationAccuracyConfig())

    如需計算其他評估任務指標的演算法範例,請參閱在 中評估模型使用fmeval程式庫執行自動評估

  2. 執行評估演算法。下列程式碼範例使用先前定義的資料組態,以及使用 HumanAssistant金鑰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 模型預期的格式提示。

檢視您的分析結果

  1. 從評估演算法傳回的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、輸入 prompt_templatecategory_score如果您請求的 、任何錯誤,以及 output_path。您將在下列步驟Pandas DataFrame中使用 output_path建立 。

  2. 匯入結果並將其讀取至 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。