コンテンツにスキップ

Blog

既存DBで実現するベクトル検索:理論的な「下界フィルタ」より単純な「範囲検索」を選んだ理由

前回の記事(2月4日の一部)では、複雑化したLSH Overlap手法を捨て、数学的に扱いやすい「Pivot(参照点)」ベースの手法へ転換する話を書きました。

その後、理論的に美しい「三角不等式を用いた下界(Lower Bound)フィルタ」の実装と検証を進めていましたが、実験結果は予想外のものでした。 結論から言えば、「理論的に正しい厳密なフィルタ」は、「単純でヒューリスティックな範囲検索」に実用面で完敗しました。

今回は、一連のベンチマーク実験から得られた知見と、最終的にたどり着いた「最もシンプルで実用的な構成」について報告します。

Project紹介: net-vis - JupyterLabで手軽にネットワーク可視化をするために

今回は、現在開発・メンテナンスを行っている OSS プロジェクト net-vis について紹介します。

JupyterLab 上で複雑なネットワーク構造(グラフ理論のグラフ)を可視化したいとき、これまでは「決定版」といえるツールがなかなか見当たらない状況でした。NetworkX 標準の nx.draw では静的な描画しか生成されず細かい確認が難しいですし、かといって多機能な可視化ライブラリを使おうとするとセットアップが面倒だったりします。

そんな「ちょうどいい」ツールがない隙間を埋めるために開発したのが net-vis です。

軽量ベクトル検索の最適化:LSHのビット列を「三角不等式」へ転換してスリム化を実現

エンジニアリングにおいて、複雑なヒューリスティックを積み重ねた結果、管理しきれないほどの複雑さを抱え込んでしまうことがあります。 今回のプロジェクトでも、まさにその「泥沼」に足を踏み入れかけていました。

軽量なベクトル検索を実現するために採用していた「LSH(Locality Sensitive Hashing)」のOverlap戦略が限界を迎え、よりシンプルで数学的な裏付けのある「Pivot(参照点)ベース」の手法へと転換した話をします。31個のカラムを8個に削減し、劇的なスリム化と柔軟性を手に入れた過程の記録です。

ベクトル検索の基本と実践

前回の記事では、少しマニアックな「LSH Cascade」という独自のアプローチについて書きましたが、今回は基本に立ち返って「ベクトル検索(Vector Search)」そのものの一般的な仕組みや、私が普段利用している技術スタックについてまとめたいと思います。

近年、RAG (Retrieval-Augmented Generation) の流行とともに必須技術となりつつあるベクトル検索ですが、その構成要素を分解してみると、非常に興味深い技術の集合体であることがわかります。

LSH Cascade PoCプロジェクトの紹介

CMScom Labの2つ目の記事として、現在進行中のLSH Cascade PoCについて紹介します。 1月の最終週に集中的に実験を行い、良い成果が得られたため、その概要をまとめます。