Transformerの仕組みを体系的に理解したい 第5章

ここまでで、Transformerの基本構造と内部の処理について記述してきました。

Transformerの仕組みを体系的に理解したい 第4章

第4章: Transformerの全体構造 前章では、Transformerの核となるAttention機構について記述しました。 この章では、Transformer全体の構造を記述していきます。特に、エン…

この章では、Transformerを基にした代表的な以下のモデルを取り上げ、どのような違いがあるのか見ていきたいと思います。

  1. BERT(Bidirectional Encoder Representations from Transformers)
    • エンコーダのみを利用したモデル。
    • 自然言語理解タスクで活躍する双方向の文脈理解モデル。
  2. GPT(Generative Pre-trained Transformer)
    • デコーダのみを利用したモデル。
    • 自然言語生成タスクに特化した自己回帰型生成モデル。
  3. T5(Text-to-Text Transfer Transformer)
    • エンコーダ-デコーダモデルを採用した汎用的なテキスト間変換モデル。

5.1 BERT(Bidirectional Encoder Representations from Transformers)

5.1.1 基本の構造

BERTは、Transformerのエンコーダ部分のみを基に設計されたモデルであり、主に自然言語理解タスクに適しています。以下がBERTの特徴です:

  • エンコーダのみの特徴
    • BERTは、入力文全体を一度に処理し、トークン間の双方向(Bidirectional)文脈を同時に考慮します。
    • 自己注意機構を通じて、各トークンが文全体の他のトークンと関連付けられます。
    • 出力は、各トークンの文脈を反映したベクトル(トークン埋め込み)や、文全体を表すベクトル([CLS]トークン)です。
  • 双方向(Bidirectional)の重要性
    • BERTは、トークンの「前後両方の文脈」を同時に参照します。
    • 例:「私は[MASK]が好き」という文では、前後の文脈(「私は」「が好き」)を同時に考慮して「犬」や「猫」などの最も適切な単語を予測します。
  • 入力と出力
    • 入力:文全体、または文ペア([CLS], 文1, [SEP], 文2)
    • 出力:文全体の埋め込み([CLS])、または各トークンの埋め込み。

5.1.2 適用タスク

BERTは主に自然言語理解タスクに適用されます。以下はその代表例です:

  • テキスト分類(感情分析、ニュース分類など)
  • 質問応答(コンテキストから回答を抽出)
  • 名前付きエンティティ認識(NER)
  • 文の類似度判定

5.1.3 サンプル(感情分類)

以下は事前学習済みのBERTモデル(distilbert-base-uncased-finetuned-sst-2-english)を使用して感情を予測するコード例です。

from transformers import pipeline

# 感情分析用のパイプラインをロード(事前学習済みモデルを指定)
classifier = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")

# 入力テキスト
text = "I love this product! It's amazing."

# 推論(感情分類)
result = classifier(text)

# 結果を出力
print(f"Text: {text}")
print(f"Sentiment: {result[0]['label']}, Score: {result[0]['score']:.4f}")

DistilBERTは、BERTの軽量版のモデルです。BERTと同様にエンコーダのみを持っています。

distilbert-base-uncased-finetuned-sst-2-englishは、事前学習済みのDistilBERTモデルを、感情分析用にファインチューニングしたものです。

出力例

Text: I love this product! It's amazing.
Sentiment: POSITIVE, Score: 0.9998

5.2 GPT(Generative Pre-trained Transformer)

5.2.1 基本の構造


GPTは、Transformerのデコーダ部分のみを基に設計されたモデルです。以下がGPTの特徴です:

  • デコーダのみの特徴
    • GPTは、過去のトークン(生成済みのトークン)を条件として、次のトークンを逐次予測する自己回帰型(Autoregressive)生成モデルです。
    • 自己注意機構を通じて、生成済みトークン間の関係性を考慮します。
    • 推論時には、未来のトークンを参照しないようにするため、マスク付き自己注意機構を採用します。
  • 逐次生成(Autoregressive)の重要性
    • GPTは「左から右」の方向で逐次的にトークンを生成します。
    • 例:プロンプト「Once upon a time」に対して、「there was a king」を次々に生成します。
  • 入力と出力
    • 入力:プロンプト(生成の条件となるテキスト)
    • 出力:次のトークン(逐次生成)。

5.2.2 適用タスク

GPTは主に自然言語生成タスクに適用されます。以下はその代表例です:

  • 文章生成(ストーリー作成、詩の生成など)
  • 質問応答
  • 対話生成(チャットボット)
  • コード生成(プログラムの補完)

5.2.3 サンプルコード:文章生成

以下は事前学習済みのGPT-2モデル(gpt2)を使用して、入力プロンプトに続くテキストを生成するコード例です。

from transformers import pipeline

# テキスト生成用のパイプラインをロード(事前学習済みモデルを指定)
text_generator = pipeline("text-generation", model="gpt2")

# 入力プロンプト
prompt = "Once upon a time"

# テキスト生成(推論)
result = text_generator(prompt, max_length=50, num_return_sequences=1)

# 結果を出力
print(f"Prompt: {prompt}")
print(f"Generated text: {result[0]['generated_text']}")

