検索なめんな
2009-08-07


ときどきの雑記帖経由で、たまに見ている このブログ(ベンチャー社長で技術者で)

基本キャラづけというか、マーケティングも含めて「他人があまり言わないことを大声で言ってみよう」という方法論で、 偉そうに間違ったことを言うというアプローチの一種だと思う訳です。

なので、原則失笑しながらスルーしていたのですが、このエントリにはつい釣られてしまいました。 SQLで高速にあいまい検索してみよう - ベンチャー社長で技術者で

数千万件オーダーの規模の検索サービスに少し関わっているので、ちょっといろいろとひっかかってしまうのです。

分ち書きとN-Gramと

wikipediaでもこの分類になっていますが、 (形態素解析を利用した分ち書きによる)単語ベースのインデックスとN-Gram法によるインデックスなんじゃないのかなあ……。 形態素解析は単なる前処理に過ぎない訳ですし。

N-Gramという話をする場合、「Nをいくつにするのか」というのは結構重要な問題なはずですがそこはスルーですか?

50万件のレコードに2000エントリのインデックスだと、レコード1件あたり400エントリということになります。 1レコードあたりの情報量が200文字前後と仮定するとN=2でしょうか。

分かち書き(形態素解析)で精度が落ちるというのは、Googleはかなりマシになってきていますが、Yahoo、MSNで“ウォーターフォール”と“ ウォータフォール”を検索すると、前者の方が数多くヒットします。つまり、ウォータフォールは新語として判断して、“ウォータ”・“フォール” と分かち書きできてないと思われる。つまり、“ウォータフォール”では、“ウォーターフォール”としか記載されていないページはヒットしません。住所や名前などはどこで切れるか機械的には分かりにくく、同じような検索漏れが起きると、顧客を抽出する機能としては問題があるわけです。

これは、嘘というかミスリードですよね?

N-Gram(bigram)インデックスであっても、“ウォーターフォール”のクエリで“ウォータフォール”を検索することはできません。 これは、インデックス、クエリの正規化や、類語辞書の整備で対処する問題で、全文検索用のインデックスがN-Gramなのか、単語ベースなのかには起因しません。

というより、検索精度という問題であれば

の順に精度が高いと言えるはずです。

一般に業務で利用される検索システムでN-Gram(bigram)インデックスが選択される場合が多いのは、辞書のメンテナンスコストが高い(高過ぎる)と見做されるからにほかなりません。

Rosette形態素解析システムとか結構なお値段ですが、必要だと思うプロジェクトでは使用されていますしね。

検索速度

サンプルデータは個人情報っぽいけど、SI Object Browser で作り出したランダムのデータです。Oracle Express Editionで、わたしのちょっと速めのノートPC(ショップブランドの安いヤツ)で、インデックスを作るのに約15分、1件の更新は数十msec、 50万件から1000件程度の条件でほぼ1秒以内で返してきていますので、ノートPCでなく、最近のそこそこのサーバなら十分使えるんじゃないかと思います。

「ほぼ1秒以内」ってのが、1桁msなのか、1000ms前後なのかで話しは違ってきますが、「1秒を越える場合もある」のであれば遅いのでは?


続きを読む

[雑記]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット