コンテンツにスキップ

Projects

ベクトル検索を試し、見つけた問題をOSS本家へ返す

ベクトル検索の研究やPloneへの組み込みを進める中で、Lance、SQLite vec1、LanceDBの動作について、本家への不具合報告や修正提案を行いました。修正がリリースされたものもあれば、修正案の確認が進んでいるものもあります。今回は、それぞれの問題に気付いた経緯と、報告までに確かめたことを紹介します。

pgvectorの二値量子化、中心化の効果はモデルで変わる

pgvectorの二値量子化で、ベクトルから平均を引く「中心化」を試しました。8モデルを比較した結果、e5ではRecall@10が0.496から0.943へ改善し、snowflakeでは0.959から0.907へ低下しました。同じ前処理でも、モデルによって効果が逆になりました。

Vector Search Checkupでは、ベクトルの方向の偏りや、次元の使われ方を確認できます。今回は、その特徴を検索の設定に生かすため、PostgreSQL上で中心化の有無を比較した結果を紹介します。

PloneとLanceDBを組み合わせるとできること:OSC東京で開発版を初披露します

Ploneの検索にLanceDBを組み合わせるアドオンを開発しています。文章の言葉が一致する検索に加え、意味の近い文章や、検索語に合う画像を探せるようにする取り組みです。10月17日(土)のオープンソースカンファレンス2026 Tokyo/Fallでは、Plone Users Group Japanのブースで開発版を初めて紹介する予定です。

PloneへのLanceDB組み込みで見つけたLanceの検索バグを修正した話

現在、Ploneの検索にLanceDBを組み込む作業を進めています。その中で、メタデータによる絞り込みに一致しないはずのデータが、検索結果に現れる不具合を見つけました。原因はLanceDBの基盤であるLanceのインデックス更新処理にあり、修正を提案したPull Request #9352がマージされ、Lance v13.0.0としてリリースされました。

ベクトルの特徴を知る「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が目指している役割分担や提示の考え方から、私たちの社員証に必要な部分を取り出し、中央のバックエンドを信頼点とする独自方式で実装したものです。