Googleが開発した双方向Transformerベースの言語モデル。文脈を考慮した高精度な自然言語処理を実現。
BERT(Bidirectional Encoder Representations from Transformers)は、2018 年 10 月に Google が発表した画期的な言語モデルです。Transformer のエンコーダー部分のみを使い、双方向の文脈を同時に学習することで、自然言語理解タスクで当時の最高精度を大幅に更新しました。BERT の登場は NLP 分野における「Transformer 時代」の幕開けを象徴し、後続のすべての言語モデルに大きな影響を与えています。
従来の言語モデル(GPT など)は左から右への一方向でしたが、BERT は文の両側から同時に文脈を学習します。
この双方向性により、単語の意味を前後の文脈から総合的に理解できます。
入力の一部を [MASK] で隠し、予測:
原文: The [MASK] is running
モデル: The [cat] is running
[MASK] に置換2 つの文が連続しているか判定:
[CLS] 文A [SEP] 文B [SEP]
→ 連続/非連続
入力 = Token + Segment + Position
[CLS] 文 [SEP]
→ [CLS] の出力を分類器に
[CLS] 文A [SEP] 文B [SEP]
→ 類似度、含意関係
各トークンの出力を分類
[CLS] 質問 [SEP] 文書 [SEP]
→ 回答の開始・終了位置
[MASK] 部分を予測BERT は以下のタスクで SOTA を達成:
| モデル | 開発元 | 特徴 |
|---|---|---|
| Tohoku BERT | 東北大 | 最も広く使用 |
| cl-tohoku/bert-base-japanese-v3 | 東北大 | 最新版 |
| rinna BERT | rinna | 対話特化 |
| LINE DistilBERT | LINE | 軽量版 |
| Stockmark BERT | Stockmark | ビジネス特化 |
from transformers import BertTokenizer, BertForSequenceClassification
import torch
# モデルロード
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForSequenceClassification.from_pretrained('bert-base-uncased')
# 入力準備
text = "This movie is great!"
inputs = tokenizer(text, return_tensors='pt')
# 推論
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
probs = torch.softmax(logits, dim=-1)
print(probs)
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir='./results',
num_train_epochs=3,
per_device_train_batch_size=16,
learning_rate=2e-5,
warmup_steps=500,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
)
trainer.train()
| 用途 | GPU | VRAM |
|---|---|---|
| 推論 | GTX 1660 | 6GB |
| ファインチューニング(base) | RTX 3060 | 12GB |
| ファインチューニング(large) | RTX 4070 Ti | 16GB |
| 事前学習 | A100 | 80GB+ |