Chuyển đến nội dung chính

レッスン 10: BERT — トランスフォーマーからの双方向エンコーダー表現

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 へのパス。