IT用語集

n-gramとは? 10分でわかりやすく解説

水色の背景に六角形が2つあるイラスト 水色の背景に六角形が2つあるイラスト
アイキャッチ
目次

自然言語処理でよく登場する n-gram(エヌグラム)とは、テキストを「連続するn個の単位」に区切り、その出現頻度や確率を扱う手法です。単語や文字の並び方を数値として表せるため、テキストの特徴量化や、検索・分類・生成など幅広いタスクで使われてきました。本記事では、n-gramの定義や特徴、活用分野、関連アルゴリズム、課題と展望を、できるだけ噛み砕いて解説します。

n-gramとは何か

n-gramは、自然言語処理における基本的な考え方の一つです。テキストを連続するn個の要素(文字・単語など)に分割し、その出現傾向を統計的に扱うことで、文章の特徴を扱いやすい形にします。

n-gramの定義

n-gramの「n」は任意の整数を表し、「gram」は要素(文字や単語など)を意味します。つまり、n-gramとはn個の連続した要素のまとまりです。

ここで大事なのは、n-gramには大きく分けて2種類あることです。

  • 文字n-gram:文字の並びをn個ずつ切り出す
  • 単語n-gram:単語の並びをn個ずつ切り出す(日本語では分かち書き・形態素解析が前提になりやすい)

例えば、次の文章があるとします。

「私は自然言語処理に興味があります。」

この文章を文字2-gram(バイグラム)で表現すると、例えば次のようになります(例示のため、連続する2文字を切り出しています)。

  • 私は
  • は自
  • 自然
  • 然言
  • 言語
  • 語処
  • 処理
  • 理に
  • に興
  • 興味
  • 味が
  • があ
  • あり
  • りま
  • ます
  • す。

一方、単語n-gramで扱う場合は、まず「私/は/自然言語処理/に/興味/が/あります/。」のように単語に区切ったうえで、2語ずつ切り出すイメージになります。

n-gramの利用目的

n-gramが使われる主な目的は、次の通りです。

  1. 言語モデルの構築:ある単語の次に何が出やすいかを確率として推定し、文章予測や入力補完などに活かす
  2. 文章の類似度計算:n-gramの共通度合いを見て、文章同士がどれくらい似ているかを測る
  3. 情報検索:クエリと文書をn-gramに分解して一致度を見たり、表記ゆれに強い検索を作ったりする
  4. 分類・分析:感情分析やカテゴリ分類などで、特徴量として使う

n-gramの特徴

n-gramには、扱いやすさと引き換えに、はっきりした弱点もあります。

  • シンプルで直感的:仕組みが分かりやすく、実装もしやすい
  • 言語に依存しにくい:文字n-gramなら、言語をまたいでも比較的扱いやすい
  • スパース性nが大きくなるほど組み合わせが爆発的に増え、観測されないn-gramが増える

n-gramの計算方法

基本的な計算の流れは、次のようになります。

  1. テキストデータを読み込む
  2. 前処理を行う(不要な記号の扱い、正規化など)
  3. 単位(文字 or 単語)とnの値を決める
  4. n-gramを生成する
  5. 出現回数を数える(必要なら確率に変換する)

以下は、文字2-gramの出現頻度を数えるイメージ例です(文章が短いので、ほとんどが1回になります)。

2-gram(例)出現頻度
私は1
自然1
言語1
処理1
興味1
ます1

n-gramを使うと、文章を「どんな並びが多いか」という統計情報に落とし込めます。これが、テキスト分析を機械学習に載せるときの入口になります。

n-gramの活用分野

自然言語処理におけるn-gramの利用

n-gramは、言語モデルの構築や文章の特徴量化に使われてきました。大量のテキストからn-gramの頻度を学習し、次に出やすい単語(文字)を確率として推定することで、入力補完や誤り訂正などに応用できます。文章分類やクラスタリングでも、n-gramの頻度ベクトルが素直な特徴量として働きます。

情報検索におけるn-gramの活用

検索の世界では、n-gramは「表記ゆれ」や「部分一致」に強い仕組みを作るのに役立ちます。クエリと文書をn-gramに分解し一致度を見れば、単語が完全一致しなくても近い候補を拾えることがあります。単語ベース検索よりも柔軟に動くケースがあるのが利点です。

テキストマイニングでのn-gramの重要性

テキストマイニングでは、頻出フレーズの抽出や、文章の傾向把握でn-gramが使われます。n-gramの頻度を見ると、単語単体では拾いにくい「まとまり(言い回し)」が見えやすいため、トピック把握や特徴分析の足がかりになります。

機械翻訳へのn-gramの応用

統計的機械翻訳(SMT)では、n-gram言語モデルが重要部品でした。原言語と目的言語の対応関係を学びつつ、目的言語側のn-gram確率で「自然さ」を評価し、よりそれらしい訳を選ぶ考え方です。現在の主流はニューラル機械翻訳(NMT)ですが、n-gramの発想自体は「確率で言語を扱う」入門として価値があります。

n-gramを利用したアルゴリズム

言語モデルとn-gram

言語モデルとは、文章(単語列)がどのくらい起こりやすいかを確率で表すモデルです。n-gram言語モデルでは、直前n-1個の文脈から次の単語を予測する、という形で近似します。

例えば、単語列 w1, w2, ..., wT の確率は、本来は長い依存関係を含みますが、n-gramでは次のように近似します。

P(w1,...,wT) ≈ ∏ P(wt | wt-n+1, ..., wt-1)

n-gram言語モデルの種類

nの値によって、代表的に次の呼び方があります。

  1. ユニグラム(1-gram):直前文脈を見ず、単語そのものの出現だけを見る
  2. バイグラム(2-gram):直前1語の文脈を見る
  3. トライグラム(3-gram):直前2語の文脈を見る
  4. 一般のn-gram:直前n-1語の文脈を見る

