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
480
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.5k
詳解 AWS Lambdaコールドスタート
iwatatomoya
1
2.1k
真のサーバーレスへ向けたAuroraの進化Aurora Limitless Database
iwatatomoya
1
4.6k
AWS SDKのClientはFactory経由で作ろう
iwatatomoya
1
760
OpentelemetryでアプリケーションのObservabilityを強化しよう
iwatatomoya
0
980
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
2.5Dモデルのすべて
yu4u
2
950
あれは良かった、あれは苦労したB2B2C型SaaSの新規開発におけるCloud Spanner
hirohito1108
2
800
生成 AI プロダクトを育てる技術 〜データ品質向上による継続的な価値創出の実践〜
icoxfog417
PRO
5
1.8k
エンジニアの育成を支える爆速フィードバック文化
sansantech
PRO
3
1.1k
Tech Blogを書きやすい環境づくり
lycorptech_jp
PRO
1
260
ビジネスモデリング道場 目的と背景
masuda220
PRO
9
670
エンジニアのためのドキュメント力基礎講座〜構造化思考から始めよう〜(2025/02/15jbug広島#15発表資料)
yasuoyasuo
18
7.2k
Classmethod AI Talks(CATs) #17 司会進行スライド(2025.02.19) / classmethod-ai-talks-aka-cats_moderator-slides_vol17_2025-02-19
shinyaa31
0
160
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
930
開発組織のための セキュアコーディング研修の始め方
flatt_security
3
2.7k
偏光画像処理ライブラリを作った話
elerac
1
130
人はなぜISUCONに夢中になるのか
kakehashi
PRO
6
1.7k
Featured
See All Featured
Building an army of robots
kneath
303
45k
Bash Introduction
62gerente
611
210k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
Automating Front-end Workflow
addyosmani
1368
200k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
KATA
mclloyd
29
14k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Why Our Code Smells
bkeepers
PRO
336
57k
The Cost Of JavaScript in 2023
addyosmani
47
7.3k
RailsConf 2023
tenderlove
29
1k
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