使用 YAML 和 Python 產生負責任 AI 深入解析

適用於:Azure CLI ml 延伸模組 v2 (現行)Python SDK azure-ai-ml v2 (現行)

您可以使用負責任 AI 元件,透過管線作業產生負責任 AI 儀表板和計分卡。 有六個核心元件可用來建立負責任 AI 儀表板,此外還有一些協助程式元件。 以下是範例實驗圖表:

範例實驗圖表的螢幕快照。

負責任 AI 元件

在 Azure Machine Learning 中建構負責任 AI 儀表板的核心元件如下:

  • RAI Insights dashboard constructor
  • 工具元件:
    • Add Explanation to RAI Insights dashboard
    • Add Causal to RAI Insights dashboard
    • Add Counterfactuals to RAI Insights dashboard
    • Add Error Analysis to RAI Insights dashboard
    • Gather RAI Insights dashboard
    • Gather RAI Insights score card

RAI Insights dashboard constructorGather RAI Insights dashboard 元件一律是必要項目,此外至少需要一個工具元件。 但是,不需要在每個負責任 AI 儀表板中使用所有工具。

以下幾節將提供負責任 AI 元件的規格,以及 YAML 與 Python 中的程式碼片段範例。

重要

本文中標示為 (預覽) 的項目目前處於公開預覽狀態。 此預覽版本會在沒有服務等級協定的情況下提供,不建議用於實際執行工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

限制

目前的元件集有許多使用限制:

  • 所有模型都必須以 MLflow 格式註冊於 Azure Machine Learning 中,且具有 sklearn (scikit-learn) 類別。
  • 模型必須在元件環境中載入。
  • 模型必須可供挑選。
  • 模型必須使用我們提供的 Fetch Registered Model 元件提供給負責任 AI 元件。
  • 資料集輸入必須使用 mltable 格式。
  • 即使只是執行資料的原因分析,仍必須提供模型。 您可以使用來自 scikit-learn 的 DummyClassifierDummyRegressor 估算器來達到此目的。

RAI 深入解析儀表板建構函式

此元件有三個輸入連接埠:

  • 機器學習模型
  • 訓練資料集
  • 測試資料集

若要透過錯誤分析和模型說明等元件來產生模型偵錯深入解析,請使用您在定型模型時所使用的定型和測試資料集。 對於不需要模型的原因分析等元件,定型資料集將用來定型原因模型,以產生原因深入解析。 您可以使用測試資料集來填入負責任 AI 儀表板視覺效果。

提供模型最簡單的方式是註冊輸入模型,並在 RAI Insight Constructor 元件的模型輸入連接埠中參考相同的模型,本文稍後會討論。

注意

目前僅支援採用 MLflow 格式且具有 sklearn 類別的模型。

使用者名稱應使用 mltable 格式。 提供的定型和測試資料集不必是用於模型定型的相同資料集,但可以是相同的資料集。 根據預設,基於效能考量,視覺效果 UI 的測試資料集會限制為 5,000 個資料列。

建構函式元件也可接受下列參數:

參數名稱 名描述 類型
title 儀表板的簡短描述。 String
task_type 指定模型是用於分類、回歸或預測。 字串、、、classificationregressionforecasting
target_column_name 模型嘗試預測之輸入資料集中的資料行名稱。 String
maximum_rows_for_test_dataset 測試資料集中允許的資料列數目上限 (基於效能考量)。 整數,預設值為 5,000
categorical_column_names 資料集中的資料行,代表類別資料。 選擇性字串清單 1
classes 定型資料集中類別標籤的完整清單。 選擇性字串清單 1
feature_metadata 指定儀錶板可能需要的其他信息,視工作類型而定。 針對預測,這包括指定哪一個數據行是 datetime 數據行,以及哪一個數據行是數據 time_series_id 行。 針對視覺,這可能包括影像的平均圖元值或位置數據。 選擇性字串清單 1
use_model_dependency 指定模型是否需要在 中提供個別的 Docker 容器,因為與 RAI 儀錶板相依性發生衝突。 若要進行預測,必須啟用此功能。 通常針對其他案例,這不會啟用。 布林值