nを大きくすると文脈は豊かになりますが、データ不足(スパース性)が一気に重くなるため、バランスが重要です。

スムージング手法とバックオフ

n-gram言語モデルは、学習データに出てこない並びを「確率ゼロ」としてしまいがちです。これを避けるのがスムージングです。未知の並びにも少し確率を割り当て、極端なゼロを回避するのが目的です。

代表例として、次のような手法が知られています。

  • 加算スムージング(Add-one / Laplace)
  • グッド・チューリング(Good-Turing)
  • カッツ・バックオフ(Katz backoff)
  • クニーザー・ネイ(Kneser-Ney)

バックオフは、長いn-gramが観測されないときに、より短い文脈(nを小さくしたモデル)へ切り替える考え方です。例えばトライグラムがなければバイグラム、それもなければユニグラム、という具合です。

パープレキシティによるモデル評価

言語モデルの評価指標として、パープレキシティ(perplexity)がよく使われます。ざっくり言うと、「モデルがどれくらい迷わずに次を予測できるか」の度合いです。小さいほど良い(予測が鋭い)と解釈されます。

テキスト W = w1...wT に対し、次の形で表されます。

PP(W) = P(W)^(-1/T)

異なるnやスムージングの組み合わせを比較するとき、パープレキシティは便利な物差しになります。

n-gramの課題と展望

n-gramモデルの限界

n-gramは分かりやすい一方で、限界も明確です。

  • nが大きくなるほど組み合わせが爆発し、計算量とメモリが重くなる
  • 長距離の依存関係が苦手:遠くの文脈(主語と述語の対応など)を捉えにくい
  • 未知の並びに弱い:スムージングしても、根本的にデータ不足が効いてくる

このため、実用上はスムージング/バックオフ、可変長n-gram、スキップグラムなど、工夫とセットで使われます。

深層学習によるn-gramの拡張

近年は深層学習ベースの言語モデル(RNN/LSTM、さらにTransformer系)が主流です。これらは長距離文脈を扱えるため、n-gramの苦手領域を大きく補えます。

ただし、n-gramが完全に不要になったわけではありません。軽量で実装しやすく、データが少ない場面や、検索・近似マッチングなどの用途では今でも活躍します。「重いモデルを使うほどではない」場面で効く手札として残り続けています。

文脈を考慮したn-gramモデル

n-gramの「文脈が短い」という弱点を補うため、トピックや属性情報を組み込む拡張も考えられます。例えば、トピック別にn-gram確率を持つ、感情極性に応じて出やすい言い回しを重み付けする、といった方向です。特定ドメインに寄せた分析では、こうした工夫が役に立つことがあります。

大規模データへのn-gramの適用

大量データに対してn-gram統計を取る場合は、並列処理・分散処理との相性が良いのも特徴です。ログ分析やソーシャルデータの傾向把握など、集計のスケールがそのまま価値になる用途では、今後も使われ続けるでしょう。

まとめ

n-gramは、テキストの連続性(並び)に着目し、出現頻度や確率を扱う自然言語処理の基本手法です。言語モデル、類似度計算、情報検索、テキストマイニングなど、幅広い分野で活用されてきました。スパース性や長距離文脈の弱さといった限界はあるものの、スムージングやバックオフ、拡張手法と組み合わせることで実用性は高まります。深層学習が主流になった今でも、軽量で扱いやすい手法として、n-gramは場面を選びながら活躍しています。

よくある質問

n-gramとは何ですか?

n-gramは、テキストを「連続するn個の要素(文字や単語など)」に分割し、その出現頻度や確率を扱う手法です。

文字n-gramと単語n-gramは何が違いますか?

文字n-gramは文字の並びを、単語n-gramは単語の並びを扱います。日本語の単語n-gramでは、分かち書きや形態素解析で単語に区切る工程が必要になることが多いです。

nは大きいほど良いのですか?

一概には言えません。nを大きくすると文脈は増えますが、組み合わせが増えすぎてデータ不足になりやすく(スパース性)、計算量も重くなります。

n-gramはどんな用途で使われますか?

言語モデル(予測・入力補完)、文章の類似度計算、情報検索、テキスト分類、感情分析など、テキストの特徴量化が必要な場面で広く使われます。

n-gram言語モデルとは何ですか?

直前n-1個の文脈から次の単語の確率を推定し、文章全体の確率を近似する言語モデルです。ユニグラム、バイグラム、トライグラムなどがあります。

スムージングはなぜ必要ですか?

学習データに出てこないn-gramを確率ゼロにしてしまうと、未知文への評価や予測が極端になります。スムージングは未知の並びにも確率を割り当て、ゼロ確率問題を避けるために使います。

バックオフとは何ですか?

長いn-gramが観測されない場合に、より短い文脈(nを小さくしたモデル)の確率へ切り替える手法です。データ不足に対してモデルをロバストにします。

パープレキシティとは何ですか?

言語モデルの予測の良さを測る代表的な指標です。小さいほど、モデルがテキストを「迷わず」説明できている(予測性能が高い)と解釈されます。

深層学習が主流なら、n-gramはもう不要ですか?

不要ではありません。軽量で実装しやすく、検索・近似マッチング・簡易な特徴量化などでは今でも有効です。重いモデルを使うほどではない場面で強みがあります。

日本語でn-gramを使うときの注意点はありますか?

単語n-gramを使う場合、単語の区切り方(形態素解析の結果)でn-gramが変わります。目的に応じて、文字n-gramにするか単語n-gramにするか、前処理の方針を揃えることが重要です。

記事を書いた人

ソリトンシステムズ・マーケティングチーム