文章をコンピュータで扱う最も素朴で強力な方法のひとつが、「N個ずつ区切って数える」ことです。本記事では、自然言語処理の土台であるn-gramの考え方と、ユニグラム・バイグラム・トライグラムの違い、日本語処理での意外な便利さをやさしく解説します。

📖 ひと言でいうと

n-gramとは、テキストの中で連続するN個の単語や文字の組み合わせのことです。N=1をユニグラム、N=2をバイグラム、N=3をトライグラムと呼び、これらの出現頻度を数えることで、言葉のつながり方を統計的に捉えます。

例えるなら、文章の上を「幅Nの窓」を1つずつずらしながらスライドさせ、窓に入った断片を片っ端からメモしていくイメージです。断片の集計だけで「この語の次にはこの語が来やすい」というパターンが見えてくるのが、n-gramの面白いところです。

🖼 1枚でわかるn-gram

n-gram
  • 定義 — 連続するN個の単語や文字の組み合わせ
  • 呼び名 — N=1ユニグラム / N=2バイグラム / N=3トライグラム
  • 役割 — 出現頻度から単語・文字のつながり方を統計的に捉える
  • 日本語での利点 — 文字単位なら形態素解析なしで特徴抽出できる
  • 限界 — Nが小さいと長い文脈を捉えられず、大きいと計算量・データ量が爆発
つくもち屋「G検定対策」SUMMARY

📘 公式テキストの説明

連続するN個の単語や文字の組み合わせを指す。例えば、Nが1の場合は「ユニグラム(unigram)」、2の場合は「バイグラム(bigram)」、3の場合は「トライグラム(trigram)」と呼ばれる。N-gramモデルは、特定の単語や文字列が特定の文脈でどの程度出現するかを統計的に捉える手法である。例えば、「今日はいい天気ですね」という文をバイグラムに分割すると、「今日」「日は」「はいい」「いい天」「天気」「気で」「です」「すね」となる。これにより、単語間の連続性や共起関係を明らかにすることができる。日本語のように単語間の境界が明確でない言語では、文字単位のN-gramが特に有用である。文字単位のN-gramを用いることで、形態素解析を行わずにテキストの特徴を抽出することが可能となる。例えば、「自然言語処理」というフレーズを3-gramに分割すると、「自然言」「言語処」「語処理」となる。これにより、単語の境界を意識せずにテキストのパターンを捉えることができる。N-gramモデルは、言語モデルの基礎として広く利用されている。特に、次に出現する単語の予測や文の生成、スペルチェック、機械翻訳など、多様な応用が存在する。例えば、検索エンジンではユーザーの入力に対して適切な候補を提示する際にN-gramモデルが活用されている。しかし、N-gramモデルには限界も存在する。例えば、Nの値が小さい場合、長距離の文脈を捉えることが難しくなる。また、Nの値を大きくすると、計算量やデータの必要量が増加するため、適切なバランスが求められる。近年では、N-gramモデルに代わり、ニューラルネットワークを用いた言語モデルが注目を集めている。これらのモデルは、より長い文脈を考慮し、高度な言語理解を可能にしている。しかし、N-gramモデルはそのシンプルさと解釈の容易さから、依然として基本的な手法として重要視されている。

引用中の「今日はいい天気ですね」の例は、文字単位のバイグラム(1文字ずつずらしながら隣り合う2文字を切り出す)の考え方を示したものです。「今日」「日は」「はい」「いい」…と、隣り合う文字のペアが次々に取り出されます。単語単位でn-gramを作ることもでき、単位を単語にするか文字にするかは目的と言語によって使い分けます。

🔍 しっかり理解する

n-gramの作り方:窓をスライドさせるだけ

n-gramの抽出はとても機械的です。「自然言語処理」を文字単位の3-gram(トライグラム)にするなら、先頭から3文字の窓を1文字ずつ右にずらし、「自然言」「然言語」「言語処」「語処理」のような断片を切り出していきます。

テキストを用意
単語単位か文字単位かを決める
幅Nの窓でスライド
1つずつずらして断片を切り出す
頻度を集計
どの組み合わせが何回出たか数える
統計として活用
次の単語予測・特徴抽出などに使う

集計結果からは「『いい』の次には『天気』が来やすい」といった共起のパターンが読み取れます。この頻度を確率とみなせば、「直前のN-1個から次の1個を予測する」言語モデルになります。かな漢字変換や検索エンジンの入力候補の提示、スペルチェック、統計的機械翻訳など、n-gramに基づく言語モデルは長らく実用システムの主役でした。

