使用 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 constructor
和 Gather RAI Insights dashboard
元件一律是必要項目,此外至少需要一個工具元件。 但是,不需要在每個負責任 AI 儀表板中使用所有工具。
以下幾節將提供負責任 AI 元件的規格,以及 YAML 與 Python 中的程式碼片段範例。
重要
本文中標示為 (預覽) 的項目目前處於公開預覽狀態。 此預覽版本會在沒有服務等級協定的情況下提供,不建議用於實際執行工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款。
限制
目前的元件集有許多使用限制:
- 所有模型都必須以 MLflow 格式註冊於 Azure Machine Learning 中,且具有 sklearn (scikit-learn) 類別。
- 模型必須在元件環境中載入。
- 模型必須可供挑選。
- 模型必須使用我們提供的
Fetch Registered Model
元件提供給負責任 AI 元件。 - 資料集輸入必須使用
mltable
格式。 - 即使只是執行資料的原因分析,仍必須提供模型。 您可以使用來自 scikit-learn 的
DummyClassifier
和DummyRegressor
估算器來達到此目的。
RAI 深入解析儀表板建構函式
此元件有三個輸入連接埠:
- 機器學習模型
- 訓練資料集
- 測試資料集
若要透過錯誤分析和模型說明等元件來產生模型偵錯深入解析,請使用您在定型模型時所使用的定型和測試資料集。 對於不需要模型的原因分析等元件,定型資料集將用來定型原因模型,以產生原因深入解析。 您可以使用測試資料集來填入負責任 AI 儀表板視覺效果。
提供模型最簡單的方式是註冊輸入模型,並在 RAI Insight Constructor
元件的模型輸入連接埠中參考相同的模型,本文稍後會討論。
注意
目前僅支援採用 MLflow 格式且具有 sklearn
類別的模型。
使用者名稱應使用 mltable
格式。 提供的定型和測試資料集不必是用於模型定型的相同資料集,但可以是相同的資料集。 根據預設,基於效能考量,視覺效果 UI 的測試資料集會限制為 5,000 個資料列。
建構函式元件也可接受下列參數:
參數名稱 | 名描述 | 類型 |
---|---|---|
title |
儀表板的簡短描述。 | String |
task_type |
指定模型用於分類;迴歸或預測。 | 字串,classification 、regression 或 forecasting |
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 |
指定由於與 RAI 儀表板的相依性發生衝突,模型是否需要提供單獨的 Docker 容器。 若要進行預測,必須啟用此功能。 通常針對其他案例,這不會啟用。 | 布林值 |
1 清單應以單一 JSON 編碼字串提供,以用於 categorical_column_names
、classes
、feature_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 |
用來預估變更處理特徵結果的模型。 | 選擇性字串。 必須是 linear 或 AutoML ,預設值為 linear 。 |
heterogeneity_model |
用來預估異質性特徵對結果有何影響的模型。 | 選擇性字串。 必須是 linear 或 forest ,預設值為 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 說明程式。 |
選擇性字串。 random 、genetic 或 kdtree 。 預設為 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
。
下一步
- 產生負責任 AI 儀表板之後,請檢視在 Azure Machine Learning 工作室存取和使用儀表板的方式。
- 利用以 PDF 匯出負責任 AI 計分卡,摘要說明並分享您的負責任 AI 見解。
- 深入瞭解負責任 AI 儀表板背後的概念和技術。
- 深入了解如何負責任地收集資料。
- 檢視 YAML 和 Python 筆記本範例,以使用 YAML 或 Python 產生負責任 AI 儀表板。
- 請參閱此技術社群部落格文章,深入了解如何使用負責任 AI 儀表板與計分卡偵錯資料和模型,並為制定更佳決策而提供資訊。
- 了解英國國民健康服務 (NHS) 如何在真實生活客戶案例中使用負責任 AI 儀表板與計分卡。
- 透過此互動式 AI 實驗室網路示範,探索負責任 AI 儀表板的功能。