次の方法で共有


Azure AI Search でベクトルやフルテキストを使用したハイブリッド検索

ハイブリッド検索は、フル テキストとベクトル クエリを組み合わせたものです。検索可能なプレーンテキスト コンテンツと生成された埋め込みの両方を含む検索インデックスに対してクエリを実行します。 クエリの目的として、ハイブリッド検索とは次のようなものです。

  • search および vectors クエリ パラメータ両方を含む単一のクエリ要求です。
  • 並行して実行されます。
  • クエリ応答のマージされた結果の場合、Reciprocal Rank Fusion (RRF) を使用してスコアリングされます。

この記事では、ハイブリッド検索のコンセプト、利点、制限について説明します。 この 埋め込みビデオ で、ハイブリッド検索が高品質のチャット スタイル アプリやコパイロット アプリにどのように貢献するかの説明と短いデモをご覧ください。

ハイブリッド検索が機能するしくみ

Azure AI 検索では、埋め込みを含むベクトル フィールドをテキストおよび数値のフィールドと共存させることができるため、並列で実行されるハイブリッド クエリを作成できます。 ハイブリッド クエリでは、単一の検索要求で、フィルター処理やファセット処理、並べ替え、スコアリング プロファイル、セマンティック ランク付けといった既存の機能を利用できます。

ハイブリッド検索では、BM25、HNSW、EKNN などの異なる順位付け関数を利用し、フル テキストおよびベクトル クエリの両方の結果を組み合わせます。 Reciprocal Rank Fusion (RRF) アルゴリズムによって結果がマージされます。 クエリの応答では、結果セットが 1 つのみ返され、統合された結果のランク付けには RRF が使用されます。

ハイブリッド クエリの構造

ハイブリッド検索では、検索インデックスにさまざまなデータ型のフィールドが含まれることを前提としています。これには、プレーンテキストや数字、地理空間の検索が必要な場合の地理座標、テキスト チャンクの数学的表現に使用するベクトルなどが該当します。 ベクトル クエリにより、オートコンプリートや候補など、クライアント側の純粋なテキストによるインタラクションを除き、Azure AI Search のほぼすべてのクエリ機能を使用できます。

典型的なハイブリッド クエリは、次のようになります (簡潔にするためベクトル クエリにはプレースホルダーの値を使用しています)。

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 は 1 件のフル テキスト検索クエリを指定します。
  • vectors はベクトル クエリです。複数設定して複数のベクトル フィールドを対象とすることができます。 埋め込みスペースに多言語コンテンツが含まれる場合、言語アナライザーや翻訳を介さずに、ベクトル クエリで一致を検出できます。
  • select は結果で返すフィールドを指定します。人間が判読できるテキスト フィールドにする必要があります。
  • filters は地理空間の検索、またはその他の包含条件や除外条件 (駐車場を含めるかどうかなど) を指定できます。 この例における地理空間のクエリでは、ワシントン D.C. から半径 300 キロ以内にあるホテルを検出します。
  • facets はハイブリッド クエリで返された結果のファセット バケットの計算に使用できます。
  • queryType=semantic はセマンティック ランカーを呼び出し、機械読解を適用して、より関連性の高い検索結果を表示します。 セマンティックのランク付けは省略可能です。 その機能を使用していない場合は、このハイブリッド クエリの最後の 3 行を削除してください。

フィルターとファセットは、フルテキスト検索に使用した逆インデックスおよびベクトル検索に使用したベクトル インデックスとは異なるインデックス内のデータ構造を対象とします。 そのため、フィルターとファセット処理が実行されると、検索エンジンの応答では、ハイブリッド検索結果に操作上の結果が適用されます。

このクエリには 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": "Old Carrabelle 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 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 応答を生成するための最適なグラウンディング データが、ハイブリッド検索でどのように提供されるかについて説明します。

関連項目

ハイブリッド検索とランク付けでベクトル検索の性能を上回る (技術ブログ)