このレポは、Azure Machine Learning Serviceを使用して、BERT(変圧器からの双方向エンコーダー表現)言語表現モデルを前処理および微調整するためのエンドツーエンドのレシピが含まれています。
7/7/2020の更新:? https://github.com/microsoft/onnxruntime-training-examples/master/master/nvidia-vertで入手できるBert Pretrainingの最近の実装は、このレポの実装よりも大幅に高速です。その実装では、ONNXランタイムを使用してトレーニングを加速し、Azure Machine Learning Serviceを含むGPUの環境で使用できます。 BERTやGPT-2などの変圧器モデルのトレーニングと加速トレーニングのためにONNXランタイムを使用することの詳細については、ONNX Runtime Training Technical Deep Diveのブログで入手できます。
バートは、コーパス内の深く微妙なテキスト関係を効果的にキャプチャする能力によって区別される言語表現モデルです。元の論文では、著者は、BERTモデルを簡単に適応させて、テキスト分類、エンティティ認識、質問応答という名前のテキスト分類を含む多くのNLPタスクの最先端モデルを構築できることを実証しています。このレポでは、開発者がコーパス上でゼロからBERTモデルを取得することを可能にするノートブックを提供し、既存のBERTモデルを微調整して特殊なタスクを解決します。 Bertの簡単な紹介は、Bertのクイックスタートのためにこのレポで入手できます。
Bert言語表現モデルを望ましいレベルの精度に前処理することは非常に困難です。その結果、ほとんどの開発者は、標準的なコーパス(ウィキペディアなど)で事前に訓練されたBERTモデルから始めます。この戦略は、最終モデルがトレイン前のステップで使用されているコーパスに似たコーパスで訓練されている場合にうまく機能します。ただし、問題に標準のコーパスとはまったく異なる専門のコーパスが含まれる場合、結果は最適ではありません。さらに、Bertの精度を超えて言語表現を進めるには、ユーザーはモデルアーキテクチャ、トレーニングデータ、コスト機能、タスク、最適化ルーチンを変更する必要があります。これらのすべての変更は、大規模なパラメーターとトレーニングデータサイズで調査する必要があります。 Bert-Largeの場合、これは3億4,000万のパラメーターがあり、非常に大きなドキュメントコーパスで訓練されているため、非常にかなりのものになる可能性があります。 GPUでこれをサポートするには、機械学習エンジニアがこれらの大規模なモデルを訓練するために分散トレーニングサポートが必要です。ただし、これらの分散環境を構成することの複雑さと脆弱性により、専門家の調整でさえ、訓練されたモデルの劣った結果になる可能性があります。
これらの問題に対処するために、このレポは、Bert-Largeモデルを前提とするワークフローを公開しています。開発者は、GPUのドメイン固有のデータを使用して、独自のハードウェアまたはAzure Machine Learning Serviceを使用して、BERTなどの独自の言語表現モデルを構築できるようになりました。このリポジトリのプレレインレシピには、データセットと前処理スクリプトが含まれているため、誰もがBERTを超えて独自の汎用言語表現モデルを構築することを実験できます。全体として、これは安定した予測可能なレシピであり、研究者が自分で探索を試みるのに最適なものに収束します。
このリポジトリの事前削除レシピは、Pytorchの前提条件のBert V0.6.2パッケージに基づいています。この前登録レシピの実装にはgradient accumulation (モデルの重みを更新する前の小さなミニバッチの勾配が蓄積されます)やmixed precision trainingなどの最適化手法が含まれます。プレトレーニング用のノートブックおよびPythonモジュールは、プレインディレクトリで入手できます。
データの準備は、あらゆる機械学習プロジェクトの重要なステップの1つです。 Bert Pretrainingには、ドキュメントレベルのコーパスが必要です。事前トレーニングに使用されるデータの品質は、訓練されたモデルの品質に直接影響します。データの前処理を容易にし、結果の再現性を高めるために、データ前処理コードがレポに含まれています。これは、ウィキペディアコーパスまたはその他のデータセットを前処理するための前処理に使用できます。その詳細については、事前トレーニングのデータ準備の追加情報を参照してください。
このリポジトリの微調整レシピは、Azure Machine Learning Serviceを使用してBert言語表現モデルを微調整する方法を示しています。 Finetuning用のノートブックとPythonモジュールは、Finetuneディレクトリで入手できます。私たちは、以下に対して事前に処理されたチェックポイントを微調整して評価します。
一般的な言語理解評価(接着剤)ベンチマークは、自然言語理解システムを評価および分析するための9つの文または文章の言語理解タスクのコレクションです。 BERT_EVAL_GLUE.IPYNB JUPYTERノートブックにより、ユーザーはAzure MLのこれらのタスクに対して前提条件のチェックポイントの1つを実行できます。
Azure Machine Learning Serviceは、データ、トレーニング、テスト、展開、管理、および機械学習モデルを準備するためのクラウドベースの環境を提供します。このサービスは、Pytorch、Tensorflow、Scikit-Learnなどのオープンソーステクノロジーを完全にサポートし、古典的なMLからディープラーニング、監視された監督のない学習まで、あらゆる種類の機械学習に使用できます。
Jupyterノートブックは、Azureml Python SDKを使用し、プレインおよび凝固ジョブを提出するために使用できます。このレポは、さまざまなアクティビティ用の次のノートブックが含まれています。
| 活動 | ノート |
|---|---|
| プレレイン | bert_pretrain.ipynb |
| Glue Finetune/Evaluate | bert_eval_glue.ipynb |
| 活動 | ノート |
|---|---|
| Glue Finetune/Evaluate | Tensorflow-Bert-Azureml.ipynb |
このプロジェクトは、Microsoftのオープンソース行動規範を採用しています。詳細については、FAQのコードを参照するか、追加の質問やコメントについては[email protected]にお問い合わせください。