検索エンジンを作る

第4回 形態素解析のしくみ

この記事を読むのに必要な時間:およそ 2 分

分かち書きと形態素解析

英語は単語と単語の間がスペースで区切られますが,日本語ではテキストの中から正しく単語を切り出すという処理が意外と大変です。この単語を切り出す操作を分かち書きと呼んでいます。テキストを分かち書きするには,原文の自然言語を構文解析する手法が一般的です。この操作を形態素解析と呼びます。先に名前の挙がったNamazuでは,日本語の形態素解析機能としてKAKASIChaSen(茶筌)というシステムを利用しています。NamazuはKAKASIを前提に作られていますが,ChaSenという別の形態素解析のシステムで代用も可能です。機能的にはChaSenの方が高度な分析が行えますが,スピード的にはKAKASIの方が高速と言われています。

では,実際の形態素解析を使った検索方法について説明していきましょう。⁠今日は良い天気です。」という文書を分かち書きしてみます。結果は次のようになります(/は区切り位置を示します)。

今日/は/良い/天気/です。

この文書のID1番とすると,次のような索引情報が生成できます。

今日1
1
良い1
天気1
です。1

別の「今日は大雨です。」という文書IDが2番の文書を分かち書きすると,「今日/は/大雨/です。」となります。索引にこの情報を追加すると,次のようになります。

今日1, 2
1, 2
良い1
天気1
です。1, 2
大雨2

検索エンジンでは,この索引を格納するデータベースやファイルのことを,⁠転置インデックス」とか「転置ファイル」と呼んでいます。また,文書情報から,転置インデックスを作成する処理を「転置インデックス作成」あるいは略して「インデックス作成」と呼びます。

このようにして作られた索引情報を使って,⁠天気」という文字列を検索すると,文書IDが1番の文書が該当することがわかります。また「今日」という文字列を検索すると,文書IDが1番と2番の文書が見つかります。さらに「今日」「大雨」という2つの文字列を含む文書を探す場合には,⁠今日」の検索結果と「大雨」の検索結果をAND条件で合成すると,文書IDが2番という結果が得られます。これが形態素解析で作成した索引を使った検索ロジックです。

形態素解析の問題点

では,別の「天気予報通りです。」という文書ID3番の文書を追加してみましょう。分かち書きの処理を行って「天気予報/通り/です。」という結果が得られたとします。この情報を索引に追加します。索引情報は次のようになります。

今日1, 2
1, 2
良い1
天気1
です。1, 2, 3
大雨2
天気予報3
通り3

この索引情報を使って,再度「天気」という文字列を検索してみましょう。先ほどと同じように文書IDが1番の文書が該当することがわかります。ここで注目すべき点は,文書IDが3番の文書には「天気」という文字列が含まれているにもかかわらず,検索結果として3番の文書が検索できなかったことです。これは,分かち書きで「天気予報」の部分が1語として処理されたためです。形態素解析用の辞書に「天気予報」という単語が登録されており,この部分が1語として扱われたのが原因です。⁠天気予報」という単語を辞書から削るなどの辞書の保守を行うか,あるいは合成語をさらに分解するしくみを持った形態素解析システムを利用するなどの工夫が必要です。

次に「雨で」という文字列を検索してみましょう。今度は,見出し語に「雨で」という文字列が存在しないので,検索結果は0個の文書になります。⁠今日は大雨です。」という文字列には「雨で」という部分文字列が含まれていますが,⁠雨で」という単位で分かち書きされなかったため,検索できないのです。形態素解析による処理では,見出し語の切り分け単位が検索の最小単位となるため,このような状況が生まれてしまいます。前者は辞書の改良などである程度対応できますが,後者は形態素解析による検索エンジンの限界とも言えます。

検索対象に特殊な用語や人名,新語が数多く含まれる場合や,完全一致での検索が確実に求められる場合などでは,形態素解析を使った検索システムは不得意です。また,形態素解析は日本語や英語などの特定の言語を対象に解析を行うため,他の言語の文書は正しく索引を作成できません。複数の言語が混ざっている文書の集合体を検索するのは,複数言語の形態素解析エンジンを併用しなければならないため,かなり難しい処理となります。形態素解析を使う検索エンジンを利用する場合には,以上のような限界点が運用上の問題にならないかをよく吟味して利用すると良いでしょう。

著者プロフィール

工藤智行(くどうともゆき)

有限会社サイパック取締役社長。システム構築・管理のコンサルティング,ローカライゼーション,文書処理や障害者向けソフトウェアを中心とするプログラミングを長年手がける。 近著『UNIXプログラミングの道具箱』『システム管理現場の鉄則FreeBSD編』等

URLhttp://www.cypac.co.jp/

著書