AutoML を設定して自然言語処理モデルをトレーニングする

適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)

この記事では、Azure Machine Learning の自動 ML を使用して自然言語処理 (NLP) モデルをトレーニングする方法について学びます。 Azure Machine Learning Python SDK v2 または Azure Machine Learning CLI v2 を使用して、自動 ML で NLP モデルを作成できます。

自動 ML は NLP をサポートし、ML プロフェッショナルやデータ サイエンティストが NLP タスクのために独自のテキスト データを持ち込んでカスタム モデルを構築することを可能にします。 NLP タスクには、複数クラスのテキスト分類、複数ラベルのテキスト分類、および名前付きエンティティ認識 (NER) が含まれます。

Azure Machine Learning データラベリング機能とシームレスに統合し、テキストデータにラベルを付けたり、既存のラベル付きデータを持ち込んだりすることが可能です。 自動 ML では、モデルトレーニングの高速化のために、マルチ GPU コンピューティング クラスター上で分散トレーニングを使用するオプションが用意されています。 結果として得られるモデルは、Azure Machine Learning の MLOps 機能を使用することで、大規模に運用することができます。

前提条件

適用対象: Azure CLI ML 拡張機能 v2 (現行)

  • Azure のサブスクリプション。 Azure のサブスクリプションをお持ちでない方は、今すぐ Azure Machine Learningの無料版または有料版にサインアップしてお試しください。

  • GPU トレーニング コンピューティング搭載の Azure Machine Learning ワークスペース。 ワークスペースを作成するには、「ワークスペース リソースの作成」を参照してください。 詳細については、Azure が提供する GPU インスタンスの詳細に関する「GPU最適化仮想マシンサイズ」を参照してください。

    警告

    多言語モデルのサポートや、より長い最大シーケンスを持つモデルの使用は、英語以外のデータセットや長範囲のドキュメントなど、いくつかの自然言語処理のユースケースで必要とされています。 その結果、NC_v3 シリーズや ND シリーズのような,モデルトレーニングを成功させるために GPU メモリをより多く必要とするシナリオが考えられます。

  • Azure Machine Learning CLI v2 がインストールされていること。 最新バージョンの更新およびインストール方法については、「CLI (v2) のインストールと設定」を参照してください。

  • この記事では、自動化された機械学習実験の設定にある程度精通していることを前提としています。 方法に従って、自動化された機械学習実験の主要な設計パターンについて確認してください。

NLP タスクを選択します

達成したい NLP のタスクを決定します。 現在、自動 ML では、以下のようなディープニューラルネットワークを用いた NLP タスクがサポートされています。

タスク AutoML ジョブの構文 説明
複数ステキスト分類 CLI v2: text_classification
SDK v2: text_classification()
複数のクラスが存在し、各サンプルは正確に1つのクラスに分類される可能性があります。 タスクは、各サンプルの正しいクラスを予測します。

たとえば、映画のスクリプトを "コメディ" または "ロマンチック" として分類します。
複数ラベルテキスト分類 CLI v2: text_classification_multilabel
SDK v2: text_classification_multilabel()
クラスは複数存在し、各サンプルは任意の数のクラスを割り当てることができます。 タスクは、各サンプルのすべてのクラスを予測します

たとえば、映画のスクリプトを "コメディ"、"ロマンチック" または "コメディとロマンチック" として分類します。
名前付きエンティティの認識 (NER) CLI v2:text_ner
SDK v2: text_ner()
シーケンス内のトークンには、複数のタグが考えられます。 タスクは、各シーケンスのすべてのトークンについてタグを予測します。

たとえば、コントラクトや財務ドキュメントなどの非構造化テキストからドメイン固有のエンティティを抽出します。

しきい値

しきい値設定は、予測された確率から正のラベルと見なされるためのしきい値をユーザーが選択できるようにする複数ラベルの機能です。 値を小さくするとラベルが増えます。これはユーザーがリコールを重視する場合に適していますが、このオプションを使用すると誤検知が増える可能性があります。 値を大きくするとラベルが減ります。これは精度を重視するユーザーに適していますが、このオプションを選択すると、偽陰性が増える可能性があります。

