大きな画面での利用をおすすめします — アニメーションと操作がより快適になります。
入力

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 です。次の英文は実験データなので原文のまま扱います。

文学習系列
1at dusk the cat sat <eos>
2at dusk the cat sat <eos>
3at dusk the cat ate <eos>
4at dawn the dog slept <eos>
5by noon the cat slept <eos>

語彙は初出順に 12 個:at、dusk、the、cat、sat、<eos>、ate、dawn、dog、slept、by、noon です。

  1. 履歴を切り出す。 at dusk the cat の末尾三つ、dusk the cat を使います。
  2. 完全一致を探す。 文 1、2、3 が一致し、sat が二回、ate が一回続きます。文 4、5 は共通の単語を含みますが、履歴全体は一致しません。
  3. 数えて割る。 sat: 2、ate: 1、残り十個はゼロ。C(h) = 3 なので最尤確率は 0.6667 と 0.3333 です。
  4. 平滑化する。 分母は 3 + 0.1 × 12 = 4.2 になります。
後続 token観測回数調整後の計数確率
sat22.10.5000
ate11.10.2619
他の各 token00.10.0238

和は 1 のままです。観測済みの候補から確率質量を分け、未観測の候補にも配ります。

  1. 一語変える。 dusk を dawn にすると履歴は dawn the cat です。全単語が語彙にあっても、この三語の並びは未観測です。語彙の被覆と文脈の被覆は別です。
  2. ゼロ計数を確認する。 C(dawn the cat) = 0 なので最尤推定は 0/0 で未定義です。十二個のゼロも分布ではありません。平滑化すると各分子は 0.1、分母は 1.2、各確率は 1/12 = 0.0833 になります。有効な分布ですが、候補を区別する証拠はありません。
  3. 履歴を短くする。 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 の分布を出します。本課は、履歴の長さと証拠の被覆の関係を切り出したものです。