Azure AI 検索内のクエリにセマンティック ランクを追加する
検索ドキュメントに文字列フィールドが含まれ、検索ドキュメントのベクトル クエリにテキスト表現が含まれている場合、セマンティック ランク付けを、テキスト クエリ、ハイブリッド クエリ、ベクトル クエリに適用できます。
この記事では、クエリでセマンティック ランカーを呼び出す方法について説明します。
前提条件
セマンティック ランカーが有効になっている Basic レベル以上の検索サービス。
セマンティック構成 とリッチ テキスト コンテンツを使用する既存の検索インデックス。
機能の概要情報が必要な場合は、セマンティック ランク付けを確認してください。
Note
キャプションと回答は、検索ドキュメント内のテキストから逐語的に抽出されます。 セマンティック サブシステムは、コンピューター読み取りの理解を使用してキャプションまたは回答の特性を持つコンテンツを認識しますが、新しい文やフレーズは作成されません。 このため、セマンティック ランク付けには、説明または定義を含むコンテンツが最も適しています。 生成された応答とチャット スタイルの対話を行う場合は、取得拡張生成 (RAG) に関する記事を参照してください。
クライアントを選択する
次のツールおよび SDK のいずれかを使用して、セマンティック ランク付けを使用するクエリを作成できます。
- インデックス デザイナーを使用してセマンティック構成を追加する Azure portal。
- REST クライアントを使用した Visual Studio Code
- Azure SDK for .NET
- Azure SDK for Python
- Azure SDK for Java
- Azure SDK for JavaScript
関連性スコアリングをバイパスする機能を回避する
いくつかのクエリ機能は関連性スコアリングをバイパスするため、セマンティック ランク付けと互換性がありません。 使用するクエリ ロジックに以下の機能が含まれている場合、結果を セマンティック ランク付けすることはできません。
クエリに
search=*
を使用した場合や、純粋なフィルターのみクエリのように検索文字列が空の場合に機能しないのは、セマンティック関連性を測定する対象がないために、検索スコアがゼロになるからです。 クエリは、処理中に評価できる用語やフレーズを提供しなければなりません。特定のフィールドで並べ替え (orderBy 句) を実行すると、検索スコアとセマンティック スコアがオーバーライドされます。 セマンティック スコアがランク付けを提供することになっているため、順序付けされた結果にセマンティック ランク付けを適用すると、orderby 句を追加すると HTTP 400 エラーが発生します。
クエリを設定する
この手順では、クエリ要求にパラメーターを追加します。 正常に実行するには、クエリはフルテキスト検索 (search
パラメーターを使用して文字列を渡す) またはベクトル クエリである必要があり、インデックスにはリッチ セマンティック コンテンツとセマンティック構成を含むテキスト フィールドが含まれている必要があります。
検索エクスプローラー には、セマンティックの順位付けのオプションが含まれています。
Azure portal にサインインします。
検索インデックスを開き、[検索エクスプローラー] を選択します。
[クエリ オプション] を選択します。 セマンティック構成を既に定義している場合は、既定で選択されています。 定義していない場合は、インデックスのセマンティック構成を作成します。
クエリ (例: "historic hotel with good food") を入力し、[検索] を選択します。
または、[JSON ビュー] を選択し、クエリ エディターに定義を貼り付けます。
ビューに貼り付けることができるいくつかの 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"
},
...
]
予測されるワークロード
セマンティック ランク付けでは、検索サービスがレプリカあたり最大 10 個の同時クエリをサポートすることを想定しておく必要があります。
量が多すぎる場合、サービスによってセマンティック ランク付け要求が調整されます。 エラー メッセージに次の語句が含まれる場合、サービスがセマンティック ランク付けのキャパシティに達していることを示します。
Error in search query: Operation returned an invalid status 'Partial Content'`
@search.semanticPartialResponseReason`
CapacityOverloaded
これに近い、またはそれ以上のレベルの一貫したスループット要件が予想される場合は、私たちが皆さまのワークロードに合わせてプロビジョニングできるように、サポート チケットを提出してください。
次のステップ
セマンティックの順位付けは、キーワード検索とベクトル検索を 1 つの要求と統合された応答に結合するハイブリッド クエリで使用できます。