
Huggingface Hubで、1つのBashコマンドを使用して、すべてのマスクされた言語モデルから蒸留モデルを作成します。
特徴:
まず、プロジェクトをクローンして依存関係をインストールします。
# clone project
git clone https://github.com/iPieter/universal-distillation
# install project
cd universal-distillation
pip install -e .
pip install -r requirements.txtこのチュートリアルでは、コマンドラインから蒸留タスクを設定する方法を示します。 2つのことが必要です。
bert-base-uncasedモデルを使用します。Europarl Corpusの英語セクションを使用します。これは、プロの通訳者や翻訳者によって作成されたヨーロッパの論争からの非常に高品質の平行コーパスです。また、最近では言語コーパスでもわずか114 MBですが、蒸留チュートリアルでは大丈夫です。
wget https://opus.nlpl.eu/download.php ? f = Europarl/v8/mono/en.txt.gz -O en.txt.gz
gunzip en.txt.gzデータは解凍され、ファイルen.txtに保存されています。
これでデータができました。トレーニングを開始できます。教師モデルのダウンロードは自動的に発生するため、これを手動で行う必要はありません。これに時間がかかりすぎて、たとえばタイミングを得るためにトレーニングを試してみたい場合は、 --limit_train_batches Nを追加できます。これにより、各エポックはトレーニング中にNバッチに制限されます。
python universal_distillation/distillation.py
--batch_size 8
--gpus 1
--max_epochs 3
--save_dir my_distilled_model/
--teacher bert-base-uncased
--data en.txtそのコマンドを実行すると、バックグラウンドで発生することがいくつかあります。まず、このライブラリは学生と教師モデルを作成します。教師はbert-base-uncasedであり、生徒はデフォルトで教師と同じアーキテクチャを使用します。ヘッドの数のみが12ではなく小さくなります。特定のドメイン(Europarl)でトレーニングしているため、これで十分です。もちろん、さまざまな教師と小規模な学生と混合して一致させることができますが、パフォーマンスは大きく異なります。
第二に、Huggingface Libraryは教師モデルとトークンザーをダウンロードします。第三に、データセットはディスクからロードされ、トークネイザーで初期化され、トークン化自体が後でデフォルトで発生することに注意してください。最後に、蒸留ループが始まります。
最後に、Huggingfaceライブラリでモデルを使用できます!学生(Pytorchモデルとトークネイザー)のすべてのファイルは、前に定義したフォルダーに保存されます: my_distilled_model/ 。このフォルダーからモデルを直接インポートし、3行のみでマスクされた言語モデリングタスクをテストできます。
from transformers import pipeline
p = pipeline ( "fill-mask" , model = "my_distilled_model/" )
p ( "This is a [MASK]." )これはStraitForwardの例でしたが、これは多くの場合、独自のドメインに適応したモデルを作成するのに十分です。この場合、そうです
擬似プレキシティを使用して本質的な評価を実行することもできます。教師と蒸留モデルを指定する必要がありますが、評価のみを実行する場合は、両方の引数のターゲットモデルを提供できます。
python universal_distillation/evaluation.py
--gpus=0
--limit_test_batches=500
--teacher=pdelobelle/robbert-v2-dutch-base
--data=data/oscar_dutch/nl_dedup_part_2.txt
--checkpoint=DTAI-KULeuven/robbertje-39-gb-non-shuffledこのコードベースは、ECML-PKDD 2022ペーパーにも使用されており、言語モデルの知識蒸留と公平性の制約を組み合わせています。この論文でテストした制約は、性別代名詞の海峡の代替物ですが、コードは一口の代替品をサポートしています。これらは、どのトークンを均等にしたいかを定義することにより、蒸留プロセスに追加できます。たとえば、 heとsheトークンIDS 2016と2002を持っているので、両方のトークンで置換ペアを定義できます。両方のトークンの確率が均等になります。
90行目の周りでuniversal-distillation/distillation.py BaseTransformer変更することでトークンを追加できます。BasetransFormerモデルを作成するときに制約を含めることも忘れないでください。
constraints = [[ 2016 , 2002 ]] # she # he
model = BaseTransformer ( args . teacher , constraints = constraints , ** vars ( args ))