Shikata Ga Nai

Private? There is no such things.

44. TransformerとBERTの基本

Hello there, ('ω')ノ

📌 1. Transformerとは? 基本構造と仕組み

✅ Transformerとは?

Transformer とは、
「自己注意機構(Self-Attention)」を活用して、テキスト内の単語間の関係を学習するモデル です。
2017年にGoogleが発表した論文 「Attention is All You Need」 で提案され、
機械翻訳、要約、質問応答など、NLPタスクで爆発的な成果を上げた!


✅ Transformerの基本構造

Transformerは、エンコーダー(Encoder)デコーダー(Decoder) の2つのブロックから構成されています。

📌 Transformerの構造

[入力] → [エンコーダー] → [デコーダー] → [出力]

エンコーダー(Encoder)

  • 入力文の情報を埋め込みベクトル(Embedding)に変換
  • 複数のエンコーダーブロックで自己注意(Self-Attention)を学習
  • 文の文脈を理解して、特徴量を抽出

デコーダー(Decoder)

  • エンコーダーの情報を元に、ターゲット文を生成
  • 次の単語を予測して、最終的な出力を生成

✅ 2. 自己注意機構(Self-Attention)の仕組み

Transformerの革新は、「自己注意機構(Self-Attention)」 にあります。
単語間の関連性を動的に計算し、文全体の関係を把握する仕組み!

📌 自己注意の数式

[ \text{Attention}(Q, K, V) = \text{softmax}\left( \frac{QKT}{\sqrt{d_k}} \right)V ]

記号 説明
(Q) クエリ(Query)
(K) キー(Key)
(V) バリュー(Value)
(d_k) ベクトルの次元数

クエリ(Q) → どの単語に注意を向けるべきか?
キー(K) → どの単語が重要か?
バリュー(V) → 重要な単語の情報

「単語間の関連性を動的に計算して、重要な情報を抽出する!」


📌 2. BERTとは? Transformerを応用した強力なNLPモデル

✅ BERT(Bidirectional Encoder Representations from Transformers)とは?

BERT とは、
「Transformerのエンコーダー部分だけを使って、双方向に文脈を理解するモデル」 です。

📌 BERTの特徴 - 双方向の文脈理解(Bidirectional) → 左右両方の単語の関係を学習
- 事前学習(Pre-training)とファインチューニング(Fine-tuning) で高精度
- 多様なNLPタスク(分類、質問応答、感情分析)に適用可能!

「BERTは、Transformerのエンコーダーを利用した超強力なNLPモデル!」


✅ BERTの学習手法

BERTは、以下の2つのタスクで事前学習(Pre-training)されます。

📌 ① マスク言語モデル(MLM:Masked Language Model)

  • 入力文の一部の単語を[MASK]で隠して、正しい単語を予測するタスク
  • 単語の文脈を理解して、適切な単語を補完できるように学習

📌 ② 次文予測(NSP:Next Sentence Prediction)

  • 2つの文が連続しているかどうかを判定するタスク
  • 文同士の関係性(前後関係)を理解することが目的

「MLMとNSPで学習することで、BERTは驚異的な精度を実現!」


📌 3. TransformerとBERTの違い

特徴 Transformer BERT
構造 Encoder + Decoder Encoderのみ
用途 機械翻訳・要約 文の分類・質問応答
文脈の理解 単方向(左→右 or 右→左) 双方向(両方)
事前学習 なし(タスク依存) MLM + NSP
出力 文生成 文のベクトル表現
応用例 翻訳・対話システム 感情分析・QAシステム

「翻訳・要約 → Transformer」、「分類・質問応答 → BERT」


📌 4. PythonでBERTを使ったNLPモデルの実装

✅ Hugging Face Transformers とは?

Hugging Face Transformers は、
BERT, GPT, RoBERTa などの事前学習済みモデルを簡単に使えるライブラリ!
ファインチューニングやNLPタスクへの応用も容易!


✅ ① ライブラリのインストール

!pip install transformers
!pip install torch

✅ ② BERTを使ったテキスト分類の実装

from transformers import BertTokenizer, BertForSequenceClassification
from transformers import Trainer, TrainingArguments
from datasets import load_dataset

# データの読み込み(IMDbデータセット)
dataset = load_dataset("imdb")

# BERTのトークナイザーの読み込み
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")

# テキストのトークナイズ
def tokenize_data(examples):
    return tokenizer(examples["text"], padding="max_length", truncation=True)

# データのトークナイズ
tokenized_datasets = dataset.map(tokenize_data, batched=True)

# BERTモデルの読み込み
model = BertForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)

# 学習パラメータ
training_args = TrainingArguments(
    output_dir="./results",
    num_train_epochs=3,
    per_device_train_batch_size=8,
    per_device_eval_batch_size=8,
    evaluation_strategy="epoch"
)

# Trainerの作成
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets["train"],
    eval_dataset=tokenized_datasets["test"]
)

# モデルの学習
trainer.train()

# モデルの評価
results = trainer.evaluate()
print(f"Test Accuracy: {results['eval_accuracy']:.4f}")

BERTを使ってIMDbデータセットで感情分析!
Hugging Faceで簡単にBERTモデルのファインチューニングが可能!


📌 5. KaggleのNLPコンペでTransformerを活用する方法

✅ KaggleでTransformerを使うコツ

事前学習済みモデル(BERT, RoBERTa, DistilBERT)を活用
ファインチューニングで特定タスクに最適化
アンサンブルで複数のモデルを組み合わせて精度を向上
データの前処理(トークナイズ・パディング・分割)に注意!

📌 KaggleのNLPコンペの流れ

  1. EDA(データの可視化と前処理)
  2. ベースラインモデル(BERTのファインチューニング)
  3. モデルの最適化(ハイパーパラメータチューニング)
  4. アンサンブルで精度向上
  5. モデルの評価・提出

「BERT + アンサンブル」でKaggleのNLPコンペで上位を狙おう!


🎯 まとめ

Transformerは、自己注意機構を用いた高速・高精度なモデル!
BERTは、双方向エンコーダで文脈を深く理解し、NLPタスクの精度を向上!
ファインチューニングで、BERTを特定タスクに最適化!
Kaggleコンペでは、BERTの活用・アンサンブル・最適化で上位入賞を目指そう!

Best regards, (^^ゞ