データの準備

自動 ML における NLP の実験では、マルチクラスおよびマルチラベルの分類タスクのために、.csv 形式のデータを用意できます。 NER タスクでは、区切りにスペースを使用し、CoNLL フォーマットに準拠した2列の.txtファイルがサポートされています。 次のセクションでは、各タスクで受け入れられるデータ形式の詳細について説明します。

複数クラス

多クラス分類の場合、データセットには複数のテキスト列と 正確に1 つのラベル列を含むことができます。 次の例では、テキスト列が 1 つのみです。

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"

複数ラベル

マルチラベル分類の場合、データセット列はマルチクラスと同じですが、ラベル列のデータには特別なフォーマット要件があります。 2つの受け入れ可能なフォーマットとその例は、以下の表のとおりです。

ラベル列のフォーマットオプション 複数ラベル 1 つのラベル ラベルなし
プレーンテキスト "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フォーマットが必要です。 ファイルは正確に2列でなければならず、各行において、トークンとラベルは空白1つで区切られます。

たとえば、次のように入力します。

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 は入力データに対してデータの入力規則チェックを適用して、データが正しく前処理できることを確かめます。 これらのチェックのいずれかに失敗した場合、関連するエラーメッセージが表示され、実行は失敗します。 各タスクのデータ検証チェックにパスする要件を次に示します。

Note

データ検証のチェックには、トレーニングセットと検証セットの両方に適用できるものと、トレーニングセットにのみ適用できるものがあります。 テスト データセットがデータ検証にパスできなかった場合は、自動 ML がデータをキャプチャできなかったり、モデル推論の失敗が発生したり、モデルのパフォーマンスが低下したりする可能性があります。

タスク データ検証チェック
すべてのタスク 少なくとも 50 個のトレーニング サンプルが必要です
複数クラスと複数ラべル トレーニング データと検証データには、以下の条件を満たす必要があります
- 同じ列のセット
- 左から右へ同じ順番で列が並びます
- 同じ名前の列のデータ型が同じであること
- 少なくとも 2 つの一意のラベル
- 各データセット内の一意の列名 (たとえば、トレーニング セットには Age という名前の複数の列を含めることができません)
複数クラスのみ なし
複数ラベルのみ -ラベル列のフォーマットは受理されたフォーマットである必要があります
少なくとも 1 つのサンプルは 0 または 2 以上のラベルを持つべきで、そうでなければmulticlassタスクになるはずです
-すべてのラベルはstrまたはintのフォーマットで、重複しないようにしてください。 ラベル 1 とラベル '1' の両方を含めることはできません
NER のみ - ファイルの先頭が空の行であってはなりません
- 各行は空行であるか、{token} {label} の形式に従う必要があります。ここで、トークンとラベルの間にはスペースが 1 つだけあり、ラベルの後に空白があってはなりません
- すべてのラベルはI-B-で始まるか、ちょうどOである必要があります。 大文字小文字は区別される
-2 つのサンプルの間にちょうど1つの空の行があります
-ファイルの末尾にちょうど1つの空の行があります

実験を構成する

自動 ML の NLP 機能は、タスク固有の automl タイプのジョブを通じてトリガーされます。これは、分類、回帰、予測タスクのための自動 ML 実験を送信するのと同じワークフローです。 experiment_namecompute_name、データ入力などのパラメーターをそれらの実験と同じように設定します。

ただし、主な違いは次のとおりです:

  • primary_metric は報告のみを目的としているため、無視して構いません。 現在、自動 ML は、NLP のために1回の実行で1つのモデルを学習するだけで、モデルの選択もありません。
  • label_column_nameパラメーターは、 複数クラスおよび複数ラベルのテキスト分類タスクにのみ必要です。
  • ご利用のデータセット内のサンプルの 10% を超える部分に 128 を超えるトークンが含まれている場合は、長い範囲と見なされます。
    • 長い範囲のテキスト機能を使用するには、NC 6 または NCv3 シリーズや ND シリーズなどのより高い/良い GPU 向け SKU を使用する必要があります。

