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. 終端トークンが出るか、最大長に達したら終了
天気   : 0.31
日    : 0.14
気分   : 0.08
思い出 : 0.02
...(数万トークン分)

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_{<t})$ の積

この章の限界(次の章への動機)

N-gram は: 見たことない文脈に弱い / 長い依存関係を扱えない / 意味の類似を使えない。

👉 次章「03. LLM」では、これらの限界を乗り越えた現代の言語モデルを扱います: - トークン化(単語とは何か再考) - 埋め込みベクトル(意味を連続空間で表現) - Attention 機構(長距離の文脈) - Transformer(それらを組み合わせた決定版) - そして Claude API で実際に動かす

よくある質問

Q. LLM も「次のトークン予測」なだけ? A. はい、そう言えます。ただし 関数の複雑さが桁違い で、結果として驚くほど多様なタスクができるようになっています。

Q. じゃあ N-gram で十分では? A. 試してみるとわかりますが、n=2,3 では人間らしい文は全く書けません。n=4,5 にすると今度は学習データのコピペしか出ません。このトレードオフを解消したのが LLM。

参考文献

📝 理解度クイズ (3 問) 💡 ログインすると進捗が保存されます

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

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

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