Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SQL Server ベクトル検索

SQL Server ベクトル検索

2025/03/29 meetup app @osaka9
https://meetupapp.connpass.com/event/348237/

Oda Shinsuke

March 29, 2025
Tweet

More Decks by Oda Shinsuke

Other Decks in Programming

Transcript

  1. ベクトル検索 Azure SQL Database で public preview SQL Server 2025

    からサポート SQL データベース エンジン内のベクター を操作する - SQL Server | Microsoft Learn
  2. ベクトル データ型 内部的には、JSON で表現した数値の配列 各要素は 単精度(4byte)浮動小数点 配列の最大次元 1998 (1998次元配列まで) 単精度浮動小数点

    = float(24) or real create table [テーブル] ( [キー] bigint not null primary key , [ベクトル] vector(3) not null ) ; insert into [テーブル] ([キー], [ベクトル]) values (1, '[0.1, 2, 30]') , (2, '[-100.2, 0.123, 9.876]') ; select * from [テーブル] ベクトル データ型 (プレビュー) - SQL Server | Microsoft Learn
  3. vector_distance (距離計算) 3種類の計算方法 cosine - コサイン距離 euclidean - ユークリッド距離 dot

    – (負の) ドット積 VECTOR_DISTANCE (Transact-SQL) - SQL Server | Microsoft Learn
  4. ユークリッド距離 2つのベクトル間の直線距離 √(a1 – b1)^2 + (a2 – b2)^2 +

    … + (an – bn)^2 0:同一のベクトル 𝑎1 − 𝑏1 2 + 𝑎2 − 𝑏2 2 + ⋯ + 𝑎𝑛 − 𝑏𝑛 2
  5. ユークリッド距離 - 例 (1, 0), (0, 1) の2点のベクトルがあったとして vector_distance(‘euclidean’, ‘[1,0]’,

    ‘[0,1]’) √(1 – 0)^2 + (0 – 1)^2 = √2 √2 = 1.41421356… 1 − 0 2 + 0 − 1 2 = 2
  6. ドット積 ベクトルの大きさ * cosΘ ベクトルの内積 のこと (a1 * b1) +

    (a2 * b2) + … SQL Server は では 負のドット積なので、 ((a1 * b1) + (a2 * b2) + …) * -1 最後に -1 掛ける 小さくなるほど、ベクトルが類似している
  7. 正反対のものと、 同じ方向だけど距離が遠いもの -1 -0.5 0 0.5 1 1.5 2 2.5

    3 3.5 -1 -0.5 0 0.5 1 1.5 2 2.5 3 3.5 軸ラベル 軸ラベル y 線形 (y)
  8. 正反対のものと、 同じ方向だけど距離が遠いもの (-0.5, -0.5) は (0, 0) 挟んで反対だが距 離は近い 向きは反対だが近い

    (3, 3) は 向きは同じだが、距離は遠い (0.5, 0.5) から距離が近いけど、真逆の (-0.5, -0.5) の方 が求められている結果? (0.5, 0.5) から距離が遠いけど、向きが同じの (3, 3) の方が 求められている結果? どんな検索をしたいかで変わってくるはず!!
  9. 感想・疑問 次元が増えた時に、無関係の内容に 0 入れてっ たら、殆どの次元が 0 になって、全然近くない のに近い扱いされない? 単位が違う次元が混じってたら距離での検索ヤ バそう?

    1次元は -1.0~1.0の範囲、2次元は、1000, 2000 の単位 単位ベクトル、正規化とか出てくるはず… 多次元とか感覚的には理解できないけど、ちゃ んと計算出来るのは数学スゲー