Azure AI Search でセマンティック クエリを作成する

この記事では、結果セットに対してセマンティック ランク付けを呼び出し、意味的に最も関連性の高い結果をスタックの最上位に昇格させる方法について説明します。 また、最も関連性の高い用語と語句を強調表示したセマンティック キャプションと、セマンティック回答を取得することもできます。

前提条件

Note

キャプションと回答は、検索ドキュメント内のテキストから逐語的に抽出されます。 セマンティック サブシステムは、コンピューター読み取りの理解を使用してキャプションまたは回答の特性を持つコンテンツを認識しますが、新しい文やフレーズは作成されません。 このため、セマンティック ランク付けには、説明または定義を含むコンテンツが最も適しています。 生成された応答とチャット スタイルの対話を行う場合は、取得拡張生成 (RAG) に関する記事を参照してください。

クライアントを選択する

セマンティック ランク付けをサポートする検索クライアントを選択します。 次のことをお試しください。

関連性スコアリングをバイパスする機能を回避する

Azure AI Search のいくつかのクエリ機能は関連性スコアリングをバイパスするか、 セマンティック ランク付けと互換性がありません。 使用するクエリ ロジックに以下の機能が含まれている場合、結果を セマンティック ランク付けすることはできません。

  • クエリに search=* を使用した場合や、純粋なフィルターのみ文字列のように検索文字列が空の場合に機能しないのは、セマンティック関連性を測定する対象がないからです。 クエリは、処理中に評価できる用語やフレーズを提供しなければなりません。

  • 完全な Lucene 構文で構成されたクエリ (queryType=full) はセマンティック ランク付け (queryType=semantic) と互換性がありません。 セマンティック モデルは完全な Lucene 構文をサポートしていません。

  • 特定のフィールドで並べ替え (orderBy 句) を実行すると、検索スコアとセマンティック スコアがオーバーライドされます。 セマンティック スコアがランク付けを提供することになっているため、順序付けされた結果にセマンティック ランク付けを適用すると、orderby 句を追加すると HTTP 400 エラーが発生します。

クエリを設定する

この手順では、クエリ要求にパラメーターを追加します。 正常に実行するには、クエリはフルテキスト検索 (search パラメーターを使用して文字列を渡す) である必要があり、インデックスにはリッチ セマンティック コンテンツとセマンティック構成を含むテキスト フィールドが含まれている必要があります。

検索エクスプローラー には、セマンティックの順位付けのオプションが含まれています。

  1. Azure portal にサインインします。

  2. 検索インデックスを開き、[検索エクスプローラー] を選択します。

  3. [クエリ オプション] を選択します。 セマンティック構成を既に定義している場合は、既定で選択されています。 定義していない場合は、インデックスのセマンティック構成を作成します。

    Screenshot showing query options in Search explorer.

  4. クエリ (例: "historic hotel with good food") を入力し、[検索] を選択します。

  5. または、[JSON ビュー] を選択し、クエリ エディターに定義を貼り付けます。

    Screenshot showing JSON query syntax in the Azure portal.

    ビューに貼り付けることができるいくつかの JSON テキストを次に示します。

     {
         "queryType": "semantic",
         "search": "historic hotel with good food",
         "semanticConfiguration": "my-semantic-config",
         "answers": "extractive|count-3",
         "captions": "extractive|highlight-true",
         "highlightPreTag": "<strong>",
         "highlightPostTag": "</strong>",
         "select": "HotelId,HotelName,Description,Category",
         "count": true
     }
    

応答を評価する

最初の結果の上位 50 件の一致のみを意味的にランク付けすることができます。 すべてのクエリと同様に、応答は、取得可能としてマークされているすべてのフィールド、または select パラメーターに指定されているフィールドのみで構成されます。 応答には、元の関連性スコアが含まれます。また、要求の作成方法に応じて、カウントまたはバッチ結果が含まれる場合もあります。

セマンティック ランク付けでは、意味的にランク付けされた新しい関連性スコア、強調表示されたプレーンテキストでの省略可能なキャプション、省略可能な回答という追加の要素が応答に含められます。 結果にこれらの追加の要素が含まれていない場合は、クエリが正しく構成されていない可能性があります。 問題のトラブルシューティングの最初の手順として、セマンティック構成をチェックし、それがインデックス定義とクエリの両方で指定されていることを確認します。

クライアント アプリでは、特定のフィールドの内容全体ではなく、キャプションを一致の説明として含めるように、検索ページを構成することができます。 このアプローチは、検索結果ページにおいて個々のフィールドの密度が高すぎる場合に役立ちます。

上記のクエリ例に対する応答では、最上位の選択として次の一致が返されます。 "captions" プロパティがプレーンテキストと強調表示の各バージョンで設定されているため、キャプションが返されます。 この例では回答が省略されています。この特定のクエリとコーパスに対してそれを特定できなかったためです。

"@odata.count": 35,
"@search.answers": [],
"value": [
    {
        "@search.score": 1.8810667,
        "@search.rerankerScore": 1.1446577133610845,
        "@search.captions": [
            {
                "text": "Oceanside Resort. Luxury. New Luxury Hotel. Be the first to stay. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
                "highlights": "<strong>Oceanside Resort.</strong> Luxury. New Luxury Hotel. Be the first to stay.<strong> Bay</strong> views from every room, location near the pier, rooftop pool, waterfront dining & more."
            }
        ],
        "HotelName": "Oceanside Resort",
        "Description": "New Luxury Hotel. Be the first to stay. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
        "Category": "Luxury"
    },
  ...
]

次のステップ

セマンティックの順位付けは、キーワード検索とベクトル検索を 1 つの要求と統合された応答に結合するハイブリッド クエリで使用できます。