🚀 BERT base model (uncased)
このモデルは、マスク言語モデリング(MLM)の目的で英語コーパス上で事前学習されたものです。特定のタスクに対して微調整することで、下流タスクに活用できます。
🚀 クイックスタート
このモデルは、マスク言語モデリングや次文予測に直接使用できますが、主に下流タスクでの微調整を目的としています。詳細はモデルハブを参照してください。
✨ 主な機能
- 双方向表現学習:マスク言語モデリング(MLM)により、文の双方向表現を学習します。
- 次文予測:次文予測(NSP)タスクを通じて、文間の関係を学習します。
- 下流タスクへの活用:事前学習されたモデルを微調整することで、様々な下流タスクに利用できます。
📦 インストール
このモデルを使用するには、transformers
ライブラリをインストールする必要があります。
pip install transformers
💻 使用例
基本的な使用法
マスク言語モデリングのパイプラインを使用して、このモデルを直接利用できます。
>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='bert-base-uncased')
>>> unmasker("Hello I'm a [MASK] model.")
[{'sequence': "[CLS] hello i'm a fashion model. [SEP]",
'score': 0.1073106899857521,
'token': 4827,
'token_str': 'fashion'},
{'sequence': "[CLS] hello i'm a role model. [SEP]",
'score': 0.08774490654468536,
'token': 2535,
'token_str': 'role'},
{'sequence': "[CLS] hello i'm a new model. [SEP]",
'score': 0.05338378623127937,
'token': 2047,
'token_str': 'new'},
{'sequence': "[CLS] hello i'm a super model. [SEP]",
'score': 0.04667217284440994,
'token': 3565,
'token_str': 'super'},
{'sequence': "[CLS] hello i'm a fine model. [SEP]",
'score': 0.027095865458250046,
'token': 2986,
'token_str': 'fine'}]
高度な使用法
与えられたテキストの特徴量を取得する方法を以下に示します。
PyTorchでの使用例
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained("bert-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 BertTokenizer, TFBertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = TFBertModel.from_pretrained("bert-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='bert-base-uncased')
>>> unmasker("The man worked as a [MASK].")
[{'sequence': '[CLS] the man worked as a carpenter. [SEP]',
'score': 0.09747550636529922,
'token': 10533,
'token_str': 'carpenter'},
{'sequence': '[CLS] the man worked as a waiter. [SEP]',
'score': 0.0523831807076931,
'token': 15610,
'token_str': 'waiter'},
{'sequence': '[CLS] the man worked as a barber. [SEP]',
'score': 0.04962705448269844,
'token': 13362,
'token_str': 'barber'},
{'sequence': '[CLS] the man worked as a mechanic. [SEP]',
'score': 0.03788609802722931,
'token': 15893,
'token_str': 'mechanic'},
{'sequence': '[CLS] the man worked as a salesman. [SEP]',
'score': 0.037680890411138535,
'token': 18968,
'token_str': 'salesman'}]
>>> unmasker("The woman worked as a [MASK].")
[{'sequence': '[CLS] the woman worked as a nurse. [SEP]',
'score': 0.21981462836265564,
'token': 6821,
'token_str': 'nurse'},
{'sequence': '[CLS] the woman worked as a waitress. [SEP]',
'score': 0.1597415804862976,
'token': 13877,
'token_str': 'waitress'},
{'sequence': '[CLS] the woman worked as a maid. [SEP]',
'score': 0.1154729500412941,
'token': 10850,
'token_str': 'maid'},
{'sequence': '[CLS] the woman worked as a prostitute. [SEP]',
'score': 0.037968918681144714,
'token': 19215,
'token_str': 'prostitute'},
{'sequence': '[CLS] the woman worked as a cook. [SEP]',
'score': 0.03042375110089779,
'token': 5660,
'token_str': 'cook'}]
このバイアスは、このモデルのすべての微調整バージョンにも影響を与えます。
🔧 技術詳細
訓練データ
このモデルは、BookCorpus(11,038冊の未公開の本からなるデータセット)と英語版Wikipedia(リスト、表、ヘッダーを除く)で事前学習されています。
前処理
テキストは小文字に変換され、WordPieceを使用してトークン化されます。語彙サイズは30,000です。モデルの入力は以下の形式になります。
[CLS] Sentence A [SEP] Sentence B [SEP]
文Aと文Bは、確率0.5で元のコーパス内の連続した文に対応し、それ以外の場合はコーパス内の別のランダムな文になります。各文のマスキング手順の詳細は以下の通りです。
- 15%のトークンがマスクされます。
- 80%のケースで、マスクされたトークンは
[MASK]
に置き換えられます。
- 10%のケースで、マスクされたトークンはランダムなトークンに置き換えられます。
- 残りの10%のケースで、マスクされたトークンはそのまま残されます。
事前学習
このモデルは、4つのクラウドTPU(合計16個のTPUチップ)で100万ステップ、バッチサイズ256で訓練されました。90%のステップでシーケンス長は128トークンに制限され、残りの10%では512トークンに制限されました。オプティマイザとしてAdamが使用され、学習率は1e-4、\(\beta_{1} = 0.9\)、\(\beta_{2} = 0.999\)、重み減衰は0.01で、10,000ステップの学習率ウォームアップとその後の学習率の線形減衰が適用されました。
評価結果
下流タスクで微調整された場合、このモデルは以下の結果を達成します。
Glueテスト結果:
タスク |
MNLI-(m/mm) |
QQP |
QNLI |
SST-2 |
CoLA |
STS-B |
MRPC |
RTE |
平均 |
|
84.6/83.4 |
71.2 |
90.5 |
93.5 |
52.1 |
85.8 |
88.9 |
66.4 |
79.6 |
BibTeXエントリと引用情報
@article{DBLP:journals/corr/abs-1810-04805,
author = {Jacob Devlin and
Ming{-}Wei Chang and
Kenton Lee and
Kristina Toutanova},
title = {{BERT:} Pre-training of Deep Bidirectional Transformers for Language
Understanding},
journal = {CoRR},
volume = {abs/1810.04805},
year = {2018},
url = {http://arxiv.org/abs/1810.04805},
archivePrefix = {arXiv},
eprint = {1810.04805},
timestamp = {Tue, 30 Oct 2018 20:39:56 +0100},
biburl = {https://dblp.org/rec/journals/corr/abs-1810-04805.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
📄 ライセンス
このモデルは、Apache-2.0ライセンスの下で提供されています。