1 清單應以單一 JSON 編碼字串 categorical_column_names的形式提供 、 classesfeature_metadata 輸入。

建構函式元件具有名為 rai_insights_dashboard 的單一輸出。 這是空的儀表板,可讓個別工具元件運作於其上。 所有結果最終都會由 Gather RAI Insights dashboard 元件整合。

 create_rai_job: 

    type: command 
    component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_insight_constructor/versions/<get current version>
    inputs: 
      title: From YAML snippet 
      task_type: regression
      type: mlflow_model
      path: azureml:<registered_model_name>:<registered model version> 
      train_dataset: ${{parent.inputs.my_training_data}} 
      test_dataset: ${{parent.inputs.my_test_data}} 
      target_column_name: ${{parent.inputs.target_column_name}} 
      categorical_column_names: '["location", "style", "job title", "OS", "Employer", "IDE", "Programming language"]' 

將原因新增至 RAI 深入解析儀表板

此元件會在提供的資料集上執行原因分析。 其有單一輸入連接埠,可接受 RAI Insights dashboard constructor 的輸出。 其可接受下列參數:

參數名稱 描述 輸入
treatment_features 資料集中的特徵名稱清單,這些名稱可能「可處理」以取得不同的結果。 字串清單 2
heterogeneity_features 資料集中的特徵名稱清單,這些名稱可能會影響「可處理」特徵的行為。 依預設會將所有特徵納入考量。 選擇性字串清單 2
nuisance_model 用來預估變更處理特徵結果的模型。 選擇性字串。 必須是 linearAutoML,預設值為 linear
heterogeneity_model 用來預估異質性特徵對結果有何影響的模型。 選擇性字串。 必須是 linearforest,預設值為 linear
alpha 信賴區間的信賴等級。 選擇性浮點數數字,預設值為 0.05。
upper_bound_on_cat_expansion 類別特徵的擴充上限。 選擇性整數,預設值為 50。
treatment_cost 處理的成本。 如果為 0,則所有處理都是零成本。 如果傳遞清單,則每個元素都會套用至其中一個 treatment_features

每個元素可以是純量值,以指出套用該處理的常數成本,或是指出每個樣本成本的陣列。 如果處理是離散處理,則該特徵的陣列應該是二維陣列,第一個維度代表樣本,第二個維度代表非預設值與預設值之間的成本差異。
選擇性整數或清單 2
min_tree_leaf_samples 原則樹狀結構中每個分葉的樣本數目下限。 選擇性整數,預設值為 2。
max_tree_depth 原則樹狀結構的最大深度。 選擇性整數,預設值為 2。
skip_cat_limit_checks 根據預設,類別特徵的每個類別都必須有數個實例,模型才能穩固地與之相符。 將此設定為 True 將會略過這些檢查。 選擇性布林值,預設值為 False
categories 要用於類別資料行的類別。 如果是 auto,則會推斷所有類別資料行的類別。 否則,此引數具有的項目應與類別資料行的數目相同。

每個項目都應該是為該資料行推斷值的 auto,或資料行的值清單。 如果提供明確值,則會將第一個值視為該資料行的「控制」值,讓其他值可與之進行比較。
選擇性 auto 或清單 2
n_jobs 要使用的平行處理原則程度。 選擇性整數,預設值為 1。
verbose 表示是否要在計算期間提供詳細的輸出。 選擇性整數,預設值為 1。
random_state 虛擬亂數產生器 (PRNG) 的種子。 選擇性整數。

2 針對 list 參數:許多參數都可接受其他類型的清單 (字串、數字,甚至是其他清單)。 若要將這些參數傳遞至元件,必須先以 JSON 編碼成單一字串。

