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
380
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が不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
4.1k
詳解 AWS Lambdaコールドスタート
iwatatomoya
1
1.9k
真のサーバーレスへ向けたAuroraの進化Aurora Limitless Database
iwatatomoya
1
4.5k
AWS SDKのClientはFactory経由で作ろう
iwatatomoya
1
730
OpentelemetryでアプリケーションのObservabilityを強化しよう
iwatatomoya
0
950
AWS Lambdaは俺が作った
iwatatomoya
2
2.3k
SnapStartの未来についての期待と妄想
iwatatomoya
1
1.3k
実例から学ぶ! AWSを活用したシステム開発の勘所
iwatatomoya
1
3k
目指せ完全制覇!3大クラウドの認定資格制度と勉強方法について
iwatatomoya
0
9.3k
Other Decks in Technology
See All in Technology
Alignment and Autonomy in Cybozu - 300人の開発組織でアラインメントと自律性を両立させるアジャイルな組織運営 / RSGT2025
ama_ch
1
2.3k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
6
54k
Bring Your Own Container: When Containers Turn the Key to EDR Bypass/byoc-avtokyo2024
tkmru
0
840
ドメイン駆動設計の実践により事業の成長スピードと保守性を両立するショッピングクーポン
lycorptech_jp
PRO
7
760
ゼロからわかる!!AWSの構成図を書いてみようワークショップ 問題&解答解説 #デッカイギ #羽田デッカイギおつ
_mossann_t
0
1.5k
機械学習を「社会実装」するということ 2025年版 / Social Implementation of Machine Learning 2025 Version
moepy_stats
4
860
20250116_JAWS_Osaka
takuyay0ne
2
190
コロプラのオンボーディングを採用から語りたい
colopl
5
940
GoogleのAIエージェント論 Authors: Julia Wiesinger, Patrick Marlow and Vladimir Vuskovic
customercloud
PRO
0
120
I could be Wrong!! - Learning from Agile Experts
kawaguti
PRO
8
3.3k
Oracle Base Database Service:サービス概要のご紹介
oracle4engineer
PRO
1
16k
今から、 今だからこそ始める Terraform で Azure 管理 / Managing Azure with Terraform: The Perfect Time to Start
nnstt1
0
190
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.2k
KATA
mclloyd
29
14k
Into the Great Unknown - MozCon
thekraken
34
1.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.3k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Designing Experiences People Love
moore
139
23k
A better future with KSS
kneath
238
17k
Done Done
chrislema
182
16k
The Cost Of JavaScript in 2023
addyosmani
46
7.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
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