Python を使用して自然言語処理モデルをトレーニングする AutoML を設定します (プレビュー)

適用対象:Python SDK azureml v1

重要

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

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

このアーティクルでは、Azure Machine Learning Python SDK自動 ML で自然言語処理(NLP)モデルをトレーニングする方法について学びます。

自動 ML は、ML専門家やデータサイエンティストが独自のテキストデータを持ち込み、多クラステキスト分類、マルチラベルテキスト分類、名前付きエンティティ認識(NER)などのタスクのためのカスタムモデルを構築できるようにするNLPをサポートします。

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

前提条件

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

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

    警告

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

  • Azure Machine Learning Python SDK がインストールされていること。

    SDK をインストールするには、次のいずれかを行います。

    重要

    この記事の Python コマンドでは、最新の azureml-train-automl パッケージ バージョンが必要です。

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

NLP タスクを選択します

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

タスク AutoMLConfig 構文 説明
複数ステキスト分類 task = 'text-classification' 複数のクラスが存在し、各サンプルは正確に1つのクラスに分類される可能性があります。 タスクは、各サンプルの正しいクラスを予測します。

たとえば、映画のスクリプトを 「コメディ」または「ロマンチック」として分類します。
複数ラベルテキスト分類 task = 'text-classification-multilabel' クラスは複数存在し、各サンプルは任意の数のクラスを割り当てることができます。 タスクは、各サンプルのすべてのクラスを予測します

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

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

データの準備

自動 ML における NLP の実験では、マルチクラスおよびマルチラベルの分類タスクのために、.csv形式の Azure Machine Learningデータセットを持ってくることができます。 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 は入力データに対してデータ検証チェックを適用して、データを正しく前処理できる必要があります。 これらのチェックのいずれかに失敗した場合、関連するエラーメッセージが表示され、実行は失敗します。 各タスクのデータ検証チェックにパスする要件を次に示します。

注意

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

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

実験を構成する

自動 ML の NLP 機能は、、分類、回帰、予測タスクのための自動 ML 実験を提出するための同じワークフローであるAutoMLConfigを通じてトリガーされます。 taskcompute_target、データ入力など、ほとんどのパラメーターをそれらの実験と同じように設定します。

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

  • primary_metricは報告のためだけなので、無視して構いません。 現在、自動 ML は、NLP のために1回の実行で1つのモデルを学習するだけで、モデルの選択もありません。
  • label_column_nameパラメーターは、 複数クラスおよび複数ラベルのテキスト分類タスクにのみ必要です。
  • データセット内のサンプルの大部分に 128 を超える単語が含まれている場合は、長い範囲と見なされます。 このシナリオでは、AutoMLConfigenable_long_range_text=True パラメーターを使用して、長い範囲のテキスト オプションを有効にできます。 そうすることで、モデルのパフォーマンスを向上させることができますが、トレーニング時間は長くなります。
    • 長い範囲のテキストを有効にする場合は、NCv3 シリーズや ND シリーズなど、ハイメモリの GPU が必要 です。
    • 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 では、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 が適用されます。

FeaturizationConfigでデータセットの言語を指定できます。 BERT は、自動 ML 実験トレーニングの特徴付けプロセスでも使用されます。詳しくは、自動 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 実験を実行することもできます。 これは、実験の設定時にパラメーターmax_concurrent_iterations = number_of_vmsenable_distributed_dnn_training = TrueがあなたのAutoMLConfigに提供されたときに、自動 ML によって自動的に処理されます。

max_concurrent_iterations = number_of_vms
enable_distributed_dnn_training = True

これにより、NLP モデルの分散トレーニングがスケジュールされ、仮想マシンまたは仮想マシンのクラスター上のすべての GPU に自動的にスケーリングされます。 仮想マシンの最大許容数は32台です。 トレーニングは、仮想マシンの数が2の累乗でスケジュールされています。

サンプルの Notebook

各 NLP タスクの詳細なコード例については、「サンプルノートブック」を参照してください。

次のステップ