出力例

Prompt: Once upon a time
Generated text: Once upon a time there was a small village surrounded by mountains. The people lived in harmony, but one day a mysterious traveler arrived...

5.3 T5(Text-to-Text Transfer Transformer)

5.3.1 基本の構造

T5は、Transformerのエンコーダ-デコーダモデルを基に設計された汎用的なモデルです。以下がT5の特徴です:

  • エンコーダ-デコーダモデルの特徴
    • エンコーダは入力文を中間表現に変換します。
    • デコーダは中間表現を参照しながら、次のトークンを逐次的に生成します。
    • 入力文と出力文の関係を明確に学習できるため、翻訳や要約などの条件付き生成タスクに適しています。
  • テキスト間変換(Text-to-Text)の重要性
    • T5は、すべてのタスクを「入力テキストを条件として出力テキストを生成する」問題として定義します。
  • 入力と出力
    • 入力:タスク固有のフォーマットに変換されたテキスト。
    • 出力:入力に対応するテキスト。

5.3.2 適用タスク

T5は、以下のタスクに広く適用されています:

  • 翻訳
  • 要約
  • 質問応答
  • 文法修正
  • テキスト分類

5.3.2 サンプルコード:文章要約

以下は事前学習済みのT5モデル(t5-small)を使用して文章を要約するコード例です。

t5-smallは、Googleが公開した事前学習済みのT5モデルの小型バージョンです。

from transformers import pipeline

# 要約用のパイプラインをロード(事前学習済みモデルを指定)
summarizer = pipeline("summarization", model="t5-small")

# 入力テキスト
text = (
    "The quick brown fox jumps over the lazy dog. This is a well-known English pangram, "
    "a sentence that contains all the letters of the alphabet. Such sentences are often "
    "used for typing practice and font display testing."
)

# 要約生成(推論)
result = summarizer(text, max_length=50, min_length=10, do_sample=False)

# 結果を出力
print("Original Text:")
print(text)
print("\nSummary:")
print(result[0]['summary_text'])

出力例

Original Text:
The quick brown fox jumps over the lazy dog. This is a well-known English pangram, a sentence that contains all the letters of the alphabet. Such sentences are often used for typing practice and font display testing.

Summary:
The quick brown fox jumps over the lazy dog is a well-known English pangram used for typing practice.

5.4 まとめ

Transformerを使ったモデルにも、さまざまな構造のモデルがあります。

特徴BERTGPTT5
構造エンコーダのみデコーダのみエンコーダ-デコーダモデル
タスク方向自然言語理解(双方向文脈)自然言語生成(逐次生成)自然言語理解+生成
文脈の利用前後両方の文脈を同時に利用左から右の文脈(過去のみ利用)文脈をエンコーダ-デコーダ間で活用
主な用途感情分析、質問応答、分類など文章生成、対話生成、コード補完など翻訳、要約、質問応答、分類など

  • BERTは、エンコーダ部分のみを活用し、双方向の文脈を理解することで、感情分析や質問応答などの自然言語理解タスクで高い性能を発揮します。
  • GPTは、デコーダ部分のみを活用し、自己回帰型生成に特化することで、文章生成や対話生成などの自然言語生成タスクに適しています。
  • T5は、エンコーダ-デコーダモデルを使用し、入力テキストを条件とした出力テキスト生成を行うことで、翻訳や要約、質問応答など多様なタスクに対応可能です。

今回のサンプルコードでは、事前学習済みのモデルを使っています。用途に応じてファインチューニングすることで、さらに精度の良い回答を得ることができます。


(補足)現在のGPTの戦略:巨大化と汎用性の追求

近年の生成AIを代表するモデル(gpt-4o, claudeなど)では、モデルのパラメータ数を大幅に増加させる「巨大化」によって、タスク汎用性を高める戦略が採用されています。このアプローチの背景と目的は以下の通りです:

  1. 多様なタスクへの適応
    • 最近のGPTでは、一千億以上のパラメータを持つ巨大なモデルが開発されています。
    • このような大規模モデルは、事前学習によって膨大な知識を内包し、特定のタスクに特化した追加学習(ファインチューニング)を必要とせず、Zero -shot Learningや、Few-shot Learningが可能です。
  2. 汎用AIへのアプローチ
    • GPTは、汎用的な自然言語タスクを解決する「基盤モデル(Foundation Model)」の役割を果たしています。
    • 最新モデルでは、生成タスクに加えて、論理的な推論、計算タスク、プログラム生成、画像情報と連携したマルチモーダルな対応も可能になりつつあります。
  3. 拡張性と応用範囲の進化
    • 巨大なモデルサイズにより、単なる言語生成にとどまらず、対話型AI(例:ChatGPT)、コード補完(例:GitHub Copilot)、高度な検索エージェントなど、さまざまな分野で応用されています。
  4. 課題の克服:効率化と制御
    • モデルの巨大化には計算コストやエネルギー消費の増加という課題が伴います。そのため、現在はモデルの効率化(例:スパースアテンション、動的計算)や、生成結果を制御する技術(例:RLHF: 人間のフィードバックによる強化学習)も並行して研究されています。