PyCon JP 2026の画像検索トークを楽しむための予習ガイド
8月21日(金)、広島で開催されるPyCon JP 2026で、2.3万枚を超える写真の画像検索システムについて登壇します。トークのレベルは上級ですが、ベクトル検索を初めて知る方にも、実際に動くシステムへ至る流れを楽しんでもらいたいと考えています。
そこで今回は、トークを聞く前に知っておくと理解しやすい用語と、これまでに公開した記事を読む順番をまとめます。すべての仕組みを事前に理解する必要はありません。まずは、何をベクトルにして、どのように近いものを探しているのかをつかめれば十分です。
まずはベクトル検索の3段階
ベクトル検索は、大きく次の3段階で考えられます。
- 検索対象をEmbeddingモデルでベクトルに変換する
- 検索する言葉や画像も、同じ方法でベクトルに変換する
- ベクトル同士の近さを計算し、近いものから順に取り出す
Embeddingは、文章や画像の内容を数値の並びで表現する技術です。例えば、意味が近い文章は似た方向のベクトルになり、内容が異なる文章は離れたベクトルになることを期待します。
ベクトル同士の近さを測る代表的な方法が、コサイン類似度です。ベクトルの長さよりも向きに注目し、向きが近いほど似ていると判断します。
この基本的な流れは、Pythonで始めるベクトル検索で、Pythonコードを交えて紹介しています。最初に読む記事としておすすめです。
画像と言葉を同じ空間で扱う
今回のトークでは、自然言語から画像を探します。「ステージで発表している人」や「会場の受付」といった言葉を入力し、その内容に近い写真を見つけます。
これを可能にするのが、画像と言葉を同じベクトル空間で扱えるVLMです。画像とテキストをそれぞれベクトルに変換し、両者の近さを比較できるようにします。このように複数の種類の情報を扱う検索を、マルチモーダル検索と呼びます。
画像とテキストを同じ空間で扱う考え方や、ANNを含む周辺技術の全体像は、AI時代のベクトル検索の未来で紹介しています。
さらに詳しく読みたい方には、gihyo.jpで公開した次の2本の記事があります。
1本目でテキストのベクトル検索を理解し、2本目で画像を含む検索へ進む構成です。今回のPyCon JPトークは、この2本の先にある実践編と位置づけています。
全件検索からANNへ
検索対象が少ないうちは、クエリとすべてのベクトルを比較する全件検索が分かりやすく、正確です。しかし、データが増えるほど比較する回数も増えます。データベースから候補を取得する場合は、計算時間だけでなく読み取り回数や料金も問題になります。
そこで使われるのがANN(Approximate Nearest Neighbor、近似近傍探索)です。最初から全件を比較せず、近そうな候補へ検索範囲を絞ることで、検索に必要な計算や読み取りを減らします。
ただし、候補を減らしすぎれば、本当に近いデータを取りこぼします。どれだけ候補を減らせるかだけでなく、正しい検索結果をどれだけ維持できるかを一緒に評価する必要があります。
ANNにはHNSW、LSH、IVFなど、さまざまな考え方があります。名前をすべて覚えるより、次の問いを持っておくとトークを追いやすくなります。
- どの段階で検索候補を減らすのか
- 候補を減らすことで、検索品質はどれくらい変わるのか
- その方法は、利用するデータストアで実装できるのか
- 計算時間だけでなく、読み取り量やメモリも抑えられるのか
今回のトークで扱う制約
トークで紹介するシステムでは、VLMによる約2.3万件の画像ベクトルと、顔認識モデルによる約7万件の顔ベクトルを扱います。これらをクラウドの無料枠という制約の中で検索できる形にしました。
画像をベクトルに変換して保存するだけなら、仕組みは比較的単純です。しかし、実際のシステムとして動かすには、次のようなことも考える必要があります。
- 日本語の検索文から意図した画像を見つけられるか
- Pythonで検証したEmbeddingをブラウザーでも再現できるか
- 検索のたびに、どれだけのデータを読み取るか
- 画像検索と顔検索をどのように組み合わせるか
- 検索品質とコストのバランスをどう決めるか
今回採用した工夫の一つが、ベクトル空間をVoronoi分割し、先に検索候補を絞る方法です。Firestoreでこの方法を検証した初期の実験は、Voronoi分割によるFirestoreのベクトル検索最適化で紹介しています。
トークでは、こうした個別の技術を並べるだけでなく、制約条件からどのように構成を考え、実験結果を実際に動くシステムへつなげたのかをお話しします。
時間に合わせた予習コース
時間が限られている場合は、次の順番がおすすめです。
まず10分で概要をつかむ
- Pythonで始めるベクトル検索
- 本記事の「全件検索からANNへ」まで
画像検索まで理解する
トークの実装背景まで追う
広島でお会いしましょう
トークは、8月21日(金)11:45から12:30まで、広島国際会議場のダリア1で行います。
「VLMで2.3万枚のPyCon JP写真を検索!無料クラウド枠で実用的なマルチモーダル&顔認識検索システムを構築した裏側」というタイトルで、実際に機能するものをお見せしながら紹介する予定です。
上級トークではありますが、全件検索という分かりやすい出発点から、なぜ候補を絞る必要があるのか、どのような制約を解決したのかを順番にたどれる構成にしたいと考えています。
ベクトル検索をすでに使っている方は実装上の判断に、初めて触れる方は画像検索の仕組みを知る入口に、それぞれ注目してもらえればと思います。ぜひ会場でお会いしましょう。