# 言語モデル：日常のシステムが共有する確率計算

---

## この資料について

この資料はスマートフォン補完・音声認識・機械翻訳という **日常で使われるシステムの共通原理** から出発し、そこから **言語モデル（Language Model; LM）** を逆算的に定式化します。また、前回学んだ word2vec を「予測タスクの SSL」として捉え直し、言語モデル・RNN・Transformer と同じ枠組みで整理します。「なぜこの計算が必要なのか」という動機を先に理解してから、数学的な構造に入ります。

前回（Week 10）の word2vec の知識を前提にしています。

```{note}
**Week 10 からの接続**：前回の終わりに「長距離依存・文脈非依存など word2vec では解けない問題を解決するのが Attention / Transformer だ」と述べました。では Transformer とは何者かというと、**言語モデル（LM）の一形態**です。「文の確率を推定する関数」という LM の定義を知らなければ、Transformer が何をしているかを正確に理解できません。今回は Transformer への足場として、LM の概念・評価・限界をゼロから積み上げます。
```

---

## 学習目標

この資料を学習すると以下ができるようになります。

1. スマホ補完・音声認識・機械翻訳に共通する「文の確率計算」という原理を説明できる
2. word2vec（CBOW・Skip-gram）を「予測タスクの SSL」として言語モデルと統一的に整理できる
3. 言語モデルを「次単語の条件付き確率の積」として表現し（連鎖律）、n-gram 近似を導出できる
4. バイグラムカウントテーブルを読み取り、テスト文の確率を手計算できる
5. データスパース問題を具体例で説明し、Laplace スムージングを計算に適用できる
6. Perplexity の定義を述べ、「k択ランダム選択との同等性」でシステムへの影響を説明できる
7. n-gram の限界（長距離依存・汎化なし）を word2vec との対比で整理できる
8. Neural LM が何を解消し、何を解消できないかを説明できる

---

## 日常のシステムに隠れた共通原理

### 3 つのシステムの謎

私たちが毎日使っているシステムを 3 つ取り上げます。

**① スマートフォンのキーボード補完**

「今日は」と打ち始めると候補が表示されます。

```
今日は ▶ [いい天気ですね] [お元気ですか] [何をしていますか]
```

この候補の順番はどのように決まっているでしょうか。

**② 音声認識（Siri / Google 音声入力）**

「おはしでごはんをたべる」と話すと、音声から文字に変換されます。

```
「はし」の候補: 橋 / 箸 / 端
```

どれも発音が同じです。音声認識はなぜ「お**箸**でご飯を食べる」を選ぶのでしょうか。

**③ 機械翻訳**

英文 "I saw the man with the telescope." には 2 通りの解釈があります。

- 「私は望遠鏡で男を見た」（望遠鏡は私が持っている）
- 「私は望遠鏡を持つ男を見た」（望遠鏡は男が持っている）

翻訳システムはどちらを選ぶのでしょうか。

### 共通する計算の発見

3 つのシステムに共通することは何でしょうか。

- スマホ補完：複数の候補の中から、**より自然な続き** を上位に表示する
- 音声認識：複数の解釈の中から、**より自然な文** を選ぶ
- 機械翻訳：複数の翻訳候補の中から、**より自然な訳文** を選ぶ

**全部「複数の候補の中から、より自然な（= 確率が高い）ものを選んでいる」のです。**

この共通する計算の本体を「文の確率を推定する関数」とするのが、**言語モデル（Language Model; LM）** の定義です。

---

## word2vec を「予測タスク」として再解釈する

### SSL の枠組みを確認する

前回（Week 10）で学んだ word2vec の本質は何でしたか？

表面的な答え：「単語を密ベクトルに変換する」  
本質的な答え：「**コーパスから自動生成したラベルで予測タスクを解き、副産物として密ベクトルを得る**」

word2vec は **自己教師あり学習（SSL）** の一例です。人が一切ラベルを付けずに、テキスト中の単語の位置関係を「ラベル」として使います。

```{note}
前回は word2vec の **限界** も確認しました（文脈非依存・語順無視・OOV）。これらの限界は SSL という枠組みの問題ではなく、「固定ウィンドウ・重み共有」というアーキテクチャの問題です。今回は SSL という枠組みそのものを言語モデルへ引き継ぎ、アーキテクチャを変えることで何が解決できるかを追跡していきます。
```

