N-gram

はじめに

文書の数学的表現をするためによく用いられるものに「N-gram」というものがある。
最近ちょっと混乱ので、ちゃんとまとめてみる。

N-gramとは?

「文章などで隣り合うn個のこと」

文書を数学的に扱うために、普通に考え付くのが「その単語がでたかどうか」や「単語とその頻度」などだけど、
それだけじゃないのがn-gram
n-gramを要素として考えることで、さまざまな文書のベクトル表現ができる(二値ベクトル、頻度ベクトルなど)。

単語n-gram

「this is a pen」という文書が与えられたとき、この文書を分解したい。
以下のように、隣り合うn個の単語を一塊として考えるのがn-gram

  • 1-gram(unigram)
    • {this, is, a, pen}
  • 2-gram(bigram)
    • {this-is, is-a, a-pen}
  • 3-gram(trigram)
    • {this-is-a, is-a-pen}
  • 4-gram
    • {this-is-a-pen}
  • 5-gram
    • どのように定義するのか?

unigramは、語順の情報が完全になくなってしまう({}の順番は考慮されない)。
bi-gramは少しだけ考慮され、nが増えるほど語順の情報が考慮されてくる。

文字n-gram

単語n-gramと同様に、隣り合うn個の文字を一塊として考えることができる。
hoge」という文書が与えられたとき、文字n-gramは以下のようになる。

  • 1-gram(unigram)
    • {h, o, g, e}
  • 2-gram(bigram)
    • {ho, og, ge}
  • 3-gram(trigram)
バイトn-gram

文字n-gramと同様に、バイト単位まで落として隣り合うn個のバイトを一塊としても考えることができる。
utf-8とかは1文字を3バイトで扱っていたりするので、文書の言語特定などに利用することができる(かも)。

ダミー文字

文書の先頭・末尾にダミー文字として、「」や「」があると考える場合がある。
こうすることで、n-gramの中に文書の位置に関する情報を入れることができる。

  • 文字bigram
    • {B-this, this-is, is-a, a-pen, pen-E}

定義によると思うけど、複数のダミー文字があると考えれば、

  • 文字trigram
    • {B-B-this, B-this-is, this-is-a, is-a-pen, a-pen-E, pen-E-E}

なども考えることができる(はず)。