此元件具有單一輸出連接埠,可連線至 Gather RAI Insights Dashboard 元件的其中一個 insight_[n] 輸入連接埠。

  causal_01: 
    type: command 
    component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_causal/versions/<version>
    inputs: 
      rai_insights_dashboard: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}} 
      treatment_features: `["Number of GitHub repos contributed to", "YOE"]' 

將反事實新增至 RAI 深入解析儀表板

此元件會為提供的測試資料集產生反事實點。 其具有單一輸入連接埠,可接受 RAI 深入解析儀表板建構函式的輸出。 其可接受下列參數:

參數名稱 名描述 類型
total_CFs 要針對測試資料集中的每個資料列產生的反事實點數目。 選擇性整數,預設值為 10。
method 要使用的 dice-ml 說明程式。 選擇性字串。 randomgenetickdtree。 預設為 random
desired_class 識別所需反事實類別的索引。 針對二進位分類,這應該設定為 opposite 選擇性字串或整數。 預設為 0。
desired_range 針對迴歸問題,找出所需的結果範圍。 兩個數字的選擇性清單 3
permitted_range 以特徵作為索引鍵並以清單中允許範圍作為值的字典。 預設值為從訓練資料中推斷的範圍。 選擇性字串或清單 3
features_to_vary 字串 all 或要有所不同的特徵名稱清單。 選擇性字串或清單 3
feature_importance 旗標,用來使用 dice-ml 啟用特徵重要度的計算。 選擇性布林值。 預設為 True

3 針對非純量參數:清單或字典的參數應該傳遞為單一 JSON 編碼字串。

此元件具有單一輸出連接埠,可連線至 Gather RAI Insights dashboard 元件的其中一個 insight_[n] 輸入連接埠。

 counterfactual_01: 
    type: command 
    component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_counterfactual/versions/<version>
    inputs: 
      rai_insights_dashboard: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}} 
      total_CFs: 10 
      desired_range: "[5, 10]" 

將錯誤分析新增至 RAI 深入解析儀表板

此元件會產生模型的誤差分析。 其有單一輸入連接埠,可接受 RAI Insights Dashboard Constructor 的輸出。 其可接受下列參數:

參數名稱 名描述 類型
max_depth 錯誤分析樹狀結構的最大深度。 選擇性整數。 預設值為 3。
num_leaves 誤差樹狀結構中的分葉數目上限。 選擇性整數。 預設值為 31。
min_child_samples 產生分葉所需的最少資料點。 選擇性整數。 預設為 20。
filter_features 用於矩陣篩選的一或兩個特徵清單。 選擇性清單,要傳入作為單一 JSON 編碼字串。

此元件具有單一輸出連接埠,可連線至 Gather RAI Insights Dashboard 元件的其中一個 insight_[n] 輸入連接埠。

  error_analysis_01: 
    type: command 
    component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_erroranalysis/versions/<version>
    inputs: 
      rai_insights_dashboard: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}} 
      filter_features: `["style", "Employer"]' 

將說明新增至 RAI 深入解析儀表板

此元件會產生模型的說明。 其有單一輸入連接埠,可接受 RAI Insights Dashboard Constructor 的輸出。 其可接受單一選擇性註解字串作為參數。

此元件具有單一輸出連接埠,可連線至收集 RAI 深入解析儀表板元件的其中一個 insight_[n] 輸入連接埠。

  explain_01: 
    type: command 
    component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_explanation/versions/<version>
    inputs: 
      comment: My comment 
      rai_insights_dashboard: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}} 

收集 RAI 深入解析儀表板

此元件會將產生的深入解析組合成單一負責任 AI 儀表板。 其有五個輸入連接埠:

  • constructor 連接埠必須連線至 RAI 深入解析儀表板建構函式元件。
  • 四個 insight_[n] 連接埠可連線到工具元件的輸出。 至少必須連結其中一個連接埠。

輸出連接埠有兩個:

  • 連接埠 dashboard 包含已完成的 RAIInsights 物件。
  • ux_json 連接埠包含顯示最小儀表板所需的資料。
  gather_01: 
    type: command 
    component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_insight_gather/versions/<version>
    inputs: 
      constructor: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}} 
      insight_1: ${{parent.jobs.causal_01.outputs.causal}} 
      insight_2: ${{parent.jobs.counterfactual_01.outputs.counterfactual}} 
      insight_3: ${{parent.jobs.error_analysis_01.outputs.error_analysis}} 
      insight_4: ${{parent.jobs.explain_01.outputs.explanation}} 

