使用 Python 設定 AutoML 以對自然語言處理模型進行定型 (預覽版)

適用於:Python SDK azureml v1

重要

此功能目前處於公開預覽。 此預覽版本沒有服務等級協定,不建議用於處理生產工作負載。 可能不支援特定功能,或可能已經限制功能。

如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

在本文中,您將了解如何在 Azure Machine Learning Python SDK 中使用自動化 ML 對自然語言處理 (NLP) 模型進行定型。

自動化 ML 支援 NLP,可讓 ML 專業人員和資料科學家攜帶自己的文字資料,並針對如多重類別文字分類、多標籤文字分類和具名實體辨識 (NER) 等工作建置自訂模型。

您可以與 Azure Machine Learning 資料標記功能緊密整合,以將文字資料標籤或攜帶現有的標籤資料。 自動化 ML 可供您選擇在多 GPU 計算叢集上使用分散式定型,以加速模型定型。 利用 Azure Machine Learning 的 MLOps 功能,您可以對產生的模型進行大規模運作。

必要條件

選取 NLP 工作

判斷您想要完成的 NLP 工作。 目前,自動化 ML 支援下列深度神經網路 NLP 工作。

Task AutoMLConfig 語法 描述
多類別文字分類 task = 'text-classification' 有多個可能的類別,而且每個範例都可以分類為完全相同的一個類別。 工作是預測每個樣本的正確類別。

例如,將電影腳本分類為「喜劇」或「浪漫」。
多標籤文字分類 task = 'text-classification-multilabel' 有多個可能的類別,而且每個範例都可以指派任何數目的類別。 工作是預測每個範例的所有類別

例如,將電影腳本分類為「喜劇」或「浪漫」,或是「喜劇」和「浪漫」。
具名實體辨識 (NER) task = 'text-ner' 循序權杖有多個可能的標記。 工作是預測每個序列所有權杖的標記。

例如,從非結構化文字 (例如合約或財務文件) 擷取網域特定實體

準備資料

針對自動化 ML 中的 NLP 實驗,您可以針對多類別和多標籤分類工作,以 .csv 格式帶入 Azure Machine Learning 資料集。 對於 NER 工作,支援兩個資料行的 .txt 檔案,其中使用空格做為分隔符號且遵守 CoNLL 格式。 下列各節提供每個工作所接受資料格式的其他詳細資料。

多類別

針對多類別分類,資料集可以包含數個文字資料行,而只包含一個標籤資料行。 下列範例只有一個文字資料行。


text,labels
"I love watching Chicago Bulls games.","NBA"
"Tom Brady is a great player.","NFL"
"There is a game between Yankees and Orioles tonight","MLB"
"Stephen Curry made the most number of 3-Pointers","NBA"

多標籤

針對多重標籤分類,資料集資料行會與多類別相同,不過,標籤資料行中的資料有特殊格式需求。 下表提供兩個接受的格式和範例。

標籤資料行格式選項 多標籤 一個標籤 沒有任何標籤
純文字 "label1, label2, label3" "label1" ""
使用引號的 Python 清單 "['label1','label2','label3']" "['label1']" "[]"

重要

會使用不同的剖析器來讀取這些格式的標籤。 如果您使用純文字格式,請僅在標籤中使用字母、數字和 '_'。 所有其他字元都會辨識為標籤的分隔符號。

例如,如果您的標籤是 "cs.AI",則會顯示為 "cs""AI"。 而使用 Python 清單格式時,標籤會是 "['cs.AI']",其會顯示為 "cs.AI"

純文字格式的多標籤範例資料。

text,labels
"I love watching Chicago Bulls games.","basketball"
"The four most popular leagues are NFL, MLB, NBA and NHL","football,baseball,basketball,hockey"
"I like drinking beer.",""

使用引號格式 Python 清單中的多標籤資料範例。

text,labels
"I love watching Chicago Bulls games.","['basketball']"
"The four most popular leagues are NFL, MLB, NBA and NHL","['football','baseball','basketball','hockey']"
"I like drinking beer.","[]"

具名實體辨識 (NER)

不同於多類別或多標籤是採用 .csv 格式資料集,具名實體辨識需要使用 CoNLL 格式。 檔案必須只包含兩個資料行,且在每個資料列中,都會以單一空格來分隔標記和標籤。

例如,

Hudson B-loc
Square I-loc
is O
a O
famous O
place O
in O
New B-loc
York I-loc
City I-loc

Stephen B-per
Curry I-per
got O
three O
championship O
rings O

資料驗證

在定型之前,自動化 ML 會對輸入資料套用資料驗證檢查,以確保可以正確處理資料。 如果上述任何檢查失敗,執行就會失敗,並顯示相關的錯誤訊息。 以下是針對每個工作傳遞資料驗證檢查的需求。

注意