適用対象: Azure CLI ML 拡張機能 v2 (現行)

CLI v2 自動 ML ジョブの場合は、次のように YAML ファイルで実験を構成します。

言語の設定

NLP 機能の一部として、自動 ML では、BERT モデルファミリーのような言語固有の多言語事前トレーニング済みテキスト DNN モデルを活用し、104言語をサポートしています。 現在、言語選択のデフォルトは英語です。

次の表は、タスク型および言語に基づいて適用されるモデルをまとめたものです。 サポートされる言語とそのコードの完全なリストを参照してください。

タスクの種類 dataset_language の構文 テキスト モードのアルゴリズム
複数ラベルテキスト分類 "eng"
"deu"
"mul"
英語 BERT uncased
ドイツ語 BERT
多言語 BERT

その他のすべての言語では、自動 ML によって多言語 BERT が適用されます。
複数ステキスト分類 "eng"
"deu"
"mul"
英語 BERTcased
多言語 BERT

その他のすべての言語では、自動 ML によって多言語 BERT が適用されます。
固有表現認識 (NER) "eng"
"deu"
"mul"
英語 BERTcased
ドイツ語 BERT
多言語 BERT

その他のすべての言語では、自動 ML によって多言語 BERT が適用されます。

適用対象: Azure CLI ML 拡張機能 v2 (現行)

データセットの言語は、構成 YAML ファイルの featurization セクションで指定できます。 BERT は、自動 ML 実験トレーニングの特徴付けプロセスでも使用されます。詳しくは、自動 ML (SDK v1) における BERT 統合と特徴づけをご覧ください。

featurization:
   dataset_language: "eng"

分散トレーニング

Azure Machine Learning コンピューティング クラスターで分散トレーニングを使用して NLP 実験を実行することもできます。

適用対象: Azure CLI ML 拡張機能 v2 (現行)

AutoML ジョブを送信する

適用対象: Azure CLI ML 拡張機能 v2 (現行)

AutoML ジョブを送信するために、.yml ファイルへのパス、ワークスペース名、リソース グループ、サブスクリプション ID を指定して、次の CLI v2 コマンドを実行できます。


az ml job create --file ./hello-automl-job-basic.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

コード例

適用対象: Azure CLI ML 拡張機能 v2 (現行)

各 NLP タスク用の次のサンプル YAML ファイルを参照してください。

モデルのスイープとハイパーパラメーター調整 (プレビュー)

重要

現在、この機能はパブリック プレビュー段階にあります。 このプレビュー バージョンはサービス レベル アグリーメントなしで提供されており、運用環境のワークロードに使用することは推奨されません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。

詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

AutoML NLP を使用すると、構成内のハイパーパラメーター検索スペースを介して、モデルならびにハイパーパラメーターの組み合わせのリストを指定できます。HyperDrive では複数の子実行を生成します。そのいずれもが、指定された NLP モデルと、提供された検索空間に基づいて選択およびスイープされた一連のハイパーパラメーター値に対する微調整実行です。

サポートされているモデル アルゴリズム

微調整のために AutoML NLP で現在利用できる事前トレーニング済みのテキスト DNN モデルをすべて、次に示します。

  • bert-base-cased
  • bert-large-uncased
  • bert-base-multilingual-cased
  • bert-base-german-cased
  • bert-large-cased
  • distilbert-base-cased
  • distilbert-base-uncased
  • roberta-base
  • roberta-large
  • distilroberta-base
  • xlm-roberta-base
  • xlm-roberta-large
  • xlnet-base-cased
  • xlnet-large-cased

大規模モデルは、そのベースの対応モデルに比べて大きいことに注意してください。 通常は、より高いパフォーマンスを発揮しますが、より多くの GPU メモリと長い時間をトレーニングに必要とします。 そのため、SKU の要件はより厳しくなります。最適な結果を得るには、ND シリーズの VM 上で実行することをお勧めします。

