BEIRをFessで実行する

BEIRは検索関連のデータセットを実行して、精度評価とかできるようなベンチマークツールみたいなものですが、Fessも検索品質を定量的に改善していけると良いなーと思い始め、BEIRをノートブックで簡単に実行できるようにcodelibs/beir-fessを作ってみました。

BEIRのサンプルには、BM25で試したりすることはできるので、同じような感じで、Fessにもインデクシングと検索ができるようにしました。一応、BEIR-fess.ipynbを実行すると、FessをDockerで起動して、インデクシング、検索、Dockerを終了、という感じで一連の処理をしてくれます。なので、簡単に実行はできると思います。

今回、BEIRで実行できるように、Fess自体にも修正を入れたので、次のFessのリリースには反映されていると思います。BEIRの検索クエリーは、単語でなく、質問文みたいな感じなので、これをFessにそのまま渡すと、単語のAND検索になるので、全くヒットしないのです…。なので、今回、ゼロ件ヒットのときには、OR検索にして、再度投げるという感じの処理を入れてます。この辺は将来的には、改善の余地がありそうではありますが…。

あとは、検索クエリーが質問文なので、Fessのセマンティック検索版とかもBEIRで試せるようにする必要はあるかなとは考えてます。

そんな感じで、定量的な評価ができるようになると良いなと思います。

FessでText Chunking対応

docker-semanticsearch でセマンティックサーチへの対応をしたのですが、シンプルに実装したので、入力トークン数が128までしか対応できてませんでした。フォーラムでもテキストチャンキングは対応していないのか?とか言われてましたが、OpenSearchでText ChunkingのIngestが追加されたので、これを使って、対応してみました。現時点では、スナップショットのリリースで確認できる感じにしてますが、Fess 14.16で整理しようと思っています。これで、RAGでも使いやすくなるかなと思います。

Fess 14.15のリリース

OpenSearch 2.15がリリースされていたので、Fess 14.15もリリースしました。今回は、細々とした改善を入れました。

#2824は、ldap.lowercase.permission.name=trueのときには、SMBでクロールしたもので取得したロール名も小文字にするようにしました。

#2823 は障害URLとして、出力した際には、fess-crawler.logには障害URLのIDを出力するようにしました。障害URLに保存しているけど、ログファイル上はINFOとかでサラッと出力されて、ぱっとみでわかりにくかったためです。

#2822 はシステムプロパティの値をクローラーなどのジョブにも渡るようにしました。今回のリリースから、ベクトルによる画像検索に対応しようと思っているのですが、この辺のことができないとベクトルのインデクシングができなかったためです。

#2821 はファイルから取得したデータをインデクシングするためのメタデータのパラメータ名で値を引き回せるようにしました。これができるようにあることで、画像ファイルからベクトルを取得して、ベクトルをメタデータとして、インデクシングまで持っていけるようになります。

#2820 は、SMBv3対応などをしていて、smb3://〜みたいなプロトコルを追加したいと思ったときに、内部処理で使える場合には自動で認識させるみたいな処理をしたかったので、機能を追加しました。

#2819 も上記と同じ話で、処理部分です。

#2818 は、fess-crawler-*みたいなプラグインとして、認識できるように修正しました。

#2817 はsite_pathの省略の設定を設定ファイルでできるようにしました。

という感じで、今回は、issueの説明を書いてみました。Fessは依存ライブラリも多いのですが、それらの話は含んでいないので、依存ライブラリの更新もいろいろとあると思います。

何かあれば、フォーラムをご利用ください。