🚀 BERT-base uncased model fine-tuned on SQuAD v1
このモデルは、nn_pruning Pythonライブラリを使用して作成されました。線形層は、元の重みの30.0% を含んでいます。
このモデルは、nn_pruningの optimize_model
関数を使用しないと利用できません。これは、LayerNormsの代わりにNoNormsを使用しており、現時点でTransformersライブラリではサポートされていないためです。
推論を高速化するために、初期のBERTネットワークのようにGeLUsの代わりにReLUsを使用しています。これはTransformersライブラリでサポートされており、モデル設定の "hidden_act": "relu"
エントリでフラグが立てられているため、特別な処理は必要ありません。
モデル全体では、元の重みの 45.0% を保持しています(埋め込み層はモデルのかなりの部分を占めており、この方法では剪定されません)。
線形行列を単純にリサイズすることで、評価時に bert-base-uncasedの2.01倍の速度 で実行されました。これは、剪定方法によって構造化された行列が得られるため可能です。各行列の非ゼロ/ゼロ部分を確認するには、下のプロットにホバーしてください。
精度の面では、F1値が89.19 で、bert-base-uncasedの88.5と比較して 0.69のF1値の向上 が見られます。
✨ 主な機能
- このモデルは、SQuAD v1データセットでファインチューニングされたBERT-base uncasedモデルです。
- 線形層の重みを削減し、推論速度を向上させています。
- 精度も向上しており、F1値が0.69向上しています。
📦 インストール
nn_pruningをインストールします。これには最適化スクリプトが含まれており、空の行/列を削除することで線形層を小さくパックします。
pip install nn_pruning
💻 使用例
基本的な使用法
from transformers import pipeline
from nn_pruning.inference_model_patcher import optimize_model
qa_pipeline = pipeline(
"question-answering",
model="madlag/bert-base-uncased-squadv1-x2.01-f89.2-d30-hybrid-rewind-opt-v1",
tokenizer="madlag/bert-base-uncased-squadv1-x2.01-f89.2-d30-hybrid-rewind-opt-v1"
)
print("bert-base-uncased parameters: 200.0M")
print(f"Parameters count (includes only head pruning, not feed forward pruning)={int(qa_pipeline.model.num_parameters() / 1E6)}M")
qa_pipeline.model = optimize_model(qa_pipeline.model, "dense")
print(f"Parameters count after complete optimization={int(qa_pipeline.model.num_parameters() / 1E6)}M")
predictions = qa_pipeline({
'context': "Frédéric François Chopin, born Fryderyk Franciszek Chopin (1 March 1810 – 17 October 1849), was a Polish composer and virtuoso pianist of the Romantic era who wrote primarily for solo piano.",
'question': "Who is Frederic Chopin?",
})
print("Predictions", predictions)
📚 ドキュメント
ファイン剪定の詳細
このモデルは、HuggingFaceの モデル チェックポイントを SQuAD1.1 でファインチューニングし、bert-large-uncased-whole-word-masking-finetuned-squad モデルから知識蒸留したものです。
このモデルは大文字小文字を区別しません。つまり、"english" と "English" は同じとみなされます。
ブロック剪定の副作用として、一部のアテンションヘッドが完全に削除されます。合計144個のヘッドのうち、55個(38.2%)が削除されました。
以下は、剪定後のネットワーク内で残りのヘッドがどのように分布しているかの詳細なビューです。
SQuAD1.1データセットの詳細
データセット |
分割 |
サンプル数 |
SQuAD1.1 |
トレーニング |
90.6K |
SQuAD1.1 |
評価 |
11.1k |
ファインチューニング
Memory: 64 GiB
GPUs: 1 GeForce GTX 3090, with 24GiB memory
GPU driver: 455.23.05, CUDA: 11.1
結果
Pytorchモデルファイルサイズ: 374MB
(元のBERT: 420MB
)
指標 |
値 |
元の値 (Table 2) |
変化 |
EM |
82.21 |
80.8 |
+1.41 |
F1 |
89.19 |
88.5 |
+0.69 |
📄 ライセンス
このモデルはMITライセンスの下で提供されています。