# 検索で用いられるn-gramとは？形態素解析にも触れながら見ていこう！

> 当サイト【スタビジ】の本記事では、n-gramについて解説していきます！n-gramは自然言語処理領域の中で検索システムに使われることのある文書分解ロジックでn-gram自体はシンプル！どうやって使うかを理解しておきましょう！

- URL: https://toukei-lab.com/n-gram
- 公開: 2024.02.25 / 更新: 2025.11.26
- サイト: スタビジ（https://toukei-lab.com）

:::talk{who="umatan"}
当サイト【スタビジ】の本記事では、n-gramについて解説していきます！n-gramは自然言語処理領域の中で検索システムに使われることのある文書分解ロジックでn-gram自体はシンプル！どうやって使うかを理解しておきましょう！
:::

こんにちは！データサイエンティストのウマたん([@statistics1012](https://twitter.com/statistics1012?lang=ja))です！

この記事ではn-gramについて解説していきます！

n-gram自体は非常にシンプルですぐ理解できるのですが、<mark>検索システムを作る際にどういうところに気をつけるべきか</mark>などまで理解しておくことが大事です。

この記事ではそんなn-gramについて形態素解析にも触れながら簡単に見ていきましょう！

以下の動画でも解説しているのであわせてチェックしてみてください！

::youtube{#CcL_t5ZJ9fQ}

## n-gramとは

n-gramは文章を特定のまとまりごとにまとめてグループ化するアプローチです。

nには数字が入るようになっており、1-gram（ユニグラム）、2-gram（バイグラム）、3-gram（トリグラム）の3つのパターンがあります。

そして最小単位を文字にするか単語にするかの2パターンが存在します。

具体的にどんな分け方になるのか見ていきましょう！

### 最小単位が文字の場合

:::box
**スタビジは面白いサイトだ**
:::

という文章があった時にそれを文字単位で分割すると

**・1-gramの場合**

:::box
ス/タ/ビ/ジ/は/面/白/い/サ/イ/ト/だ
:::

となります。これはシンプルですね。

**・2-gramの場合**

:::box
スタ / タビ / ビジ / ジは / は面 / 面白 / 白い / いサ / サイ / イト / トだ
:::

となります。2個ずつの文字が1つの塊になり、それぞれが1個ずつズレていることが分かります。

**・3-gramの場合**

では3-gramはどうなるでしょう？

:::box
スタビ / タビジ / ビジは / ジは面 / は面白 / 面白い / 白いサ / いサイ / サイト / イトだ ​
:::

3文字ごとの塊になり1文字ずつズレていることが分かります。

### 最小単位が単語の場合

最小単位が単語の場合はどうなるでしょう？

まず、最小単位を単語にするには形態素解析をする必要があります。

例えば先ほど使った以下のような文書を形態素解析すると・・・

:::box
**スタビジは面白いサイトだ**
:::

以下のようになります。

:::box
スタビジ / は / 面白い / サイト / だ
:::

意味のある単語ごとに分かれているのが分かると思います。

これにn-gramを適用させると、以下のようになります。

**・1-gram**

:::box
(スタビジ) / (は) / (面白い) / (サイト) / (だ)
:::

**・2-gram**

:::box
(スタビジ、は) / (は、面白い) / (面白い、サイト) / (サイト、だ)
:::

**・3-gram**

:::box
(スタビジ、は、面白い) / (は、面白い、サイト) / (面白い、サイト、だ)
:::

文字単位の場合とルールは変わらず最小単位だけが変わっているということが分かります。

:::talk{who="umatan"}
形態素解析をするには単語単位の辞書を持った形態素解析エンジンを使うのが一般的！
:::

形態解析に関しては以下の記事で詳しく解説しているので興味のある方はチェックしてみてください！

<https://toukei-lab.com/python-mecab>

## n-gramを検索でどう使う？

ここまでn-gramの定義について見てきましたが、ここからはn-gramを実際に使うシーンについて見ていきましょう！

n-gramは検索システムにおいて使うことが多いです。

<mark>大量の文章から特定のキーワードに基づいて文章を検索する際に、毎回毎回全ての文章に対して部分一致するものがあるかを調べにいくとものすごい時間がかかります。</mark>

<mark>そんな時に利用されるのが「n-gram」もしくは「形態素解析」によってインデックスをはっておくという作業なのです。</mark>

例えば先ほどの

:::box
**スタビジは面白いサイトだ**
:::

という文書を文書1として形態素解析で分解してインデックスをはる場合は

以下のようにインデックスがはられます。

<table border="0" cellspacing="0" cellpadding="0" class="table">
<tbody>
<tr>
<td>スタビジ</td>
<td>文書1</td>
</tr>
<tr>
<td>は</td>
<td>文書1</td>
</tr>
<tr>
<td>面白い</td>
<td>文書1</td>
</tr>
<tr>
<td>サイト</td>
<td>文書1</td>
</tr>
<tr>
<td>だ</td>
<td>文書1</td>
</tr>
</tbody>
</table>

そして他の文書2として

:::box
**データサイエンスは面白い**
:::

という文書があった場合、この文書は以下のように形態素解析で分解できるので、

:::box
データサイエンス / は / 面白い
:::

文書1と文書2をあわせて以下のようにインデックスがはられることになります。

<table class="table">
<tbody>
<tr>
<td>スタビジ</td>
<td>文書1</td>
</tr>
<tr>
<td>は</td>
<td>文書1, 文書2</td>
</tr>
<tr>
<td>面白い</td>
<td>文書1, 文書2</td>
</tr>
<tr>
<td>サイト</td>
<td>文書1</td>
</tr>
<tr>
<td>だ</td>
<td>文書1</td>
</tr>
<tr>
<td>データサイエンス</td>
<td>文書2</td>
</tr>
</tbody>
</table>

このようにインデックスがはられた状態で、例えば「面白い」とキーワードを入れて検索してみると、文書1,2がどちらもヒットすることになります。

「面白いサイト」と調べると、「面白いサイト」自体を形態素解析した結果である「面白い」と「サイト」にインデックスがはられている文書1だけがヒットすることになります。

このようにインデックスをはることで検索精度を落とさずに高速に結果を表示することができるのです！！

しかしこの時、「面白サイト」みたいな検索をする人がいたとしましょう。このキーワードだと文書1はヒットしないのです。。。

そこでn-gramの出番！

2-gramで分解してインデックスをはる場合は以下のようになります。

<table border="0" cellspacing="0" cellpadding="0" class="table">
<tbody>
<tr>
<td>スタ</td>
<td>文書1</td>
</tr>
<tr>
<td>タビ</td>
<td>文書1</td>
</tr>
<tr>
<td>ビジ</td>
<td>文書1</td>
</tr>
<tr>
<td>ジは</td>
<td>文書1</td>
</tr>
<tr>
<td>は面</td>
<td>文書1</td>
</tr>
<tr>
<td>面白</td>
<td>文書1</td>
</tr>
<tr>
<td>白い</td>
<td>文書1</td>
</tr>
<tr>
<td>いサ</td>
<td>文書1</td>
</tr>
<tr>
<td>サイ</td>
<td>文書1</td>
</tr>
<tr>
<td>イト</td>
<td>文書1</td>
</tr>
<tr>
<td>トだ</td>
<td>文書1</td>
</tr>
</tbody>
</table>

ここで「面白サイト」と検索された場合、前から順番に2文字抽出して「面白」「サイ」「イト」に引っかかる文書として文書1がヒットします！

検索キーワードである「面白サイト」を分解する際は2-gram分解ではなくて先頭から2文字ずつ抽出して最後だけ余るので「イ」を重複させて「イト」としています。

このようにn-gramを使うことで形態素解析よりも、検索キーワードを省略した場合に検索精度が高くなります。

ただ、その分検索にノイズが入りやすくなります。

ちなみに今回は「面白い」「サイト」の全てに一致するAND条件で検索するロジックや「面白」「サイ」「イト」の全てに一致するAND条件で検索するロジックで考えましたが、どちらかに一致するOR条件にすることも可能です。

そうすると検索ヒットの幅が大きく広がりますが、その分検索にノイズが入りやすくなります。

ここらへんは検索の精度や処理速度との相談になるかと思います。

ちなみに書籍まとめのサービス「[Yomeru(ヨメル)](https://yomeru.jp/)」というものを開発しているのですが、こちらでは形態素解析とn-gramを使ってインデックスをはってAND条件で検索しています！

月間20万人くらいが使ってくれてるサービスで絶賛頑張って開発中なので是非使ってみてください！！

## n-gramをPythonで実装！

ここまででn-gramの定義や使い方について解説してきました。

ここで、非常にシンプルですが、n-gramをPythonで実装するならどんなコードになるか見ていきましょう！

例えば

:::box
**スタビジは面白いサイトだ**
:::

という文章に3-gramを適用させる場合は以下のようなコードになります。

```python
text = "スタビジは面白いサイトだ"

n_grams = [text[i:i+3] for i in range(len(text)-2)]
n_grams
```

非常にシンプルなコードになっているのが分かりますね！

テキストの文字数を最大値として最大値に達するまでfor文で取り出してtextをスライスで塊に分けています。

これで

3-gramの

:::box
スタビ / タビジ / ビジは / ジは面 / は面白 / 面白い / 白いサ / いサイ / サイト / イトだ ​
:::

というリストが取得できます。

## n-gram　まとめ

![](/wp-content/uploads/2024/02/n-gram-1024x683.jpg)

この記事ではn-gramの定義・使い方・Pythonでの実装方法についてまとめてきました。

n-gramの考え方はおさえておいていざとなった時に使えるようになっておきましょう！

さらに詳しく自然言語処理について勉強したい！という方は当サイト「スタビジ」が提供する[スタビジアカデミー](https://toukei-lab.com/achademy/)というサービスの「[自然言語処理](https://toukei-lab.com/achademy/courses/nlp/)」コースで体系的に学ぶことが可能ですので是非参考にしてみてください！n-gramは取り上げていません。

:::box
**AIデータサイエンス特化スクール「スタアカ」**

![スタアカ（スタビジアカデミー）のトップページ](/wp-content/uploads/2026/10/achademy-top.jpg)
:::

<table class="table">
<tbody>
<tr>
<th>【価格】</th>
<td>ライトプラン：1,280円/月（全コースが受講し放題）<br>
プレミアムプラン：129,800円（通常149,800円・買い切り）</td>
</tr>
<tr>
<th>【オススメ度】</th>
<td><span class="stars" role="img" aria-label="5点中5点" data-value="5"></span></td>
</tr>
<tr>
<th>【サポート体制】</th>
<td><span class="stars" role="img" aria-label="5点中4点" data-value="4"></span></td>
</tr>
<tr>
<th>【受講形式】</th>
<td>オンライン形式</td>
</tr>
<tr>
<th>【学習範囲】</th>
<td>統計学・機械学習・ディープラーニングを網羅的に学ぶ<br>
生成AI（LLM・RAG・プロンプトエンジニアリング）を学ぶ<br>
SQLとPythonを組み合わせて実データを使った様々なワークを行う<br>
実践的なビジネスフレームワークを学ぶ<br>
マーケティングの実行プラン策定</td>
</tr>
</tbody>
</table>

データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「[スタアカ](https://toukei-lab.com/achademy/)」！！

当メディアが運営するスクールです。

月額1,280円のライトプランで、統計学から機械学習・生成AIまで全コースが受講し放題です！

<mark>プレミアムプランでは、24時間以内の質問対応と現役データサイエンティストとの1on1（30分×4回）を実施します！</mark>

カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください！

他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。

<mark>そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコース</mark>になっています！

Pythonが初めての人でも学べるようなカリキュラムにしておりますので是非チェックしてみてください！

ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったりする盛りだくさんの内容になってます！

:::box
**・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析**\
**・世界最大手小売企業のウォルマートの実データを用いた需要予測**\
**・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定**\
**・生成AIのAPIを使ってチャットボットやAIエージェントを作る**
:::

::button[スタアカの受講はこちら]{href="https://toukei-lab.com/achademy/" note="＼今すぐ試す／"}