日本語との相性:形態素解析なしで使える

英語は単語がスペースで区切られていますが、日本語は単語の境界が明示されないため、通常は形態素解析(単語への分割)が前処理として必要です。ところが文字単位のn-gramなら、境界を決めずに機械的に切り出すだけでテキストの特徴を抽出できます。辞書にない新語や固有名詞が多い文書、くだけた表現の多いSNSテキストでも、分割の失敗に悩まされずに検索や分類の特徴量を作れるのが実用上の強みです。全文検索システムの索引作りにも、この文字n-gramの考え方が使われています。

限界:Nのジレンマとニューラル言語モデルへの交代

n-gramモデルの弱点は、Nの選び方に本質的なジレンマがあることです。Nが小さいと直前の1〜2語しか見ないため、文の最初の方にある重要な手がかり(長距離の文脈)を捉えられません。かといってNを大きくすると、組み合わせの種類が爆発的に増え、計算量と必要なデータ量が急増します。しかも大半の組み合わせは学習データに一度も出現せず、確率をうまく見積もれなくなります。

この限界を突破したのが、RNNやTransformerなどのニューラルネットワークを用いた言語モデルです。より長い文脈を考慮した高度な言語理解が可能になり、現在の主役は交代しました。それでもn-gramは、シンプルで動作の理由を説明しやすいことから、基礎手法・ベースラインとして今も重要です。

💡 具体例で考える

検索窓の「入力候補」の裏側

検索エンジンに「天気」と打つと「天気予報」「天気 東京」のような候補が出ます。これは、大量の検索ログやテキストから「『天気』に続きやすい語」をn-gram統計として持っているからできることです。難しい意味理解をしなくても、「頻度を数えておく」だけで実用的な予測ができる——n-gramの実力がわかる身近な例です。スマートフォンの予測変換も同じ発想で、直前の語から次の語の候補を順位付けしています。

「東京都」を3-gramで検索に強くする

文字単位n-gramの威力は検索で実感できます。「東京都に住む」を単語分割すると「東京都/に/住む」となり、「京都」で検索してもヒットしません(それが正しい挙動です)。一方、文字2-gramで索引を作ると「東京」「京都」「都に」…という断片が登録されるため、取りこぼしなく候補を拾えます。拾いすぎる(「京都」で「東京都」も出る)という逆の問題はありますが、「単語の境界を意識せずパターンを捉える」という公式テキストの記述は、まさにこの性質を指しています。

⚠️ よくある誤解・紛らわしい用語

💡 ポイント
  • n-gramは「モデル」ではなく、まず「切り出しの単位」 — 連続N個の組み合わせそのものがn-gramで、その頻度を確率として使うのがn-gram(言語)モデルです。
  • 単語単位と文字単位の2通りがある — 「今日はいい天気ですね」の例は文字バイグラムです。単位の取り違えに注意しましょう。
  • BoW(Bag-of-Words)との違い — BoWは語順を無視して単語の出現回数だけを数えますが、n-gramは「連続する並び」を保持するため、語順の情報を部分的に捉えられます。
  • ユニグラム・バイグラム・トライグラムの対応 — N=1・2・3の呼び名を入れ替えた選択肢が作られやすいので、確実に対応させましょう。

📝 試験でのポイント

💡 ポイント
  • 「連続するN個の単語や文字の組み合わせ」という定義と、N=1/2/3の呼び名(ユニグラム/バイグラム/トライグラム)は即答できるようにしましょう。
  • 「自然言語処理」→3-gramで「自然言」「然言語」「言語処」「語処理」のように、実際に分割させる形式が想定されます。手を動かして練習しておくと確実です。
  • 「日本語では文字単位のn-gramが有用(形態素解析が不要)」という論点は日本語NLPの定番です。
  • 限界(小さいNでは長距離文脈が捉えられない・大きいNでは計算量とデータ量が増える)と、ニューラル言語モデルへの交代の流れも問われます。

📚 まとめ

💡 ポイント
  • n-gramは連続するN個の単語や文字の組み合わせで、N=1をユニグラム、N=2をバイグラム、N=3をトライグラムと呼びます。
  • 出現頻度の集計から語のつながりを統計的に捉え、次の単語予測・スペルチェック・機械翻訳など幅広く応用されてきました。
  • 単語境界のない日本語では、文字単位のn-gramによって形態素解析なしで特徴抽出ができます。
  • 長い文脈を扱えない限界からニューラル言語モデルに主役を譲りましたが、シンプルで解釈しやすい基礎手法として今も重要です。