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

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

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

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

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

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

ハイブリッド検索では、BM25 や HNSW などの異なるランク付け機能を利用し、フルテキストおよびベクトル クエリの両方の結果を組み合わせます。 逆ランク 融合 (RRF) アルゴリズムによって結果がマージされます。 クエリ応答は、RRF を使用して各クエリから最も関連性の高い一致を選択する結果セットを 1 つだけ提供します。

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

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

典型的なハイブリッド クエリは、次のようになります (簡潔にするためベクトルを省略しています)。

POST https://{{searchServiceName}}.search.windows.net/indexes/hotels-vector-quickstart/docs/search?api-version=2023-11-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 は地理空間の検索、またはその他の包含条件や除外条件 (駐車場を含めるかどうかなど) を指定できます。 この例における地理空間のクエリでは、ワシントン D.C. から半径 300 キロ以内にあるホテルを検出します。
  • facets はハイブリッド クエリで返された結果のファセット バケットの計算に使用できます。
  • queryType=semantic はセマンティック ランク付けを呼び出します。機械読解を適用し、より関連性の高い検索結果を表示させます。

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

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

関連項目

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