使用fmeval程式庫執行自動評估 - Amazon SageMaker

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

使用fmeval程式庫執行自動評估

在您自己的程式碼中使用fmeval程式庫,可讓您最靈活地自訂工作流程。您可以使用 fmeval程式庫來評估任何 LLM,也可以使用自訂輸入資料集來提高靈活性。下列步驟說明如何設定環境,以及如何使用 fmeval程式庫同時執行啟動和自訂工作流程。

開始使用 fmeval 程式庫

您可以在 Studio 筆記本中設定基礎模型評估,並針對使用案例加以自訂。您的組態取決於基礎模型要預測的任務類型,以及您想要如何評估它。FMEval 支援開放式產生、文字摘要、問題回答和分類任務。本節中的步驟會示範如何設定開始工作流程。此開始工作流程包括設定您的環境,並使用 JumpStart 或具有內建資料集的 Amazon Bedrock 基礎模型來執行評估演算法。如果您必須使用自訂輸入資料集和工作流程來處理更具體的使用案例,請參閱 使用 fmeval程式庫自訂工作流程

如果您不想在 Studio 筆記本中執行模型評估,請跳至下列開始使用 Studio 一節中的步驟 11。

必要條件
  • 若要在 Studio UI 中執行模型評估,您的 AWS Identity and Access Management (IAM) 角色和任何輸入資料集都必須具有正確的許可。如果您沒有 SageMaker 網域或IAM角色,請遵循 中的步驟Amazon 設定指南 SageMaker

設定 Amazon S3 儲存貯體的許可

建立網域和角色後,請使用下列步驟新增評估模型所需的許可。

  1. 在 開啟 Amazon SageMaker 主控台https://console.aws.amazon.com/sagemaker/

  2. 在導覽窗格中,S3在頁面頂端的搜尋列中輸入 。

  3. 服務 下選擇 S3

  4. 從導覽窗格中選擇儲存貯體

  5. 一般用途儲存貯體區段的名稱 下,選擇您要用來在主控台中存放模型輸入和輸出的 S3 儲存貯體名稱。如果您沒有 S3 儲存貯體,請執行下列動作:

    1. 選取建立儲存貯體以開啟新的建立儲存貯體頁面。

    2. 一般組態區段AWS 中的區域 下,選取 AWS 基礎模型所在的區域。

    3. 在儲存貯體名稱 下的輸入方塊中命名 S3 儲存貯體

    4. 接受所有預設選項。

    5. 選取建立儲存貯體

    6. 一般用途儲存貯體區段的名稱 下,選取您建立的 S3 儲存貯體名稱。

  6. 選擇許可索引標籤標籤。

  7. 捲動至視窗底部的跨來源資源共用 (CORS) 區段。選擇編輯

  8. 若要將許可新增至儲存貯體以進行基礎評估,請確定下列程式碼出現在輸入方塊中。您也可以將下列項目複製並貼到輸入方塊中。

    [ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "GET", "PUT", "POST", "DELETE" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [ "Access-Control-Allow-Origin" ] } ]
  9. 選擇 Save changes (儲存變更)。

將許可新增至您的IAM政策
  1. 在頁面頂端的搜尋列中,輸入 IAM

  2. 服務 下,選取身分和存取管理 (IAM)

  3. 從導覽窗格中選擇政策

  4. 在搜尋列AmazonSageMakerFullAccess中輸入 。選取出現的政策旁的選項按鈕。現在可以選取動作按鈕。

  5. 選擇動作 旁的向下箭頭。會出現兩個選項。

  6. 選擇 Attach (連接)。

  7. 在出現的IAM清單中,搜尋您建立的角色名稱。選取名稱旁的核取方塊。

  8. 選擇連接政策

開始使用 Studio
  1. 在頁面頂端的搜尋列中,輸入 SageMaker

  2. 服務 下,選取 Amazon SageMaker

  3. 從導覽窗格中選擇 Studio

  4. 在展開選取網域 下的向下箭頭後,從入門區段中選擇您的網域。

  5. 在展開選取使用者設定檔 下的向下箭頭後,從開始使用區段中選擇您的使用者設定檔

  6. 選擇開啟 Studio 以開啟 Studio 的登陸頁面。

  7. 從導覽窗格中選取檔案瀏覽器,然後導覽至根目錄。

  8. 選取建立筆記本

  9. 在開啟的筆記本環境對話方塊中,選取資料科學 3.0 映像。

  10. 選擇選取

  11. 在開發環境中安裝fmeval套件,如下列程式碼範例所示:

    !pip install fmeval
    注意

    fmeval程式庫安裝到使用 的環境 Python 3.10。 如需執行 fmeval 所需需求的詳細資訊,請參閱fmeval相依性