サポートされているモデル アルゴリズム - HuggingFace (プレビュー)

Azure Machine Learning パイプラインで実行される新しいバックエンドを使用すると、HuggingFace Hub の任意のテキスト/トークン分類モデルをテキスト分類トークン分類に追加で使用できます。モデルは、Transformers ライブラリ (microsoft/deberta-large-mnli など) に含まれています。 Azure Machine Learning モデル レジストリにも、パイプライン コンポーネントで検証済みの精選されたモデルの一覧があります。

HuggingFace モデルを使用すると、パイプライン コンポーネントを使用して実行がトリガーされます。 レガシ モデルと HuggingFace モデルの両方を使用すると、すべての実行/試験がコンポーネントを使用してトリガーされます。

サポートされているハイパーパラメーター

次の表は、AutoML NLP でサポートされているハイパーパラメーターについて説明したものです。

パラメーター名 説明 構文
gradient_accumulation_steps オプティマイザーのステップ関数を呼び出して勾配降下の 1 ステップを実行する前に、勾配の合計が算出される逆方向操作の数。

これは有効なバッチ サイズを使用することを意味し、それは GPU に適合する最大サイズの gradient_accumulation_steps 倍の大きさです。
正の整数にする必要があります。
learning_rate 初期学習率。 範囲 (0, 1) の float にする必要があります。
learning_rate_scheduler 学習率スケジューラの種類。 linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup から選択する必要があります。
model_name サポートされているモデルの 1 つに付けた名前。 bert_base_cased, bert_base_uncased, bert_base_multilingual_cased, bert_base_german_cased, bert_large_cased, bert_large_uncased, distilbert_base_cased, distilbert_base_uncased, roberta_base, roberta_large, distilroberta_base, xlm_roberta_base, xlm_roberta_large, xlnet_base_cased, xlnet_large_cased から選択する必要があります。
number_of_epochs トレーニング エポックの数。 正の整数にする必要があります。
training_batch_size トレーニング バッチ サイズ。 正の整数にする必要があります。
validation_batch_size 検証バッチ サイズ。 正の整数にする必要があります。
warmup_ratio 0 から learning_rate までの線形ウォームアップに使用されるトレーニング ステップの合計の比率。 範囲 [0, 1] の float にする必要があります。
weight_decay オプティマイザーが sgd、adam、または adamw の場合の荷重減衰の値。 範囲 [0, 1] の float にする必要があります。

すべての個別のハイパーパラメーターでは、整数型の training_batch_size や文字列型の model_name ハイパーパラメーターなど、選択肢のディストリビューションのみを許可します。 learning_rate など、すべての連続ハイパーパラメーターでは、すべてのディストリビューションをサポートしています。

スイープ設定を構成する

スイープ関連のパラメーターはすべて構成できます。 各ハイパーパラメーターのチューニング例で示すように、各モデルに依存するハイパーパラメーターを持つ複数のモデル サブスペースを構築できます。

ここでは、一般的な HyperDrive ジョブで使用できるのと同じ離散型および連続型のディストリビューション オプションがサポートされています。 モデルを調整するハイパーパラメーターに関するページにある 9 つのオプションをすべて確認してください

適用対象: Azure CLI ML 拡張機能 v2 (現行)

limits: 
  timeout_minutes: 120  
  max_trials: 4 
  max_concurrent_trials: 2 

sweep: 
  sampling_algorithm: grid 
  early_termination: 
    type: bandit 
    evaluation_interval: 10 
    slack_factor: 0.2 

search_space: 
  - model_name: 
      type: choice 
      values: [bert_base_cased, roberta_base] 
    number_of_epochs: 
      type: choice 
      values: [3, 4] 
  - model_name: 
      type: choice 
      values: [distilbert_base_cased] 
    learning_rate: 
      type: uniform 
      min_value: 0.000005 
      max_value: 0.00005 

スイープのサンプリング方法

