Slide 1

Slide 1 text

SQL Server ベクトル検索 meetup app Osaka@9 2025/03/29 @shinsukeoda

Slide 2

Slide 2 text

ベクトル検索 Azure SQL Database で public preview SQL Server 2025 からサポート SQL データベース エンジン内のベクター を操作する - SQL Server | Microsoft Learn

Slide 3

Slide 3 text

ベクトルってなに? 高校数学でやったやつ? 向きと大きさをもってた気がする 矢印みたいなイメージあった 数値の順序付けられた配列

Slide 4

Slide 4 text

ベクトル データ型 内部的には、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

Slide 5

Slide 5 text

ベクトル 関数 vector_distance 距離計算 (今日はこれの話し) vector_norm ノルム(長さ)計算 vector_normalize 正規化 (指定ノルムで長さ1のベクトル) ベクター関数 (Transact-SQL) - SQL Server | Microsoft Learn

Slide 6

Slide 6 text

vector_distance (距離計算) 3種類の計算方法 cosine - コサイン距離 euclidean - ユークリッド距離 dot – (負の) ドット積 VECTOR_DISTANCE (Transact-SQL) - SQL Server | Microsoft Learn

Slide 7

Slide 7 text

コサイン距離 1 から コサイン類似度を引いたもの コサイン類似度 = 2つのベクトル間の確 度Θ に対するコサイン 1 - cosΘ 0 ~ 2 の範囲 0:同一のベクトル、2:反対のベクトル

Slide 8

Slide 8 text

コサイン距離 - 例 (1, 0), (0, 1) の2点のベクトルがあったとして vector_distance(‘cosine’, ‘[1,0]’, ‘[0,1]’) 90°なので cos90° = 0 1 – cos90° = 1 – 0 = 1

Slide 9

Slide 9 text

ユークリッド距離 2つのベクトル間の直線距離 √(a1 – b1)^2 + (a2 – b2)^2 + … + (an – bn)^2 0:同一のベクトル 𝑎1 − 𝑏1 2 + 𝑎2 − 𝑏2 2 + ⋯ + 𝑎𝑛 − 𝑏𝑛 2

Slide 10

Slide 10 text

ユークリッド距離 - 例 (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

Slide 11

Slide 11 text

ドット積 ベクトルの大きさ * cosΘ ベクトルの内積 のこと (a1 * b1) + (a2 * b2) + … SQL Server は では 負のドット積なので、 ((a1 * b1) + (a2 * b2) + …) * -1 最後に -1 掛ける 小さくなるほど、ベクトルが類似している

Slide 12

Slide 12 text

(負の)ドット積 - 例 (1, 0), (0, 1) の2点のベクトルがあったとして vector_distance(‘dot’, ‘[1,0]’, ‘[0,1]’) ((1 * 0) + (0 * 1)) * -1 0 * -1 = -0

Slide 13

Slide 13 text

どんな時に使い分ける? コサイン距離 方向性が一緒 (距離がどれだけ離れてても、 方向が一緒なら同じ) ユークリッド距離 単純に距離が近い・遠い 負のドット積 -1 掛けて小さいほどベクトルが似ている ベクトルの大きさ * cosΘ なので、方向性 と距離が考慮されてそう?

Slide 14

Slide 14 text

正反対のものと、 同じ方向だけど距離が遠いもの -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)

Slide 15

Slide 15 text

正反対のものと、 同じ方向だけど距離が遠いもの

Slide 16

Slide 16 text

正反対のものと、 同じ方向だけど距離が遠いもの (-0.5, -0.5) は (0, 0) 挟んで反対だが距 離は近い 向きは反対だが近い (3, 3) は 向きは同じだが、距離は遠い (0.5, 0.5) から距離が近いけど、真逆の (-0.5, -0.5) の方 が求められている結果? (0.5, 0.5) から距離が遠いけど、向きが同じの (3, 3) の方が 求められている結果? どんな検索をしたいかで変わってくるはず!!

Slide 17

Slide 17 text

Vectorize (ベクトル化) どんなものでも数値の配列にする テキストでも画像でも動画でもなんでもか んでも数値の配列にする SQL Server だと配列は 1998 次元まで 適当に数値化じゃダメ! 検索の話しで分かると思うけど、この数値 データが大事!

Slide 18

Slide 18 text

Vectorize (ベクトル化) この数値化で流行ってる AI/ML が使われ る 人がやってもいいけど、量が多いと大変だ し、やる人の感性によってしまう。 ルール決めてやった場合は、ルール通りに しかならないから、漏れるケースは無視さ れる 絶対者がルールを決めて、ルール外はどうでもい いなら AI/ML じゃなくてもいいはず

Slide 19

Slide 19 text

感想・疑問 次元が増えた時に、無関係の内容に 0 入れてっ たら、殆どの次元が 0 になって、全然近くない のに近い扱いされない? 単位が違う次元が混じってたら距離での検索ヤ バそう? 1次元は -1.0~1.0の範囲、2次元は、1000, 2000 の単位 単位ベクトル、正規化とか出てくるはず… 多次元とか感覚的には理解できないけど、ちゃ んと計算出来るのは数学スゲー