モデル概要
モデル特徴
モデル能力
使用事例
🚀 DistilBERT base model (uncased)
このモデルは、BERT base model の蒸留バージョンです。この論文 で紹介されました。蒸留プロセスのコードは こちら で確認できます。このモデルは大文字と小文字を区別しません。つまり、english と English を区別しません。
🚀 クイックスタート
このモデルは、マスク言語モデリングや次文予測に使用できますが、主に下流タスクでファインチューニングすることを目的としています。興味のあるタスクでファインチューニングされたバージョンを モデルハブ で探すことができます。
✨ 主な機能
DistilBERT は、BERT よりも小さく高速なトランスフォーマーモデルです。BERT base モデルを教師モデルとして、同じコーパスで自己教師付き学習により事前学習されています。これは、人間がラベル付けを行わず、生のテキストのみを使用して、BERT base モデルを用いた自動プロセスで入力とラベルを生成して事前学習されたことを意味します。具体的には、以下の3つの目的で事前学習されています。
- 蒸留損失:モデルは、BERT base モデルと同じ確率を返すように学習されました。
- マスク言語モデリング (MLM):これは、BERT base モデルの元の学習損失の一部です。文章を入力として受け取ったとき、モデルは入力の単語の15%をランダムにマスクし、マスクされた文章全体をモデルに通して、マスクされた単語を予測する必要があります。これは、通常は単語を順番に見る従来の再帰型ニューラルネットワーク (RNN) や、内部的に未来のトークンをマスクする GPT のような自己回帰モデルとは異なり、文章の双方向的な表現を学習することができます。
- コサイン埋め込み損失:モデルは、BERT base モデルとできるだけ近い隠れ状態を生成するように学習されました。
このように、モデルは教師モデルと同じ英語の内部表現を学習しながら、推論や下流タスクでより高速に動作します。
📦 インストール
このドキュメントにはインストール手順に関する記載がありません。
💻 使用例
基本的な使用法
マスク言語モデリングのパイプラインでこのモデルを直接使用することができます。
>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='distilbert-base-uncased')
>>> unmasker("Hello I'm a [MASK] model.")
[{'sequence': "[CLS] hello i'm a role model. [SEP]",
'score': 0.05292855575680733,
'token': 2535,
'token_str': 'role'},
{'sequence': "[CLS] hello i'm a fashion model. [SEP]",
'score': 0.03968575969338417,
'token': 4827,
'token_str': 'fashion'},
{'sequence': "[CLS] hello i'm a business model. [SEP]",
'score': 0.034743521362543106,
'token': 2449,
'token_str': 'business'},
{'sequence': "[CLS] hello i'm a model model. [SEP]",
'score': 0.03462274372577667,
'token': 2944,
'token_str': 'model'},
{'sequence': "[CLS] hello i'm a modeling model. [SEP]",
'score': 0.018145186826586723,
'token': 11643,
'token_str': 'modeling'}]
高度な使用法
与えられたテキストの特徴を取得する方法を PyTorch と TensorFlow でそれぞれ紹介します。
PyTorch
from transformers import DistilBertTokenizer, DistilBertModel
tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased')
model = DistilBertModel.from_pretrained("distilbert-base-uncased")
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)
TensorFlow
from transformers import DistilBertTokenizer, TFDistilBertModel
tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased')
model = TFDistilBertModel.from_pretrained("distilbert-base-uncased")
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)
📚 ドキュメント
想定される用途と制限
このモデルは、マスク言語モデリングまたは次文予測に生モデルを使用できますが、主に下流タスクでファインチューニングすることを目的としています。興味のあるタスクでファインチューニングされたバージョンを モデルハブ で探すことができます。
このモデルは、主に文全体(潜在的にマスクされた)を使用して決定を行うタスク、例えばシーケンス分類、トークン分類、質問応答などでファインチューニングすることを目的としています。テキスト生成などのタスクには、GPT2 のようなモデルを使用する必要があります。
制限とバイアス
このモデルに使用された学習データは比較的中立的と言えるかもしれませんが、このモデルはバイアスのある予測を行う可能性があります。また、教師モデルのバイアス の一部を引き継いでいます。
>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='distilbert-base-uncased')
>>> unmasker("The White man worked as a [MASK].")
[{'sequence': '[CLS] the white man worked as a blacksmith. [SEP]',
'score': 0.1235365942120552,
'token': 20987,
'token_str': 'blacksmith'},
{'sequence': '[CLS] the white man worked as a carpenter. [SEP]',
'score': 0.10142576694488525,
'token': 10533,
'token_str': 'carpenter'},
{'sequence': '[CLS] the white man worked as a farmer. [SEP]',
'score': 0.04985016956925392,
'token': 7500,
'token_str': 'farmer'},
{'sequence': '[CLS] the white man worked as a miner. [SEP]',
'score': 0.03932540491223335,
'token': 18594,
'token_str': 'miner'},
{'sequence': '[CLS] the white man worked as a butcher. [SEP]',
'score': 0.03351764753460884,
'token': 14998,
'token_str': 'butcher'}]
>>> unmasker("The Black woman worked as a [MASK].")
[{'sequence': '[CLS] the black woman worked as a waitress. [SEP]',
'score': 0.13283951580524445,
'token': 13877,
'token_str': 'waitress'},
{'sequence': '[CLS] the black woman worked as a nurse. [SEP]',
'score': 0.12586183845996857,
'token': 6821,
'token_str': 'nurse'},
{'sequence': '[CLS] the black woman worked as a maid. [SEP]',
'score': 0.11708822101354599,
'token': 10850,
'token_str': 'maid'},
{'sequence': '[CLS] the black woman worked as a prostitute. [SEP]',
'score': 0.11499975621700287,
'token': 19215,
'token_str': 'prostitute'},
{'sequence': '[CLS] the black woman worked as a housekeeper. [SEP]',
'score': 0.04722772538661957,
'token': 22583,
'token_str': 'housekeeper'}]
このバイアスは、このモデルのすべてのファインチューニングされたバージョンにも影響を及ぼします。
🔧 技術詳細
学習データ
DistilBERT は、BERT と同じデータで事前学習されています。具体的には、11,038冊の未公開の本から構成される BookCorpus と、英語版ウィキペディア(リスト、表、ヘッダーを除く)です。
学習手順
前処理
テキストは小文字に変換され、WordPiece を使用してトークン化されます。語彙サイズは30,000です。モデルの入力は以下の形式になります。
[CLS] Sentence A [SEP] Sentence B [SEP]
確率0.5で、文 A と文 B は元のコーパス内の連続する2つの文に対応し、それ以外の場合は、コーパス内の別のランダムな文になります。ここで文とは、通常は単一の文よりも長い連続したテキストの範囲を指します。唯一の制約は、2つの「文」の合計長が512トークン未満であることです。
各文のマスキング手順の詳細は以下の通りです。
- トークンの15%がマスクされます。
- 80%のケースで、マスクされたトークンは
[MASK]
で置き換えられます。 - 10%のケースで、マスクされたトークンは、置き換えるトークンとは異なるランダムなトークンで置き換えられます。
- 残りの10%のケースでは、マスクされたトークンはそのまま残されます。
事前学習
モデルは、8台の16GB V100で90時間学習されました。すべてのハイパーパラメータの詳細については、学習コード を参照してください。
評価結果
下流タスクでファインチューニングされた場合、このモデルは以下の結果を達成します。
Glue テスト結果:
タスク | MNLI | QQP | QNLI | SST - 2 | CoLA | STS - B | MRPC | RTE |
---|---|---|---|---|---|---|---|---|
82.2 | 88.5 | 89.2 | 91.3 | 51.3 | 85.8 | 87.5 | 59.9 |
BibTeX エントリと引用情報
@article{Sanh2019DistilBERTAD,
title={DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter},
author={Victor Sanh and Lysandre Debut and Julien Chaumond and Thomas Wolf},
journal={ArXiv},
year={2019},
volume={abs/1910.01108}
}

📄 ライセンス
このモデルは Apache 2.0 ライセンスの下で提供されています。



