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)
- {hog, oge}
バイト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}
なども考えることができる(はず)。