### CBOW と Skip-gram の予測タスク

| モデル | 入力（文脈） | 予測対象 | 文脈の向き |
|:---|:---|:---|:---|
| CBOW | 周囲 $k$ 語（両方向） | 中心語 | ↔ 両方向 |
| Skip-gram | 中心語 | 周囲 $k$ 語（両方向） | ↔ 両方向 |
| **言語モデル** | **前の $k$ 語（→ 全履歴）** | **次の 1 語** | **→ 一方向** |

注目してほしいのは 3 行目（言語モデル）が、1・2 行目と比べて何が変わっているかです。

**変わったのは「文脈の向き」だけです。**

CBOW と言語モデルはどちらも「条件付き確率を最大化する」という目的関数の形は同じです：

| | 最大化する目標 |
|:---|:---|
| CBOW | $P(w_{\text{center}} \mid w_{\text{left}}, w_{\text{right}})$ — 両方向の文脈から中心語を予測 |
| 言語モデル | $P(w_t \mid w_1, \ldots, w_{t-1})$ — 過去の全履歴から次の語を予測 |

### なぜ一方向（過去のみ）なのか

言語モデルが「過去のみ」を文脈とする理由は、**テキスト生成時に未来が見えない** からです。

「犬が走る」を生成するとき、「走る」を予測する段階ではまだ「走る」より右側の単語は存在しません。左（過去）の情報だけを使って次の単語を予測する、というのは「テキストを左から右に生成する」という現実的な設定に直結しています。

```{note}
後に学ぶ BERT（Week 14）は「左右両方向の文脈から中央の masked token を予測する」モデルです。これは CBOW の発想により近く、文の生成ではなく文の理解タスクに使われます。方向の向き（一方向 vs 両方向）の選択がモデルの特性を大きく左右します。
```

---

## 言語モデルの定式化

### 文の確率

単語列 $w_1, w_2, \ldots, w_n$ の出現確率：

$$
P(w_1, w_2, \ldots, w_n)
$$

を推定する関数を **言語モデル** と呼びます。

- $P(\text{お箸でご飯を食べる})$ が高い ← 自然な文
- $P(\text{お橋でご飯を食べる})$ が低い ← 不自然な文

音声認識はこの確率を比較して「箸」を選びます。

```{note}
$P(w_1, w_2, \ldots, w_n)$ は「この順序でこの単語列が現れる確率」です。単語の集合としての同時確率（順序不問）とは異なり、**順序が変わると確率も変わります**。たとえば $P(\text{お箸でご飯を食べる}) \neq P(\text{食べるご飯でお箸を})$ です。
```

### 連鎖律：ステップに分解する

スマホ補完で「今日は いい 天気 ですね」という候補の確率を考えます。

$$
P(\text{今日は いい 天気 ですね})
$$

を一度に推定しようとすると、語彙サイズ $|V|$、文長 $n$ に対して $|V|^n$ 通りの組み合わせが必要です（$|V| = 50,000$、$n = 10$ なら $10^{47}$ 通り）。これは現実的ではありません。

そこで確率の乗法定理を繰り返し使います：

$$
P(\text{今日は いい 天気 ですね})
= P(\text{今日は})
   \times P(\text{いい} \mid \text{今日は})
   \times P(\text{天気} \mid \text{今日は いい})
   \times P(\text{ですね} \mid \text{今日は いい 天気})
$$

一般式：

$$
P(w_1, \ldots, w_n) = \prod_{i=1}^{n} P(w_i \mid w_1, \ldots, w_{i-1})
$$

これが **連鎖律（Chain Rule）** です。各ステップが「これまでの文脈を見て次の単語の確率を求める」操作になっています。スマホ補完はまさにこのステップを逐次計算しています。

```{note}
「今日は」と打って「いい」が出るのも、「今日は いい」と打って「天気」が出るのも、同じ「前の文脈から次の単語の確率を計算する」操作です。これが LM の核心です。
```

**残る問題**：$P(w_i \mid w_1, \ldots, w_{i-1})$ の推定には長い履歴が必要で、$i$ が大きくなると組み合わせが膨大になります。

---

