Fessで画像検索

そのうち、やりたいなーと思っていた画像検索の機能をプラグインとして作ってみました。

fess-webapp-multimodalプラグインにその機能をまとめましたが、マルチモーダルということで、最終的には画像に限らず、音声や動画も対象にできれば、良いなぁという感じで、そのような名前にしてあります。現時点では、画像しか対象にできていませんが。

画像検索については、CLIPにより、テキストと画像の埋め込みベクトルを作成して、OpenSearchでベクトル検索する感じになっています。

CLIPは、OpenAIが開発したモデルで、テキストと画像の関係を学習するために使用されます。具体的には、テキストと画像のペアを大量に学習することで、画像の内容をテキストで表現したり、テキストに基づいて関連する画像を検索することができます。これにより、テキストと画像の間の意味的な類似性を理解し、それぞれの意味で一致するものを検索できるので、このプラグインで利用しています。

Open Images Datasetの画像を利用して、試してますが、red carとかで検索すれば、赤い車がヒットしますし、running dogとかだと走っている犬の画像がヒットするので、期待通りな感じでした。(始めに間違って、距離計算をL2にしていたら、微妙な感じで焦りましたが、コサイン類似度に変えたらいい感じになった)

今回の実装は、Fess 14.15に依存している部分があるので、次のリリースで、docker-multimodalsearchみたいな感じで、まとめようかと思います。(Fessのセマンティックサーチのdocker-semanticsearchみたいな感じで)

semantic.codelibs.orgの更新

Fessのセマンティックサーチのでも環境として、semantic.codelibs.orgを公開していましたが、久々に最新化してみました。

今回の更新で、利用するモデルも見直しました。以前は、multi-qa-mpnet-base-dot-v1を使っていて、日本語での検索がイマイチだなぁと思っていたけど、このモデルはマルチリンガルだけど、日本語が入っていなかったっぽい…。ということで、今回、paraphrase-multilingual-MiniLM-L12-v2にモデルを変えて、構築し直しました。

検索結果で、人っぽいアイコンがついた結果がテキスト検索で、ロボットっぽいアイコンがベクトル検索の結果になります。日本語でいくつか検索してみると、ベクトル検索でもそれっぽい結果が返ってくるので、そこそこ良い感じになった気がします。

ということで、Fessでセマンティックサーチを試してみたい方は、docker-semanticsearchを参照してみてください。

OpenSearchでplugins.security.disabled=trueが効かない

OpenSearch 2.11あたりからplugins.security.disabled=trueを指定しているけど、効かない感じがするな…と思ったら、無効にする方法が変わっていた。なので、DISABLE_SECURITY_PLUGIN=trueに変える必要がある。

それに加えて、デモ用の設定が入ってしまうので、DISABLE_INSTALL_DEMO_CONFIG=trueというのも環境変数で指定してあげる必要がある。