N-Gramについて詳しく

N-Gramについて詳しく教えてください。

ChatGPTの回答:

N-Gram(エヌグラム)は、文章や時系列データを「連続するN個の要素」に分割して扱う方法です。

自然言語処理(NLP)で非常によく使われますが、考え方自体は非常に単純です。


1. N-Gramとは

例えば、次の文章を考えます。

I love machine learning

これを単語単位で分割すると、

I / love / machine / learning

となります。

このとき、

  • 1-Gram(Unigram) → 1単語ずつ
  • 2-Gram(Bigram) → 2単語ずつ
  • 3-Gram(Trigram) → 3単語ずつ

というように、連続するN個を1つの単位として扱うのがN-Gramです。

1-Gram

I
love
machine
learning

2-Gram

I love
love machine
machine learning

3-Gram

I love machine
love machine learning

これがN-Gramの基本です。


2. 何が嬉しいのか

最大のポイントは、

単語をバラバラに扱うよりも、「単語同士の関係」をある程度表現できる

ことです。

例えば、

hot dog

という2単語があります。

Unigramなら、

hot
dog

なので、「hot」と「dog」が関連していることを直接表現できません。

Bigramなら、

hot dog

となるため、「hot dog」というまとまりを認識できます。

同様に、

New York

なら、

New
York

よりも

New York

として扱ったほうが意味を捉えやすくなります。


3. Nを大きくするとどうなるか

例えば、

I love machine learning very much

に対して、

Unigram

I
love
machine
learning
very
much

Bigram

I love
love machine
machine learning
learning very
very much

Trigram

I love machine
love machine learning
machine learning very
learning very much

4-Gram

I love machine learning
love machine learning very
machine learning very much

となります。

Nを大きくすると、より長い文脈を表現できます。

ただし、Nを大きくすれば必ず良いわけではありません。


4. N-Gramの重要な問題:「組み合わせ爆発」

例えば語彙が10,000語あるとします。

Bigramなら理論上、 10,0002=100,000,00010,000^2 = 100,000,000

通り。

Trigramなら、 10,0003=1,000,000,000,00010,000^3 = 1,000,000,000,000

通りです。

つまりNを大きくすると、候補数が急激に増えます。

これがN-Gramモデルの大きな問題です。

実際には、すべての組み合わせが出現するわけではないので、出現したN-Gramだけを保存するなどの工夫をします。


5. N-Gramと「次の単語予測」

N-Gramは、昔の言語モデルで特に重要でした。

例えば、

I want to eat ___

という文章があったとします。

Bigramだけでは、

I want
want to
to eat
eat ?

しか分かりません。

Trigramなら、

I want to
want to eat
to eat ?

となります。

そこで、

to eat

の次にどんな単語が来ることが多いかを統計的に調べます。

例えば学習データに、

to eat pizza
to eat rice
to eat dinner
to eat breakfast

が大量にあれば、

to eat → pizza / rice / dinner / breakfast

などの確率を計算できます。

つまり、

「直前のN-1個の単語から、次の単語の確率を予測する」

というモデルを作れます。


6. N-Gram言語モデル

例えばBigramモデルなら、 P(wi∣wi−1)P(w_i \mid w_{i-1})

を使います。

これは、

直前の単語が wi−1w_{i-1} のとき、次の単語が wiw_i になる確率

という意味です。

Trigramなら、 P(wi∣wi−2,wi−1)P(w_i \mid w_{i-2},w_{i-1})

です。

つまり、

直前2単語から次の単語を予測する

ということです。

文章全体の確率も、 P(w1,w2,…,wn)P(w_1,w_2,\ldots,w_n)

を、N-Gramの条件付き確率に分解して計算できます。


7. ChatGPTのようなLLMとの関係

ここは非常に重要です。

現在のLLMでは、基本的に昔ながらのN-Gramモデルをそのまま使っているわけではありません。

例えば、

I love machine learning

をBigramにして、

I love
love machine
machine learning

という文字列を大量に記憶して予測する、という仕組みではありません。

現在のLLMでは、基本的にTransformer + Tokenizer + ニューラルネットワークによって、より広い文脈から次のトークンを予測します。

N-GramとLLMの違いをかなり乱暴に表現すると、

N-GramLLM
基本単位単語などトークン
文脈N個程度非常に長いコンテキスト
仕組み頻度・確率統計ニューラルネットワーク
文脈理解限定的非常に高度
未知の組み合わせ弱い比較的強い
現代のLLM基本技術ではないTransformerが中心

ただし、「次のトークンを予測する」という発想自体は共通しています。


8. N-Gramは「単語」だけとは限らない

ここも重要です。

N-Gramは「N個の単語」という意味ではありません。

