DUICUO

ByteDanceは、国際翻訳コンテストで優勝したモデルをオープンソース化した。

Transformerのような主流のテキスト生成アルゴリズムによる単語単位の生成は、並列計算に最適なGPUには適しておらず、GPUの利用率が低下します。並列生成はこの問題の解決に役立ちます。最近、ByteDanceのVolcano Translationチームの並列生成翻訳システム「GLAT」は、WMT2021のDe-EnコンペティションとEn-Deコンペティションの両方で優勝しました。この快挙に続き、Volcano Translationは、GLATモデルの複製とWMT21コードを含むPyTorchディープラーニングフレームワーク「ParaGen」をオープンソース化しました。

コードアドレス: https://github.com/bytedance/ParaGen

テキスト生成は自然言語処理における重要な研究分野であり、テキスト要約、機械翻訳、コピーライティングなど、幅広い応用分野があります。分類やアノテーションといった一般的なタスクとは異なり、テキスト生成では、各単語の重要性を考慮し、単語予測精度を向上させるだけでなく、テキスト全体の流暢性を維持するために単語間のコロケーションも考慮する必要があります。そのため、一般的なアプローチは、生成された各単語と既存の単語との関係を考慮しながら、単語ごとにテキストを生成することです。

上記の手順でテキストを生成するモデルは自己回帰モデルと呼ばれ、主流の生成アルゴリズムであるTransformerなどがその例です。このモデルは、まず機械翻訳における翻訳対象テキストやテキスト要約におけるソーステキストなどの元のテキストをエンコードします。次に、テキストを左から右へ単語ごとにデコードし、翻訳文または要約を生成します。このアルゴリズムに基づくオープンソースソフトウェアには、tensor2tensorやfairseqなどがあります。しかし、単語ごとの生成は並列計算に適したGPUには適しておらず、GPUの利用率が低下し、文章生成速度が遅くなります。そのため、近年では、応答遅延を短縮するために並列でテキストを生成する方法が研究されています。

以前、ByteDance の AI ラボの Volcano Translation チームは、並列生成翻訳システム Glancing Transformer (GLAT) (「ACL 2021 | ByteDance Glancing Transformer: 並列生成モデルの概要」を参照) を開発し、それを使用して画期的な成果を達成しました。   WMT2021 De-En/En-De ダブルチャンピオン  (「並列生成のシンギュラリティが迫る!ByteDanceのGLATがWMT2021のドイツ語と英語の自動評価で1位を獲得」を参照)並列生成の強力な可能性が強調されました。ParaGenはこうした背景から生まれました。チームの研究者たちは、並列生成において、単にモデルを改良するだけではもはや研究ニーズを満たすのに十分ではなく、トレーニング方法とデコードアルゴリズムの改良もますます重要になっていることを発見しました。ParaGenはまさに、並列生成研究の生産性を解放するために開発されました。

Volcano Translationは、ParaGenにおいて、GLATモデルの再現とWMT21のコードをオープンソース化しました。これにより、ユーザーは並列生成に関する研究成果をより適切に追跡できるようになります。今後、Volcano Translationはさらに多くの並列生成関連技術をオープンソース化し、並列生成技術のさらなる発展を促進し、段階的に実用化へと移行させていきます。また、ParaGenは並列生成に加えて、自己回帰翻訳、多言語翻訳、事前学習済みモデル、生成タスク、抽出タスク、分類タスクなど、多様な自然言語処理タスクをサポートし、ゼロから再現可能なコードを提供することで、自然言語処理研究の初心者が迅速に研究を開始できるように支援します。

ParaGen は開発をより柔軟、自由、シンプルにします。

