共用方式為


SQL 資料庫 引擎中的向量概觀

適用於:Azure SQL 資料庫

向量是數字的排序陣列 (通常是浮點數),可以代表某些資料的相關資訊。 例如,影像可以表示為像素值的向量,文字字串可以表示為向量或 ASCII 值。 將資料轉換成向量的程序稱為向量化。

Embeddings

內嵌是代表資料重要特徵的向量。 嵌入通常是透過使用深度學習模型來學習的,機器學習和 AI 模型將它們用作特徵。 內嵌也可以擷取相似概念之間的語意相似性。 例如,在產生單字 personhuman 的內嵌時,我們預期它們的內嵌 (向量表示) 在值中類似,因為這些單字在語意上也類似。

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 中使用向量的詳細資訊,請參閱下列文章: