検索エンジンを作る

第9回 検索と論理式[その2]

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

NOT条件によるノイズ語の排除

これまでに何度も解説したように,FINDSPOTはN-gramの方式を用いて全文検索を行います。N-gramの方式は,検索時にノイズを拾ってしまうという宿命があります。たとえば,⁠京都」という文字列で検索を行うと「東京都」を含む文書も一緒に検索されてしまいます。これは「東京都」に,⁠京都」という文字列が部分文字列として含まれているためです。このようなノイズ語の例は他にも次のようなものがあります。

検索語ノイズ語
本人日本人
カウントアカウント,ディスカウント
コアココア,スコア
プリンチャップリン,プリンタ
ステラカステラ
タイルスタイル
ラブクラブ,グラブ,シラブ,トラブ,トラブル

この特性はN-gram方式の厳密さをよく表していると言えますが,一方でN-gramの方式が使いにくいという批判につながることがあります。N-gram方式の弱点とも言えるこの問題は,NOT条件の機能を利用してノイズ語を含む文書を検索結果から除くことで回避できます。

例:

"京都" NOT "東京都"

この例では,⁠京都」を全文検索して得られた文書集合から「東京都」を全文検索して得られた文書集合を含まない文書集合を求めています。この検索式により「東京都」を含まない「京都」のみの文書集合が得られます。

ノイズ語の自動除去に関する課題

この方法はN-gramのノイズ語の扱いに関する解決案として示されることが多いのですが,実はちょっとした弱点があります。先の例では,⁠京都」を含む文書集合から「東京都」を含む文書集合を削って結果を求めているため,⁠京都」「東京都」の両方を含む文書については,結果の集合から削られてしまい,検索結果には表れてきません。さらに,ノイズ語が検索結果に表れた場合にはNOT条件を手動で補わなければならないというのも面倒です。このような点は,FINDSPOTの改良ポイントであると考えており,現在,ノイズ語の自動除去機能を検討しています。

試しにFreeWnnの辞書を元にノイズ語候補を求めるプログラムを実行してみた所,約2,700例ほどが自動的に抽出できました。しかし,このように自動的に抽出されたものをそのままノイズ語の自動除去対象として扱うと,問題のあることがわかっています。

辞書の見出しデータからノイズ語を探すプログラムを実行すると,たとえば,⁠勝利」に対して「大勝利」がノイズ語候補として得られます。しかし,⁠勝利」という文字列の検索時に,自動的に「大勝利」の検索結果を除去してしまうのは利用者の意図とは異なる可能性が高いと考えられます。つまり,⁠勝利」「大勝利」は意味的に補完の関係にあるためノイズ語候補とするのは問題があるのです。このような例は「幼児」「乳幼児」⁠⁠本人」「張本人」などがあります。また「信任」「不信任」のように反意語についてもノイズ語とすると,検索時に思ったような結果が得られない可能性があります。

このように,ノイズ語の辞書作りは,意味的に同じ言葉,補完的な言葉,反意語などを除く必要があるため,人手の選定作業が必要になってきます。ノイズ語の辞書作りは大変な作業ですが,N-gramの欠点を補える可能性があるので,なんとか実現にこぎ着けたいと思っています。

著者プロフィール

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

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

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

著書

コメント

コメントの記入