Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHP アプリケーションに類似画像検索を後付けする
Search
msng
July 21, 2026
450
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHP アプリケーションに類似画像検索を後付けする
PHP カンファレンス 2026 でお話した『PHP アプリケーションに類似画像検索を後付けする』の振り返り用スライドです。サンプルコードの README に動かし方が書いてあります。
msng
July 21, 2026
Featured
See All Featured
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Making Projects Easy
brettharned
120
6.7k
Six Lessons from altMBA
skipperchong
29
4.3k
HDC tutorial
michielstock
2
750
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
210
Typedesign – Prime Four
hannesfritz
42
3.1k
Visualization
eitanlees
152
17k
The agentic SEO stack - context over prompts
schlessera
0
850
How to build a perfect <img>
jonoalderson
1
5.8k
Prompt Engineering for Job Search
mfonobong
0
380
Transcript
PHP カンファレンス 2026 PHP アプリケーションに 類似画像検索を後付けする @ msng
サンプルコード https: github.com/msng/phpcon2026 / / @ msng
用語の定義 • 【類似画像検索】画像で画像を探すこと。キーワードで画像を探す「画像検索」とは別物 • 【AI】人間の知覚・認識をコンピュータで模倣するもの全般。本トークに生成 AI や LLM の話は登場しない。 •
【モデル】学習済みのニューラルネットワーク。本トークでは「画像を入れると数字の列が出てくる箱」。 • 【embedding / 特徴量 / ベクトル】画像の特徴を表す数字の列。本トークではほぼ同義に使う。 • 【次元】その数字の個数のこと。空間や異世界のことではない。クールなガンマンでもない。 • 【距離 / 類似度】「似ている」を数値で言えるようにしたもの。 • 【コサイン距離】ベクトルの向きの違いを測るものさし。同じ向きで 0、正反対で 2。 本トークで「距離」と言ったらこれを指す。厳密には「距離」ではないと思うけど、なんかこう呼ばれる。 • 【推論】学習済みモデルにデータを入れて結果を得ること。 • 【ベクトル検索】距離が近いベクトルを探すこと。 • 【インデックス】検索を速くするためのデータ構造。 • 【GPU】高いよね。 @ msng
お話の流れ • • • • • • 状況設定 実演 全体構成
Embedding ベクトル検索 まとめ @ msng
状況設定 • 「これに似たやつ」を探したい • 固定費は増やしたくない • 多数の商品を扱う現場 @ msng
状況設定 現状のインフラ構成 • VPS 1台(メモリ 4GB) 以上 @ msng
None
サンプルデータ Amazon Berkeley Objects (ABO) Dataset https: amazon-berkeley-objects.s3.amazonaws.com/index.h l m
t / / @ msng
サーバーのありさま • • • • メモリ: 2GB (4GB) GPU: なし
外部 API: なし メイン DB: MySQL @ msng
全体構成 embedding サーバー FastAPI + DINOv2 アプリケーション PHP ベクトルデータベース pgvector
@ msng
全体構成 画像 embedding サーバー FastAPI + DINOv2 アプリケーション PHP ベクトル
ベクトルデータベース pgvector @ msng
全体構成 ベクトル embedding サーバー FastAPI + DINOv2 アプリケーション PHP ベクトルデータベース
pgvector 結果 / 画像の情報 @ msng
全体構成 embedding サーバー FastAPI + DINOv2 アプリケーション PHP 無 ベクトルデータベース
pgvector @ msng
全体構成 embedding サーバー FastAPI + DINOv2 アプリケーション PHP 疎 ベクトルデータベース
pgvector @ msng
Embedding @ msng
Embedding 採用モデル: DINOv2 @ msng
DINOv2 選定理由 ありとあらゆるモデルを比較検討 してません @ msng
DINOv2 選定理由 条件に合うのがこれだった。 使ってみたらわりといけた。 @ msng
DINOv2 選定理由 それで済むように作ってある (後述) @ msng
Embedding 初期データ取り込み @ msng
Embedding 1秒かかる @ msng
Embedding サンプル画像数: 398,212枚 @ msng
Embedding 398,212 3600 110 (時間) 4日と14時間かかる @ msng
Embedding 最初だけ Mac でやろう @ msng
Embedding % php artisan embeddings:generate -v 生成 id: 565 (7e/7e35cd84.jpg)(565件目、24.1件/秒、残り4:35:13)
生成 id: 566 (c6/c66b2e14.jpg)(566件目、24.1件/秒、残り4:35:14) 生成 id: 567 (1c/1cab1979.jpg)(567件目、24.1件/秒、残り4:35:12) 生成 id: 568 (d0/d09b9080.jpg)(568件目、24.1件/秒、残り4:35:13) 生成 id: 569 (82/82487ca4.jpg)(569件目、24.1件/秒、残り4:35:15) 生成 id: 570 (6a/6ae2fea4.jpg)(570件目、24.1件/秒、残り4:35:15) @ msng
Embedding 速い環境で用意して 本番に突っ込む @ msng
Embedding 画像 HTTP embedding サーバー FastAPI + DINOv2 アプリケーション PHP
など HTTP ベクトル @ msng
Embedding どれでも同じ形 • • • • 省メモリマシンにぜんぶ同居(現状) 専用ハイスペックマシンに引っ越し Cloud Run
with GPU Embedding SaaS @ msng
Embedding PHP(コアアプリケーション)を主軸に embedding モデルは道具として いつでも取り替え可能 @ msng
ベクトル検索 @ msng
ベクトル検索 pgvector 一択 @ msng
ベクトル検索 インデックスをはる @ msng
インデックス候補 • IVFFlat • HNSW @ msng
HNSW • 検索速度: 高 • メモリ使用量: 多 • 検索精度: 高
@ msng
IVFFlat • 検索速度: 高め • メモリ使用量: 少 • 検索精度: 高め
@ msng
IVFFlat • 近いベクトルが同じクラスタに入りやすい • 検索時はまず各クラスタの重心とだけ比べる • 対象のベクトルと重心が近いクラスタを開いて検査 • 開くクラスタ数 (probes)
を増やせば • 全レコードをクラスタに分ける 精度が上がり速度が下がる @ msng
IVFFlat 倉庫に例えると 「これに似たやつ、どこにありますか?」 「だいたいあのへんの箱に入ってるんじゃないかな。 知らんけど。」 「じゃああのへんのを3箱ほど開けて探してみます。」 @ msng
IVFFlat 倉庫に例えると 箱をたくさん開けると 時間はかかるが、より正確になる @ msng
お金をかければ解決する @ msng
お金をかけずにできる工夫も まだまだたくさんありそう @ msng