Qdrantでベクトルデータベースに入門してみよう
by
TomoyaIwata
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
2024.10.30 クラスメソッド株式会社 リテールアプリ共創部 岩田 智哉 Qdrantでベクトルデータベースに 入門してみよう
Slide 2
Slide 2 text
自己紹介 2 ● 産業支援グループ リテールアプリ共創部 マッハチーム ● 2018年5月入社 ● 大阪オフィス所属 ● 普段は主にサーバーサイドの開発に従事 ● 前十字靭帯再建手術リハビリ中 岩田 智哉
Slide 3
Slide 3 text
ベクトルデータべースとは 3 ● ベクトルデータの格納や検索を行うためのデータベース ○ 意味的に近いデータを検索できる ● 多次元の数値配列 = ベクトルデータ ○ ベクトルデータ... [1,2,3,4,5,6…] こういうやつ ● 生成AIの流行と共に耳にする機会が増えた ○ よくRAGで利用される
Slide 4
Slide 4 text
ざっくり理解するモデルとベクトル化 4 岩田 [182,80] 身長 体重 182 80 入力をベクトルに変換するのがモデル ベクトル化しても元の特徴は維持される
Slide 5
Slide 5 text
Qdrant(クワッドラント)とは 5 •OSSのベクトルデータベース •Dockerで簡単に起動可能 •Web UIが用意されている •REST APIで操作可能
Slide 6
Slide 6 text
QdrantのWeb UI 6
Slide 7
Slide 7 text
Qdrantのサンプルデータセット 7
Slide 8
Slide 8 text
最低限抑えておきたい概念 8 ● コレクション ● ポイント ○ ID ○ ベクトル ○ ペイロード https://raw.githubusercontent.com/ramonpzg/mlops-sydney-2023/main/images/qdrant_overview_high_level.png より引用
Slide 9
Slide 9 text
Qdrantを使いながら学ぶ ベクトルデータベースの概念 9
Slide 10
Slide 10 text
ベクトル間の類似度を測定するための指標 10 •ドット積 •コサイン類似度 •ユークリッド距離 •マンハッタン距離 ※Qdrantが対応している指標のみ抜粋
Slide 11
Slide 11 text
ベクトル間の類似度について考えてみる 11 以下の2次元ベクトルをサンプルに考えてみる [1, 3] [3, 3] [5, 1]
Slide 12
Slide 12 text
ドット積 12 ベクトルの内積を用いた指標 正規化されたデータに使う [1, 3] [3, 3] [5, 1] ⚫青と赤… (1×3) + (3×3) = 12 ⚫赤と黄… (3×5) + (3×1) = 18 ⚫青と黄… (1×5) + (3×1) = 8
Slide 13
Slide 13 text
コサイン類似度 13 ベクトル同士のコサイン値を用いた指標 [1, 3] [3, 3] [5, 1] ⚫青と赤… (略) = 0.894... ⚫赤と黄… (略) = 0.832... ⚫青と黄… (略) = 0.496...
Slide 14
Slide 14 text
ユークリッド距離 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
Slide 15
Slide 15 text
マンハッタン距離 15 [1, 3] [3, 3] [5, 1] ⚫青と赤… |1-3| + |3-3| = 2 ⚫赤と黄… |3-5| + |3-1| = 4 ⚫青と黄… |1-5| + |3-1| = 6 ベクトル間を碁盤の目状に進んだ距離 距離なので数値が小さいほうが類似度が高い
Slide 16
Slide 16 text
Qdrantの基本操作を通じて 4つの指標を試してみる 16
Slide 17
Slide 17 text
コレクションの作成 17 • コレクション作成時のパラメータで指標を指定 • 検証用に各指標で合計4つのコレクションを作成
Slide 18
Slide 18 text
ポイントの投入 18 作成した各コレクションに サンプルのポイントを投入
Slide 19
Slide 19 text
各コレクションに対してSearch points APIを試してみる 19 • 各コレクションに対してSearch points APIを実行 • ベクトル[1,3]に類似するpointを検索 • スコアの違いを確認してみる
Slide 20
Slide 20 text
ドット積 20
Slide 21
Slide 21 text
コサイン類似度 21
Slide 22
Slide 22 text
ユークリッド距離 22
Slide 23
Slide 23 text
マンハッタン距離 23
Slide 24
Slide 24 text
ユースケースに合わせて 適切な指標を選択することが 重要 24
Slide 25
Slide 25 text
ベクトルの種類 25
Slide 26
Slide 26 text
ベクトルの種類 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]}
Slide 27
Slide 27 text
Hybrid Search 27 ● Qdrantは密ベクトルと疎ベクトル両方を組み合わせた Hybrid Searchが可能 ● 1つのPointに複数のVectorを保持できる ○ 密/疎ベクトルを登録 ○ ユークリッド/マンハッタン距離を指標とするベクトルを登録 ● Hybrid Searchでは以下のいずれかの方式でスコアを統合 ○ Reciprocal Rank Fusion(rrf) ○ Distribution-Based Score Fusion(dbsf)
Slide 28
Slide 28 text
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
Slide 29
Slide 29 text
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... スコアの大小は計算結果に影響しない 逆順位スコアは同じ
Slide 30
Slide 30 text
Distribution-Based Score Fusion 30 ● クエリ結果のスコアを正規化 ● 正規化した後の各スコアを融合させる ○ Qdrantでは標準偏差を使って正規化した後の合計値を採用 https://github.com/qdrant/qdrant/blob/9c20e9e27960228019b4606f137ca82b42fc3e66/lib/segment/src/common/score_fusion.rs#L10-L31
Slide 31
Slide 31 text
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... 元のスコアの大小が正規化後のスコアにも影響
Slide 32
Slide 32 text
Qdrantで Hybrid Searchしてみる 32
Slide 33
Slide 33 text
Hybrid Searchで使うサンプルデータ 33 [0, 0] [5, 5] [8, 0] 比較対象 ユークリッド マンハッタン 青と青 0 0 青と赤 7.071… 10 青と黄色 8 8 指標によってランク&スコアが変化するデータを用意 ユークリッド マンハッタン 青からの距離 青 → 赤 → 黄色 青 → 黄色 → 赤
Slide 34
Slide 34 text
ユークリッド/マンハッタン距離を利用するコレクションの作成 34 ユークリッド/マンハッタン距離を利用する2次元のベクトルを作成
Slide 35
Slide 35 text
テスト用のPointを投入 35
Slide 36
Slide 36 text
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...
Slide 37
Slide 37 text
Hybrid Searchを実行(DBSF) 37
Slide 38
Slide 38 text
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... • 各クエリごとに平均値、標準偏差を算出
Slide 39
Slide 39 text
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... • 算出した値を使ってスコアを正規化 • 各クエリの正規化されたスコアを合計
Slide 40
Slide 40 text
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
Slide 41
Slide 41 text
Hybrid Searchを実行(DBSF) 41 スコア 赤 1.203... 黄色 1.176... 青 0.619...
Slide 42
Slide 42 text
まとめ 42
Slide 43
Slide 43 text
まとめ 43 ● Qdrantはベクトルデータベースの入門にオススメ ● ベクトルデータベースの基礎的な概念を学んでから Qdrantを触ることで理解が深まります!!
Slide 44
Slide 44 text
参考 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