BERT アーキテクチャ: マスクされた言語モデリング、次の文の予測。事前トレーニングと微調整のパラダイム。 BERT の亜種: RoBERTa、ALBERT、DistilBERT、PhoBERT (ベトナム語)。特徴抽出と微調整。ハグフェイストランスフォーマーによるデモ分類。
🧠 AI と ML — レッスン 9
レッスン 10: BERT — 双方向エンコーダー
トランスフォーマーの表現
NLP の基礎から上級まで: 自然言語処理をマスターする
パート 4: 事前トレーニングされた言語モデル — BERT、GPT、その他
xdev.asia
はじめに
BERT (Devlin et al., 2018) は、NLP に革命をもたらしたモデルです 。大量のテキストで事前トレーニングされたモデルがほぼすべての NLP タスクを微調整し、最先端のレベルに到達できることを初めて実証しました。 BERT は、NLP の 転移学習 の時代を開きます。
1. BERT アーキテクチャ
エンコーダ専用トランスフォーマー
BERT は Transformer の エンコーダ のみを使用し、テキストを 双方向 (左右と左右の両方を同時に) 処理します。
Input: [CLS] The cat sat on the mat [SEP]
│ │ │ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
┌──────────────────────────────────────┐
│ Transformer Encoder │
│ (12 layers) │
│ Self-Attention → FFN │
└──────────────────────────────────────┘
│ │ │ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
T_CLS T₁ T₂ T₃ T₄ T₅ T₆ T_SEP
[CLS] → Classification head
[SEP] → Separator between sentences
トレーニング前の目標
目的 仕組み MLM (マスクされた言語モデリング) トークンの 15% をカバーし、カバーされる単語を予測します NSP (次文予測) 文 B が文 A の次の文であるかどうかを予測します。
MLM: "The [MASK] sat on the [MASK]" → "The cat sat on the mat"
NSP: Câu A + Câu B → IsNext / NotNext
2. 分類のための BERT の微調整
from transformers import BertTokenizer, BertForSequenceClassification
from transformers import Trainer, TrainingArguments
from datasets import load_dataset
# 1. Load pre-trained BERT
model_name = "bert-base-uncased"
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(
model_name, num_labels=3
)
# 2. Tokenize dataset
def tokenize_fn(examples):
return tokenizer(
examples["text"],
padding="max_length",
truncation=True,
max_length=128,
)
dataset = load_dataset("emotion")
tokenized = dataset.map(tokenize_fn, batched=True)
# 3. Fine-tune
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=16,
learning_rate=2e-5,
evaluation_strategy="epoch",
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized["train"],
eval_dataset=tokenized["validation"],
)
trainer.train()
3. BERT のバリアント
モデル 違い パラメータ ベトナム語 BERT ベース オリジナル 110M 良くない ロベルタ NSPを放棄し、より長くトレーニングする 125M いいえ アルバート 因数分解された埋め込み 12M~235M いいえ ディスティルバート 蒸留 BERT、40% 小型 66M いいえ フォバート ベトナム語の事前トレーニング済み 135M はい! XLM-ロベルタ 多言語、100言語 270M はい
ベトナム人向けPhoBERT
from transformers import AutoTokenizer, AutoModelForSequenceClassification
# PhoBERT — BERT cho tiếng Việt
tokenizer = AutoTokenizer.from_pretrained("vinai/phobert-base-v2")
model = AutoModelForSequenceClassification.from_pretrained(
"vinai/phobert-base-v2", num_labels=3
)
text = "Sản phẩm này rất tốt, tôi rất hài lòng"
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
outputs = model(**inputs)
print(outputs.logits)
4. 特徴抽出と微調整
使い方 意味 いつ使用するか 特徴抽出 BERT をフリーズし、分類子ヘッドのみをトレーニングする データが少なく、コンピューティングが制限されている 微調整 両方の BERT をトレーニングする (学習率が小さい) 十分なデータ、高い精度が必要 LoRA/アダプター 小さなトレーニング可能なレイヤーを追加する 品質とコストのバランス
# Feature extraction: freeze BERT
for param in model.bert.parameters():
param.requires_grad = False
# Chỉ train classification head
概要
重要なポイント 詳細 バート エンコーダのみ、双方向、MLM + NSP 転移学習 事前トレーニング → 微調整パラダイム フォバート ベトナム語版 BERT 微調整 2 ~ 5 エポック、lr=2e-5、バッチ=16-32
次の記事
レッスン 11: GPT と自己回帰モデル — Transformer のもう一方の側面: デコーダーのみ、因果関係のある言語モデリング、および ChatGPT へのパス。