## n-gram：シンプルな実装

### Markov 仮定

**アイデア**：「直前の $k-1$ 語だけを見れば十分」と単純化する。

$$
P(w_i \mid w_1, \ldots, w_{i-1}) \approx P(w_i \mid w_{i-k+1}, \ldots, w_{i-1})
$$

このように「過去全体ではなく直前の$k-1$語だけに依存すると仮定する」ことを **Markov 仮定** と呼びます。

| k | 名称 | スマホ補完での意味 |
|:---:|:---|:---|
| 1 | ユニグラム | 直前の入力を無視して頻出語を提案 |
| 2 | バイグラム | 直前の 1 語を見て次の単語を提案 |
| 3 | トライグラム | 直前の 2 語を見て次の単語を提案 |

### コーパスから確率を推定（最尤推定）

大量の文章（コーパス）の出現頻度から確率を計算します：

$$
P(w_i \mid w_{i-1}) = \frac{C(w_{i-1},\ w_i)}{C(w_{i-1})}
$$

このように頻度比をそのまま確率とみなす推定方法を **最尤推定（Maximum Likelihood Estimation; MLE）** と呼びます。観測された頻度比をそのまま確率と見なす方法で、n-gram では閉形式（単純なカウント比）で解が求まります。

**音声認識の例で確認（「橋 vs 箸」）**

日本語の大規模コーパスを調べると：

$$
P(\text{ご飯} \mid \text{箸で}) \gg P(\text{ご飯} \mid \text{橋で})
$$

バイグラム LM は「お箸でご飯を食べる」を選びます。

(bigram-count-table)=
### 計算例：バイグラムカウントテーブル

**訓練コーパス**（各行が 1 文）：

```
<s> 犬 が 走る </s>
<s> 猫 が 歌う </s>
<s> 犬 が 歌う </s>
<s> 猫 が 寝る </s>
```

`<s>` と `</s>` はそれぞれ文の開始・終了を表す特殊トークンです。

**バイグラムカウントテーブル**

> 列見出し $C(\cdot, x)$ は「行の語の直後に $x$ が出現したバイグラムの回数 $C(w_{i-1}, x)$」を表します。たとえば行「が」・列「$C(\cdot,\text{走る})$」のセル値 $1$ は、「が 走る」というバイグラムが訓練コーパスに $1$ 回出現したことを意味します。

| 前の語 $(w_{i-1})$ | $C(w_{i-1})$ | $C(\cdot,\text{犬})$ | $C(\cdot,\text{猫})$ | $C(\cdot,\text{が})$ | $C(\cdot,\text{走る})$ | $C(\cdot,\text{歌う})$ | $C(\cdot,\text{寝る})$ | $C(\cdot,\text{泳ぐ})$ |
|:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| \<s\> | 4 | 2 | 2 | 0 | 0 | 0 | 0 | 0 |
| 犬 | 2 | 0 | 0 | 2 | 0 | 0 | 0 | 0 |
| 猫 | 2 | 0 | 0 | 2 | 0 | 0 | 0 | 0 |
| が | 4 | 0 | 0 | 0 | 1 | 2 | 1 | 0 |

テスト文「犬 が 走る」の確率を計算すると：

$$
P(\text{犬が走る}) = P(\text{犬} \mid \langle s \rangle) \times P(\text{が} \mid \text{犬}) \times P(\text{走る} \mid \text{が}) \times P(\langle/s\rangle \mid \text{走る})
= \frac{2}{4} \times \frac{2}{2} \times \frac{1}{4} \times 1 = 0.125
$$

### 機械翻訳の曖昧性解消

"I saw the man with the telescope." の 2 訳の比較：

- 訳 A：「私は望遠鏡で男を見た」
- 訳 B：「私は望遠鏡を持つ男を見た」

言語モデルは日本語コーパスで $P(\text{訳 A})$ と $P(\text{訳 B})$ を比較します。どちらの日本語文がより自然か（= より確率が高いか）で訳を選びます。

```{tip}
機械翻訳では「翻訳モデル」（原言語と目標言語の対応）と「言語モデル」（目標言語の自然さ）を組み合わせるのが古典的な手法です。LM が「より自然な日本語を選ぶ役割」を担います。
```

### データスパース問題

**問題の発見**

