Azure AI 搜尋服務中的向量
向量搜尋是一種資訊擷取方法,可支援對內容的數值表示法進行索引編製和查詢執行。 由於內容是數值而非純文本,因此比對是以最類似於查詢向量的向量為基礎,可跨下列專案進行比對:
- 語意或概念相似性(“狗”和“犬”,在概念上相似但語言上不同)
- 多語系內容(英文為“狗”,德文為“狗”)
- 多種內容類型(純文字中的「狗」,以及圖像檔中狗的照片)
本文提供 Azure AI 搜尋服務中向量 的高階簡介。 它也說明與其他 Azure 服務的整合,並涵蓋 與向量搜尋開發相關的術語和概念 。
建議您針對背景使用本文,但如果您想要開始使用,請遵循下列步驟:
- 為您的索引提供內嵌,或在索引器管線中產生內嵌 (預覽)
- 建立向量索引
- 執行向量查詢
您也可以從向量快速入門或 GitHub 上的程式代碼範例開始。
向量搜尋支援哪些案例?
向量搜尋的案例包括:
相似度搜尋。 使用內嵌模型來編碼文字,例如 OpenAI 內嵌或 開放原始碼 模型,例如 SBERT,並擷取也編碼為向量之查詢的檔。
搜尋不同的內容類型(多模式)。 使用多模式內嵌來編碼影像和文字(例如,在 Azure OpenAI 中使用 OpenAI CLIP 或 GPT-4 Turbo 搭配視覺 ),並查詢由這兩種內容類型的向量組成的內嵌空間。
混合式搜尋。 在 Azure AI 搜尋中,混合式搜尋是指相同要求中的向量和關鍵詞查詢執行。 向量支援是在欄位層級實作,索引包含向量欄位和可搜尋的文字欄位。 查詢會以平行方式執行,結果會合併成單一回應。 或者,使用支援 Bing 的相同語言模型,新增 語意排名 以取得更精確的 L2 重新調整。
多語系搜尋。 透過內嵌以多種語言定型的模型和聊天模型,即可為使用者提供自己的語言搜尋體驗。 如果您需要對翻譯進行更多控制,您可以在混合式搜尋案例中,使用 Azure AI 搜尋服務針對非Vector 內容支援的多語言功能 進行補充。
篩選的向量搜尋。 查詢要求可以包含向量查詢和篩選條件運算式。 篩選會套用至文字和數值字段,而且適用於元數據篩選,並根據篩選準則包含或排除搜尋結果。 雖然向量欄位本身無法篩選,但您可以設定可篩選的文字或數值欄位。 搜尋引擎可以在執行向量查詢之前或之後處理篩選。
向量資料庫。 Azure AI 搜尋服務會儲存您查詢的數據。 每當您需要長期記憶體或 知識庫,或是擷取擴增產生 (RAG) 架構的地面數據,或是使用向量的任何應用程式時,請使用它作為純向量存放區。
向量搜尋在 Azure AI 搜尋中的運作方式
向量支援包括從搜尋索引進行向量內嵌的索引編製、儲存和查詢。
下圖顯示向量搜尋的索引編製和查詢工作流程。
在索引編製端,Azure AI 搜尋會採用向量內嵌,並使用 最接近的鄰近演算法 ,將類似的向量放在索引中。 在內部,它會為每個向量字段建立向量索引。
如何從來源內容內嵌至 Azure AI 搜尋服務,取決於您的方法,以及您是否可以使用預覽功能。 您可以使用 OpenAI、Azure OpenAI 和任意數目提供者的模型,向量化或產生內嵌作為初步步驟,包括模型所支援的文字、影像和其他內容類型。 然後,您可以將先前的內容推送至 向量存放區中的向量字段 。 這是一般可用的方法。 如果您可以使用預覽功能,Azure AI 搜尋會在 索引器管線中提供整合式數據區塊化和向量化 。 您仍然會提供資源(端點和 Azure OpenAI 的連線資訊),但 Azure AI 搜尋會進行所有呼叫並處理轉換。
在查詢端的用戶端應用程式中,您通常會透過提示工作流程從使用者收集查詢輸入。 接著,您可以新增可將輸入轉換成向量的編碼步驟,然後將向量查詢傳送至 Azure AI 搜尋上的索引以取得相似度搜尋。 如同編制索引,您可以部署 整合向量化(預覽) ,將問題轉換成向量。 針對任一種方法,Azure AI 搜尋會在結果中傳回具有 k
所要求近鄰 (kNN) 的檔。
Azure AI 搜尋支援 以平行方式執行向量和關鍵詞搜尋的混合式案例 ,並傳回一個統一的結果集,通常只提供比僅向量或關鍵詞搜尋更好的結果集。 針對混合式、向量和非向量內容,會針對並存執行的查詢,內嵌到相同的索引中。
可用性和價格
向量搜尋是所有區域中所有 Azure AI 搜尋層的一部分,不需額外費用。
在 2024 年 4 月 3 日之後建立的較新服務支援 較高的向量索引配額。
向量搜尋可在下列專案中取得:
- 使用 Azure 入口網站匯入和向量化數據精靈
- Azure REST API 版本 2023-11-01
- 適用於 .NET、 Python 和 JavaScript 的 Azure SDK
- 其他 Azure 供應專案,例如 Azure AI Studio 和 Azure OpenAI Studio。
注意
某些在 2019 年 1 月 1 日之前建立的較舊搜尋服務會部署在不支援向量工作負載的基礎結構上。 如果您嘗試將向量字段新增至架構並收到錯誤,則這是過時服務的結果。 在此情況下,您必須建立新的搜尋服務,以試用向量功能。
Azure 整合和相關服務
Azure AI 搜尋服務已跨 Azure AI 平臺深入整合。 下表列出數個在向量工作負載中很有用的專案。
Products | 整合 |
---|---|
Azure OpenAI 工作室 | 在與數據遊樂場的聊天中, 新增您自己的數據 會使用 Azure AI 搜尋來建立數據和對話式搜尋。 這是與您的數據聊天的最簡單且最快的方法。 |
Azure OpenAI | Azure OpenAI 提供內嵌模型和聊天模型。 示範和範例以 text-embedding-ada-002 為目標。 我們建議使用 Azure OpenAI 來產生文字的內嵌。 |
Azure AI 服務 | 影像擷取向量化影像 API(預覽) 支援影像內容的向量化。 我們建議此 API 來產生影像的內嵌。 |
Azure 數據平臺:Azure Blob 儲存體、Azure Cosmos DB | 您可以使用 索引器 來自動擷取數據,然後使用 整合向量化 (預覽) 來產生內嵌。 Azure AI 搜尋可自動為兩個數據源的向量數據編製索引:Azure Blob 索引器和適用於 NoSQL 的 Azure Cosmos DB 索引器。 如需詳細資訊,請參閱 將向量字段新增至搜尋索引。。 |
它也通常用於開放原始碼架構,例如 LangChain。
向量搜尋概念
如果您不熟悉向量,本節將說明一些核心概念。
關於向量搜尋
向量搜尋是資訊擷取的方法,其中文件和查詢會表示為向量,而不是純文本。 在向量搜尋中,機器學習模型會產生來源輸入的向量表示法,可以是文字、影像或其他內容。 具有內容的數學表示法可提供搜尋案例的常見基礎。 如果一切都是向量,則查詢可以在向量空間中找到相符專案,即使相關聯的原始內容與查詢不同媒體或語言也一樣。
為何使用向量搜尋
當可搜尋的內容以向量表示時,查詢可以在類似內容中找到接近的相符專案。 用於向量產生的內嵌模型知道哪些單字和概念類似,並將產生的向量放在內嵌空間中。 例如,有關「雲端」和「霧」的向量化源檔更有可能出現在有關「霧」的查詢中,因為它們語意相似,即使它們不是語彙相符。
內嵌和向量化
內 嵌是特定類型的向量表示內容或查詢,由機器學習模型所建立,可擷取文字的語意或影像等其他內容的表示法。 自然語言機器學習模型會定型大量數據,以識別單字之間的模式和關聯性。 在訓練期間,他們會瞭解如何在稱為 編碼器的中繼步驟中,將任何輸入表示為實數的向量。 定型完成後,可以修改這些語言模型,讓中繼向量表示成為模型的輸出。 產生的內嵌是高維度向量,其中具有類似意義的文字在向量空間中較近,如瞭解內嵌 (Azure OpenAI) 中所述。
擷取相關信息的向量搜尋有效性取決於內嵌模型在將文件和查詢的意義擷取到產生的向量中的有效性。 最佳模型會針對它們所代表的數據類型進行定型。 您可以評估現有的模型,例如 Azure OpenAI 文字內嵌-ada-002、自備直接在問題空間上定型的模型,或微調一般用途模型。 Azure AI 搜尋不會對您選擇的模型施加限制,因此請為您的數據挑選最佳模型。
為了為向量搜尋建立有效的內嵌,請務必考慮輸入大小限制。 建議您先 遵循區塊化數據的 指導方針,再產生內嵌。 此最佳做法可確保內嵌能準確地擷取相關信息,並啟用更有效率的向量搜尋。
什麼是內嵌空間?
內嵌空間 是向量查詢的主體。 在搜尋索引內,內嵌空間是填入相同內嵌模型內嵌的所有向量字段。 機器學習模型會藉由將個別單字、片語或檔(用於自然語言處理)、影像或其他形式的數據對應到代表高維度空間中座標的向量組成的表示法,來建立內嵌空間。 在此內嵌空間中,類似的項目會放在一起,而不同的項目則位於更遠的地方。
例如,談論不同種類的狗的檔會聚集在內嵌空間中。 關於貓的檔會密切在一起,但遠離狗群,同時仍然在附近為動物。 雲端運算等不同概念會更遠。 實際上,這些內嵌空間是抽象的,沒有妥善定義的人類可解讀意義,但核心想法保持不變。
最接近的鄰近搜尋
在向量搜尋中,搜尋引擎會掃描內嵌空間內的向量,以識別最接近查詢向量的向量。 這項技術稱為最接近的鄰近搜尋。 近鄰有助於量化項目之間的相似度。 高度的向量相似度表示原始數據也相似。 為了加速最接近的鄰近搜尋,搜尋引擎會執行優化,或採用數據結構和數據分割,以減少搜尋空間。 每個向量搜尋演算法會以不同的方式解決最接近的鄰近問題,因為它們會針對最小延遲、最大輸送量、召回率和記憶體進行優化。 若要計算相似度,相似度計量會提供計算距離的機制。
Azure AI 搜尋服務目前支援下列演算法:
階層式導覽小型世界 (HNSW):HNSW 是針對高回收、低延遲的應用程式優化的主要 ANN 演算法,其中數據分佈未知或可能會經常變更。 它會將高維度數據點組織成階層式圖表結構,以啟用快速且可調整的相似性搜尋,同時允許在搜尋精確度和計算成本之間進行無法取捨。 因為演算法需要所有數據點都位於記憶體中,才能快速隨機存取,因此此演算法會耗用 向量索引大小 配額。
詳盡的 K 近鄰 (KNN):計算查詢向量與所有數據點之間的距離。 其會耗用大量運算,因此最適合較小的數據集。 因為演算法不需要快速隨機存取數據點,因此此演算法不會取用向量索引大小配額。 不過,此演算法會提供最接近鄰的全域集合。
在索引定義中,您可以指定一或多個演算法,然後針對每個向量字段指定要使用的演算法:
建立向量存放區 ,以在索引和欄位上指定演算法。
如需詳盡的 KNN,請使用 以 REST API 版本為目標的 2023-11-01、 2023-10-01-Preview 或 Azure SDK Beta 連結庫。
在建立索引期間用來初始化索引的演算法參數是不可變的,而且無法在建立索引之後變更。 不過,可以修改影響查詢時間特性的參數(efSearch
)。
此外,指定 HNSW 演算法的欄位也支援使用查詢要求參數"exhaustive": true
的詳盡 KNN 搜尋。 然而,相反的不是真的。 如果欄位已針對 exhaustiveKnn
編制索引,您就無法在查詢中使用 HNSW,因為啟用有效率搜尋的額外數據結構不存在。
近似近鄰
近似近鄰搜尋 (ANN) 是一種演算法類別,用於在向量空間中尋找相符專案。 這種演算法類別採用不同的數據結構或數據分割方法,大幅減少搜尋空間,以加速查詢處理。
ANN 演算法會犧牲一些精確度,但提供可調整且更快速的近似近鄰擷取,因此非常適合用來平衡精確度與新式資訊擷取應用程式的效率。 您可以調整演算法的參數,以微調搜尋應用程式的重新叫用、延遲、記憶體和磁碟使用量需求。
Azure AI 搜尋會針對其 ANN 演算法使用 HNSW。