FMEval 使用稱為 的高階包裝程式ModelRunner,從模型編寫輸入、叫用和擷取輸出。fmeval 套件可以評估任何 LLM,但設定的程序ModelRunner取決於您要評估的模型類型。本節說明如何ModelRunner設定 JumpStart 或 Amazon Bedrock 模型。如果您想要使用自訂輸入資料集和自訂 ModelRunner,請參閱 使用 fmeval程式庫自訂工作流程

使用 JumpStart 模型

若要使用 ModelRunner 評估 JumpStart 模型、建立或提供端點、定義模型和內建資料集、設定和測試 ModelRunner

定義 JumpStart 模型並設定 ModelRunner
  1. 執行下列任一動作來提供端點:

    • 將 指定EndpointName至現有 JumpStart端點、 model_idmodel_version

    • model_version 為您的模型指定 model_id和 ,並建立 JumpStart 端點。

    下列程式碼範例示範如何為 建立端點 Llama 2 foundation model 可透過 取得 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,代表 end-use-license-agreement(EULA)。EULA 您可以在您正在使用的模型的模型卡描述中找到 。若要使用某些 JumpStart 模型,您必須指定 accept_eula=true,如上一次呼叫 所示predict。如需 的詳細資訊EULA,請參閱 中的授權和模型來源一節模型來源和授權合約

    您可以在具有預先訓練 JumpStart 模型表 的內建演算法中找到可用模型的清單。 https://sagemaker.readthedocs.io/en/stable/doc_utils/pretrainedmodels.html#built-in-algorithms-with-pre-trained-model-table

  2. 使用 ModelRunner進行設定JumpStartModelRunner,如下列組態範例所示:

    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_namemodel_id和 值。

  3. 測試您的 ModelRunner。將範例請求傳送至您的模型,如下列程式碼範例所示:

    js_model_runner.predict("What is the capital of London")

使用 Amazon Bedrock 模型

若要評估 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 指定請求中輸入資料的格式。只有 acceptcontentType MIME_TYPE_JSON支援 Amazon Bedrock 模型。如需這些參數的詳細資訊,請參閱 InvokeModelWithResponseStream

  2. 若要設定 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停止產生回應。模型輸出會在輸出中第一次遇到任何列出的字串時停止。例如,您可以使用歸位序列將模型回應限制為單行。

        • 參數透過限制產生下一個字符時要考慮的字符集來topP控制隨機性。此參數接受介於 0.0和 之間的值1.0。較高的 值topP允許包含更廣泛詞彙和較低值的集合,將權杖集限制為更可能的單字。

        • 參數temperature控制所產生文字的隨機性,並接受正值。較高的值會temperature指示模型產生更多隨機且多樣化的回應。較低的值會產生更可預測的回應。一般範圍介於 temperature 0.2和 之間2.0

        如需特定 Amazon Bedrock 基礎模型參數的詳細資訊,請參閱基礎模型的推論參數

      content_template 參數的格式取決於 支援的輸入和參數LLM。例如 Anthropic’s 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}}"

      最後,測試您的 ModelRunner。將範例請求傳送至您的模型,如下列程式碼範例所示:

      bedrock_model_runner.predict("What is the capital of London?")

設定資料和 之後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方法具有下列選用參數:

  • modelModelRunner使用您要評估之模型的執行個體。

  • 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未提供 參數,則會使用該範本。如需詳細資訊,請參閱在設定 一節prompt_template中的 。 JumpStart ModelRunner

    dataset_scores – 在整個資料集中計算的彙總分數。

    category_scores – 包含資料集中每個類別分數的CategoryScore物件清單。

    output_path – 評估輸出的本機路徑。此輸出包含具有記錄評估分數的提示回應。

    error – 失敗評估任務的字串錯誤訊息。

下列維度可用於模型評估:

  • 準確性

  • 實際知識

  • 提示刻板印象

  • 語意穩健性

  • 毒性

準確性

您可以針對問題回答、文字摘要或分類任務執行準確度演算法。每個任務的演算法都不同,以適應不同的資料輸入類型和問題,如下所示:

  • 對於回答問題任務,請使用 QAAccuracyConfig 檔案執行QAAccuracy演算法。

  • 對於文字摘要任務,請使用 執行SummarizationAccuracy演算法SummarizationAccuracyConfig

  • 對於分類任務,請使用 執行ClassificationAccuracy演算法ClassificationAccuracyConfig