「望遠鏡を持つ男」という表現が訓練コーパスに 1 度も出ていなければ：

$$
C(\text{持つ},\ \text{男}) = 0 \Rightarrow P(\text{男} \mid \text{持つ}) = 0
$$

訳 B の確率がゼロになります。「望遠鏡を持つ男を見た」は現実に自然な日本語文ですが、コーパスに未出現というだけで確率がゼロになってしまいます。

文中にゼロカウントの n-gram が 1 つでもあると、文全体の確率（= 各ステップの確率の積）がゼロになります。これを **データスパース問題** と呼びます（Jurafsky & Martin, 2023, Ch.3; Chen & Goodman, 1998）。

### スムージング

ゼロを避けるために、全ての n-gram にあらかじめ小さい確率を割り当てます。

**Laplace スムージング（Add-1）**

$$
P_{\text{Laplace}}(w_i \mid w_{i-1}) = \frac{C(w_{i-1}, w_i) + 1}{C(w_{i-1}) + |V|}
$$

$|V|$ は語彙サイズ（全ての単語の種類数）。

具体例（$C(\text{持つ}) = 100$、$|V| = 50,000$）：

- スムージングなし：$P(\text{男} \mid \text{持つ}) = 0/100 = 0$
- スムージングあり：$P(\text{男} \mid \text{持つ}) = 1/(100 + 50,000) \approx 0.00002$

「ゼロ」を「非常に小さいが非ゼロ」にすることで、文全体の確率がゼロになるのを防ぎます。

実際にはLaplaceより高性能な手法もあります（例：Kneser-Ney）。

---

## モデルの評価：Perplexity

### どのモデルが良いかを比較する

スマホ補完の精度を上げたい場合、モデル A とモデル B どちらが良いでしょうか。

モデル A とモデル B を比べるとき、**訓練データと同一の分布から引かれたテストデータ**に対してより高い確率を割り当てる方が良いモデルです。

- 良いモデル：ユーザーが実際に打ち込む文章を正確に予測できる（= 高い確率を割り当てる）
- 悪いモデル：ユーザーの文章に低い確率しか割り当てられない（= "驚かされてしまう"）

```{note}
「より高い確率」はモデル間の比較です。また「同一の分布」という条件が重要で、出鱈目な文章に高い確率を割り当てることは目標ではありません。同じジャンル・言語の未知の文に対して、どちらのモデルがより高い確率を付けられるかを競います。
```

### Perplexity（PPL）の定義

テスト文 $w_1, \ldots, w_N$ に対して **Perplexity（PPL）** を次のように定義します：

$$
\text{PPL} = P(w_1, \ldots, w_N)^{-1/N}
$$

対数を使って書き直すと：

$$
\text{PPL} = \exp\!\left(-\frac{1}{N} \sum_{i=1}^{N} \log P(w_i \mid w_{i-k+1}, \ldots, w_{i-1})\right)
$$

**直感的な解釈**：PPL = k のとき、「次の単語を k 択の均等分布からランダムに選ぶのと同等の不確かさ」。

PPLは **低いほど良い。**

```{note}
**対数への書き直し（導出ステップ）**

$$\text{PPL} = P(w_1,\ldots,w_N)^{-1/N}$$

$$= \exp\!\Bigl(\log P(w_1,\ldots,w_N)^{-1/N}\Bigr) \quad [\exp(\log x) = x]$$

$$= \exp\!\Bigl(-\tfrac{1}{N}\log P(w_1,\ldots,w_N)\Bigr) \quad [\log x^a = a\log x]$$

$$= \exp\!\Bigl(-\tfrac{1}{N}\log\prod_{i=1}^{N} P(w_i\mid\cdots)\Bigr) \quad [\text{連鎖律}]$$

$$= \exp\!\Bigl(-\tfrac{1}{N}\sum_{i=1}^{N}\log P(w_i\mid\cdots)\Bigr) \quad [\log\textstyle\prod = \sum\log]$$

最後のステップで積が和に変わります。$\log P \le 0$ の加算は、長い文でも浮動小数点のアンダーフロー（積が数値的にゼロになる問題）を起こさずに計算できます。
```

