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
470
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
750
OpentelemetryでアプリケーションのObservabilityを強化しよう
iwatatomoya
0
970
AWS Lambdaは俺が作った
iwatatomoya
2
2.3k
SnapStartの未来についての期待と妄想
iwatatomoya
1
1.3k
実例から学ぶ! AWSを活用したシステム開発の勘所
iwatatomoya
1
3.1k
目指せ完全制覇!3大クラウドの認定資格制度と勉強方法について
iwatatomoya
0
9.4k
Other Decks in Technology
See All in Technology
Swiftの “private” を テストする / Testing Swift "private"
yutailang0119
0
130
一度 Expo の採用を断念したけど、 再度 Expo の導入を検討している話
ichiki1023
1
160
7日間でハッキングをはじめる本をはじめてみませんか?_ITエンジニア本大賞2025
nomizone
2
1.8k
次世代KYC活動報告 / 20250219-BizDay17-KYC-nextgen
oidfj
0
250
Building Products in the LLM Era
ymatsuwitter
10
5.4k
技術負債の「予兆検知」と「状況異変」のススメ / Technology Dept
i35_267
1
1.1k
目の前の仕事と向き合うことで成長できる - 仕事とスキルを広げる / Every little bit counts
soudai
24
7k
リアルタイム分析データベースで実現する SQLベースのオブザーバビリティ
mikimatsumoto
0
1.3k
エンジニアの育成を支える爆速フィードバック文化
sansantech
PRO
3
1.1k
現場の種を事業の芽にする - エンジニア主導のイノベーションを事業戦略に装着する方法 -
kzkmaeda
2
2k
データ資産をシームレスに伝達するためのイベント駆動型アーキテクチャ
kakehashi
PRO
2
530
ホワイトボードチャレンジ 説明&実行資料
ichimichi
0
130
Featured
See All Featured
Site-Speed That Sticks
csswizardry
4
380
Testing 201, or: Great Expectations
jmmastey
42
7.2k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
630
GraphQLとの向き合い方2022年版
quramy
44
13k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
Music & Morning Musume
bryan
46
6.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
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