如何產生負責任 AI 計分卡 (預覽)

在設定階段,您必須使用問題所屬領域的專業知識,來為模型效能和公平性計量設下所需的目標值。

和 YAML 管線中所設定的其他負責任 AI 儀表板元件一樣,您也可以新增元件以在 YAML 管線中產生計分卡:

scorecard_01: 

   type: command 
   component: azureml:rai_score_card@latest 
   inputs: 
     dashboard: ${{parent.jobs.gather_01.outputs.dashboard}} 
     pdf_generation_config: 
       type: uri_file 
       path: ./pdf_gen.json 
       mode: download 

     predefined_cohorts_json: 
       type: uri_file 
       path: ./cohorts.json 
       mode: download 

其中,pdf_gen.json 是計分卡產生設定 json 檔案, predifined_cohorts_json 則是預建的世代定義 json 檔案。

以下是世代定義和計分卡產生設定的範例 JSON 檔案:

世代定義:

[ 
  { 
    "name": "High Yoe", 
    "cohort_filter_list": [ 
      { 
        "method": "greater", 
        "arg": [ 
          5 
        ], 
        "column": "YOE" 
      } 
    ] 
  }, 
  { 
    "name": "Low Yoe", 
    "cohort_filter_list": [ 
      { 
        "method": "less", 
        "arg": [ 
          6.5 
        ], 
        "column": "YOE" 
      } 
    ] 
  } 
] 

以下是計分卡產生組態檔做為迴歸範例:

{ 
  "Model": { 
    "ModelName": "GPT-2 Access", 
    "ModelType": "Regression", 
    "ModelSummary": "This is a regression model to analyze how likely a programmer is given access to GPT-2" 
  }, 
  "Metrics": { 
    "mean_absolute_error": { 
      "threshold": "<=20" 
    }, 
    "mean_squared_error": {} 
  }, 
  "FeatureImportance": { 
    "top_n": 6 
  }, 
  "DataExplorer": { 
    "features": [ 
      "YOE", 
      "age" 
    ] 
  }, 
  "Fairness": {
    "metric": ["mean_squared_error"],
    "sensitive_features": ["YOUR SENSITIVE ATTRIBUTE"],
    "fairness_evaluation_kind": "difference OR ratio"
  },
  "Cohorts": [ 
    "High Yoe", 
    "Low Yoe" 
  ]  
} 

以下是計分卡產生組態檔做為分類範例:

{
  "Model": {
    "ModelName": "Housing Price Range Prediction",
    "ModelType": "Classification",
    "ModelSummary": "This model is a classifier that predicts whether the house will sell for more than the median price."
  },
  "Metrics" :{
    "accuracy_score": {
        "threshold": ">=0.85"
    },
  }
  "FeatureImportance": { 
    "top_n": 6 
  }, 
  "DataExplorer": { 
    "features": [ 
      "YearBuilt", 
      "OverallQual", 
      "GarageCars"
    ] 
  },
  "Fairness": {
    "metric": ["accuracy_score", "selection_rate"],
    "sensitive_features": ["YOUR SENSITIVE ATTRIBUTE"],
    "fairness_evaluation_kind": "difference OR ratio"
  }
}

負責任 AI 計分卡元件的輸入定義

本節會列出及定義要設定負責任 AI 計分卡元件所需的參數。

模型

ModelName 模型的名稱
ModelType ['classification', 'regression'] 中的值。
ModelSummary 輸入摘要說明模型用途的文字。

注意

若是多類別分類,您應該先使用 One-vs-Rest 策略來選擇您的參考類別,然後將多類別分類模型分割成所選參考類別及其餘類別的二元分類問題。

計量

