すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:EasyTransferを使用したテキスト分類モデルの開発

最終更新日:Jul 22, 2024

EasyTransferは、開発者が自然言語処理 (NLP) シナリオで転送学習モデルを開発するのに役立つように設計されています。 このトピックでは、テキスト分類を例として、EasyTransferを使用してモデルのトレーニング、モデルの評価、モデルの使用による予測の作成、モデルファイルのエクスポート、およびMachine Learning Platform for AI (PAI) のData Science Workshop (DSW) でのモデルのデプロイ方法について説明します。

前提条件

DSWインスタンスが作成され、ソフトウェアのバージョン要件が満たされます。 詳細については、「DSWインスタンスの作成」と「制限」をご参照ください。

説明

GPU高速化DSWインスタンスの使用を推奨します。

背景情報

転移学習は、ある解決された問題から得られた知識を別の問題に適用する機械学習法である。 工業生産は、NLPアプリケーションにトランスファーラーニングを適用する必要性が高まっていることを示しています。 新興産業での従来の機械学習の採用により、大量のトレーニングデータを蓄積するための人材とリソースへの投資が大幅に増加します。 この問題を解決するために、開発者は既存のタスクのトレーニングデータを再利用して、新しいタスクでの学習のパフォーマンスを向上させることができます。 PAIは、開発者がNLPアプリケーション用の転送学習モデルを開発するのに役立つ、深層学習フレームワークであるEasyTransferを提供します。

制限事項

EasyTransferは、次のPythonおよびTensorFlowバージョンをサポートしています。

  • Python: Python 2.7、Python 3.4、またはPython 3.4以降のバージョン。

  • 画像: 公式画像tensorflow:1.12PAI-gpu-py36-cu101-ubuntu18.04

ステップ1: データの準備

  1. Data Science Workshop (DSW) の開発環境に移動します。

    1. PAIコンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 [ワークスペース] ページで、管理するワークスペースの名前をクリックします。

    3. ページの左上隅で、PAIを使用するリージョンを選択します。

    4. 左側のナビゲーションウィンドウで、モデルトレーニング > データ科学ワークショップ (DSW).

    5. (オプション) [Data Science Workshop (DSW)] ページで、検索ボックスにDSWインスタンスの名前またはキーワードを入力して、DSWインスタンスを検索します。

    6. DSWインスタンスを見つけて、開くで、アクション列を作成します。

  2. DSWの開発環境で、上部のナビゲーションバーで [ターミナル] をクリックし、画面の指示に従ってターミナルを起動します。

  3. ターミナルで次のコマンドを実行して、サンプルデータセットをダウンロードします。

    wget http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/tutorial/ez_text_classify/zqkd_sample/train.csv
    wget http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/tutorial/ez_text_classify/zqkd_sample/dev.csv
    説明

    この例で使用されているデータセットは、デモンストレーション用です。 ニュース分類モデルをトレーニングするときに、より多くのデータセットが必要になる場合があります。

ステップ2: 現在のディレクトリでトレーニングタスクを開始する

次のコマンドを実行して、トレーニングタスクを開始します。

easy_transfer_app \
  --mode=train \
  --modelName=text_classify_bert \
  --inputTable="./train.csv,./dev.csv" \
  --inputSchema=content:str:1,label:str:1 \
  --firstSequence=content \
  --labelName=label \
  --labelEnumerateValues="教育,三农,娱乐,健康,美文,搞笑,美食,财经,科技,旅游,汽车,时尚,科学,文化,房产,热点,母婴,家居,体育,国际,育儿,宠物,游戏,健身,职场,读书,艺术,动漫" \
  --sequenceLength=128 \
  --checkpointDir=./classify_models \
  --batchSize=64 \
  --numEpochs=3 \
  --optimizerType=adam \
  --learningRate=3e-5 \
  --advancedParameters='\
    pretrain_model_name_or_path=pai-bert-base-zh \
    '

次の表では、パラメーターについて説明します。.

パラメーター

必須

説明

デフォルト値

データ型

モード

使用されるモード。 有効な値:

  • 電車

  • 評価

  • predict

  • エクスポート

なし

STRING

modelName

不可

