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
540
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.7k
詳解 AWS Lambdaコールドスタート
iwatatomoya
1
2.2k
真のサーバーレスへ向けたAuroraの進化Aurora Limitless Database
iwatatomoya
1
4.6k
AWS SDKのClientはFactory経由で作ろう
iwatatomoya
1
790
OpentelemetryでアプリケーションのObservabilityを強化しよう
iwatatomoya
0
1k
AWS Lambdaは俺が作った
iwatatomoya
2
2.4k
SnapStartの未来についての期待と妄想
iwatatomoya
1
1.3k
実例から学ぶ! AWSを活用したシステム開発の勘所
iwatatomoya
1
3.1k
目指せ完全制覇!3大クラウドの認定資格制度と勉強方法について
iwatatomoya
0
9.4k
Other Decks in Technology
See All in Technology
AWSにおけるサイバー攻撃の傾向と具体的な対策
yuobayashi
6
510
eBPF-based Process Lifecycle Monitoring
yukinakanaka
1
110
どうすると生き残れないのか/how-not-to-survive
hanhan1978
13
11k
セキュリティグループの”タイプ”を改めて考えてみる
masakiokuda
0
140
Autonomous Database サービス・アップデート (FY25)
oracle4engineer
PRO
1
540
RF問の対策をした話
bata_24
0
120
エンジニアのキャリアパスと、 その中で自分が大切にしていること
noteinc
4
3.5k
きのこカンファレンス_ランチスポンサーセッション
kabaya
1
410
社内限定だった「ChatGPTオペレーター勉強会」の極秘資料を無料で特別公開
tenho7_kodama
1
120
いまから始めるAWS CDK 〜モダンなインフラ構築入門〜/iac-night-cdk-introduction
tomoki10
6
2.1k
20250309 無冠のわたし これからどう先生きのこれる?
akiko_pusu
11
2.2k
組織のスケールを見据えたプロジェクトリードエンジニア制度の実践 / Project Lead Engineer for Scaling Engineering Organization
ohbarye
9
2.6k
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7.1k
The Invisible Side of Design
smashingmag
299
50k
4 Signs Your Business is Dying
shpigford
183
22k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
How to Ace a Technical Interview
jacobian
276
23k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
22
2.5k
Git: the NoSQL Database
bkeepers
PRO
429
65k
Building Applications with DynamoDB
mza
93
6.3k
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