かずきち。の日記

Pythonエンジニア&元東大生のつぶやき

形態素解析とN-gramの比較

形態素解析N-gram

形態素解析
検索対象の文章に大して、分かち書きした単位ごとに 転置インデックスを作成して検索を行います。

N-gram
検索対象のテキストをN文字単位の文字列に分解します。
その文字列編を見出し語としてインデックス作成を行います。

大きな違い、どこが最も大きく異なるかというと見出し語の作り方です。
形態素解析分かち書きを行って、N-gramは機械的に文字列片を作成します。

完全一致の検索

検索エンジンの完全一致検索については、形態素解析を行って行います。
しかし辞書に存在しないような、人名、専門用語などは形態素解析の辞書にない可能性があるので検索結果の保証ができません。
辞書は常に更新される必要があり、転置インデックスを作り変える必要が常にあります。
N-gramでは形態素解析に於ける問題の専門用語や人名も単なる文字列として扱います。
どんな文章も同様にN文字の長さに切るところがポイントです。

検索ノイズ

完全一致の場合や特殊語の場合はN-gramが優れているようにも思えます。
しかし欠点もあります。
「東京都」、「京都」のような言葉でゆらぎが生じます。
「東京都」で登録したいのに、「京都」という言葉で転置インデックスが登録されてしまいます。
このような言葉は意外とあって、
ノートン」「ノート」
「スパ」と「スパゲッティ」
などの問題があります。

検索を忠実に行うためには、「京都 NOT 東京都」のような条件の絞り込みが必要です。

形態素解析は言語の特性がある

一般的に形態素解析は言語ごとに行います。
もし仮に日本語の形態素解析に特化している専門家が英語を行うことは困難です。
しかしN-gramの場合は多言語でも対応しやすいという利点があります。
つまり検索エンジンを作るということは各言語にありはちな検索ノイズを減らさなければいけません。

転置インデックスを作成する時間は検索エンジンにとっても形態素解析にも肝心ということがわかります。

広告を非表示にする