モデルの名前。 有効な値:

  • モデルがテキスト分類用のbertモデルである場合、パラメーターの値はtext_classify_BERTです。

  • モデルがテキスト分類用のdgcnnモデルである場合、パラメーターの値はtext_classify_DGCNNです。

  • モデルがテキストマッチング用のbertモデルである場合、パラメーターの値はtext_match_bertです。

  • モデルがテキストマッチング用の2タワーBERTモデルである場合、パラメーターの値はtext_match_bert_two_towerです。

  • モデルがbicnnモデル (2タワーCNNモデル) の場合、パラメーターの値はtext_match_bicnnです。

  • モデルがhcnnモデルの場合、パラメーターの値はtext_match_hcnnです。

  • モデルがdamモデルの場合、パラメーターの値はtext_match_damです。

  • モデルがDAM + モデルの場合、パラメーターの値はtext_match_damplusです。

  • モデルがTextCNNモデルの場合、パラメーターの値はtext_classify_cnnです。

  • モデルが理解を読むためのbertモデルである場合、パラメーターの値はtext_concelession_bertです。

  • モデルがBERT-HAEモデルの場合、パラメーターの値はtext_concelession_bert_haeです。

  • モデルがシーケンスラベリングのbertモデルである場合、パラメーターの値はsequence_labeling_BERTです。

text_match_bert

STRING

inputTable

モデルトレーニングの入力テーブル。 複数のテーブルはコンマ (,) で区切ります。 例:. /train.csv,./dev.csv.

なし

STRING

inputSchema

入力テーブルの列のスキーマ。 値は次の形式である必要があります。Column name:Type:Length。 次の情報が使用されます。

  • Typeの有効な値は、intstrfloatです。

  • ほとんどの場合、Lengthの値は1です。 列がコンマで区切られた配列の場合、Lengthの値は配列の長さと等しくなります。

なし

STRING

firstSequence

入力テーブルの最初のテキストシーケンスに対応する列。

なし

STRING

labelName

不可

入力テーブルのラベル列の名前。

空の文字列 ""

STRING

labelEnumerateValues

不可

ラベルの列挙値。 次のいずれかの方法で値を指定できます。

  • 列挙値を直接指定し、コンマ (,) で区切ります。

  • TXTファイルのパスを指定します。 TXTファイルには、改行で区切られた列挙値が含まれています。

空の文字列 ""

STRING

sequenceLength

不可

最大シーケンス長。 有効な値: 1 ~ 512

128

INT

checkpointDir

モデルのディレクトリ。 例:. /classify_models.

なし

STRING

batchSize

不可

各トレーニングバッチのサイズ。 モデルトレーニングに複数のGPUが使用される場合、このパラメーターには、各GPUにスケジュールされる各バッチのサイズを指定します。

32

INT

numEpochs

不可

モデルトレーニングのエポック数。

1

INT

optimizerType

不可

オプティマイザのタイプ。 有効な値:

  • アダム

  • 子羊

  • アダグラード

  • アダデレタ

アダム

STRING

learningRate

不可

学習率。

2e-5

FLOAT

advancedParameters

不可

その他の高度なパラメータ。 詳細については、次の表を参照してください。

なし

STRING

次の表に、高度なパラメーターを示します。

パラメーター

必須

説明

デフォルト値

データ型

pretrain_model_name_or_path

不可

事前トレーニング済みモデル。 EasyTransferが提供する事前トレーニング済みモデルを指定するか、カスタム事前トレーニング済みモデルのObject Storage Service (OSS) パスを指定できます。

pai-bert-base-zh

STRING

ステップ3: モデルを評価する

モデルのトレーニング後、次のコマンドを実行してトレーニング結果をテストまたは評価します。

easy_transfer_app \
  --mode=evaluate \
  --inputTable=./dev.csv \
  --checkpointPath=./classify_models/model.ckpt-64 \
  --batchSize=10

下表に、各パラメーターを説明します。

パラメーター

必須

説明

デフォルト値

データ型

モード

使用されるモード。 有効な値:

  • 電車

  • 評価

  • predict

  • エクスポート

なし

STRING

inputTable

モデル評価用の入力テーブル。 複数のテーブルはコンマ (,) で区切ります。 例:. /dev.csv.

重要

モデルトレーニングとモデル評価のデータセットの列スキーマは同じでなければなりません。

なし

STRING

checkpointPath

モデルのCKPTファイルのディレクトリ。 例:./classify_models/model.ckpt-32.

なし

STRING

batchSize

不可

各評価バッチのサイズ。 複数のGPUが使用されている場合、このパラメーターは各GPUにスケジュールされる各バッチのサイズを指定します。

32

INT

ステップ4: モデルを使用して予測を行う

モデルをトレーニングした後、次のコマンドを実行して、モデルを使用してファイルを処理します。 ファイルにラベルを付けることができます。

easy_transfer_app \
  --mode=predict \
  --inputSchema=content:str:1,label:str:1 \
  --inputTable=dev.csv \
  --outputTable=dev.pred.csv \
  --firstSequence=content \
  --appendCols=label \
  --outputSchema=predictions,probabilities,logits \
  --checkpointPath=./classify_models/ \
  --batchSize=100