QAAccuracy 演算法會傳回包含每個範例一個準確度分數的EvalOutput物件清單。若要執行問題解答準確性演算法,請初始化 QAAccuracygeConfig並傳入 <OR>None作為 target_output_delimiter。問題答案準確度演算法會將模型產生的回應與已知的回應進行比較。如果您以目標分隔符號<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 演算法會傳回包含 分數的EvalOutput物件清單 ROUGE-N, Meteor、 和 BERTScore。 如需這些分數的詳細資訊,請參閱 中的文字摘要一節在模型評估任務中使用提示資料集和可用的評估維度 。若要執行文字摘要準確性演算法,請初始化 SummarizationAccuracyConfig並傳遞以下內容:

  • 指定 的類型 ROUGE 您要在評估中使用 的指標rouge_type。您可以選擇 rouge1rouge2rougeL。這些指標會將產生的摘要與參考摘要進行比較。ROUGE-1 使用重疊的單片法 (一個項目的序列,例如「the」、「is」) 來比較產生的摘要和參考摘要。ROUGE-2 使用 Bigram (兩個序列的群組,例如「大型」、「是首頁」) 來比較產生的摘要和參考摘要。ROUGE-L 會比較最長的字詞比對順序。如需關於 ROUGE,請參閱 ROUGE:自動評估摘要 的套件

  • use_stemmer_for_rouge 設為 TrueFalse。在比較單字之前,幹細胞會移除單字的附著。例如, 掣子從「swimming」和「swam」中移除 ,以便它們在掣出後都是「swim」。

  • 將 model_type_for_bertscore 設定為您要用來計算的模型 BERTScore。 您可以選擇 ROBERTA_MODEL 或更進階的 MICROSOFT_DEBERTA_MODEL

最後,呼叫 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物件清單。如需這些分數的詳細資訊,請參閱 中的分類區段在模型評估任務中使用提示資料集和可用的評估維度 。若要執行分類準確度演算法,請初始化 ClassificationAccuracyConfig並將平均策略傳遞至 multiclass_average_strategy。您可以選擇 micromacroweightedsamplesbinary。預設值為 micro。然後,將包含資料欄名稱的清單中包含分類類別的真實標籤,傳遞至 valid_labels。最後,呼叫 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)

實際知識

您可以執行開放式世代的事實知識演算法。若要執行事實知識演算法,請初始化 FactualKnowledgeConfig並選擇性地傳遞分隔符號字串 (預設為 <OR>)。事實知識演算法會將模型產生的回應與已知的回應進行比較。如果演算法在答案中產生由分隔符號分隔的任何內容,則會將回應計為正確。如果您傳遞Nonetarget_output_delimiter,則模型必須產生與答案相同的回應,才能計為正確。最後,呼叫 evaluate 方法並傳遞所需的參數。

實際知識會傳回EvalScore物件清單。這些包含彙總分數,說明您的模型編碼事實知識的能力,如基礎模型評估概觀章節所述。分數範圍介於 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)

提示刻板印象

您可以執行開放式世代的提示刻板印象演算法。若要執行提示刻板印象演算法,您的 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)

語意穩健性

您可以針對任何FMEval任務執行語意穩健性演算法,但您的模型應該具有決定性。決定性模型是一律為相同輸入產生相同輸出的模型。一個通常可以透過在解碼程序中設定隨機種子來實現確定性。每個任務的演算法都不同,以適應不同的資料輸入類型和問題,如下所示:

  • 對於開放式世代、問題回答或任務分類, 會使用 GeneralSemanticRobustnessConfig 檔案執行GeneralSemanticRobustness演算法。

  • 對於文字摘要,請使用 SummarizationAccuracySemanticRobustnessConfig 檔案執行SummarizationAccuracySemanticRobustness演算法。

GeneralSemanticRobustness 演算法會傳回包含準確度的EvalScore物件清單,其值介於 01 之間,並量化擾動與未擾動模型輸出之間的差異。若要執行一般語意穩健性演算法,請初始化 GeneralSemanticRobustnessConfig並在 中傳遞 perturbation_type。您可以為 選擇下列其中一項perturbation_type

  • Butterfinger – 根據鍵盤距離使用字元交換模擬拼字錯誤的擾動。輸入指定字元擾亂的機率。Butterfinger 是 的預設值perturbation_type

  • RandomUpperCase – 將一小部分字元變更為大寫的擾動。輸入從 0到 的小數1

  • WhitespaceAddRemove – 在非白色空格字元前面新增白色空格字元的機率。

