矢量搜索是一種信息檢索方法,它使用內(nèi)容的數(shù)字表示形式來執(zhí)行搜索方案。 由于內(nèi)容是數(shù)字而不是純文本,因此搜索引擎會匹配與查詢最相似的矢量,而不需要匹配確切的字詞。本文簡要介紹了 Azure AI 搜索中的矢量支持。 其中還解釋了與其他 Azure 服務的集成,以及與矢量搜索開發(fā)相關(guān)的術(shù)語和概念
關(guān)注TechLead,分享AI全維度知識。作者擁有10+年互聯(lián)網(wǎng)服務架構(gòu)、AI產(chǎn)品研發(fā)經(jīng)驗、團隊管理經(jīng)驗,同濟本復旦碩,復旦機器人智能實驗室成員,阿里云認證的資深架構(gòu)師,項目管理專業(yè)人士,上億營收AI產(chǎn)品研發(fā)負責人。文章來源地址http://www.zghlxwxcb.cn/news/detail-754261.html
Azure AI 搜索中的矢量搜索是什么?
矢量搜索是一項新功能,用于從搜索索引為矢量嵌入編制索引,以及存儲和檢索矢量嵌入。 可以使用它來助力相似性搜索、多模式搜索、推薦引擎或?qū)崿F(xiàn)檢索增強生成 (RAG) 體系結(jié)構(gòu)的應用程序。
下圖顯示了矢量搜索的索引編制和查詢工作流。
在索引編制端,可以準備包含嵌入的源文檔。 盡管集成矢量化目前是作為公共預覽版提供的,但正式版 Azure AI 搜索不會生成嵌入。 如果你需要遵守非預覽版功能策略,則你的解決方案應包含對 Azure OpenAI 或其他模型的調(diào)用,這些模型可以將圖像、音頻、文本和其他內(nèi)容轉(zhuǎn)換為矢量表示形式。 將_矢量字段_添加到 Azure AI 搜索上的索引定義中。 使用包含矢量的文檔有效負載加載索引。 索引現(xiàn)在可供查詢。
在查詢端,可以在客戶端應用程序中收集查詢輸入。 添加一個用于將輸入轉(zhuǎn)換為矢量的步驟,然后將矢量查詢發(fā)送到 Azure AI 搜索上的索引以進行相似性搜索。 Azure AI 搜索在結(jié)果中返回包含所請求的 k
個最近鄰域 (kNN) 的文檔。
可以將矢量數(shù)據(jù)與字母數(shù)字內(nèi)容一起作為文檔中的字段編制索引。 矢量查詢可以單獨發(fā)出,也可以與篩選器和其他查詢類型(包括同一搜索請求中的字詞查詢(混合搜索)和語義排名)結(jié)合發(fā)出。
可用性和定價
矢量搜索作為所有區(qū)域中所有 Azure AI 搜索層級的一部分提供,不收取額外的費用。
備注
在 2019 年 1 月 1 日之前創(chuàng)建的一些較舊搜索服務部署在不支持矢量工作負載的基礎結(jié)構(gòu)上。 如果你在嘗試將矢量字段添加到架構(gòu)時收到錯誤,則原因是服務已過時。 在這種情況下,必須創(chuàng)建新的搜索服務來試用矢量功能。
矢量搜索支持哪些方案?
矢量搜索適合的方案包括:
-
對文本進行矢量搜索。 使用嵌入模型(例如 OpenAI 嵌入)或開源模型(例如 SBERT)對文本進行編碼,并使用同樣編碼為矢量的查詢檢索文檔。
-
跨不同數(shù)據(jù)類型進行矢量搜索(多模式)。 對圖像、文本、音頻和視頻甚至它們的混合形式進行編碼(例如,使用 CLIP 等模型),并對它們執(zhí)行相似性搜索。
-
多語言搜索。 使用多語言嵌入模型在單個矢量空間中以多種語言表示文檔,以查找文檔,無論它們采用哪種語言。
-
混合搜索。 矢量搜索是在字段級別實現(xiàn)的,這意味著,你可以生成包含矢量字段和可搜索文本字段的查詢。 查詢將并行執(zhí)行,結(jié)果將合并為單個響應。 (可選)添加[語義排名],以使用為必應提供支持的相同語言模型進行 L2 重新排名,從而獲得更高的準確度。
-
篩選的矢量搜索。 查詢請求可以包含矢量查詢和[篩選表達式]。 篩選器適用于文本和數(shù)字字段,可用于元數(shù)據(jù)篩選,并且在根據(jù)篩選條件包含或排除搜索文檔時非常有用。 盡管矢量字段本身不可篩選,但你可以設置可篩選的文本或數(shù)字字段。 搜索引擎可以在執(zhí)行矢量查詢之前或之后處理篩選器。
-
矢量數(shù)據(jù)庫。 使用 Azure AI 搜索作為矢量存儲來充當大型語言模型 (LLM) 或其他應用程序的長期內(nèi)存或外部知識庫。 例如,對于檢索增強生成 (RAG) 應用程序,可以將 Azure AI 搜索用作 [Azure 機器學習提示流中的_矢量索引_]。
可以使用其他 Azure 服務來提供嵌入和數(shù)據(jù)存儲。
-
Azure OpenAI 提供嵌入模型。 演示和示例針對 [text-embedding-ada-002] 和其他模型。 我們建議使用 Azure OpenAI 來生成文本嵌入。
-
[圖像檢索矢量化圖像 API(預覽版)]支持圖像內(nèi)容的矢量化。 我們建議使用此 API 來生成圖像嵌入。
-
Azure AI 搜索可以自動為來自兩個數(shù)據(jù)源的矢量數(shù)據(jù)編制索引:[Azure Blob 索引器]和 [Azure Cosmos DB for NoSQL 索引器]。
-
LangChain 是用于開發(fā)由語言模型提供支持的應用程序的框架。 使用 Azure AI 搜索矢量存儲集成可以簡化使用 LLM 的、將 Azure AI 搜索用作矢量數(shù)據(jù)存儲的應用程序的創(chuàng)建。
-
語義內(nèi)核是一個輕型 SDK,可用于將 AI 大型語言模型 (LLM) 與傳統(tǒng)編程語言集成。 它很適合用于在將輸入發(fā)送到嵌入模型的較大工作流中對大型文檔進行分塊。
矢量搜索概念
如果你不熟悉矢量,本部分將解釋一些核心概念。
關(guān)于矢量搜索
矢量搜索是一種信息檢索方法,其中的文檔和查詢表示為矢量而不是純文本。 在矢量搜索中,機器學習模型生成源輸入(可以是文本、圖像、音頻或視頻內(nèi)容)的矢量表示形式。 使用內(nèi)容的數(shù)學表示形式可為搜索方案提供共同的基礎。 如果所有內(nèi)容都是矢量,則查詢可以在矢量空間中查找匹配項,即使關(guān)聯(lián)的原始內(nèi)容與查詢位于不同的媒體中或采用不同的語言。
為何使用矢量搜索
矢量可以使用機器學習模型來捕獲上下文中單詞和短語的含義,而不是僅僅依賴于詞法分析和單個查詢字詞的匹配,因而克服了傳統(tǒng)的基于關(guān)鍵字的搜索的局限性。 通過捕獲查詢的意圖,即使文檔中不存在確切的字詞,矢量搜索也可以返回符合用戶需求的更相關(guān)結(jié)果。
此外,矢量搜索可應用于不同類型的內(nèi)容,例如圖像和視頻,而不僅僅是文本。 這使得新的搜索體驗成為可能,例如多語言應用程序中的多模式搜索或跨語言搜索。
嵌入和矢量化
_嵌入_是內(nèi)容或查詢的一種特定矢量表示形式,它們由捕獲文本語義或其他內(nèi)容(例如圖像)的表示形式的機器學習模型創(chuàng)建。 自然語言機器學習模型已基于大量的數(shù)據(jù)進行訓練,可以識別單詞之間的模式和關(guān)系。 在訓練過程中,他們會試著在一個稱為_編碼器_的中間步驟中將任何輸入表示為實數(shù)矢量。 訓練完成后,可以修改這些語言模型,使中間矢量表示形式成為模型的輸出。 生成的嵌入是高維矢量,其中具有相似含義的單詞在矢量空間中距離更近,如了解嵌入 (Azure OpenAI)中所述。
矢量搜索在檢索相關(guān)信息方面的有效性取決于嵌入模型將文檔和查詢的含義提取到結(jié)果矢量中的有效性。 最佳模型已基于其所代表的數(shù)據(jù)類型進行了全面的訓練。 你可以評估現(xiàn)有模型(例如 Azure OpenAI text-embedding-ada-002),引入自己的、已直接在問題空間中訓練的模型,或者微調(diào)通用模型。 Azure AI 搜索不會對你選擇的模型施加限制,因此請選擇最適合你的數(shù)據(jù)的模型。
若要為矢量搜索創(chuàng)建有效的嵌入,必須考慮到輸入大小限制。 我們建議在生成嵌入之前按照數(shù)據(jù)分塊準則進行操作。 這種最佳做法可確保嵌入準確捕獲相關(guān)信息并實現(xiàn)更高效的矢量搜索。
什么是嵌入空間?
_嵌入空間_是矢量查詢的語料庫。 在搜索索引中,它是填充了來自同一嵌入模型的嵌入的所有矢量字段。 機器學習模型通過將各個單詞、短語或文檔(用于自然語言處理)、圖像或其他形式的數(shù)據(jù)映射到由實數(shù)(表示高維空間中的坐標)矢量組成的表示形式,來創(chuàng)建嵌入空間。 在此嵌入空間中,相似的項位置相互靠近,而不相似的項位置相距較遠。
例如,談論不同種類的狗的文檔將在嵌入空間中緊密聚類到一起。 有關(guān)貓的文檔也會相互接近,但與狗的聚類相距較遠,不過它們?nèi)詫儆趧游锏泥徲颉?云計算等不同的概念則與此有很大的差異。 在實踐中,這些嵌入空間是抽象的,沒有明確定義的、人類可解釋的含義,但核心思想保持不變。
最近鄰域搜索
在矢量搜索中,搜索引擎將搜索嵌入空間中的矢量,以識別那些接近查詢矢量的矢量。 此技術(shù)稱為_最近鄰域搜索_。 最近鄰域有助于量化項之間的相似性。 矢量高度相似性表明原始數(shù)據(jù)也相似。 為了幫助實現(xiàn)快速的最近鄰域搜索,搜索引擎將執(zhí)行優(yōu)化或采用數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)分區(qū)來減少搜索空間。 每種矢量搜索算法都會提供不同的方法來解決此問題,并權(quán)衡不同的特征,例如延遲、吞吐量、召回率和內(nèi)存。 為了計算相似性,相似性指標提供了用于計算此距離的機制。
Azure AI 搜索目前支持以下算法:
-
分層可導航小世界 (HNSW):HNSW 是一種領(lǐng)先的 ANN 算法,它已針對數(shù)據(jù)分布未知或可能頻繁變化的高召回率、低延遲應用程序進行優(yōu)化。 它將高維數(shù)據(jù)點組織成分層圖形結(jié)構(gòu),從而實現(xiàn)快速且可縮放的相似性搜索,同時允許在搜索準確度和計算成本之間進行可優(yōu)化的權(quán)衡。 由于該算法要求所有數(shù)據(jù)點都駐留在內(nèi)存中以便能夠快速隨機訪問,因此它會消耗[矢量索引大小]配額。
-
窮舉 K 最近鄰域(KNN):計算查詢矢量與所有數(shù)據(jù)點之間的距離。 這是一種計算密集型算法,因此最適合較小的數(shù)據(jù)集。 由于該算法不要求快速隨機訪問數(shù)據(jù)點,因此不消耗矢量索引大小配額。 但是,該算法將提供全局最近鄰域集。
在索引定義中,可以指定一種或多種算法,然后為每個矢量字段指定要使用的算法:
-
[創(chuàng)建矢量索引],以指定索引和字段中的算法。
-
對于窮舉 KNN,請使用面向任一 REST API 版本的 [2023-11-01]、[2023-10-01-Preview]或 Azure SDK Beta 版庫。
在索引創(chuàng)建過程中用于初始化索引的算法參數(shù)是不可變的,并且在索引生成后無法更改。 但是,可以修改影響查詢時特征 (efSearch
) 的參數(shù)。
此外,指定 HNSW 算法的字段還支持使用[查詢請求]參數(shù) "exhaustive": true
執(zhí)行窮舉 KNN 搜索。 但是反過來則不適用。 如果針對 exhaustiveKnn
將某個字段編制索引,則無法在查詢中使用 HNSW,因為實現(xiàn)高效搜索的其他數(shù)據(jù)結(jié)構(gòu)不存在。
近似最近鄰域
近似最近鄰域搜索 (ANN) 是一種用于在矢量空間中查找匹配項的算法。 此類算法采用不同的數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)分區(qū)方法來顯著減少搜索空間,以加速查詢處理。
ANN 算法犧牲了一些準確度,但提供了可縮放且更快的近似最近鄰域檢索,這使得它們非常適合用于在現(xiàn)代信息檢索應用程序中平衡準確度和效率。 你可以調(diào)整算法的參數(shù),以微調(diào)搜索應用程序的召回率、延遲、內(nèi)存和磁盤占用空間要求。
Azure AI 搜索將 HNSW 用于其 ANN 算法。文章來源:http://www.zghlxwxcb.cn/news/detail-754261.html
關(guān)注TechLead,分享AI全維度知識。作者擁有10+年互聯(lián)網(wǎng)服務架構(gòu)、AI產(chǎn)品研發(fā)經(jīng)驗、團隊管理經(jīng)驗,同濟本復旦碩,復旦機器人智能實驗室成員,阿里云認證的資深架構(gòu)師,項目管理專業(yè)人士,上億營收AI產(chǎn)品研發(fā)負責人。
到了這里,關(guān)于Azure Machine Learning - Azure AI 搜索中的矢量搜索的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!