某些資料驗證檢查適用於定型和驗證集,而其他資料驗證則僅適用於定型集。 如果測試資料集無法通過資料驗證,即表示自動化 ML 無法加以擷取,而且可能會發生模型推斷失敗或模型效能下降。

Task 資料驗證檢查
所有工作 - 必須同時提供定型和驗證資料集
- 至少需要 50 個定型範例
多類別和多標籤 定型資料和驗證資料必須具有
- 一組相同的資料行
- 資料行順序從左至右相同
- 相同名稱資料行的資料類型相同
- 至少兩個唯一標籤
- 每個資料集內的唯一資料行名稱 (例如,定型集不能有多個名為 Age 的資料行)
僅限多類別
僅限多標籤 - 標籤資料行格式必須採用接受的格式
- 至少一個範例應有 0 或 2 個以上的標籤,否則應該是 multiclass 工作
- 所有標籤都應該採用 strint 格式,且不重疊。 您不應該同時擁有 1 標籤和 '1' 標籤
僅限 NER - 檔案開頭不應該為空行
- 每一行都必須是空行或遵循 {token} {label} 格式,其中權杖與標籤之間只有一個空格,且標籤之後沒有空白字元
- 所有標籤的開頭都必須為 I-B- 或僅為 O。 區分大小寫
- 兩個樣本之間僅一個空行
- 檔案結尾僅一個空行

設定實驗

自動化 ML 的 NLP 功能會透過 AutoMLConfig 來觸發,這是提交自動化 ML 實驗以進行分類、迴歸和預測工作的相同工作流程。 您可以如同在這些實驗中的方式來設定大多數參數,例如 taskcompute_target 資料輸入。

但是,仍有一些主要差異:

  • 您可以忽略 primary_metric,因為其僅供報告用途。 目前,自動化 ML 針對 NLP 每個執行僅定型一個模型,而且沒有任何模式選擇。
  • 只有多類別和多標籤文字分類工作才需要 label_column_name 參數。
  • 如果您資料集中大部分的範例包含超過 128 個字,則會視為長範圍。 在此案例中,您可以使用 AutoMLConfig 中的 enable_long_range_text=True 參數來啟用長範圍文字選項。 這麼做有助於改善模型效能,但需要較長時間進行定型。
    • 如果您啟用長範圍文字,則需要使用較高記憶體的 GPU,例如 NCv3 系列或 ND 系列。
    • enable_long_range_text 參數僅適用於多類別分類工作。
automl_settings = {
    "verbosity": logging.INFO,
    "enable_long_range_text": True, # # You only need to set this parameter if you want to enable the long-range text setting
}

automl_config = AutoMLConfig(
    task="text-classification",
    debug_log="automl_errors.log",
    compute_target=compute_target,
    training_data=train_dataset,
    validation_data=val_dataset,
    label_column_name=target_column_name,
    **automl_settings
)

語言設定

在 NLP 功能中,自動化 ML 支援 104 種語言,並利用語言特定和多語系預先定型的文字 DNN 模型,例如 BERT 系列模型。 目前,語言選擇預設為英文。

下表摘要說明根據工作類型和語言套用的模型。 請參閱支援的語言及其程式碼的完整清單。

工作類型 dataset_language 的語法 文字模式演算法
多標籤文字分類 'eng'
'deu'
'mul'
英文 BERT 不區分大小寫
德文 BERT
多語系 BERT

針對所有其他語言,自動化 ML 會套用多語系 BERT
多類別文字分類 'eng'
'deu'
'mul'
英文 BERT 區分大小寫
多語系 BERT

針對所有其他語言,自動化 ML 會套用多語系 BERT
具名實體辨識 (NER) 'eng'
'deu'
'mul'
英文 BERT 區分大小寫
德文 BERT
多語系 BERT

針對所有其他語言,自動化 ML 會套用多語系 BERT

您可以在 FeaturizationConfig 中指定資料集語言。 自動化 ML 實驗定型的特徵化程序中也會使用 BERT,深入了解自動化 ML 中的 BERT 整合和特徵化

from azureml.automl.core.featurization import FeaturizationConfig

featurization_config = FeaturizationConfig(dataset_language='{your language code}')
automl_config = AutomlConfig("featurization": featurization_config)

分散式訓練

您也可以在 Azure Machine Learning 計算叢集上使用分散式定型來執行 NLP 實驗。 在設定實驗期間,當您在 AutoMLConfig 中提供 max_concurrent_iterations = number_of_vmsenable_distributed_dnn_training = True 參數時,自動化 ML 會自動處理此作業。

max_concurrent_iterations = number_of_vms
enable_distributed_dnn_training = True

這麼做會排程 NLP 模型的分散式定型,並自動調整至虛擬機器或虛擬機器叢集上的每個 GPU。 所允許的虛擬機器數目上限為 32。 會使用虛擬機器數目 (二的次方) 來排程定型。

Notebook 範例

如需每個 NLP 工作的詳細程式碼範例,請參閱範例筆記本。

下一步