下表に、各パラメーターを説明します。

パラメーター

必須

説明

デフォルト値

データ型

モード

使用されるモード。 有効な値:

  • 電車

  • 評価

  • predict

  • エクスポート

なし

STRING

inputTable

モデルによって処理される入力テーブル。 例:. /dev.csv.

なし

STRING

outputTable

予測結果を格納する出力テーブル。 例:. /dev.pred.csv.

なし

STRING

inputSchema

入力テーブルの列のスキーマ。 値は次の形式である必要があります。Column name:Type:Length。 次の情報が使用されます。

  • Typeの有効な値は、intstrfloatです。

  • ほとんどの場合、Lengthの値は1です。 列がコンマで区切られた配列の場合、Lengthの値は配列の長さと等しくなります。

なし

STRING

firstSequence

入力テーブルの最初のテキストシーケンスに対応する列。

なし

STRING

appendCols

不可

入力テーブルから出力テーブルに追加される列。

空の文字列 ""

STRING

outputSchema

不可

モデルが出力する予測値のタイプ。 複数の型はコンマ (,) で区切ります。 次のタイプの予測値がサポートされています。

  • 予測: シングルラベル分類モデルを使用する場合、モデルはlabelEnumerateValueパラメーターで指定された列挙値と同じ順序でソートされたすべてのカテゴリのIDを出力します。マルチラベル分類モデルを使用する場合、モデルはコンマ (,) で区切られたマルチホットベクトルを出力します。

  • 確率: モデルは、コンマ (,) で区切られたすべてのカテゴリの確率を出力します。

  • logits: モデルは、コンマ (,) で区切られたすべてのカテゴリのlogit値を出力します。

予測

STRING

checkpointPath

モデルのディレクトリ。 例:. /bert_classify_models.

なし

STRING

batchSize

不可

各トレーニングバッチのサイズ。 モデルトレーニングに複数のGPUが使用される場合、このパラメーターには、各GPUにスケジュールされる各バッチのサイズを指定します。

32

INT

ステップ5: モデルファイルをエクスポートし、モデルをオンラインElastic Algorithm Service (EAS) サービスとして展開する

  1. モデルファイルをエクスポートします。

    デフォルトでは、モデルがトレーニングされた後、最後のチェックポイントの変数とsaved_model.pbファイルが自動的にエクスポートされます。 他のチェックポイントのトレーニング結果をエクスポートする場合は、次のコマンドを実行します。

    easy_transfer_app \
      --mode=export \
      --exportType=app_model \
      --checkpointPath=./classify_models/model.ckpt-64 \
      --exportDirBase=./export_model \
      --batchSize=100

    下表に、各パラメーターを説明します。

    パラメーター

    必須

    説明

    デフォルト値

    データ型

    モード

    使用されるモード。 有効な値:

    • 電車

    • 評価

    • predict

    • エクスポート

    なし

    STRING

    exportType

    エクスポートするモデルファイルの種類。 有効な値:

    • app_model: finetuneモデルファイルをエクスポートします。

    • ez_bert_feat: テキストベクトル化コンポーネントに必要なモデルファイルをエクスポートします。

    なし

    STRING

    checkpointPath

    モデルのCKPTファイルのディレクトリ。

    なし

    STRING

    exportDirBase

    エクスポートされたモデルファイルのディレクトリ。

    なし

    STRING

    batchSize

    不可

    各評価バッチのサイズ。 複数のGPUが使用されている場合、このパラメーターは各GPUにスケジュールされる各バッチのサイズを指定します。

    32

    INT

  2. モデルファイルをパッケージ化します。

    エクスポートされた変数、saved_model.pb、vocab.txtファイル、および入力のカスタマイズに使用されるlabel_mappingファイルをパッケージ化します。 たとえば、ニュース分類モデルのlabel_mappingファイルはlabel_mapping.jsonです。 ファイル内のラベルIDはINTタイプでなければなりません。 ラベルIDは、labelEnumerateValuesパラメーターで指定された列挙値と同じ順序でソートする必要があります。 次のコードブロックは、label_mapping.jsonファイルの例を示しています。

    {"教育": 0,
     "三农": 1,
     ...,
     "动漫": 27}

    label_mapping.jsonファイルは、checkpointDirパラメーターで指定したディレクトリにあります。

    パッケージ化されたファイルを次の図に示します。打包的模型文件

  3. パッケージをOSSにアップロードし、パッケージのOSSパスを記録します。 例: oss:// xxx/your_model.zip

  4. モデルをデプロイします。 詳細については、「EasyTransferプロセッサ」をご参照ください。