コンテンツにスキップ

Projects

ベクトルの特徴を知る「Vector Search Checkup」を公開しました

Embeddingモデルから生成したベクトルは、モデルやデータによって異なる特徴を持っています。その特徴を知らないままベクトルDBや検索方法を選び、量子化を進めてよいのでしょうか。

今回、手元のベクトルをブラウザー上で診断できるVector Search Checkupをβ公開しました。Embedding空間の分布や幾何学的な特徴を数値と図で確認し、次に何を検証するかを考えるためのツールです。

ここでいう「診断」は、ベクトルの良し悪しを判定するものではありません。まず特徴を知り、その結果を手がかりに、用途や制約に合った検索を一緒に作り、改善していくための出発点です。

ベクトルが近いだけでは、良い検索とは限らない

ベクトル検索では、検索文や画像をEmbeddingモデルでベクトルに変換し、近いベクトルを検索結果として取り出します。それでは、最も近いベクトルを正しく取得できれば、良い検索になったと言えるのでしょうか。

ベクトルの近さは重要ですが、それだけで利用者が欲しい結果になるとは限りません。良い検索を作るには、ベクトル空間での近さと、検索結果としての良さを分けて評価する必要があります。

今回は、画像検索を例に、この二つの違いと検索結果の評価方法を整理します。

ベクトル検索のPoCはデータ準備から始まる

前回の記事では、PyCon JP 2026の画像検索トークに向けて、Embedding、マルチモーダル検索、ANNの流れを紹介しました。

こうした技術を自社の検索へ取り入れるには、EmbeddingモデルやVector DB、検索方法の選択が重要です。一方で、実際のPoC(概念実証)では、もう一つ忘れてはいけないことがあります。それが、「何を、どのように探したいのか」と「評価できるデータがあるか」の整理です。

検索技術の検証に目が向くと、その土台となるデータの確認は後回しになりがちです。しかし、データの状態や評価方法によって、選ぶ技術やPoCの進め方も変わります。

今回は、ベクトル検索のPoCを始める前に整理したい5つのことを、実践的な例とともに紹介します。

200を超える実験Notebookを支えるSAENMの実践

以前、実験の過程を時系列で積み重ねていく研究運用モデルとして、SAENM(セーンモデル)を紹介しました。その後も複数の研究やPoCで実践を続け、現在進めている非公開のベクトル検索研究では、Notebookが200を超えています。

今回は、SAENMを実際の研究でどのように使ってきたのか、公開しているプロジェクトの例も交えて紹介します。

NumPyのint8行列積をRustで高速化し、20環境で検証しました

ベクトル検索の研究では、検索精度だけでなく、量子化したベクトルをCPU上でどのように計算するかも重要になります。

現在進めているベクトル検索 ANNプロジェクトの一環として、NumPyでは期待した速度が出なかったint8行列積をRustで実装しました。さらに、CPUごとに適した命令を選ぶ仕組みと環境別のwheelビルドを整え、20の実行環境で動作と性能を確認しました。

VC/VPの考え方を参考に、独自の社員証アプリを作りました

Verifiable Credentials(VC)とVerifiable Presentations(VP)の考え方を参考に、本人承認と項目単位の情報開示を取り入れた独自の社員証アプリを作りました。

最初に明記しておくと、このアプリはW3C VC Data ModelやOpenID4VPに準拠した実装ではありません。VC/VPが目指している役割分担や提示の考え方から、私たちの社員証に必要な部分を取り出し、中央のバックエンドを信頼点とする独自方式で実装したものです。

800件から1,000万件へ、Voronoi分割の研究を続けています

ブログを再開するにあたって、3月に公開したPloneサイト実データでのベクトル検索アルゴリズム比較を読み返しました。

当時は約800件のデータを使った実験でした。それから研究を続け、現在は最大1,000万件、5種類以上のEmbeddingモデルを使った検証まで進んでいます。

Ploneサイト実データでベクトル検索の枝刈りアルゴリズムを比較した結果、Voronoi分割が有力だった

2026-03-16の記事 で、テキスト embedding に対して Voronoi 分割による事前枝刈りが有効そうだという話を書きました。 今回はその続きとして、Plone サイトの実データで collective.vectorsearch の検索アルゴリズムを比較し、Voronoi 方式が実運用に近い条件でも有望であることを確認しました。

あわせて、2026-02-14の記事 で紹介した ITQ-LSH 系アルゴリズムについても、今回のデータ規模では精度面に課題があることが見えてきました。

AI時代の研究運用を支えるSAENMという考え方

これまで CMScomLab では、ベクトル検索の実験Graph RAG のPoC のように、小さな実験や試作を積み重ねながら考えを前に進めてきました。その中で強く感じるようになったのは、最終的な成果だけでは残らない知見が多くあり、試行錯誤の過程そのものをどう記録し、共有し、振り返れる形にしておくかがますます重要になっているということです。

Voronoi分割によるテキストEmbeddingの事前枝刈り実験とPlone実装への展開

2026-02-14の記事 では、collective.vectorsearch の初期リリースと、LSH Cascade PoC から取り込んだ近似検索の仕組みを紹介しました。 その後、2026-03-14の記事 で、顔画像の embedding に対して Voronoi 分割による事前枝刈りが有効であることを確認しています。

今回はこの流れを受けて、同じアプローチを テキスト embedding に適用できるかを検証しました。 結論から言うと、テキスト側でも Voronoi 分割を前段フィルタとして使える見込みが見えてきました。