選擇用於向量搜尋的 Azure 服務
向量搜尋是一種尋找以向量形式儲存在資料庫中的資訊的方法。 向量是表示媒體 (例如文字或影像) 的特徵或特性的數位群組。 向量相對於傳統的基於關鍵字的搜尋方法是一個重大進步。 透過理解訊息中的語義關係來提供更快、更準確的結果。
Azure 提供多種儲存和搜尋向量化資料的方法。 本文可協助需要了解並為其應用程式選擇正確的 Azure 向量搜尋服務的架構師和開發人員。
本文根據向量搜尋功能對以下服務進行了比較:
- Azure AI 搜尋服務
- Azure Cosmos DB for NoSQL
- Azure Cosmos DB for MongoDB (vCore)
- Azure Cosmos DB for PostgreSQL
- 適用於 PostgreSQL 的 Azure 資料庫
- Azure SQL Database
架構師和開發人員應該在選擇候選服務和能力矩陣中從系統需求的角度來比較可用的服務。
選擇候選服務
本節可協助您選擇最有可能滿足您需求的服務。 要縮小選擇範圍,首先要考慮系統需求。
重要需求
在決定使用傳統資料庫解決方案還是 Azure AI 搜尋服務時,請考慮您的要求以及是否可以對資料執行即時或即時向量搜尋。 如果您經常更改向量化欄位中的值並且需要即時或接近即時地搜尋更改,那麼傳統關係型資料庫或 NoSQL 資料庫最適合您的場景。 同樣,使用現有資料庫可能是實現效能目標的最佳解決方案。 另一方面,如果您的工作負載不需要即時或接近即時的向量搜尋能力,並且您接受管理向量索引,那麼 AI 搜尋可能是令人信服的選擇。
如果您選擇傳統的資料庫解決方案,您決定使用的特定類型的資料庫服務主要取決於您團隊的技能和您目前操作的資料庫。 如果您已經使用特定類型的資料庫 (例如 MongoDB),那麼使用相同類型的資料庫可能是適合您的場景的最簡單的解決方案。 如功能矩陣部分所示,每個資料庫服務對於向量搜尋都有一些獨特的功能和限制。 查看該資訊以確保您的首選資料庫類型支援您所需的功能。
如果成本問題是一個驅動因素,那麼維護現有設計可能最適合您的場景,因為引入新服務或資料庫服務的其他執行個體可能會增加新的淨成本和複雜性。 使用您目前的資料庫進行向量搜尋可能比使用專用服務對您的成本影響更小。
如果您選擇使用傳統資料庫而不是 AI 搜尋,則預設情況下某些高級搜尋功能不可用。 例如,如果要進行重新排名或混合搜尋,請透過 Transact-SQL (T-SQL) 或其他編碼啟用該功能。
功能對照表
本節的表格總結了功能上的主要差異。
基本功能
對向量數據類型的原生支援、近似近鄰 (ANN) 向量索引、向量維度限制、多個向量字段和多個向量索引有時在服務之間有所不同。 您的工作負載要求可能需要其中一些特定功能。 了解每個 Azure 服務的基本向量功能,如下表所示。
功能 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | Azure Cosmos DB for MongoDB (vCore) | Azure 資料庫 PostgreSQL (Flex) | Azure AI 搜尋服務 | Azure SQL Database |
---|---|---|---|---|---|---|
內建向量搜尋 | 是 1 | Yes | 是 2 | 是 1 | 是 3 | 是 4 |
向量資料類型 | Yes | Yes | Yes | Yes | Yes | 是 9 |
尺寸限制 6 | 16,000 7 或 2000 | 5058 或 4096 | 2,000 | 16,000 7 或 2000 | 3,072 | 1998 (預覽)5 |
多個向量欄位 | Yes | Yes | No | Yes | Yes | Yes |
多個向量索引 | Yes | Yes | No | Yes | Yes | Yes |
- 「pgvector」支援向量搜尋,這是 PostgreSQL 的擴充。
- 對 Azure Cosmos DB for MongoDB vCore 中的嵌入使用向量搜尋 vCore
- Azure AI 搜尋服務中的向量
- Azure SQL 資料庫早期採用者預覽版提供本機向量搜尋
- 向量可以儲存在 VARBINARY(8000) 列或變數中。
- 來自 OpenAI 的嵌入模型,text-embedding-ada-002 和 text-embedding-3-small 均為 1536,text-embedding-3-large 為 3072。 對於 Azure AI 視覺多模式嵌入模型,影像和文字均為 1024。
- 向量最多可以有 16,000 個維度。 但使用「IVFFlat」和「HNSW」的索引支援最多 2,000 維的向量。
- 使用平面索引類型索引的向量最多可以有 505 個維度。 使用 quantizedFlat 或 DiskANN 索引類型索引的向量最多可為 4,096 個維度。
- SQL Database 向量數據類型
搜尋方式
工作負載通常需要將向量搜尋與全文搜尋甚至混合搜尋 (全文搜尋或語意搜尋加向量搜尋) 結合。 混合搜尋和重新排名的結合實現了工作負載的高精度。 您可以使用自己的程式碼手動實施混合搜尋和重新排名,或者您可以考慮向量儲存如何支援此工作負載要求。
搜尋方法 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | Azure Cosmos DB for MongoDB (vCore) | Azure 資料庫 PostgreSQL (Flex) | Azure AI 搜尋服務 | Azure SQL Database |
---|---|---|---|---|---|---|
全文檢索搜尋 | 是 1 | No | 是 2 | 是 1 | 是 3 | 是 4 |
混合式搜尋 | 是 5 | No | No | 是 5 | 是 6 | 是 7 |
內建重新排名 | No | No | No | No | 是的 8 | No |
- PostgreSQL 全文搜尋
- 在 Azure Cosmos DB for MongoDB vCore 中使用文字索引進行搜尋和查詢
- 開始使用全文搜尋
- SQL Server 上的向量資料
- 不作為一流功能提供,但提供了範例程式碼。
- 混合搜尋 (全文搜尋、向量搜尋和語義排名的組合) 作為一流功能提供。
- Azure SQL 資料庫和 SQL Server 的混合搜尋範例。
- 稱為語義排名的重新排名是用於對全文搜尋和/或向量搜尋的結果進行重新排名的一流功能。
向量資料索引演算法
向量資料索引是有效儲存和檢索向量的能力。 此功能很重要,因為索引會影響資料來源上的相似性搜尋和最近鄰居查詢的速度和準確性。
索引通常基於窮舉 k 最近鄰 (Ek-NN) 或 ANN 演算法。 Ek-NN 對所有資料點一一進行窮舉搜尋,並返回準確的 K 個最近鄰。 Ek-NN 在處理少量資料時可在幾毫秒內完成,但處理大量資料時可能會導致延遲。
DiskANN、HNSW 和 IVFFlat 是 ANN 演算法索引。 選擇適當的索引原則需要仔細考慮各種因素,例如資料集的性質、查詢的特定要求以及可用資源。 DiskANN 可以適應資料集中的變更,並節省計算資源。 HNSW 擅長於需要快速查詢回應並且能夠適應資料集變化的系統。 IVFFlat 在硬體資源有限或查詢量不高的環境中非常有效。
從下表了解提供了哪些類型的向量資料索引。
索引方法 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | Azure Cosmos DB for MongoDB (vCore) | Azure 資料庫 PostgreSQL (Flex) | Azure AI 搜尋服務 | Azure SQL Database |
---|---|---|---|---|---|---|
DiskANN | No | Yes | No | No | No | No |
窮舉 K 最近鄰 (EKNN) | Yes | Yes | Yes | Yes | Yes | Yes |
階層式導覽小型世界 (HNSW) | Yes | No | 是 (預覽) 1 | Yes | Yes | No |
IVFflat | Yes | No | Yes | Yes | No | No |
其他 | - | flat, quantizedFlat2 | 向量場限制 3 向量索引限制 4 |
- | - | 外部連結庫可用5 |
- Azure Cosmos DB for MongoDB - 向量搜尋概述
- 向量索引原則
- 每個容器只有一個向量場可用。
- 每個容器只有一個向量索引可用。
- 可以藉助 Scikit Learn 或 FAISS 等外部函式庫建立索引
相似度和距離計算能力
向量搜尋的計算方法有餘弦相似度、點積和歐氏距離計算方法。 這些方法用於計算兩個向量之間的相似度或兩個向量之間的距離。
初步資料分析受益於度量和歐幾里德距離,可以提取對資料結構的不同見解,而文本分類通常在歐幾里德距離下表現更好。 餘弦相似度通常可以更好地檢索與給定文字最相似的文字。
Azure OpenAI 服務嵌入依賴餘弦相似度來計算文件和查詢之間的相似度。
內建向量比較計算 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | Azure Cosmos DB for MongoDB (vCore) | Azure 資料庫 PostgreSQL (Flex) | Azure AI 搜尋服務 | Azure SQL Database |
---|---|---|---|---|---|---|
餘弦相似性 | Yes | 是1 | Yes | Yes | Yes | 是 2 |
歐氏距離 (L2距離) | Yes | 是1 | Yes | Yes | Yes | 是 2 |
點乘積 | Yes | 是1 | Yes | Yes | Yes | 是 2 |
- 適用於 NoSQL 的 Azure Cosmos DB 向量距離計算 。
- Azure SQL 資料庫和 SQL Server 的距離計算範例。
與 Azure OpenAI 和其他元件整合
在實現向量搜尋時,您還可以考慮與其他 Microsoft 元件連結。 例如,Azure OpenAI 服務可協助您為資料建立向量並輸入查詢以進行向量相似性搜尋。
功能 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | Azure Cosmos DB for MongoDB (vCore) | Azure 資料庫 PostgreSQL (Flex) | Azure AI 搜尋服務 | Azure SQL Database |
---|---|---|---|---|---|---|
Azure OpenAI 服務 - 新增您自己的資料 | No | No | 是 1 | No | 是 2 | No |
使用 Azure OpenAI 進行向量嵌入 | No | No | No | 是 3 | 是 4 | 是 5 |
與提示流程整合 | No | No | No | No | 是 6 | No |
與語義核心程序整合 | 是 7 | 是8 | 是9 | 是 7 | 是的 10 | 是的 11 |
- 支援 Azure Cosmos DB for MongoDB (vCore) 作為 Azure OpenAI on Your Data 的資料來源。
- 支援將 Azure AI 搜尋服務作為 Azure OpenAI on Your Data 的資料來源。
- Azure AI 擴充功能 (預覽版) 現已推出。
- Azure AI 搜尋服務提供了對分塊文字進行向量化的技能。
- 您可以為嵌入模型部署建立預存程序。
- 在 Vector DB Lookup 工具中支援作為向量資料庫。
- 支援記憶體連接器和向量資料庫連接器 (C#)。
- 支援記憶體連接器和向量資料庫連接器 (C#、Python)。
- 支援作為向量資料庫連接器 (C#、Python)。
- 支援記憶體連接器和向量資料庫連接器 (C#、Python)。
- 支援作為記憶體連接器。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主要作者:
- Keita Onabuta |資深客戶工程師
- Gary Lee | 資深客戶工程師
其他投稿人:
- Kruti Mehta | 客戶工程師
若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。
後續步驟
使用 Azure AI 搜尋服務實施知識挖掘. 本學習路徑探討如何使用 Azure AI 搜尋服務。