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を参照してみてください。

Fess 14.14.0のリリース

Fess 14.14.0をリリースしました。特に大きな変更はないですが、Fessには管理画面のダッシュボードページでContent-Typeが設定されていない場合があったので、修正しました。リバースプロキシを通したときにダッシュボードが表示されないみたいな問題があるときには、これで解決されると思います。

それ以外には、依存ライブラリを更新したり、修正したりしました。その中でも、フォーラムで指摘していただいた、SMBプロトコルでクロールするときに、パスに@が含まれるとクロールできない問題に対応しました。

という感じで、今回はOpenSearch 2.14に対応したくらい変更しかありませんが、何かあれば、フォーラムに投げてください。