ハイパーパラメーターをスイープする場合は、定義されたパラメーター空間のスイープに使用するサンプリング方法を指定する必要があります。 現在のところ、sampling_algorithm パラメーターで次のサンプリング方法がサポートされています。

サンプリングの種類 AutoML ジョブの構文
ランダム サンプリング random
グリッド サンプリング grid
ベイジアン サンプリング: bayesian

実験の予算

必要に応じて、limitstimeout_minutes パラメーターを使用して AutoML NLP トレーニング ジョブの実験予算 (実験が終了するまでの分単位での時間) を指定できます。 何も指定しない場合、既定の実験タイムアウトは 7 日 (最大 60 日) です。

また、自動 ML の NLP では trial_timeout_minutes (個々の試行が終了されるまでに実行できる分単位の最大時間) と max_nodes (ジョブに使用するバッキング コンピューティング クラスターからのノードの最大数) もサポートされています。 これらのパラメーターも limits セクションに属します。

適用対象: Azure CLI ML 拡張機能 v2 (現行)

limits: 
  timeout_minutes: 60 
  trial_timeout_minutes: 20 
  max_nodes: 2 

早期終了ポリシー

早期終了ポリシーによって、パフォーマンスの低い実行を自動的に終了できます。 早期終了によって、コンピューティング効率が向上し、そうでなければ、あまり見込みのない構成で費やされてしまうコンピューティング リソースを節約できます。 AutoML NLP では、early_termination パラメーターを使用して早期終了ポリシーがサポートされます。 終了ポリシーが指定されていない場合は、すべての構成が完了するまで実行されます。

ハイパーパラメーター スイープの早期終了ポリシーを構成する方法の詳細を確認してください。

スイープのリソース

ハイパーパラメーター スイープに費やされるリソースを制御するには、スイープに max_trials および max_concurrent_trials を指定します。

パラメーター 詳細
max_trials スイープする構成の最大数のパラメーター。 1 ~ 1000 の整数にする必要があります。 特定のモデル アルゴリズムで既定のハイパーパラメーターだけを探索する場合は、このパラメーターを 1 に設定します。 既定値は 1 です。
max_concurrent_trials 同時に実行できる実行の最大数。 指定する場合は、1 ~ 100 の整数にする必要があります。 既定値は 1 です。

注:
  • 並列実行の数は、指定された計算ターゲットで使用できるリソースに基づいて制御されます。 目的の同時実行可能性のために、使用可能なリソースをコンピューティング先に確保する必要があります。
  • max_concurrent_trials は内部的に max_trials に制限されます。 たとえば、ユーザーが max_concurrent_trials=4max_trials=2 を設定した場合、値は内部的に max_concurrent_trials=2max_trials=2 に更新されます。
  • この例に示されているように、スイープ関連のすべてのパラメーターを構成できます。

    適用対象: Azure CLI ML 拡張機能 v2 (現行)

    sweep:
      limits:
        max_trials: 10
        max_concurrent_trials: 2
      sampling_algorithm: random
      early_termination:
        type: bandit
        evaluation_interval: 2
        slack_factor: 0.2
        delay_evaluation: 6
    

    既知の問題

    低いスコアまたは高い損失値への対処:

    特定のデータセットの場合は、NLP タスクに関係なく、生成されるスコアが非常に低く、場合によってはゼロになることもあります。 このスコアには、ニューラル ネットワークが収束に失敗したことを意味する高い損失値が伴います。 これらのスコアは、特定の GPU SKU でより頻繁に発生する可能性があります。

    このようなケースはまれですが、発生する可能性があります。これに対処する最善の方法は、ハイパーパラメーター チューニングを活用して、特に学習率などのハイパーパラメーターに対して、より広い範囲の値を指定することです。 ハイパーパラメーター チューニング機能が運用において利用できるようになるまで、これらの問題が生じているユーザーの皆様には NC6 または ND6 コンピューティング クラスターを使用することをお勧めします。 これらのクラスターには、通常、かなり安定したトレーニング成果があります。

    次のステップ