```{note}
**word2vec の損失との対応**：CBOW の損失 $-\frac{1}{N}\sum \log P(w_{\text{center}} \mid \text{context})$ と、log PPL の $-\frac{1}{N}\sum \log P(w_i \mid \text{context})$ は**数式の構造が同じ**です。「次単語を正確に予測する」という目的が共通しています。$\exp(\cdot)$ をかけているのは PPL を「択数」として解釈しやすくするためです。
```

### スマホ補完で直感を掴む

「今日は＿＿」の次の補完候補で考えます。

| PPL | 補完候補の感覚 |
|:---:|:---|
| 5 | 「いい/天気/良い/晴れ/暑い」の 5 択程度の確信で選べる |
| 50 | 「なんとなく分かるが 50 択くらいある」 |
| 200 | ほぼランダム（使い物にならない補完） |
| 960 | 語彙全体からランダム（補完機能がないのと同じ） |

**PPL が低いほど、ユーザーが次に打つ単語を的確に予測できる補完システムになります。**

```{admonition} Check your understanding
自分のスマートフォンのキーボード補完は、自分がよく使うフレーズを覚えているほど精度が良くなります。なぜそうなるか、Perplexity の概念を使って説明してください。

（ヒント：ユーザー固有のフレーズをコーパスとして学習した LM の PPL は低くなる傾向があります。）
```

(tech-map)=
### 歴史的な改善と「技術の地図」

この授業で何度も参照する地図を示します。ここで示しているPPLは複数の研究事例からピックアップしているため、あくまでも目安と考えてください。異なる研究間（異なるコーパス間）では単純比較できないためです。

**LMの目標**：P(wₜ | w₁, w₂, ..., w_{t-1}) を精度良く推定したい

| 手法 | 文脈の扱い | PPL（PTB） | 次の発展・課題 | 授業回 |
|:---|:---|:---:|:---|:---:|
| ユニグラム LM | なし（単語頻度のみ） | ~962 | 直前の文脈を利用したい | Week 11 |
| バイグラム LM | 直前 1 語（カウント） | ~170 | より長い文脈を利用したい | Week 11 |
| トライグラム LM（Kneser-Ney） | 直前 2 語（カウント） | ~74 | **k語より長い文脈を持ちたい** | Week 11 |
| Neural LM（固定窓） | 直前 *k* 語（NN + 埋め込み） | ~90 | **固定ウィンドウを超えたい** | Week 11 |
| RNN LM | hidden state に全履歴を蓄積 | ~58 | **遠い情報が薄まる（勾配消失）** | Week 12 |
| Attention | 必要な過去を直接参照 | ↓ | **hidden state なしで扱えないか？** | Week 12 |
| Transformer | 全位置を Self-Attention で直接結ぶ | ~21 | **大量データで事前学習する** | Week 13 |
| GPT | Transformer LM の超大規模版 | ↓ | — | Week 14 |

この表の「n-gram の 3 行」と「Neural LM」が今日の内容です。残りの行は Week 12〜14 で順番に埋まります。

```{note}
PPL 値の出典：ユニグラム・バイグラムは Jurafsky & Martin (SLP3, Ch.3)、トライグラム (KN) は Chen & Goodman (1998)。RNN の ~58 は Merity et al., ICLR (2018)、Transformer の ~21 は Dai et al., ACL (2019)。いずれも **Penn Treebank（PTB）単語レベル PPL** です。
```

---

## n-gram では越えられない壁

### 長距離依存の問題

スマホ補完で次の入力を考えます：

> 「私 が 昨日 図書館 で 借り た 本 の 著者 は 日本 で 最も 有名 な ___ だ 。」

次に来るのは人名（著者名）のはずです。しかし「有名 な」の前には 12 語あります。

- トライグラム（直前 2 語）では「有名 な」の後に来る語しか参照できない
- 「有名 な」の後に最も頻出するのは「人」「もの」「店」など
- 「著者名」の候補が浮かび上がってこない

12 語前の「著者 は」という情報があれば人名が来るとわかりますが、固定ウィンドウでは届きません。

**これが固定ウィンドウ（= n-gram）の根本的な限界です。**

### 汎化の欠如

「犬 が 走る 公園 を 散歩 する 」というフレーズで補完を学習したとします。

