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
Qdrantでベクトルデータベースに入門してみよう
Search
TomoyaIwata
October 30, 2024
Technology
0
2k
Qdrantでベクトルデータベースに入門してみよう
2024/10/30(水)に開催されたClassmethod AI Talks(CATs) #6 生成AIサービス開発の実践 - 周辺技術を基礎から応用までキャッチアップ!
で登壇した際の資料です
TomoyaIwata
October 30, 2024
Tweet
Share
More Decks by TomoyaIwata
See All by TomoyaIwata
Lambdaの常識はどう変わる?!re:Invent 2025 before after
iwatatomoya
1
1.1k
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
2.2k
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
6.3k
詳解 AWS Lambdaコールドスタート
iwatatomoya
2
3.2k
真のサーバーレスへ向けたAuroraの進化Aurora Limitless Database
iwatatomoya
1
5k
AWS SDKのClientはFactory経由で作ろう
iwatatomoya
1
1k
OpentelemetryでアプリケーションのObservabilityを強化しよう
iwatatomoya
0
1.3k
AWS Lambdaは俺が作った
iwatatomoya
2
3.1k
SnapStartの未来についての期待と妄想
iwatatomoya
1
1.5k
Other Decks in Technology
See All in Technology
今のWordPress の制作手法ってなにがあんねん?(改) / What’s the Deal with WordPress Development These Days?
tbshiki
0
460
Dr. Werner Vogelsの14年のキーノートから紐解くエンジニアリング組織への処方箋@JAWS DAYS 2026
p0n
1
140
OSC仙台プレ勉強会 AlmaLinuxとは
koedoyoshida
0
170
Google系サービスで文字起こしから勝手にカレンダーを埋めるエージェントを作った話
risatube
0
190
Kubernetesにおける推論基盤
ry
1
390
AI実装による「レビューボトルネック」を解消する仕様駆動開発(SDD)/ ai-sdd-review-bottleneck
rakus_dev
0
140
【Oracle Cloud ウェビナー】【入門編】はじめてのOracle AI Data Platform - AIのためのデータ準備&自社用AIエージェントをワンストップで実現
oracle4engineer
PRO
1
140
脳内メモリ、思ったより揮発性だった
koutorino
0
370
Claude Code のコード品質がばらつくので AI に品質保証させる仕組みを作った話 / A story about building a mechanism to have AI ensure quality, because the code quality from Claude Code was inconsistent
nrslib
13
8.3k
VLAモデル構築のための AIロボット向け模倣学習キット
kmatsuiugo
0
170
OCHaCafe S11 #2 コンテナ時代の次の一手:Wasm 最前線
oracle4engineer
PRO
2
130
JAWS DAYS 2026 楽しく学ぼう!ストレージ 入門
yoshiki0705
2
190
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
830
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.4k
HDC tutorial
michielstock
1
550
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
140
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
160
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
260
Git: the NoSQL Database
bkeepers
PRO
432
66k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
640
Transcript
2024.10.30 クラスメソッド株式会社 リテールアプリ共創部 岩田 智哉 Qdrantでベクトルデータベースに 入門してみよう
自己紹介 2 • 産業支援グループ リテールアプリ共創部 マッハチーム • 2018年5月入社 • 大阪オフィス所属
• 普段は主にサーバーサイドの開発に従事 • 前十字靭帯再建手術リハビリ中 岩田 智哉
ベクトルデータべースとは 3 • ベクトルデータの格納や検索を行うためのデータベース ◦ 意味的に近いデータを検索できる • 多次元の数値配列 = ベクトルデータ
◦ ベクトルデータ... [1,2,3,4,5,6…] こういうやつ • 生成AIの流行と共に耳にする機会が増えた ◦ よくRAGで利用される
ざっくり理解するモデルとベクトル化 4 岩田 [182,80] 身長 体重 182 80 入力をベクトルに変換するのがモデル ベクトル化しても元の特徴は維持される
Qdrant(クワッドラント)とは 5 •OSSのベクトルデータベース •Dockerで簡単に起動可能 •Web UIが用意されている •REST APIで操作可能
QdrantのWeb UI 6
Qdrantのサンプルデータセット 7
最低限抑えておきたい概念 8 • コレクション • ポイント ◦ ID ◦ ベクトル
◦ ペイロード https://raw.githubusercontent.com/ramonpzg/mlops-sydney-2023/main/images/qdrant_overview_high_level.png より引用
Qdrantを使いながら学ぶ ベクトルデータベースの概念 9
ベクトル間の類似度を測定するための指標 10 •ドット積 •コサイン類似度 •ユークリッド距離 •マンハッタン距離 ※Qdrantが対応している指標のみ抜粋
ベクトル間の類似度について考えてみる 11 以下の2次元ベクトルをサンプルに考えてみる [1, 3] [3, 3] [5, 1]
ドット積 12 ベクトルの内積を用いた指標 正規化されたデータに使う [1, 3] [3, 3] [5, 1]
⚫青と赤… (1×3) + (3×3) = 12 ⚫赤と黄… (3×5) + (3×1) = 18 ⚫青と黄… (1×5) + (3×1) = 8
コサイン類似度 13 ベクトル同士のコサイン値を用いた指標 [1, 3] [3, 3] [5, 1] ⚫青と赤…
(略) = 0.894... ⚫赤と黄… (略) = 0.832... ⚫青と黄… (略) = 0.496...
ユークリッド距離 14 ベクトル間の直線的な最短距離 距離なので数値が小さいほうが類似度が高い [1, 3] [3, 3] [5, 1]
⚫青と赤… = 2 ⚫赤と黄… = 2.82 ⚫青と黄… = 4.47 (1 − 3)2+(3 − 3)2 (3 − 5)2+(3 − 1)2 (1 − 5)2+(3 − 1)2
マンハッタン距離 15 [1, 3] [3, 3] [5, 1] ⚫青と赤… |1-3|
+ |3-3| = 2 ⚫赤と黄… |3-5| + |3-1| = 4 ⚫青と黄… |1-5| + |3-1| = 6 ベクトル間を碁盤の目状に進んだ距離 距離なので数値が小さいほうが類似度が高い
Qdrantの基本操作を通じて 4つの指標を試してみる 16
コレクションの作成 17 • コレクション作成時のパラメータで指標を指定 • 検証用に各指標で合計4つのコレクションを作成
ポイントの投入 18 作成した各コレクションに サンプルのポイントを投入
各コレクションに対してSearch points APIを試してみる 19 • 各コレクションに対してSearch points APIを実行 • ベクトル[1,3]に類似するpointを検索
• スコアの違いを確認してみる
ドット積 20
コサイン類似度 21
ユークリッド距離 22
マンハッタン距離 23
ユースケースに合わせて 適切な指標を選択することが 重要 24
ベクトルの種類 25
ベクトルの種類 26 • 密(Dense)ベクトル • すべて or ほとんどの成分が0でない • すべての成分を保持
• 例: [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,0,1] • 疎ベクトル(Sparse) • ほとんどの成分が0 • 非ゼロの成分のみ保持 • 例: {“非ゼロの成分”:[0,10,15],”値”:[1,2,3]}
Hybrid Search 27 • Qdrantは密ベクトルと疎ベクトル両方を組み合わせた Hybrid Searchが可能 • 1つのPointに複数のVectorを保持できる ◦
密/疎ベクトルを登録 ◦ ユークリッド/マンハッタン距離を指標とするベクトルを登録 • Hybrid Searchでは以下のいずれかの方式でスコアを統合 ◦ Reciprocal Rank Fusion(rrf) ◦ Distribution-Based Score Fusion(dbsf)
Reciprocal Rank Fusion 28 • クエリの結果に対して逆順位スコアを割り当てる • 逆順位スコア = 1
÷ (順位 + 定数) ▪ Qdrantでは定数 = 2.0、順位は0から計算 ▪ 順位が1位なら逆順位スコアは0.5となる https://github.com/qdrant/qdrant/blob/9c20e9e27960228019b4606f137ca82b42fc3e66/lib/segment/src/common/reciprocal_rank_fusion.rs#L11-L17
Reciprocal Rank Fusionの計算例 29 クエリ1 クエリ2 ポイント クエリ1 クエリ2 合計
青 1÷ (0 + 2.0) = 0.5 1÷ (0 + 2.0) = 0.5 1.0 赤 1÷ (1 + 2.0) = 0.333... 1÷ (2 + 2.0) = 0.25 0.5833... 黄色 1÷ (2 + 2.0) = 0.25 1÷ (1 + 2.0) = 0.333... 0.5833... スコアの大小は計算結果に影響しない 逆順位スコアは同じ
Distribution-Based Score Fusion 30 • クエリ結果のスコアを正規化 • 正規化した後の各スコアを融合させる ◦ Qdrantでは標準偏差を使って正規化した後の合計値を採用
https://github.com/qdrant/qdrant/blob/9c20e9e27960228019b4606f137ca82b42fc3e66/lib/segment/src/common/score_fusion.rs#L10-L31
Distribution-Based Score Fusionの計算例 31 クエリ1 クエリ2 スコアの大小が計算結果に影響する ポイント クエリ1 クエリ2
合計 青 0.311… ※詳細はのちほど 0.308... 0.619... 赤 0.625... 0.577... 1.203... 黄色 0.562... 0.613... 1.176... 元のスコアの大小が正規化後のスコアにも影響
Qdrantで Hybrid Searchしてみる 32
Hybrid Searchで使うサンプルデータ 33 [0, 0] [5, 5] [8, 0] 比較対象
ユークリッド マンハッタン 青と青 0 0 青と赤 7.071… 10 青と黄色 8 8 指標によってランク&スコアが変化するデータを用意 ユークリッド マンハッタン 青からの距離 青 → 赤 → 黄色 青 → 黄色 → 赤
ユークリッド/マンハッタン距離を利用するコレクションの作成 34 ユークリッド/マンハッタン距離を利用する2次元のベクトルを作成
テスト用のPointを投入 35
Hybrid Searchを実行(RRF) 36 ポイント ユークリッド距離 マンハッタン距離 合計 青 1÷ (0
+ 2.0) = 0.5 1÷ (0 + 2.0) = 0.5 1.0 赤 1÷ (1 + 2.0) = 0.333... 1÷ (2 + 2.0) = 0.25 0.5833... 黄色 1÷ (2 + 2.0) = 0.25 1÷ (1 + 2.0) = 0.333... 0.5833...
Hybrid Searchを実行(DBSF) 37
DBSFの計算-1 38 ユークリッド距離 マンハッタン距離 青 0 0 赤 10 7.071...
黄色 8 8 平均 6 5.023... 標準偏差 5.291... 4.375... 平均 – (3 * 標準偏差) ※min -9.874... -8.102... 平均 + (3 * 標準偏差) ※max 21.874... 18.149... • 各クエリごとに平均値、標準偏差を算出
DBSFの計算-2 39 ユークリッド距離 マンハッタン距離 合計 スコア (スコア-min)÷(max-min) スコア (スコア-min) ÷(max-min)
青 0 0.311... 0 0.308... 0.619... 赤 10 0.625... 7.071... 0.577... 1.203... 黄色 8 0.562... 8 0.613... 1.176... • 算出した値を使ってスコアを正規化 • 各クエリの正規化されたスコアを合計
DBSFの計算(ソースコード) 40 https://github.com/qdrant/qdrant/blob/9c20e9e27960228019b4606f137ca82b42fc3e66/lib/segment/src/common/score_fusion.rs#L149-L164 https://github.com/qdrant/qdrant/blob/9c20e9e27960228019b4606f137ca82b42fc3e66/lib/segment/src/common/score_fusion.rs#L96-L109
Hybrid Searchを実行(DBSF) 41 スコア 赤 1.203... 黄色 1.176... 青 0.619...
まとめ 42
まとめ 43 • Qdrantはベクトルデータベースの入門にオススメ • ベクトルデータベースの基礎的な概念を学んでから Qdrantを触ることで理解が深まります!!
参考 44 Home - Qdrant https://qdrant.tech/documentation/ ベクトルデータベースとは何ですか?|包括的なベクトルデータベースのガイド | Elastic https://www.elastic.co/jp/what-is/vector-database
ベクトル距離メトリック https://docs.oracle.com/cd/G11854_01/vecse/vector-distance-metrics.html ベクトル距離関数から選択し、ベクトル エンベディングの類似度を測定する | Spanner | Google Cloud https://cloud.google.com/spanner/docs/choose-vector-distance-function?hl=ja ハイブリッド検索のスコアリング (RRF) - Azure AI Search | Microsoft Learn https://learn.microsoft.com/ja-jp/azure/search/hybrid-search-ranking