0から分かる大規模言語モデル:なぜAIは「次の単語」を当てられるのか
0から分かる大規模言語モデル:なぜAIは「次の単語」を当てられるのか
この記事のゴール: 読んだ後、「LLMは魔法ではなく、確率で次の単語を予測する機械だ」と説明できるようになる。
1. 基礎:LLMは「文章の続きを予測する機械」
ステージ1:直観理解(なぜ予測できるのか?)
あなたが「おはよう」と言われたら、次に「ございます」と返したくなりませんか?LLMも同じです。大量の文章を学習し、「この単語の次に来る確率が最も高い単語」をひたすら予測しています。
ステージ2:仕組み(3つの箱)
LLMの仕組みは、3つの箱で理解できます。
- トークン化 (Tokenization):文章を、AIが処理できる最小単位(トークン)に分割する。
- 確率計算 (Transformer):前のトークン列を見て、次に来るトークンの確率分布を計算する。
- 生成 (Generation):確率が最も高い(またはサンプリングされた)トークンを1つ選び、文章に追加する。これを繰り返す。
流れ: 入力(プロンプト)→ トークン化 → Transformerで確率計算 → 1トークン生成 → 繰り返し。
ステージ3:なぜ「理解」ではなく「予測」なのか?
LLMは、意味を「理解」しているのではなく、統計的なパターンを「予測」しています。だから、流暢な文章を生成できる一方で、事実と異なる内容(ハルシネーション)を自信満々に語ることがあるのです。
触って試す:次トークン予測の体験
🤖 次トークン予測の体験
LLMのつもりで、文の続きを選んでください。各候補のバーが「その単語が次に来る確率」です。実際のLLMは数万以上の候補すべてに確率を付けますが、ここでは上位の候補だけを表示します。
私は
最初の候補から選んでみてください。
2. 深掘り:Transformerの心臓部「Attention」とは?
Transformerの核心は、**Attention(注意機構)**です。これは、文章中の「どの単語が、どの単語と関連が強いか」を計算する仕組みです。
Attentionがあるからこそ、LLMは長文の文脈を保持し、自然な文章を生成できるのです。
3. 限界と落とし穴
- ハルシネーション: 事実ではない情報を、もっともらしく生成してしまう。
- 計算コスト: 学習には膨大な計算資源(GPU)と電力が必要。
- バイアス: 学習データに含まれる偏見を、そのまま反映してしまう。
4. 実践:Google Colabで「次の単語予測」を体験する
以下のコードをGoogle Colabのセルに貼り付け、順に実行してください。ここでは、軽量なモデル(GPT-2)を使い、LLMの核心である「次の単語予測」を体験します。
# 1. 必要なライブラリをインストール
!pip install transformers torch -q
# 2. モデルとトークナイザーを読み込む
from transformers import GPT2LMHeadModel, GPT2Tokenizer
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")
# 3. プロンプトをトークン化する
prompt = "The future of AI is"
inputs = tokenizer(prompt, return_tensors="pt")
print(f"トークン化されたID: {inputs['input_ids'].tolist()}")
print(f"トークンにデコード: {tokenizer.convert_ids_to_tokens(inputs['input_ids'][0])}")
# 4. 次の単語を生成する
outputs = model.generate(**inputs, max_length=30, num_return_sequences=1, do_sample=True, top_k=50)
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print("\n--- 生成された文章 ---")
print(generated_text)
# 5. 複数回実行して、生成結果が変わることを確認する
for i in range(3):
outputs = model.generate(**inputs, max_length=30, do_sample=True, top_k=50)
print(f"\n--- 試行 {i+1} ---")
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
- トークン化されたIDと、元の単語の対応を確認してください。
- 生成を繰り返すと、毎回異なる文章が出力されること(確率的な生成)を確認してください。
5. まとめと次回予告
LLMは「次の単語を確率で予測する機械」であり、その心臓部はAttentionです。この仕組みを理解すれば、AIの得意なことと苦手なことが見えてきます。
次回予告: 第3回では、この「確率で予測する」仕組みが、なぜセキュリティの世界で「攻撃」と「防御」の両方に使われるのかを解説します。