SQL 資料庫 引擎中的向量概觀
適用於:Azure SQL 資料庫
向量是數字的排序陣列 (通常是浮點數),可以代表某些資料的相關資訊。 例如,影像可以表示為像素值的向量,文字字串可以表示為向量或 ASCII 值。 將資料轉換成向量的程序稱為向量化。
Embeddings
內嵌是代表資料重要特徵的向量。 嵌入通常是透過使用深度學習模型來學習的,機器學習和 AI 模型將它們用作特徵。 內嵌也可以擷取相似概念之間的語意相似性。 例如,在產生單字 person
和 human
的內嵌時,我們預期它們的內嵌 (向量表示) 在值中類似,因為這些單字在語意上也類似。
Azure OpenAI 具有從文字資料建立內嵌的模型。 服務會將文字分成權杖,並使用 OpenAI 預先訓練的模型產生內嵌。 若要深入了解,請參閱使用 Azure OpenAI 建立內嵌。
產生內嵌之後,即可將其儲存至 SQL Server 資料庫。 這可讓您將內嵌與它們所代表的數據一起儲存,並執行向量搜尋查詢來尋找類似的數據點。
向量搜尋
向量搜尋是指尋找數據集中類似特定查詢向量之所有向量的程式。 因此,單字 human
的查詢向量會搜尋整個數據集是否有類似的向量,因此類似的單字:在此範例中,它應該會以接近的比對方式尋找該單字 person
。 這個接近度或距離是使用距離度量來測量,例如餘弦距離。 越接近向量,它們就越類似。
SQL Server 透過向量數據類型提供向量內建支援。 向量會以優化的二進位格式儲存,但為了方便起見,公開為 JSON 陣列。 向量的每個元素都會使用單精度 (4 個字節) 浮點值來儲存。 除了數據類型之外,還有專用函式可在向量上運作。 例如,您可以使用 函式來尋找兩個向量 VECTOR_DISTANCE
之間的距離。 函式會根據您指定的距離計量,傳回兩個向量之間的距離純量值。
由於向量通常會以浮點數位的形式進行管理,因此只要將 JSON 陣列 轉換成向量數據類型即可建立向量 。 例如,下列程式代碼會從 JSON 陣列建立向量:
SELECT CAST('[1.0, -0.2, 30]' AS VECTOR(3)) AS vector;
或,使用隱含轉換
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT @v;
將向量轉換成 JSON 陣列也是如此:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(@v AS NVARCHAR(MAX)) AS vector;
限制
目前不支援從 JSON 數據類型轉換和轉換的預覽。 因應措施是先從 NVARCHAR (MAX) 轉換成 NVARCHAR(MAX), 然後再轉換為/從 JSON 轉換。 例如,若要將向量轉換成 JSON 類型:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(CAST(@v AS NVARCHAR(MAX)) AS JSON) AS j;
和 從 JSON 類型轉換成向量:
DECLARE @j JSON = JSON_ARRAY(1.0, -0.2, 30)
SELECT CAST(CAST(@j AS NVARCHAR(MAX)) AS VECTOR(3)) AS v;
如需如何在 SQL Server 中使用向量的詳細資訊,請參閱下列文章: