自然言語処理に出てくるn-gramとはなに?

機械学習
1

 

授業や業務などで自然言語処理について学ぶと、当然の知識として「n-gram」あるいは「Nグラム」といった用語が使われます。
親切な自然言語処理の教科書であればもちろん解説が書いてありますが、ネットなどで見つけた資料などにわざわざ注釈がつけられることはほとんどありません。

そんな自然言語処理を学ぶ上での前提知識である「n-gram」について丁寧に解説します。

n-gramとはn個の連続する単位

一言で説明すると、「n-gram」とは連続するn個の単語や文字のまとまりを表します。
例えば以下の文がデータとして与えられたとします。

  • 太郎 は りんご を 買 った

ここでスペースは単語の区切りを表します。
この文章が与えられた時のn-gramを考えてみましょう。
n=3、すなわち3-gramは連続する3個の単語のまとまりなので、この文の中には以下の4つの3-gramが含まれることになります。

  • 太郎 は りんご
  • は りんご を
  • りんご を 買
  • を 買 った

同様にして、n=2の時は以下の5つの2-gramが含まれています。

  • 太郎 は
  • は りんご
  • りんご を
  • を 買
  • 買 った

すなわち、T個の単語からなる文においてT-n+1個のn-gramが含まれていることになります。

また、特に1-gram、2-gram、3-gramのことをunigram(ユニグラム)、bigram(バイグラム)、trigram(トライグラム)と呼ぶことが多いです。

n-gramの単位に注意

n-gramを取り扱う時には、その単位に注意する必要があります。
英語など、単語区切りを明示する言語であれば基本的に単語単位でのn-gramを数えますが、日本語や中国語といった単語境界があいまいな言語の場合、文字単位でのn-gramを数えることがよくあります

例えば上で用いた文において、文字単位での5-gramを数えてみましょう。

  • 太郎はりんごを買った
    • 太郎はりん
    • 郎はりんご
    • はりんごを
    • りんごを買
    • んごを買っ
    • ごを買った

このように、単語単位でのn-gramとは様子が異なったものになるため、n-gramについて考えるときは必ずその単位に注意する必要があります。

n-gramは文脈を捉える素性として使われる

ここまで説明してきたn-gramは何に使われるのでしょうか。
最もよく使われる用途として「文脈を捉えた素性」があげられます。

たとえば読み方に曖昧性がある単語「上手」を考えます。
「上手」という単語には「じょうず」「うわて」「かみて」の三つの読み方があります。
それぞれに応じて、以下のような例文を考えます。

  • 彼 は サッカー が 上手 だ
  • 彼女 の 戦略 が 一枚 上手 だ った
  • 役者 は 舞台 の 上手 から 登場 し た

機械でこの単語の読みを処理するとき、各文の「上手」という単語だけを見ても曖昧性を解消することができません。
そこで、「上手」という単語の直前2単語を含んだ3-gramを考慮することで、曖昧性解消を行います。

  • サッカー が 上手
  • が 一枚 上手
  • 舞台 の 上手

このように、「どのような文脈で上手という単語が使われたか?」をn-gramとして考慮することで、それぞれの読みの曖昧性を解消する手助けとすることができます。

こうした文脈を考慮できるという性質は、言語モデルと呼ばれる自然言語処理の基礎技術に深くかかわっています。
それについては次の記事で説明しますので、そちらも併せてご覧ください。

python
3
ニューラルネットで時系列データを学習しよう【Chainer入門】

株や仮想通貨の予測のためには、時系列データの取り扱いが重要です。 今回は、Chainerを用いて時系 …

python
3
ニューラルネットでsin波を学習してみよう【Chainer入門】

Chainerを用いて単純なニューラルネットワークを構築し、sin波を学習してみましょう! とりあえ …

動機付け
2
「トークン」を使ったモチベーティング(動機付け)の例と応用

頑張った自分に「ご褒美」を用意することで、気持ちを作るという経験は誰にでもあるのでは無いでしょうか。 …