このリポジトリは、エジンバラ大学のアレクサンドラバーチとレイチェル・ボーデンがアドバイスした「転送学習による低リソースの神経機械翻訳の改善」というタイトルで、私の修士論文中に行われた作業を提示します。 2020年8月に提出されました。XLM-Roberta(XLM-R)などのマスクされた言語モデルを利用することにより、ニューラル機械翻訳(NMT)システムの転送学習アプローチの一部を調査しました[1]。このプロジェクトは、主に、マスクされた言語モデル(MLM)からのコンテキスト化された単語表現のトランスベースのNMTシステム[2]の注意ベースの融合を介して構築されました。また、参照作業に基づいて、このシステムの注意ヘッドの分析により、構文知識の転送を経験的に追跡しました[3]。このガイドは、IITボンベイ英語ヒンディ並列データセット[4]の小さなサブセットを使用した小さな作業例とともに、必要なインストールの指示を提供します。この作業で使用されるすべてのハイパーパラメーターには、論文からアクセスできます。
目次
- 注意ベースの融合の概要
- インストール
- 前処理
- ベースラインNMTシステム
- XLM-R融合NMTシステム
- Finetuning xlm-r
- スクリプト変換
- 構文分析
- 追加情報
- 参照
1。注意ベースの融合の概要
- XLM-Rを、作業後の注意ベースの融合を使用して、トランスベースのNMTシステムと接続しました[2]。
- 標準のNMTエンコーダーとNMT-Decoder以外の追加のXLM-Rモジュールで構成されるXLM-R融合NMTシステムと呼ばれます。
- 入力文はXLM-RとNMTエンコーダーの両方に渡され、文の2つの異なる表現が得られます。 XLM-Rのコンテキスト化された単語表現は、注意ベースの融合を使用してNMTエンコーダー表現と融合しています。同様に、XLM-R表現はデコーダーと融合されています。
2。インストール
2.1。要件
- Python> = 3.5
- pytorch> = 1.5.0
- Tensorflow == 1.13.1
- Huggingface Transformers == 2.11.0
- matplotlib
- シーボーン
- Scikit-Learn
- Sacrebleu> = 1.4.10
- centepiece> = 0.1.91
- Inding NLPライブラリ> = 0.6
- MOSESDECODER
2.2パッケージディレクトリへのインストール
- この場所にMosesDecoderをダウンロード、抽出、インストールします。
- この場所にIncING NLPライブラリをダウンロード、抽出、インストールします。また、この場所でインドのNLPリソースを抽出します。インド言語で作業していない場合は、このステップをスキップできます。
- この場所にHuggingface Transformersライブラリをダウンロード、抽出、インストールします。
2.3 FairSeqのインストール
- このリポジトリをクローンします。その親ディレクトリは、この作業のすべての前処理、トレーニング、評価スクリプトのホームディレクトリとして機能します。
- Home Directoryから次のコマンドを実行します。
cd 'work/systems/baseline-NMT/fairseq'
pip install --editable ./
- FairSeqライブラリとその依存関係に基づいて、ベースラインNMTシステムをインストールします。この場所にあるFairSeqシステムの複数のバージョンを使用したことに注意してください。そのため、競合を回避するために、トレーニングおよび評価ファイルの正確なパスを常に使用しました。
2.4 XLM-Rのダウンロードと抽出
- HuggingfaceハブからXLM-Rに関連付けられたすべてのファイルをダウンロードします。オプション「モデル内のすべてのファイルをリスト」を使用して、 config.json、pytorch_model.bin、centepiece.bpe.model、およびtokenizer.jsonというファイルを表示およびダウンロードします。
- これらのファイルをこのディレクトリに配置します。
3。プレアクセス
- FairSeqとBert-NMTライブラリにアクセスして、基本的な前処理、トレーニング、評価の手順に精通してください。
- Mosesdecoderを使用して英語のデータセットを前処理しましたが、ヒンディー語、グジャラート語、ベンガル語、マラーティー語などのインド語のInding言語のInding NLPライブラリに切り替えました。
- セグメンテーションという単語には、tentepiece BPEを使用しました。ソース言語とターゲット言語が実質的な文字を共有したとき、このスクリプトを使用してジョイントBPEでデータセットを処理しました。それ以外の場合、別のスクリプトが使用されました。
- この作業を実証するために使用される英語のヒンディデータセットには、後者のスクリプトを使用しました。
- HOME_DIRをこのリポジトリの親ディレクトリに設定します。
- raw_data_dirに列車、テスト、および開発ファイルを既に置いています。同じ命名規則でファイルでそれらを変更できます。
- トレーニングデータを大規模な単一言語データセットと統合して、より良いBPEセグメンテーションを学習しました。これらのデータセットをraw_monolingual_data_dirに置きます。私たちは私たちの作品で大規模なオスカーコーパスを使用しましたが、このデモでは同じ列車ファイルを使用しました。
- スクリプトに示すように、 clean_norm_tok関数にコメントすることにより、言語に基づいてインドNLPまたはモーゼスライブラリを切り替えます。
- すべてのファイルをプリプロセッシングし、 preprocessed_data_dirで保存するこのスクリプトを実行します。 Tokenized-BPEディレクトリには、正規化、トークン化などのすべての中間ファイル、およびすべての最終的なBPEDファイルが含まれています。
- 次に、このスクリプトは、FairSeqベースのシステムで使用されるデータを2装備し、バイナリディレクトリに保存します。 XLM-R融合システムのFairSeq Binariserを使用して、ベースラインのファイルとXLM-R融合システムのファイルをビナライズします。 -bert-model-nameを使用してxlm-rトークンザーにアクセスしてソースファイルをトークン化します。これは、xlm-r融合システムの標準NMTエンコーダーとともにxlm-rコンポーネントによっても使用されているためです。
- (オプション)このシステムは主にXLM-Rに基づいていることに注意してくださいが、Huggingface Transformers Libraryが提供する他のマスクされた言語モデルも使用することもできます。次のようにいくつかの変更を加える必要があります:
- ステップ2.4に記載されているように、新しい言語モデルをダウンロードして抽出します。
- XLM-R融合システムのHuggingface Transformersライブラリから対応するトークナーとモデルを、以下に説明するデフォルトのものとインポートします。
from transformers import XLMRobertaModel
BertModel = XLMRobertaModel
from transformers import XLMRobertaTokenizer
BertTokenizer = XLMRobertaTokenizer
- 次のファイルにインポートする必要があります。
- work/systems/xlm-r-fused/bert-nmt/preprocess.py
- work/systems/xlm-r-fused/bert-nmt/interactive.py
- work/systems/xlm-r-fused/bert-nmt/fairseq_cli/preprocess.py
- work/systems/xlm-r-fused/bert-nmt/fairseq_cli/interactive.py
- work/systems/xlm-r-fused/bert-nmt/fairseq/tasks/translation.py
- work/systems/xlm-r-fused/bert-nmt/fairseq/models/transformer.py
- work/systems/xlm-r-fused/bert-nmt/fairseq/binarizer.py
- さらに、新しい言語モデルに従って、これらのファイルの開始
(<s>)および終了(</s>)トークンを変更する必要があります。
4.ベースラインNMTシステム
4.1トレーニングベースラインNMTシステム
- このスクリプトで変圧器ベースのベースラインシステムをトレーニングします。
- 勾配を蓄積して、より大きな有効なバッチサイズを形成します。 batch size =(gpusの数) *( -max-tokens ) *(- update-freq )。
- BLEスコアの減少を伴うチェックポイントの最大数を決定する-patienceを決定する早期停止検証戦略を使用します。
- 私たちの作業では、トランスアーキテクチャ: Transformer_IWSLT_DE_ENをデフォルトとして使用しています。 XLM-R融合システムは、ベースラインシステムからパラメーターを復元するため、アーキテクチャが一致するはずです。ベースラインシステムに他のより大きなアーキテクチャを使用することもできますが、XLM-R融合システムにも同じ基礎となるアーキテクチャを提供する必要があります。注意ベースの融合を実装する追加のアーキテクチャについては、このファイルを確認してください。
- Baseline_nmt_checkpoints_dirでチェックポイントを保存します。
4.2ベースラインNMTシステムの評価
- このスクリプトでベースラインシステムを評価します。
- 最適なチェックポイントを使用して、BPEDテストファイルを評価する必要があります。 -remove-bpe = centepieceを使用して、出力ファイルからBPEセグメンテーションを削除します。
- Scriptに示されているように、indic NLPまたはMOSESのいずれかを使用して、出力ファイルをデコーン化します。
- このスクリプトは、ターゲット言語の手付かずのテストファイルを使用して、Sacrebleuを使用して最終的なBLEUスコアを計算します。
5。XLM-R融合NMTシステム
5.1 XLM-R融合NMTシステムのトレーニング
- この場所でシステムを使用するこのスクリプトでXLM-R融合システムをトレーニングします。
- BERT_NAMEは、このシステムで使用されるXLM-Rバリアントへのパスを保存します。ここでは、事前に訓練されたバリエーションまたは微調合されたバリエーションを使用できます。
- このスクリプトは、ベースラインシステムから最適なチェックポイントをコピーし、XLM-R融合システムでさらにトレーニングするためのパラメーターを復元します。
- このシステムは、早期停止を提供しなかった以前のバージョンのFairSeqに基づいて構築されたため、このスクリプトは、-Max-Updateトレーニング手順のすべてのチェックポイントを保存し、後で評価されます。
- エンコーダー側とデコーダー側の両方で注意融合をするには、 transformer_s2_iwslt_de_enとして-archを使用します。また、デコーダーのみの融合には、 transformer_iwslt_de_enを使用します。
- パラメーターはすでに最適なレベルに近いため、小さな学習率を使用してください。
5.2 XLM-R融合NMTシステムの評価
- ベースラインシステムに使用されるスクリプトに似たこのスクリプトでXLM-R融合システムを評価します。
- このスクリプトは特定のチェックポイントを使用してBLEUスコアを計算しますが、別のスクリプトはそれを拡張してすべてのチェックポイントのスコアを計算します。
- 前に述べたように、このシステムには早期停止機能はありません。そのため、数個のエポックごとにすべてのチェックポイントを保存し、検証セットで評価しました。次に、テストセット評価のために、前のスクリプトでBest_Checkpointを使用して最適なチェックポイントを設定できます。
- パスを2つの異なるテストファイルへのパスを使用します。これは、XLM-R融合NMTシステムの異なるコンポーネントで使用されます。 test_src_bpedは、標準のNMTエンコーダーで使用されるファイルをポイントし、 test_src_rawはxlm-rコンポーネントで使用される生このソースファイルをポイントします。 XLM-Rは、Huggingface Transformersライブラリが提供するトークンザーを使用して独自の内部トークン化を使用するため、XLM-Rが必要としています。 BERT_NAMEが対応するXLM-Rバリアントディレクトリを指していることを確認して、対応するトークン剤にアクセスできるようにします。
6。XLM-RのFinetuning
6.1多言語および単一言語のバリアント
- XLM-Rモデルを触知して、元の事前訓練されたモデルの多言語および単一言語のバリエーションを作成しました。
- Indo-Aryan-XLM-R-Baseは多言語バリアントであり、ヒンディー語、グジャラート語、マラーティー語、ベンガル語の関連言語でXLM-Rベースを獲得することによって作成されています。構文、形態学、正書法、語彙の類似性を活用します。
- Gujarati-XLM-R-BaseおよびGujarati-XLM-R-Largeは、単一のグジャラート語データセットで微調整された単一言語のバリアントです。さらに、Gujarati-Dev-XLM-R-Baseは、Devanagariスクリプトに変換されたグジャラート語で作成されます。これらのモデルは、ここで入手可能なHuggingface Hubでリリースされています。
- ここで入手可能なXLM-RのPytorchバリアントを事前に訓練したモデルとして使用しました。
6.2データの準備
- 私たちは主にこのチュートリアルに従いましたが、次に進む前に訪問することをお勧めします。
- このスクリプトを使用して、データを準備します。 raw_mono_sourceを使用してパスが設定されている単一の単一言語データセットのトレーニングおよび検証ファイルを準備します。次に、上記のトレーニングファイルに対して行われたように、Indic NLPライブラリを使用して前処理されます。
- このスクリプトでは、 BERT_NAMEは、辞書にアクセスするために使用される元の前提条件のXLM-Rモデルを指しています。
- 次に、ここで入手可能なFairSeqライブラリの別のバリアントを使用して2装備されています。 XLM-Rトークンザーを使用します。これにより、XLM-Rを事前に作成するために元のデータが行われたのと同じ方法でデータがトークン化されるようになります。
- (オプション)他のマスクされた言語モデルを微調整する場合は、このファイルにその言語モデルをインポートする必要があります。次の変更を加えます。
- デフォルトのxlmrobertAtokenizerの代わりに、対応するトークンザーをインポートします
from transformers import XLMRobertaTokenizer
BertTokenizer = XLMRobertaTokenizer
- ここでモデル名を置き換えます
dict = BertTokenizer.from_pretrained("xlm-roberta-base")
- 前処理の提案と同様に、開始トークンとエンドトークンを交換します。
- 同様に、多言語モデルを作成する場合は、他の言語のデータを準備します。
6.3モデルのトレーニングと評価
- このスクリプトを使用して、単一言語のバリアントを微調整します。
- モデルを微調整するためにステップ4.1で使用される同じベースラインNMTシステムを使用します。ここでは、 Restore_Pointが事前に訓練されたモデルチェックポイントを指します。単一言語のバリアントには、 -taskをmasked_lmとして使用します。
- Similalllyは、このスクリプトを使用して多言語バリアントを作成します。 -TaskをMultiNALINGUAL_MASKED_LMとして使用して、異なる言語からデータをマージします。
- また、より大きなデータセットが小さなデータセットを圧倒している場合のデータの不均衡の影響を最小限に抑えるためにそれを再サンプリングします。 -multilang-sampling-alphaを使用して、サンプリング比を調整します。詳細については、元のXLM-Rペーパー[1]を参照してください。
- 定期的にチェックポイントを保存し、最小検証損失でモデルを選択しました。
6.4 Pytorch CheckpointをHuggingface Transformersと互換性のあるものにする
- 保存されたPytorchチェックポイントを、Huggingface Transformersライブラリと互換性のある別のバージョンに変換する必要があります。
- パッケージディレクトリにトランスライブラリをインストールしたと仮定します。次に、次のコマンドを使用します。
python packages/transformers/src/transformers/convert_roberta_original_pytorch_checkpoint_to_pytorch.py --roberta_checkpoint_path best_ck_dir/ --pytorch_dump_folder_path ./
- ここでは、 best_ck_dirには、 model.pt 、 dict.txt 、およびcentepiece.bpe.modelと呼ばれるfinetuned xlm-rチェックポイントが含まれています。後者の2つのファイルは、事前に訓練されたモデルとフィネチュームモデルの両方で同じであり、ここからアクセスできます。 pytorch_dump_folder_pathは、トランス互換のpytorchバージョンを保存する必要があるディレクトリを指します。
- Transformers Libraryには、ファイルconvert_roberta_original_pytorch_checkpoint_to_pytorch.pyにいくつかの問題があることに注意してください。このファイルを交換し、ライブラリを再構築します。
- (オプション)FairSeqライブラリを最初に使用せずに、ハグするフェイスガイドを直接使用してモデルを微調整できます。 Huggingfaceが提供するマルチGPUのサポートが不十分であるため、このアプローチは非常に遅いことがわかりました。彼らは、不均衡なGPU使用を引き起こすマルチプロセッシングよりもマルチスレッドを実装しました。 FairSeqは、これを処理するために独自のモジュールを実装しました。これについてはここで説明します。
- Finetuning後、最終的なPytorchバージョンを使用して、XLM-R融合システムのトレーニングと評価のために、元の事前訓練モデルを置き換えてください。
7。スクリプト変換
- いくつかのスクリプト変換戦略を使用しました。そこでは、一般的なスクリプトを使用して、関連言語間の語彙的類似性を悪用しようとしました。 INDIC NLPライブラリを使用して、同じものを変換しました。
- XLM-R融合システムは、XLM-Rで同じ入力文とNMTエンコーダーで処理されるため、これらのモジュールのスクリプトの異なる組み合わせを試しました。たとえば、グジャラティヒンディのペアでは、グジャラートのスクリプト文をXLM-Rモジュールに渡しましたが、devanagariスクリプトのグジャラティをNMTエンコーダーに渡して、ターゲット言語で語彙オーバーラップを最大化しました。
- 異なるスクリプトの文は同じ意味の意味を持っているため、注意に基づいた融合が可能でした。詳細については、論文を確認してください。
- この機能は、ソースファイルをXLM-Rにバイナリングするように変更することにより、XLM-R融合システムで使用できます。これらのファイルをターゲットスクリプトに変換するこのスクリプトを使用して実行できます。
- 同様に、スクリプトを使用して、ソースファイルのスクリプトをXLM-Rに渡すだけでなく、標準のNMTエンコーダーに変換できます。
- 次に、以前に初期トレーニングスクリプトを使用して、ベースラインとXLM-R融合NMTシステムをトレーニングします。
- これらのシステムを以前のように、初期評価スクリプトを使用して評価します。ターゲット言語がソース言語のスクリプトに変換される場合、ポストプロセスステップとして最初のスクリプトに変換する必要があります。これは、ベースラインおよびXLM-R融合システムの「スクリプト」ディレクトリ内のスクリプト構成ディレクトリに存在する評価スクリプトを使用することで実行できます。
8。構文分析
[3]の作業に精通してください。[3]のコードはこちらから入手できます。私たちの作業は、XLM-R融合システムでの構文知識の転送を追跡するために拡張されています。
8.1データの準備
- ユニバーサル依存関係(UD)データセットの処理
- 構文分析には、Hindi UDデータセット[5] [6]を使用しました。
- このスクリプトを使用して、生のUD列車とテストファイルを処理します。 UDファイルから構文ヘッドと対応する構文関係を抽出します。
- 次に、このスクリプトを使用して、上記のファイルをJSON形式に変換します。ここでの指示を使用します。
- 最後に、このスクリプトを使用して上記のファイルから生の文を抽出します。
- FairSeq推論のソースファイルの処理
- ソーステストファイルとして生の文を使用して上記のファイルを使用します。これらのファイルを使用して、ベストベースラインとXLM-R融合システムチェックポイントを評価します。
- 手順3(前処理)に記載されているように、これらのファイルを事前に処理し、FairSeqのバイナリングされたファイルを準備します。ここにはターゲットサイドデータがないため、修正された前処理スクリプトを使用して、ソースサイドファイルのみを処理します。
8.2ベースラインおよびXLM-R融合システムからの注意マップの抽出
- 上記の双方のデータを使用して、評価スクリプトを使用してXLM-R融合システムから注意マップを抽出します。同様に、このスクリプトを使用して、ベースラインシステムからマップを抽出します。
- これらのスクリプトは、ベースラインNMTシステムとXLM-R融合NMTシステム上に構築された2つの異なるシステムを使用します。これは、それぞれこことここにアクセスできます。
- これらのシステムは、すべての変圧器エンコーダーレイヤーに存在するすべての注意ヘッドの自己関節マップを抽出します。さらに、XLM-R融合に基づいて構築されたシステムは、XLM-R表現とNMTエンコーダー表現の注意ベースの融合に起因するBert-Attentionマップも抽出します。
- 追加のパラメーターを使用して、save_attn_mapsを使用して、注意マップを保存するパスを提供します。それぞれのマップを保存するために、その内部に自己、 bert 、 batch_sentencesのフォルダーを作成します。 batch_sentences対応する文は、注意マップが抽出されます。このファイルを使用して、処理された文の順序を確認できます。
- これらのマップは、単一のファイルにバッチサイズと同じ文の数が含まれるnumpy配列に保存されます。
- このスクリプトを使用して、注意マップをさらに処理します。
- 注意マップとJSONファイルを使用してピクルスオブジェクトを作成します。
- 次に、BPEレベルトークンの注意マップを単語レベルに変換します。詳細については、論文を確認してください。
- コードをテストするために、ここで利用可能なベースラインとXLM-R融合システムの両方にピクルスファイルを使用できます。この場所で圧縮ファイルをダウンロードして抽出します。これらのピクルスファイルは、言及された場所に既に存在するヒンディー語のUD前処理データで動作します。
8.3注意マップと注意ベースのプロービング分類器を視覚化します
- 構文分析ノートブックはこちらをご覧ください。上記の列車とテストピクルスのファイルにtrain_pathとdev_pathをポイントします。ここでは、ハイパーパラメーターを使用していないため、開発ファイルとテストファイルは同じです。
- ベースラインおよびXLM-R融合システムから得られた重みを使用して、異なる層と注意ヘッドの正しい構文ヘッドを決定しました。
- 構文ヘッドが正常に予測されたいくつかの定性的な例があります。
- 最後に、注意ベースのプロービング分類器をトレーニングおよび評価することにより、最終的なUASスコアを提供します。すべての層と注意のヘッドによって与えられる自己触媒重みの重み付き組み合わせが必要です。
9。追加情報
- ライセンス:私たちの作業はMITライセンスの下でライセンスされていることに注意してください。ただし、独自のライセンスを備えた他の作品やデータセットを使用しています。具体的には、FairSeqライブラリに基づいているすべてのシステムには、それぞれのディレクトリに対応するライセンスがあります。さらに、READMEファイルの指定されたリンクを使用して、英語Hindi IIT Bombay Parallel DatasetおよびHindi Universal Dependencies Datasetのライセンスを確認してください。同様に、READMEに記載されているように、ファイルの1つを変更したように、Huggingface Transformersライブラリのライセンスを確認します。
- 助けが必要な場合は問題を提起してください。この作業が便利だと思う場合は、自由に使用してください。私の論文も引用してください。
10。参照
[1]コノー、アレクシス、他「大規模な監視されていない言語代表学習。」 arxiv preprint arxiv:1911.02116(2019)
[2] Zhu、Jinhua、et al。 「バートを神経機械の翻訳に組み込む。」学習表現に関する国際会議。 2019年
[3] Clark、K.、Khandelwal、U.、Levy、O。、&Manning、CD(2019、August)。バートは何を見ていますか?バートの注意の分析。 2019 ACLワークショップBlackBoxNLPの議事録:NLPのニューラルネットワークの分析と解釈(pp。276-286)。
[4] Anoop Kunchukuttan、Pratik Mehta、Pushpak Bhattacharyya。 IIT Bombay English-Hindi Parallel Corpus。言語リソースと評価会議。 2018年。
[5] Riyaz Ahmad Bhat、Rajesh Bhatt、Annahita Farudi、Prescott Klassen、Bhuvana Narasimhan、Martha Palmer、Owen Rambow、Dipti Misra Sharma、Ashwini Vaidya、Sri Ramagurumurthy Vishnu、Fei Xia。ヒンディー語/ウルドゥー語のツリーバンクプロジェクト。 Linguistic Annotationのハンドブック(Nancy IdeとJames Pustejovskyにより編集)、Springer Press。 2015年。
[6] Martha Palmer、Rajesh Bhatt、Bhuvana Narasimhan、Owen Rambow、Dipti Misra Sharma、Fei Xia。ヒンディー語構文:依存関係、語彙述語の構造、およびフレーズ構造の注釈。 2009年12月14〜17日、インド、ハイデラバード、ICON-2009、ICON-2009、2009年、第7回国際会議の議事録。