🚀 BERT-base uncasedモデルをSQuAD v1でファインチューニング
このモデルは、nn_pruning Pythonライブラリを使用して作成されました。線形層は元の重みの27.0% を含んでいます。
このモデルは、nn_pruningの optimize_model
関数を使用しないと利用できません。なぜなら、このモデルはLayerNormsの代わりにNoNormsを使用しており、現在のTransformersライブラリではサポートされていないためです。
このモデルは、初期のBERTネットワークとは異なり、GeLUsの代わりにReLUsを使用して推論を高速化しています。これはTransformersライブラリでサポートされており、モデル設定の "hidden_act": "relu"
エントリでフラグが立てられているため、特別な処理は必要ありません。
モデル全体では、元の重みの 43.0% を保持しています(埋め込み層はモデルの重要な部分を占めており、この方法では剪定されません)。
線形行列を単純にリサイズすることで、評価時に bert-base-uncasedの1.96倍の速度 で実行されます。これは、剪定方法によって構造化された行列が得られるため可能です。行列の非ゼロ/ゼロ部分を視覚化するには、下のプロットにホバーしてください。
精度の面では、F1値が88.33 で、bert-base-uncasedの88.5と比較して、F1値が0.17低下 しています。
🚀 クイックスタート
このモデルを使用するには、まず nn_pruning
をインストールし、optimize_model
関数を用いてモデルを最適化する必要があります。詳細な手順は以下の通りです。
✨ 主な機能
- 線形層が元の重みの27.0%を含み、モデル全体で元の重みの43.0%を保持。
- GeLUsの代わりにReLUsを使用して推論を高速化。
- 評価時にbert-base-uncasedの1.96倍の速度で実行。
📦 インストール
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-x1.96-f88.3-d27-hybrid-filled-opt-v1",
tokenizer="madlag/bert-base-uncased-squadv1-x1.96-f88.3-d27-hybrid-filled-opt-v1"
)
print("bert-base-uncased parameters: 191.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 |
ファインチューニング
CPU: Intel(R) Core(TM) i7 - 6700K CPU
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 |
81.31 |
80.8 |
+0.51 |
F1 |
88.33 |
88.5 |
-0.17 |
🔧 技術詳細
このモデルは、nn_pruning
ライブラリを用いて作成され、線形層の剪定を行っています。剪定により、モデルの重みを削減し、推論速度を向上させています。また、一部のアテンションヘッドも削除されています。
📄 ライセンス
このモデルはMITライセンスの下で提供されています。