何を1単位とするかは自由です。

例えば文字N-Gramもあります。

hello

を文字Bigramにすると、

he
el
ll
lo

です。

Trigramなら、

hel
ell
llo

となります。


9. 日本語ではどうする?

日本語は英語と違って、

私は猫が好きです。

のように単語間にスペースがありません。

そのため、昔ながらの単語N-Gramでは、まず形態素解析などによって、

私 / は / 猫 / が / 好き / です

のように分割します。

Bigramなら、

私 は
は 猫
猫 が
が 好き
好き です

です。

一方で、文字N-Gramなら、

私は
は猫
猫が
が好
好き
きで
です

のように扱えます。

そのため、日本語の検索システムなどでは文字N-Gramが便利な場合があります。


10. 検索エンジンでも使われる

例えば検索対象に、

東京都立大学

があるとします。

文字Bigramなら、

東京都
京都立
都立大
立大学

のように分解できます。

ユーザーが、

都立大学

と検索した場合、

都立大
立大学

が一致します。

このようにN-Gramは、

  • あいまい検索
  • 部分一致
  • 類似文字列検索
  • スペルミスへの対応
  • 検索インデックス

などにも利用できます。


11. 機械学習の特徴量としてのN-Gram

N-Gramは、文章を機械学習モデルに入力するための**特徴量(feature)**としても利用できます。

例えば、

I love cats

という文章から、

I
love
cats
I love
love cats

という特徴量を作ります。

そして、

I love cats → positive
I hate cats → negative

のような大量のデータから、

どのN-Gramがポジティブ/ネガティブ判定に寄与するか

を機械学習します。

これは、

  • Naive Bayes
  • Logistic Regression
  • SVM
  • LightGBM
  • XGBoost

などの機械学習モデルと組み合わせることができます。


12. ただしN-Gramには「意味」の理解がない

例えば、

I love cats.

I adore cats.

は意味的にはかなり近いですが、N-Gramだけでは、

I love
love cats

I adore
adore cats

なので、別物として扱われます。

つまりN-Gramは、

「文字列として似ているか」「一緒に出現しやすいか」

は捉えられますが、

「意味的に似ているか」

を直接理解することは苦手です。

ここから、

  • TF-IDF
  • Word2Vec
  • GloVe
  • FastText
  • Embedding
  • Transformer

などの手法につながっていきます。


13. N-GramとTF-IDF

例えば文書分類をするとき、

I love machine learning

を、

machine
learning
machine learning

などのN-Gram特徴量に変換し、その出現頻度をTF-IDFで重み付けすることがあります。

つまり、

N-Gram = 「どんな文字列・単語のまとまりを見るか」

TF-IDF = 「そのまとまりをどの程度重要と評価するか」

という役割分担です。

この組み合わせは、古典的なNLPでは非常に重要です。


14. N-Gramの最大のメリット・デメリット

メリット

  • 非常に単純
  • 実装が容易
  • 計算が比較的軽い
  • 統計的に解釈しやすい
  • 単語単体より局所的な文脈を表現できる
  • 検索や分類で現在でも有用

デメリット

  • Nを大きくすると特徴量が爆発する
  • 長距離の文脈を捉えられない
  • 未出現のN-Gramに弱い
  • 意味理解が弱い
  • 同義語を同じものとして扱えない
  • 文脈依存の意味を扱いにくい

15. 直感的に言うと

N-Gramを一言で表現するなら、

「文章を、隣り合ったN個のかたまりとして見る方法」

です。

例えば、

私は AI を 勉強 しています

なら、

Unigram

私は
AI
を
勉強
しています

Bigram

私は AI
AI を
を 勉強
勉強 しています

Trigram

私は AI を
AI を 勉強
を 勉強 しています

という具合です。

そして、この「かたまり」がどのくらいの頻度で登場するかを利用すれば、文章分類・検索・次単語予測などができます。


16. N-Gramを理解するときの重要な位置づけ

NLPの発展をざっくり並べると、かなり理解しやすくなります。

単語・文字
   ↓
N-Gram
   ↓
Bag of Words / TF-IDF
   ↓
Word2Vec / GloVe / FastText
   ↓
RNN / LSTM
   ↓
Transformer
   ↓
LLM

N-Gramは現在のLLMそのものではありませんが、「文章を統計的に扱い、次の要素を予測する」という言語モデルの基本的な考え方を理解するうえで非常に重要な基礎です。

特にLLMを理解する場合は、次に 「N-Gram → Word2Vec → Transformer → LLM」では、それぞれ何が解決されてきたのかを見ると、なぜTransformerやLLMがN-Gramより圧倒的に強いのかがかなり明確になります。