N-gram 言語モデル
N-gram 言語モデルは、学習コーパスで同じ直前の履歴を探し、その後に現れた token の頻度から次の token を予測します。次数 n が保持する文脈の長さを決めます。平滑化は計数がゼロでも分布を作れますが、文脈の証拠を増やすことはできません。
隠れベクトルもニューラルネットワークも使いません。検索した履歴、コーパスの一致箇所、整数の計数、確率を順に確認できます。検証可能なベースラインや対象を絞った用途に向く一方、長い履歴ほど有限のデータでは見つかりにくくなります。
仕組み
N-gram は連続する n 個の token です。予測では末尾の n - 1 個を履歴 h とし、完全一致した各履歴の直後の token w を数えます。
4-gram に at dusk the cat を渡すと、履歴は h = dusk the cat です。それ以前の単語は使いません。この履歴が三回現れ、二回は sat、一回は ate が続くなら、最尤推定は次の値になります。
P(sat | dusk the cat) = 2 / 3
P(ate | dusk the cat) = 1 / 3
他の語彙 token はゼロです。一般式は:
P(w | h) = C(h, w) / C(h)
C(h,w) は履歴に w が続いた回数、C(h) はその履歴から観測された後続 token の総数です。つまり全 C(h,w) の和であり、コーパス全体の長さではありません。各文末に <eos> を加え、終了も予測対象にします。
平滑化と証拠
最尤推定は未観測の後続 token にゼロを割り当てます。評価する文に一つでも該当する箇所があれば、その文全体の確率はゼロです。加算平滑化では全語彙に同じ擬似カウント alpha を加えます。
P_alpha(w | h) = (C(h, w) + alpha) / (C(h) + alpha |V|)
候補は |V| 個なので分母にも alpha |V| が必要です。分子だけを変えると確率の和が 1 になりません。調整後の計数 0.1 は 0.1 回の観測を意味せず、未観測の履歴が観測済みに変わるわけでもありません。
ステップごとの例
初期値は n = 4、alpha = 0.1 です。次の英文は実験データなので原文のまま扱います。
| 文 | 学習系列 |
|---|---|
| 1 | at dusk the cat sat <eos> |
| 2 | at dusk the cat sat <eos> |
| 3 | at dusk the cat ate <eos> |
| 4 | at dawn the dog slept <eos> |
| 5 | by noon the cat slept <eos> |
語彙は初出順に 12 個:at、dusk、the、cat、sat、<eos>、ate、dawn、dog、slept、by、noon です。
- 履歴を切り出す。
at dusk the catの末尾三つ、dusk the catを使います。 - 完全一致を探す。 文 1、2、3 が一致し、
satが二回、ateが一回続きます。文 4、5 は共通の単語を含みますが、履歴全体は一致しません。 - 数えて割る。
sat: 2、ate: 1、残り十個はゼロ。C(h) = 3なので最尤確率は0.6667と0.3333です。 - 平滑化する。 分母は
3 + 0.1 × 12 = 4.2になります。
| 後続 token | 観測回数 | 調整後の計数 | 確率 |
|---|---|---|---|
sat | 2 | 2.1 | 0.5000 |
ate | 1 | 1.1 | 0.2619 |
| 他の各 token | 0 | 0.1 | 0.0238 |
和は 1 のままです。観測済みの候補から確率質量を分け、未観測の候補にも配ります。
- 一語変える。
duskをdawnにすると履歴はdawn the catです。全単語が語彙にあっても、この三語の並びは未観測です。語彙の被覆と文脈の被覆は別です。 - ゼロ計数を確認する。
C(dawn the cat) = 0なので最尤推定は0/0で未定義です。十二個のゼロも分布ではありません。平滑化すると各分子は0.1、分母は1.2、各確率は1/12 = 0.0833になります。有効な分布ですが、候補を区別する証拠はありません。 - 履歴を短くする。 3-gram の履歴
the catは四回現れます。satが二回、ateとsleptが各一回です。分母は4 + 0.1 × 12 = 5.2。確率はsat: 0.4038、ate: 0.2115、slept: 0.2115、残り九個は各0.0192です。証拠を得る代わりに、夕暮れ、夜明け、正午の文脈を区別しなくなります。
長い履歴と疎な証拠
Unigram の履歴は空です。このコーパスでは五つの <eos> を含む全 30 位置を数えます。Bigram は直前の一つ、trigram は二つ、4-gram は三つの token の順序まで一致を求めます。
長い履歴 dusk the cat は by noon the cat slept を除外して sat を目立たせます。一方、dawn the cat は一致がゼロで、短い the cat なら四例あります。可能な履歴の数は約 |V|^(n - 1) に増え、観測位置は有限です。これが疎性の問題です。
平滑化は履歴長を固定して推定値を変えます。履歴の短縮は証拠として数える位置を変えます。平滑化だけでは短い履歴の四例を発見できません。ニューラル言語モデルは token と文脈をベクトルで表し、文字列が一致しなくても統計情報を共有します。N-gram では、どの計数にも出所を示せる点が利点です。
n と alpha の選択
n = 1 は問い合わせを無視して全体の頻度を使います。n = 2、3、4 は末尾の一つ、二つ、三つを使います。小さな正の alpha は頻度差を残しながらゼロをなくします。大きくすると一様分布に近づきます。初期例の既知履歴で alpha を 0.1 から 1.0 にすると、P(sat|h) は 0.5000 から 3/15 = 0.2000 に下がります。首位は同じでも二回の観測の影響が小さくなります。
万能な組合せはありません。大きなコーパスなら長い履歴を支えられますが、小さなコーパスでは短い履歴やバックオフが必要です。加算平滑化は教材やベースラインに適し、実際の計数モデルでは補間、バックオフ、割引、Kneser–Ney 平滑化なども使います。
パラメータは学習データへの適合ではなく、保留データで選びます。同じ token 化、語彙、評価集合で平均負の対数尤度(交差エントロピー)、またはその指数であるパープレキシティを比べます。低い方が良い値です。学習側だけ改善して保留側が悪化するなら、観測した計数への適合が汎化につながっていません。
境界ケース
- 未観測履歴で
alpha = 0:最尤推定は未定義です。全ゼロを確率分布として扱いません。 - 未観測履歴で
alpha > 0:分子と分母の alpha が消え、各候補は常に1/|V|です。 - 既知履歴の未観測後続 token:最尤ではゼロ、平滑化では正の値です。平滑化は各確率を一様な
1 / |V|に近づけるので、高頻度の候補は下がり、低頻度の既知候補は上がることがあります。 - Unigram:
<eos>も含めた全位置の頻度を使い、問い合わせは無視します。 - 文末の履歴:
<eos>が後続イベントになります。なければ、その出現には数える後続 token がありません。 - 語彙外入力:本課では扱いません。実用では
<unk>の方針か、任意の入力を既知の単位へ分割する token 化が必要です。 - 大文字と句読点:前処理で統一しなければ
Cat、cat、cat,、句読点を分離した系列は異なります。
よくある間違い
- 文中のどこにある単語でも数える。履歴全体の直後だけが対象で、部分一致は含めません。
- 次数に関係なく全接頭辞を使う。3-gram は
the catだけを見るので、その前のduskとdawnの違いは無関係です。 - 文数や全 token 数で割る。分母は履歴ごとの
C(h)です。 - 観測済みの候補だけに alpha を加える。全語彙が対象です。
- 擬似カウントを観測と呼ぶ。新しい一致は増えず、未観測候補の妥当性も証明しません。
- 大きな n が常に良いと思う。正確な履歴の被覆がなければ予測は脆くなります。
- 一様なフォールバックを情報に基づく予測と読む。同順位なのは、選んだ履歴に証拠がないためです。
簡略化の範囲
五文、初出順の固定語彙、空白による分割、各文末の <eos> を使います。次数は 1–4、alpha は 0–1 で、手計算できます。未知語、大文字の処理、句読点の分離、文頭記号、枝刈り、多次数の補間、保留データでの調整は省略しています。
実際の計数モデルは複数の履歴長を組み合わせ、語が多様な文脈に現れるかも割引やバックオフに利用します。ニューラルモデルは履歴表を学習した表現に置き換えますが、最後には次の token の分布を出します。本課は、履歴の長さと証拠の被覆の関係を切り出したものです。
続けて学ぶ
同じ手法につながるレッスンや、次の概念への入口です。
鍵マークのあるレッスンの操作には有料アクセスが必要です。解説はすべて無料で読めます。
誤りや気になる点を見つけましたか? フィードバックを送る。