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-Gram | LLM | |
|---|---|---|
| 基本単位 | 単語など | トークン |
| 文脈 | 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より圧倒的に強いのかがかなり明確になります。
