N-Gramとは?
状態:-
閲覧数:978
投稿日:2017-03-17
更新日:2017-03-23
与えられた文字列中のn文字の連続した文字列
・文脈や単語を考慮せず、文字数の単位(N=2の場合は2文字毎)で文字を分解する
「N文字分の文字の連なり」をキーとしてインデックスを作成する全文検索の古典的な手法
・単純に文字の並びを見出し語としてインデックスを作成
・検索に漏れが発生しない一方で、検索結果にノイズが多くなったり、インデクスのサイズが肥大化したりする傾向がある
・文脈や単語を考慮せず、文字数の単位(N=2の場合は2文字毎)で文字を分解する
「N文字分の文字の連なり」をキーとしてインデックスを作成する全文検索の古典的な手法
・単純に文字の並びを見出し語としてインデックスを作成
・検索に漏れが発生しない一方で、検索結果にノイズが多くなったり、インデクスのサイズが肥大化したりする傾向がある
形態素解析との比較
キーの数が大きくなる
文字の連なりがインデックスのキーとなる
・そのため、形態素解析の分かち書きで作られた文字列キーよりもキーの数が大きくなる
辞書のメンテナンスが不要
形態素解析を行わない
・そのため、形態素解析用の辞書のメンテナンスが不要
N-Gramの種類
3種類
ユニグラム
・1文字を元にインデックスを作成する方法
バイグラム
・2文字の並びを元にインデックスを作成する方法
トリグラム
・3文字の並びを元にインデックスを作成する方法
バイグラム方式 / 例1
2文字ごとに切り出す
14文字からなる文章だった場合
・13個のNgramを抽出
・添字はそのNgramの出現位置を表す
14文字からなる文章
私は今、日本に住んでいます。
13個のNgramを抽出
Array
(
[0] => 私は
[1] => は今
[2] => 今、
[3] => 、日
[4] => 日本
[5] => 本に
[6] => に住
[7] => 住ん
[8] => んで
[9] => でい
[10] => いま
[11] => ます
[12] => す。
)
(
[0] => 私は
[1] => は今
[2] => 今、
[3] => 、日
[4] => 日本
[5] => 本に
[6] => に住
[7] => 住ん
[8] => んで
[9] => でい
[10] => いま
[11] => ます
[12] => す。
)
バイグラム方式 / 例2
「これはペンです」をNを2としてNgramで分解
・「これ れは はペ ペン ンで です」
※配列でなくても良い
何文字でも良い
n-gramで”abcd”という文字列をトークナイズする
N=1 : 'a', 'b', 'c', 'd';
N=2 : 'ab', 'bc', 'cd';
N=3 : 'abc', 'bcd';
N=4 : 'abcd';
N=2 : 'ab', 'bc', 'cd';
N=3 : 'abc', 'bcd';
N=4 : 'abcd';