ParaGenは、データ入力、データ前処理、データサンプリング、データロード、ネットワークモジュール、トレーニングモデル、推論モデル、最適化目標、探索アルゴリズム、オプティマイザー、数値プランナー、トレーニングアルゴリズム、評価目標など、最大13個のカスタマイズ可能なモジュールをサポートしています。類似のテキスト生成フレームワークと比較して、これは二次開発の柔軟性を大幅に向上させます。各モジュールについて、ParaGenはマイクロカーネル設計を採用しており、各モジュールはいくつかの共通かつ基本的な実装のみを提供し、他のモジュールとは独立して動作します。例としては、数値オプティマイザーのInverseSquareRootRateScheduler、ネットワークモジュールの位置埋め込み、データ入力用のJsonDatasetなどがあります。13個のモジュールのこの詳細な内訳により、ParaGenではカスタマイズが容易になります。たとえば、glancing trainingを実装するには、ParaGenではforward_loss関数をオーバーライドするだけで、カスタムトレーニングをモジュール形式で実装できます。

 輸入トーチ
パラゲンからトレーナートレーナーのインポートトレーナー
paragen.trainers からregister_trainer インポートする


@ レジスタトレーナー
クラスGLATTrainer ( トレーナー):

ちらっと見る戦略トレーナー

def _forward_loss ( self , samples ):
glancing_output = self._generator ( ** samples [ 'net_input' ] )
fused_samples = self._fusing ( samples , glacing_output )
logging_states = self._criterion ( ** fused_samples )
リターンロス

従来の手続き型開発とは異なり、ParaGenはモジュール型開発に重点を置いています。手続き型開発では、フレームワークが固定のワークフローを提供し、ユーザーは様々なモジュールをワークフローにどのように組み込むかを考えます。ParaGenのモジュール型開発は全く異なります。あるタスクに取り組んでいると想像してみてください。ParaGenはツールボックスのように機能します。必要な機能に基づいて、完全なワークフローを組み立てることができます。例えば、データ読み取りには適切なDatasetクラスを選択し、バッチ処理にはSamplerを選択し、結果評価にはMetricを選択し、独自のトレーニングプロセスを定義することもできます。さらに、実装されていないツールに遭遇した場合、ParaGenのツールを親クラスとして使用できるため、機能の一部をオーバーライドすることで、より多くのタスクに適応できるように独自のツールをカスタマイズできます。

一方、ParaGenのコード構造はより詳細に分解されているため、ユーザーはわずか2~3時間でプロジェクト全体のフレームワークを理解し、独自のタスクをカスタマイズすることができます。さらに、ParaGenは、初心者がParaGenのコードの基本と使い方を学習できるように、対応するチュートリアルも提供しています。

ParaGenは開発をより安定させる

ParaGenは、異なる方向への同時開発を効果的にサポートします。プラガブルなコード開発をサポートしているため、ユーザーはフレームワークから独立して開発できます。ユーザーは任意のディレクトリに独自のカスタムモジュールを開発し、`--lib {my_lib}`コマンドを使用してParaGenにインポートできます。これにより、二次開発コードがメインコードから独立し、二次開発コードのメンテナンスとメインフレームワークの安定性が向上します。これにより、異なるプロジェクトの並列性と安定性が確保され、コード間の競合を防止できます。

ParaGenは、非常に寛容なApache 2オープンソースライセンスを採用しています。例えば、他の開発者が二次開発を行い、その後ソースコードをクローズすることを許可しているため、より優秀な開発者やチームが参加しやすくなります。

ParaGenは、翻訳品質において従来の自己回帰モデルを上回る初の並列テキスト生成ソフトウェアとして、速度と品質の両立を実証し、後続の研究に再現性の高い実装を提供します。アプリケーションレベルでは、モバイルデバイスにおける低消費電力・高速応答の導入におけるパフォーマンス要件を大幅に満たしています。今後の開発では、ParaGenは条件付きランダムフィールドモデルなどの並列アルゴリズムをさらに検討し、パフォーマンスをさらに向上させていきます。また、モバイル端末や組み込みシステムなど、より多くの導入環境に展開することで、より実用的なシナリオでのアプリケーション開発を促進します。