AI・機械学習
中級

DistilBERT(ディスティルバート)

Hugging Faceが開発したBERTの蒸留モデル。BERTの40%のパラメータ削減・60%の高速化を実現しつつ、97%の言語理解性能を維持する軽量NLPモデルの代表例。

0 回閲覧
0 いいね

DistilBERTとは

DistilBERT(Distilled BERT)は、Hugging Face の研究チームが 2019 年に発表した BERT の蒸留モデルです。知識蒸留の実用性を世に示した歴史的なモデルであり、「大規模モデルを小型化しても実用的な性能を維持できる」ことを広く認知させました。BERT-base(110M パラメータ、12層)から DistilBERT(66M パラメータ、6層)へ蒸留し、GLUE ベンチマークで 97% の性能を維持しながら 60% 高速化しました。

BERT との比較

項目BERT-baseDistilBERT差異
パラメータ数110M66M40%削減
層数12650%削減
隠れ層次元768768同一
アテンションヘッド1212同一
推論速度基準1.6×60%高速
モデルサイズ440MB260MB41%削減
GLUE スコア79.577.097%維持

蒸留の技術的詳細

3つの損失関数

DistilBERT の学習には3つの損失関数を組み合わせています。

  1. 蒸留損失(Distillation Loss): 教師BERT と生徒DistilBERT のソフトターゲット間のKLダイバージェンス。温度 T=8 で確率分布を平滑化
  2. マスク言語モデリング損失(MLM Loss): BERT と同じマスク言語モデリングタスクの交差エントロピー損失
  3. コサイン埋め込み損失(Cosine Embedding Loss): 教師と生徒の隠れ層出力のコサイン類似度を最大化

最終損失 = α × 蒸留損失 + β × MLM損失 + γ × コサイン損失

層の対応関係

BERT-base の12層のうち、2層ごとに1層を選択して DistilBERT の6層に対応させます(層0,2,4,6,8,10 → DistilBERT層0-5)。この対応を使ってコサイン埋め込み損失を計算します。

学習データと計算コスト

DistilBERT は BERT と同じデータ(English Wikipedia + BookCorpus、約16GB)で学習されました。学習には8基のV100 GPUで約90時間を要しました。BERTの事前学習(同規模GPUで数日〜1週間)と比較して、蒸留の計算コストは十分に実用的です。

ベンチマーク性能

タスクBERT-baseDistilBERT性能維持率
SST-2 (感情分析)93.5%91.3%97.6%
MNLI (テキスト含意)84.6%82.2%97.2%
QQP (質問重複判定)71.2%68.5%96.2%
QNLI (質問推論)90.5%89.2%98.6%
SQuAD v1.1 (QA)88.5 F186.9 F198.2%

派生モデルと影響

DistilBERT の成功は、蒸留モデルの研究と実用化を加速させました。

直接の後継

  • DistilGPT-2: GPT-2 の蒸留版
  • DistilRoBERTa: RoBERTa の蒸留版(より堅牢な事前学習の恩恵)
  • TinyBERT: より積極的な圧縮(BERT-base の 7.5× 小型化)
  • MobileBERT: モバイル向けに最適化された蒸留 BERT

多言語版

  • distilbert-base-multilingual-cased: 多言語版 BERT を蒸留。104言語に対応
  • 日本語特化版は community ベースで公開されている

実用例

テキスト分類

DistilBERT は分類タスクの本番環境で最も広く使われている蒸留モデルです。スパムフィルタ、感情分析、トピック分類などで BERT と同等の精度を半分以下のレイテンシで提供します。

検索エンジン

文書の意味検索(セマンティック検索)で DistilBERT ベースの bi-encoder が広く使われています。Sentence-Transformers ライブラリの all-MiniLM-L6-v2 も DistilBERT の設計思想を踏襲しています。

エッジデバイス

スマートフォンやIoTデバイス上でのテキスト処理に DistilBERT の ONNX / TFLite 変換版が使われています。CPU のみで実用的な推論速度を実現します。

FAQ

Q1: DistilBERTは2026年の今でも使う価値がありますか?

A1: はい。LLM が主流になった現在でも、分類・NER・感情分析などの決まったタスクでは DistilBERT クラスのモデルがコスト効率で優れています。LLM は1リクエストあたり数セントかかりますが、DistilBERT はCPUで毎秒数百件を処理でき、コストは実質ゼロです。

Q2: DistilBERTとGPT系蒸留モデルの違いは?

A2: DistilBERT は BERT(エンコーダ型)の蒸留で、テキスト分類・トークン分類・質問応答に特化します。GPT系蒸留(TinyLlama等)はデコーダ型で、テキスト生成・対話に特化します。用途に応じて選択してください。

Q3: Hugging FaceでDistilBERTを使うにはどうすればよいですか?

A3: from transformers import pipeline; classifier = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english") の2行でSST-2感情分析が動作します。AutoModel + AutoTokenizer での利用も同様にシンプルで、BERTからの移行は通常モデル名の変更のみです。