您也可以指定下列參數:

  • num_perturbations – 要引入到產生文字的每個範例擾動次數。預設值為 5

  • butter_finger_perturbation_prob – 字元被擾亂的機率。只有在 perturbation_typeButterfinger 時才會使用。預設值為 0.1

  • random_uppercase_corrupt_proportion – 要變更為大寫的字元部分。只有在 perturbation_typeRandomUpperCase 時才會使用。預設值為 0.1

  • whitespace_add_prob – 假設為空格,則從範例中移除空格的機率。只有在 perturbation_typeWhitespaceAddRemove 時才會使用。預設值為 0.05

  • whitespace_remove_prob – 指定非白色空間時,在前面新增白色空間的機率。只有在 perturbation_typeWhitespaceAddRemove 時才會使用。預設值為 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 演算法會傳回包含 之間差異 (或差異) 的EvalScore物件清單 ROUGE-N, Meteor、 和 BERTScore 產生的值和參考摘要之間的值。如需這些分數的詳細資訊,請參閱 中的文字摘要章節在模型評估任務中使用提示資料集和可用的評估維度 。若要執行文字摘要語意穩健性演算法,請初始化 SummarizationAccuracySemanticRobustnessConfig並在 中傳遞 perturbation_type

您可以為 選擇下列其中一項perturbation_type

  • Butterfinger – 根據鍵盤距離使用字元交換模擬拼字錯誤的擾動。輸入指定字元擾亂的機率。 Butterfinger是 的預設值perturbation_type

  • RandomUpperCase – 將一小部分字元變更為大寫的擾動。輸入從 0到 的小數1

  • WhitespaceAddRemove – 將非空格字元前面新增空格字元的機率輸入為白色。

您也可以指定下列參數:

  • num_perturbations – 要引入到產生文字的每個範例擾動次數。預設值為 5

  • butter_finger_perturbation_prob – 字元被擾亂的機率。只有在 perturbation_typeButterfinger 時才會使用。預設值為 0.1

  • random_uppercase_corrupt_proportion – 要變更為大寫的字元部分。只有在 perturbation_typeRandomUpperCase 時才會使用。預設值為 0.1

  • whitespace_add_prob – 假設為空格,則從範例中移除空格的機率。只有在 perturbation_typeWhitespaceAddRemove 時才會使用。預設值為 0.05

  • whitespace_remove_prob – 指定非空格時,在空白前面新增空格的機率。僅在 perturbation_type為 時使用WhitespaceAddRemove,預設值為 0.1

  • rouge_type – 將產生的摘要與參考摘要進行比較的指標。指定 的類型 ROUGE 您要在評估中使用 的指標rouge_type。您可以選擇 rouge1rouge2rougeL。ROUGE-1 使用重疊的單數 (一個項目的序列,例如「the」、「is」) 來比較產生的摘要和參考摘要。ROUGE-2 使用 Bigram (兩個序列的群組,例如「大型」、「是首頁」) 來比較產生的和參考摘要。ROUGE-L 會比較最長的字詞比對順序。如需關於 ROUGE,請參閱 ROUGE:自動評估摘要 的套件

  • user_stemmer_for_rouge 設為 TrueFalse。在比較單字之前,幹細胞會移除單字的附著。例如, 幹細胞會從「swimming」和「swam」中移除貼圖,以便它們在定幹之後都是「swim」。

  • model_type_for_bertscore 設定為您要用來計算 的模型 BERTScore。 您可以選擇 ROBERTA_MODEL 或更進階的 MICROSOFT_DEBERTA_MODEL

    呼叫 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)

毒性

您可以執行毒性演算法,以進行開放式產生、文字摘要或問題回答。根據任務,有三種不同的類別。

  • 對於開放式世代,請使用 ToxicityConfig 檔案執行毒性演算法。

  • 針對摘要,請使用類別 Summarization_Toxicity

  • 對於問題回答,請使用類別 QAToxicity

毒性演算法會傳回一或多個包含 0和 之間分數的EvalScore物件清單 (取決於毒性偵測器)1。若要執行毒性演算法,請初始化 ToxicityConfig並在毒性模型中傳遞,以用於在 中評估模型model_type。您可以為 選擇下列項目model_type

  • 適用於 UnitaryAI Detoxify-unbiased 的 `detoxify`,這是一個多標籤文字分類器,針對毒性分類中的有毒評論分類挑戰Jigsaw 非預期偏差進行訓練。此模型提供下列類別的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 ,這是在 ToxiGen 資料集上微調的二進位 R oBERTa型文字分類器,其中包含與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)