A
AIエージェントの仕組み
ch2-s3 · N-gram Language Model

ナイーブベイズで文生成

約 15 分

この回のゴール

1. 問題を定式化する

「文章を生成する」とは、数式で言うと:

$$ p(w_1, w_2, \ldots, w_T) $$

つまり 単語列の同時確率 を計算できればよい。

チェインルールで分解すると:

$$ p(w_1, \ldots, w_T) = \prod_{t=1}^{T} p(w_t \mid w_1, \ldots, w_{t-1}) $$

👉 つまり「それまで出てきた全単語の条件下での次の単語の確率」がわかれば文が作れる。

これが 言語モデリング の根本です。LLM も全く同じ式を学習しています。

2. マルコフ仮定: 全部は見ない

でも「全ての過去の単語」を考慮するのは難しい。そこで 近似:

$$ p(w_t \mid w_1, \ldots, w_{t-1}) \approx p(w_t \mid w_{t-n+1}, \ldots, w_{t-1}) $$

つまり「直近 $n-1$ 個の単語だけ」を使う。これが n-gram モデル。

モデル 条件にする過去 例
Unigram (1-gram) なし $p(w_t)$
Bigram (2-gram) 直前 1 単語 $p(w_t \mid w_{t-1})$
Trigram (3-gram) 直前 2 単語 $p(w_t \mid w_{t-2}, w_{t-1})$

$n$ が大きいほど文脈を見れるが、パラメータ数が急増(後述)。

3. 最尤推定 — データから確率を推定

コーパス(テキストデータ)から、数を数えるだけで確率を推定できます。

Bigram の場合

$$ p(w_t \mid w_{t-1}) = \frac{\text{count}(w_{t-1}, w_t)}{\text{count}(w_{t-1})} $$

例: 「今日 は」が 10 回、「今日 の」が 3 回、「今日」の次のトークン合計が 20 回なら:

$$ p(\text{は} \mid \text{今日}) = \frac{10}{20} = 0.5, \quad p(\text{の} \mid \text{今日}) = \frac{3}{20} = 0.15 $$

これが 最尤推定 (Maximum Likelihood Estimation)。数を数えるだけで確率分布が得られる。

4. 生成アルゴリズム

  1. スタートトークン(例: 文頭)から始める
  2. 現在の直前 n-1 トークンから、次のトークン確率分布を計算
  3. 前回学んだ サンプリング(temperature, top-p...)で 1 つ選ぶ
  4. 選んだトークンを末尾に追加、ステップ 2 に戻る
  5. 終端トークンが出るか、最大長に達したら終了
def generate(model, start, max_len=50):
    seq = list(start)
    for _ in range(max_len):
        context = tuple(seq[-(n-1):])
        probs = model[context]
        next_word = sample(probs)
        seq.append(next_word)
        if next_word == "<END>":
            break
    return seq

5. N-gram モデルの致命的な限界

限界 1: パラメータ爆発

語彙サイズ $V$、n-gram で必要なエントリ数は最悪 $V^n$。

モデル $V=10{,}000$ の場合のパラメータ数
Bigram $10^8$
Trigram $10^{12}$
5-gram $10^{20}$

👉 長い文脈は事実上扱えない。

限界 2: データスパース性

大部分の n-gram は 一度も見たことがない。見たことがないとゼロ確率 → 文がそこで途切れる。スムージングなどの工夫があるが根本解決にならない。

限界 3: 意味の類似性を扱えない

「犬が走る」と「猫が走る」は似ているが、N-gram にとっては 完全に別のトークン列。犬の情報を猫に使い回せない。

6. ここから Transformer (LLM) への道

N-gram の限界を乗り越えるため、次の 3 つのブレイクスルーが起きた:

  1. 埋め込み (Word Embedding) — トークンを 密なベクトル で表現。似た単語は似たベクトル
  2. ニューラル言語モデル — $p(w_t \mid \text{文脈})$ をニューラルネットで学習
  3. Attention 機構 (Transformer) — 長い文脈を効率的に扱える

→ 次の章(LLM) でこれらを扱います。


まとめ

第2章のクロージング

サブステップ 学んだこと
01 識別と生成 生成モデルは $p(x)$ を学ぶ。だから「作れる」
02 サンプリング 分布から 1 つ選ぶ方法(temperature, top-p)
03 N-gram 生成 言語モデルの最古典。$p(w_t \mid w_{
A
本家 Claude Academy で手を動かす
この回に対応する Anthropic 公式のレッスンです。ここは「なぜそう動くか」、向こうは「どう書くか」。サインインなしで読めます。
📝 理解度クイズ (3 問) 💡 ログインすると進捗が保存されます

💬 このサブステップの Q&A

まだ質問はありません。最初の質問を投稿してみましょう。

質問の投稿にはログインが必要です。