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: データの準備
Data Science Workshop (DSW) の開発環境に移動します。
PAIコンソールにログインします。
左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 [ワークスペース] ページで、管理するワークスペースの名前をクリックします。
ページの左上隅で、PAIを使用するリージョンを選択します。
左側のナビゲーションウィンドウで、 .
(オプション) [Data Science Workshop (DSW)] ページで、検索ボックスにDSWインスタンスの名前またはキーワードを入力して、DSWインスタンスを検索します。
DSWインスタンスを見つけて、開くで、アクション列を作成します。
DSWの開発環境で、上部のナビゲーションバーで [ターミナル] をクリックし、画面の指示に従ってターミナルを起動します。
ターミナルで次のコマンドを実行して、サンプルデータセットをダウンロードします。
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 \
'
次の表では、パラメーターについて説明します。.
パラメーター | 必須 | 説明 | デフォルト値 | データ型 |
モード | 可 | 使用されるモード。 有効な値:
| なし | STRING |
modelName | 不可 | モデルの名前。 有効な値:
| text_match_bert | STRING |
inputTable | 可 | モデルトレーニングの入力テーブル。 複数のテーブルはコンマ (,) で区切ります。 例: | なし | STRING |
inputSchema | 可 | 入力テーブルの列のスキーマ。 値は次の形式である必要があります。Column name:Type:Length。 次の情報が使用されます。
| なし | STRING |
firstSequence | 可 | 入力テーブルの最初のテキストシーケンスに対応する列。 | なし | STRING |
labelName | 不可 | 入力テーブルのラベル列の名前。 | 空の文字列 "" | STRING |
labelEnumerateValues | 不可 | ラベルの列挙値。 次のいずれかの方法で値を指定できます。
| 空の文字列 "" | STRING |
sequenceLength | 不可 | 最大シーケンス長。 有効な値: 1 ~ 512 | 128 | INT |
checkpointDir | 可 | モデルのディレクトリ。 例: | なし | 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
下表に、各パラメーターを説明します。
パラメーター | 必須 | 説明 | デフォルト値 | データ型 |
モード | 可 | 使用されるモード。 有効な値:
| なし | STRING |
inputTable | 可 | モデル評価用の入力テーブル。 複数のテーブルはコンマ (,) で区切ります。 例: 重要 モデルトレーニングとモデル評価のデータセットの列スキーマは同じでなければなりません。 | なし | 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
下表に、各パラメーターを説明します。
パラメーター | 必須 | 説明 | デフォルト値 | データ型 |
モード | 可 | 使用されるモード。 有効な値:
| なし | STRING |
inputTable | 可 | モデルによって処理される入力テーブル。 例: | なし | STRING |
outputTable | 可 | 予測結果を格納する出力テーブル。 例: | なし | STRING |
inputSchema | 可 | 入力テーブルの列のスキーマ。 値は次の形式である必要があります。Column name:Type:Length。 次の情報が使用されます。
| なし | STRING |
firstSequence | 可 | 入力テーブルの最初のテキストシーケンスに対応する列。 | なし | STRING |
appendCols | 不可 | 入力テーブルから出力テーブルに追加される列。 | 空の文字列 "" | STRING |
outputSchema | 不可 | モデルが出力する予測値のタイプ。 複数の型はコンマ (,) で区切ります。 次のタイプの予測値がサポートされています。
| 予測 | STRING |
checkpointPath | 可 | モデルのディレクトリ。 例: | なし | STRING |
batchSize | 不可 | 各トレーニングバッチのサイズ。 モデルトレーニングに複数のGPUが使用される場合、このパラメーターには、各GPUにスケジュールされる各バッチのサイズを指定します。 | 32 | INT |
ステップ5: モデルファイルをエクスポートし、モデルをオンラインElastic Algorithm Service (EAS) サービスとして展開する
モデルファイルをエクスポートします。
デフォルトでは、モデルがトレーニングされた後、最後のチェックポイントの変数と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
モデルファイルをパッケージ化します。
エクスポートされた変数、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パラメーターで指定したディレクトリにあります。
パッケージ化されたファイルを次の図に示します。
パッケージをOSSにアップロードし、パッケージのOSSパスを記録します。 例: oss:// xxx/your_model.zip
モデルをデプロイします。 詳細については、「EasyTransferプロセッサ」をご参照ください。