Fessのセマンティックサーチ

semantic.codelibs.orgにデモサイトを作ってみた。この手のを作って、実験していかないと改善もできないですし。

仕組み的には、docker-semanticsearchにあるものを動かしている感じです。セットアップ手順とかはそこに書いてあるとおりで、Fessにfess-webapp-semantic-searchプラグインを入れて、動かしています。

インデクシングについては、検索対象は、英語のWikipediaのコンテンツ部分を抜き出して、単純なHTMLにして、それをインデックスしています。HTMLなので、普通にウェブクロールしている感じです。

検索については、通常の転置インデックスに対する検索とベクトル検索のハイブリットサーチになっています。ベクトル検索は、OpenSearchのNeural Queryを投げて、ANNで検索してます。なので、通常の検索の検索結果と、ANNで返ってくるTop Kの検索結果をReciprocal Rank Fusion(RRF)でマージして、検索結果を表示してます。RRF自体は、Fessで実装してます。通常のFessの検索画面だと、ベクトル検索の結果がどれなのかがわかりにくいので、ベクトル検索結果はロボットアイコンが表示されてます。人っぽいアイコンの方は通常の検索結果のものです。なので、ページングしていくと、通常の検索結果だけになるのがわかると思います。

RRFの実装自体はページングを考えなければ、シンプルなので、ベクトル検索に限らず、複数の検索結果をマージできるようにFessでは汎用的に実装してあります。現時点では、ファセット表示のところに、ベクトル検索の集計結果がカウントされないという、制限事項はありますが…。

ベクトル検索の結果については、embeddingの質とかもあるので、まだまだ改善の余地はある印象があります。このデモサイトを使ってみて、見つける課題とかもあるので、地道に改善していこうと思っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です