「猫 が 走る ___」と入力されたとき：
- n-gram は「犬 が 走る」で学んだカウントを「猫 が 走る」に転用できない
- 「犬」と「猫」は意味的に近いが、n-gram は **文字列の完全一致** しか見ない

word2vec では「犬」と「猫」の埋め込みが近傍にあるため、「犬 が 走る」の文脈パターンが「猫 が 走る」の予測に自動的に影響します。n-gram にはその仕組みがありません。

### Neural LM：埋め込みを LM に組み込む

n-gram の「カウントテーブル」を「NN」に置き換え、word2vec の埋め込みを入力に使います：

$$
P(w_i \mid w_{i-2}, w_{i-1}) \approx \text{NN}\!\left(\text{embed}(w_{i-2}), \text{embed}(w_{i-1})\right)
$$

```
"猫" → embed → [0.2, -0.5, 0.8, ...]  ─┐
"が"  → embed → [0.0,  0.3, 0.1, ...]  ─┴→ NN → P(走る | 猫 が) ≈ 0.18
                                              （"犬 が 走る" の学習が転用される）
```

**改善されること**

- スパース問題 ✅ → NN はゼロ確率を返さない
- 汎化 ✅ → 「犬」と「猫」の埋め込みが近ければ知識が共有される

**まだ解決しないこと**

- 長距離依存 ✗ → 固定ウィンドウはそのまま
   - n-gramと比べると、多少は長い系列長を扱いやすい △
      - n-gramでは、語彙数V、系列長Lで指数的に増える: $V^L$
      - Neural LMでは、n-gramのように文脈ごとの組合せを保存する必要はなく、入力長に応じてネットワークサイズが線形に増える（埋め込みベクトルd次元なら、$Ld$で増える）だけである。そのため、n-gramより長い文脈を扱いやすい。一方で、文脈を長くするほど入力層や重み行列も大きくなるため、固定窓を極端に長くすることは効率的ではない。この固定窓自体を取り払うためにRNNやTransformerが提案された。

> **問い**：「12 語前の著者」を参照するには、固定ウィンドウを取り除く必要がある。どうすればよいか？

---

## 「予測タスクの SSL」という統一視点

### Word2vec から Transformer までの共通構造

```
全て「コーパスから自動生成したラベルで予測タスクを解く SSL モデル」

手法               予測タスク                    文脈の向き・長さ
──────────────────────────────────────────────────────────────
word2vec (CBOW)   P(中心語 | 左右 k 語)          両方向・固定
word2vec (SG)     P(周辺語 | 中心語)              両方向・固定
n-gram LM         P(wₜ | 直前 k 語) [カウント]    左のみ・固定
neural LM         P(wₜ | 直前 k 語) [NN]          左のみ・固定
RNN LM            P(wₜ | w₁...w_{t-1})            左のみ・可変長   [Week 12]
Transformer LM    P(wₜ | w₁...w_{t-1})            左のみ・全長 Att.[Week 13]
```

```{note}
この表は歴史順ではなく「予測タスクの枠組み」でグループ化しています。歴史的には n-gram LM（1990年代）→ neural LM（2003）→ RNN LM（2010）→ word2vec（2013）→ Transformer（2017）の順に登場しました。技術的な発展の流れは {ref}`技術の進化表 <summary-tech-evolution>` を参照してください。
```

### GPT との接続

GPT の事前学習目標：

$$
\max_{\theta} \sum_{t} \log P_{\theta}(w_t \mid w_1, \ldots, w_{t-1})
$$

これは n-gram LM の最尤推定の目的関数と **まったく同じ形です**。

変わったのはアーキテクチャ（Transformer）とスケール（数十億パラメータ・数兆トークン）だけです。

> 「Week 10 の word2vec で学んだ "予測タスクの SSL" という概念が、GPT を理解する直接の土台になります。」

---

## まとめ

### word2vec との対応

| | word2vec (CBOW) | n-gram LM |
|:---|:---|:---|
| 予測目標 | $P(\text{中心語} \mid \text{周囲の文脈})$ | $P(w_i \mid \text{直前 } k \text{ 語})$ |
| 文脈の向き | 両方向 | 一方向（過去のみ） |
| 表現 | 密ベクトル（学習） | カウントテーブル（推定） |
| 汎化 | あり（埋め込みが共有） | なし（文字列完全一致） |

どちらも「コーパスから自動生成したラベルで予測タスクを解く SSL」という枠組みは同じです。変わったのは「文脈の向き」と「表現の種類」です。

(summary-tech-evolution)=
### 技術の進化

| 技術 | 解決した問題 | 残った問題 |
|:---|:---|:---|
| n-gram LM | 連鎖律を近似して推定可能にした | スパース、汎化なし、長距離依存 |
| スムージング | ゼロカウント問題を緩和 | 汎化なし、長距離依存 |
| Perplexity | LM の評価基準を定量化 | — |
| Neural LM | スパース、汎化なし | 長距離依存 |
| **RNN（Week 12）** | **長距離依存** | 勾配消失（遠い情報が薄まる） |
| **Attention（Week 12）** | **勾配消失** | — |
| **Transformer（Week 13）** | **全体の効率化** | 計算量 |

### 今日の 3 システムを改めて見る

| システム | 言語モデルの役割 | PPL が低いと嬉しいこと |
|:---|:---|:---|
| スマホ補完 | 次の単語 Top-K を確率でランキング | ユーザーが打ちたいものが上位に来る |
| 音声認識 | 音響的に曖昧な候補を確率で解消 | 同音異義語のミスが減る |
| 機械翻訳 | 翻訳候補から最も自然な文を選ぶ | 流暢な訳文が増える |

**次回（Week 12）**：固定ウィンドウを超える RNN を学びます。

---

## 演習問題

**Q1** ：CBOW と言語モデルは同じ SSL の枠組みに属しますが、「文脈の向き」が異なります。それぞれの向きを説明し、なぜ言語モデルが「一方向」である必要があるかを述べてください。

**Q2** ：音声認識で「はしをつかって」という入力が来たとき、「橋を使って」と「箸を使って」のどちらが選ばれるかを言語モデルで決定する仕組みを説明してください。

**Q3** ：{ref}`バイグラムカウントテーブル <bigram-count-table>` を参照して、テスト文「猫 が 歌う」のバイグラム確率を計算してください。

**Q4** ：Q3 のコーパスで「犬 が 泳ぐ」の確率を計算すると 0 になります。Laplace スムージング（$|V| = 9$）を適用して $P_L(\text{泳ぐ} \mid \text{が})$ を求めてください。

**Q5** ：「犬が走る公園を歩く」でバイグラム LM を学習した場合、「猫が走る」の後に続く語の予測にこの知識は活用されますか？Neural LM（埋め込みあり）ではどうでしょうか。それぞれの理由を述べてください。

**Q6** ：{ref}`技術の地図 <tech-map>`を参照して、n-gram から Transformer まで PPL が改善されてきた各ステップで「何が変わったか」を 1 行ずつ説明してください。

**Q7** ：ChatGPT は「次のトークンを予測する」タスクを繰り返して文章を生成します。今日学んだ n-gram LM も「次の単語を予測する」タスクです。両者の目的関数は同じですか？また、何が違いますか？

---

## 参考文献

- Bengio, Y. et al. "A Neural Probabilistic Language Model," JMLR 3 (2003). ← Neural LM 提案論文
- Mikolov, T. et al. "Efficient Estimation of Word Representations in Vector Space," arXiv:1301.3781 (2013). ← Word2vec 原論文
- Jelinek, F. "Statistical Methods for Speech Recognition," MIT Press (1998). ← 音声認識での言語モデル活用
- Koehn, P. "Statistical Machine Translation," Cambridge University Press (2009). ← 機械翻訳での言語モデル
- Kneser, R. and Ney, H. "Improved Backing-Off for M-gram Language Modeling," ICASSP (1995). ← Kneser-Ney スムージング
- Chen, S.F. and Goodman, J. "An Empirical Study of Smoothing Techniques for Language Modeling," ACL (1996). ← スムージング比較研究
- Radford, A. et al. "Language Models are Unsupervised Multitask Learners," OpenAI (2019). ← GPT-2 論文
- Jurafsky, D. and Martin, J.H. "Speech and Language Processing," 3rd ed. Ch. 3（無料公開）
- 奥野 陽 他「機械翻訳」コロナ社 (2020). ← 日本語での機械翻訳解説