效能標準 定義 模型類型
accuracy_score 正確分類的資料點分數。 分類
precision_score 在分類為 1 的資料點當中,正確分類的資料點分數。 分類
recall_score true 標籤為 1 的資料點當中,正確分類的資料點分數。 替代名稱:確判為真率、敏感度。 分類
f1_score F1 分數是精確度和重新叫用率的調和平均數。 分類
error_rate 整組執行個體中分類錯誤的執行個體比例。 分類
mean_absolute_error 絕對誤差值的平均。 比 mean_squared_error 更能避免極端值。 迴歸
mean_squared_error 平方誤差的平均。 迴歸
median_absolute_error 平方誤差的中位數。 迴歸
r2_score 模型所解釋的標籤變異數。 迴歸

臨界值:所選計量所需的臨界值。 允許的數學標記為後接實數的 >、<、>= 和 <=m。 例如,>= 0.75 表示所選計量的目標大於或等於 0.75。

功能重要性

top_n:要顯示的特徵數目,上限為 10 個。 允許使用正整數 (最大為 10)。

公平性

計量 定義
metric 評估公平性的主要計量。
sensitive_features 要指定為公平性報告敏感性特徵的輸入資料集特徵名稱清單。
fairness_evaluation_kind ['difference', 'ratio'] 中的值。
threshold 公平性評估所需的目標值。 允許的數學標記為後接實數的 >、<、>= 和 <=。
例如,metric="accuracy",fairness_evaluation_kind="difference"。
<= 0.05 表示差異的精確度目標為小於或等於 0.05。

注意

您選擇的 fairness_evaluation_kind (選取「差異」與「比率」) 會影響目標值的尺度。 在您的選取項目中,請務必選擇有意義的目標值。

您可以從下列計量中選取,並與 fairness_evaluation_kind 配對使用以設定計分卡的公平性評估元件:

計量 fairness_evaluation_kind 定義 模型類型
accuracy_score 差異 任意兩個群組之間,正確性分數的最大差異。 分類
accuracy_score ratio 任意兩個群組之間,正確性分數的最小比率。 分類
precision_score 差異 任意兩個群組之間,精確度分數的最大差異。 分類
precision_score ratio 任意兩個群組之間,精確度分數的最大比率。 分類
recall_score 差異 任意兩個群組之間,重新叫用分數的最大差異。 分類
recall_score ratio 任意兩個群組之間,重新叫用分數的最大比率。 分類
f1_score 差異 任意兩個群組之間,f1 分數的最大差異。 分類
f1_score ratio 任意兩個群組之間,f1 分數的最大比率。 分類
error_rate 差異 任意兩個群組之間,錯誤率的最大差異。 分類
error_rate ratio 任意兩個群組之間,錯誤率的最大比率。 分類
Selection_rate 差異 任意兩個群組之間,選取率的最大差異。 分類
Selection_rate ratio 任意兩個群組之間,選取率的最大比率。 分類
mean_absolute_error 差異 任意兩個群組之間,平均絕對誤差的最大差異。 迴歸
mean_absolute_error ratio 任意兩個群組之間,平均絕對誤差的最大比率。 迴歸
mean_squared_error 差異 任意兩個群組之間,平均平方誤差的最大差異。 迴歸
mean_squared_error ratio 任意兩個群組之間,平均平方誤差的最大比率。 迴歸
median_absolute_error 差異 任意兩個群組之間,絕對誤差中位數的最大差異。 迴歸
median_absolute_error ratio 任意兩個群組之間,絕對誤差中位數的最大比率。 迴歸
r2_score 差異 任意兩個群組之間,R2 分數的最大差異。 迴歸
r2_Score ratio 任意兩個群組之間,R2 分數的最大比率。 迴歸

輸入限制

支援哪些模型格式和類別 (flavor)?

模型必須位於 MLflow 目錄中,並且有可用的 sklearn 類別。 此外,模型必須在負責任 AI 元件所使用的環境中載入。

支援的資料格式為何?

提供的資料集應該是具有表格式資料的 mltable

下一步