検索エンジンOSS勉強会 の第2回を開催しました。

この勉強会に興味ある人は、検索エンジンOSS勉強会 ガイドライン - Google ドキュメント から参加できます!

発表内容

  • @hotchpotch せこんさん
    • Vespa の Multi-Vector HNSW の実装を読む
      • Github のURL末尾に、.diff.patchをつけることで、LLM(Claude)に読ませてcode reading したとのこと。めちゃくちゃ頭いいですね。そのままcommit page や PRのURL渡すよりも余分な情報がないから明快に説明してくれそうです。
      • 日本語ReRankモデルをONNXに変換して、そのままvespa 上で動かしていたりとひたすら手を動かされていてすごい。
      • 各OSSで multi vector index をどのように扱うのか、そしてパフォーマンス劣化はどれくらい起こるのかは気になる話ですね。 Elasticsearch の nested field はパフォーマンスが悪化するので
  • @gteu さん
    • OpenSearch の Filtering を理解する @昨日
    • 図を交えた説明でわかりやすかったです。
    • フィルタ条件がすでに既知なら、Post filter やるよりも Pre filter のほうが良いのではという疑問があったが、Post filter は逐次的にANNを終えたあとにfilter を愚直に行えばいいだけだが、 Pre filter の場合はfilter をかけてしまうと HNSW のグラフが壊れるといっており、確かにパフォーマンスを考慮したうえでの実装面での難易度は高そう。
    • Lucene がEfficient k-NN filteringを実装して、それをOpenSearch が追う形でOpensearch のfaiss コンポーネント内部で実装したとのこと。faiss 本家ではfilter 需要というか実装するという話はでてきているのだろうか?
    • @johtani さんが共有してくれたが、Move max vector dims limit to Codec by mayya-sharipova · Pull Request #12436 · apache/lucene Lucene のベクトルの上限が Codec で設定できるようにして、各ユーザーが自由にベクトルの上限を設定できるようになったとのこと。この方向性はみんな幸せになるし、ベクトルの次元の大きさを各自が設定可能に

発表してくれたお二人に感謝です!

自分は家庭の事情で発表予定でしたが時間が捻出できず無念の時代となりました…が他の人の発表聞いてるとモチベーションが上がったのでありがたいお話です。

今回の余談

Go 言語製の検索エンジン bleve に https://github.com/blevesearch/bleve/releases 2.4 からvector serach が可能になった話がきになったり、 backend は faiss っぽいです。

NVIDIA の cu family の一環で cuvs というOSSが作成されていた。 https://github.com/rapidsai/cuvs

qdrant ですが、ANN の filtering の問題は、Lucene, OpenSearch とは異なる独自の方法で解決してるっぽいですね https://qdrant.tech/articles/filtrable-hnsw/