在 Azure AI 搜尋中使用向量和全文搜索的混合式搜尋

混合式搜尋是全文檢索和向量查詢的組合,可針對包含可搜尋純文本內容和產生的內嵌的搜尋索引執行。 針對查詢目的,混合式搜尋為:

  • 包含 searchvectors 查詢參數的單一查詢要求
  • 平行執行
  • 使用查詢回應中的合併結果,使用倒數排名融合 (RRF) 進行評分

本文說明混合式搜尋的概念、優點和限制。 觀看這段內嵌影片,以取得混合式擷取如何促成高品質聊天樣式和 Copilot 應用程式的簡短示範。

混合式搜尋如何運作?

在 Azure AI 搜尋服務中,包含內嵌的向量欄位可以與文字和數值欄位並存,讓您制定平行執行之混合式查詢。 混合式查詢可以利用現有功能,如篩選、多面向、排序、評分設定檔,以及單一搜尋要求中的語意排名

混合式搜尋結合了全文檢索和向量查詢的結果,其使用不同的排名函式,例如 BM25、HNSW 和 EKNN。 倒數排名融合 (RRF) 演算法會合併結果。 查詢回應只提供一個結果集,使用 RRF 來排名統一結果。

混合式查詢的結構

混合式搜尋的述詞是包含各種 數據類型欄位的搜尋索引,包括純文本和數位、如果您想要地理空間搜尋,以及文字區塊數學表示的向量。 除了純文字客戶端互動,例如自動完成和建議,您可以使用 Azure AI 搜尋服務中幾乎所有的查詢功能與向量查詢。

代表性的混合式查詢可能如下所示(請注意,向量查詢具有簡潔的佔位元值):

POST https://{{searchServiceName}}.search.windows.net/indexes/hotels-vector-quickstart/docs/search?api-version=2024-07-01
  content-type: application/JSON
{
    "count": true,
    "search": "historic hotel walk to restaurants and shopping",
    "select": "HotelId, HotelName, Category, Description, Address/City, Address/StateProvince",
    "filter": "geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 300",
    "facets": [ "Address/StateProvince"], 
    "vectors": [
        {
            "value": [ <array of embeddings> ]
            "k": 7,
            "fields": "DescriptionVector"
        },
        {
            "value": [ <array of embeddings> ]
            "k": 7,
            "fields": "Description_frVector"
        }
    ],
    "queryType": "semantic",
    "queryLanguage": "en-us",
    "semanticConfiguration": "my-semantic-config"
}

重點包括:

  • search 指定單一全文搜索查詢。
  • vectors 針對向量查詢,可以是多個,以多個向量欄位為目標。 如果內嵌空間包含多語種內容,向量查詢就可以找到相符專案,而不需要語言分析器或翻譯。
  • select 會指定要傳回結果中的欄位,這應該是人類可讀取的文字欄位。
  • filters 可指定地理空間搜尋或其他包含和排除準則,例如是否包含停車位。 此範例中的地理空間查詢會在華盛頓特區的 300 公里半徑內尋找旅館。
  • facets 可用來計算從混合式查詢傳回之結果的 Facet 貯體。
  • queryType=semantic 會叫用語意排名工具,套用機器閱讀理解,以呈現更相關的搜尋結果。 語意排名是選擇性的。 如果您未使用該功能,請移除混合式查詢的最後三行。

篩選條件和 Facet 會將索引內的資料結構,與用於全文搜索的反向索引和用於向量搜尋的向量索引加以區別。 因此,當篩選和多面向作業執行時,搜尋引擎可以將作業結果套用至回應中的混合式搜尋結果。

請注意查詢中沒有 orderby。 明確的排列順序會覆寫相關性排名結果,因此如果您想要相似度和 BM25 相關性,請省略查詢中的排序。

上述查詢的回應可能如下所示:

{
    "@odata.count": 3,
    "@search.facets": {
        "Address/StateProvince": [
            {
                "count": 1,
                "value": "NY"
            },
            {
                "count": 1,
                "value": "VA"
            }
        ]
    },
    "value": [
        {
            "@search.score": 0.03333333507180214,
            "@search.rerankerScore": 2.5229012966156006,
            "HotelId": "49",
            "HotelName": "Swirling Currents Hotel",
            "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
            "Category": "Luxury",
            "Address": {
                "City": "Arlington",
                "StateProvince": "VA"
            }
        },
        {
            "@search.score": 0.032522473484277725,
            "@search.rerankerScore": 2.111117362976074,
            "HotelId": "48",
            "HotelName": "Nordick's Valley Motel",
            "Description": "Only 90 miles (about 2 hours) from the nation's capital and nearby most everything the historic valley has to offer.  Hiking? Wine Tasting? Exploring the caverns?  It's all nearby and we have specially priced packages to help make our B&B your home base for fun while visiting the valley.",
            "Category": "Boutique",
            "Address": {
                "City": "Washington D.C.",
                "StateProvince": null
            }
        }
    ]
}

混合式搜尋結合了向量搜尋和關鍵詞搜尋的優點。 向量搜尋的優點,是尋找在概念上與搜尋查詢相似的資訊,即使反向索引中沒有關鍵詞相符結果也一樣。 關鍵詞或全文搜索的優點是精確度,能夠套用選擇性語意排名,以改善初始結果的品質。 某些案例,例如查詢產品名稱、高度特殊化術語、日期和人員名稱,可透過關鍵詞搜尋執行得更好,因為它可以識別完全相符的結果。

對真實世界和基準資料集的基準測試指出,具有語意排名工具的混合式擷取在搜尋相關性方面具有顯著優勢。

下列影片說明混合式擷取如何為您提供最佳的基礎資料,以產生實用的 AI 回應。

另請參閱

使用混合式擷取和排名來超越向量搜尋 (技術部落格)