Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PHP アプリケーションに類似画像検索を後付けする
Search
msng
July 21, 2026
690
2
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
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
The agentic SEO stack - context over prompts
schlessera
0
940
4 Signs Your Business is Dying
shpigford
187
23k
My Coaching Mixtape
mlcsv
0
330
How to train your dragon (web standard)
notwaldorf
97
6.8k
ラッコキーワード サービス紹介資料
rakko
1
5.1M
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
250
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
290
Facilitating Awesome Meetings
lara
57
7.2k
Making the Leap to Tech Lead
cromwellryan
135
10k
A designer walks into a library…
pauljervisheath
211
25k
Mind Mapping
helmedeiros
1
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