Azure AI Search でセマンティック回答を返す

セマンティック ランク付けおよびキャプションを呼び出すときに、必要に応じて、一致する上位のドキュメントからクエリに直接 "回答" するコンテンツを抽出できます。 1 つ以上の回答を応答に含めることができます。これは、アプリのユーザー エクスペリエンスを向上させるために、検索ページに表示できます。

セマンティック回答は、読み取りの理解モデルで、要求で行われたクエリに対する回答と認識された検索インデックス内の逐語的コンテンツです。 これは生成された回答ではありません。 生成 AI を使用してコンテンツから回答を構成するチャット スタイルのユーザー操作モデルのガイダンスについては、取得拡張生成 (RAG) に関する記事を参照してください。

この記事では、セマンティック回答を要求する方法、応答を分解する方法、高品質の回答を生成するために最も役立つコンテンツ特性を調べる方法について説明します。

前提条件

サービス レベルやリージョンなど、セマンティック クエリに適用されるすべての前提条件は、回答にも適用されます。

  • クエリ ロジックには、セマンティック クエリ パラメーター "queryType=semantic" に加え、"answers" パラメーターも含まれている必要があります。 この記事では、必須パラメーターについて説明します。

  • ユーザーが入力するクエリ文字列は、質問 (何を、どこで、いつ、どのように) として認識可能である必要があります。

  • インデックス内の検索ドキュメントには、回答の特性を持つテキストが含まれている必要があり、そのテキストは、セマンティック構成に示されているフィールドのいずれかに存在する必要があります。 たとえば、"what is a hash table (ハッシュ テーブルとは何か)" というクエリの場合、"A hash table is ... (ハッシュ テーブルとは...)" を含む節がセマンティック構成のどのフィールドにも含まれていない場合、回答が返される可能性は低くなります。

Note

2021-04-30-Preview から、Create Index または Update Index 要求において、セマンティック ランク付けに使用される入力フィールドの指定に対し、"semanticConfiguration" 要件が適用されるようになりました。

セマンティック回答とは

セマンティック回答は、セマンティック クエリ応答の基礎です。 検索ドキュメントからの 1 つ以上の逐語的な節で構成され、質問のようなクエリに対する回答として作成されます。 回答を返すには、回答の言語特性を持つ語句または文が検索ドキュメントに存在する必要があります。また、クエリ自体を質問として表す必要があります。

Azure AI Search は、機械読み取りの理解モデルを使用して最適な回答を認識し選択します。 このモデルでは、利用可能なコンテンツから一連の考えられる回答が生成され、十分な信頼度レベルに達すると、いずれかが回答として提案されます。

回答は、クエリ応答ペイロード内で独立した最上位オブジェクトとして返されます。これを検索結果と共に検索ページに表示するように選択できます。 構造的には、テキスト、ドキュメント キー、信頼度スコアから成る応答内の配列要素です。

"answers" の REST クエリを作成する

セマンティック回答を返すには、クエリにはセマンティックな "queryType""queryLanguage""semanticConfiguration""answers" パラメータが必要です。 これらのパラメーターを指定しても回答は保証されませんが、回答を処理するために要求にはパラメーターを含める必要があります。

{
    "search": "how do clouds form",
    "queryType": "semantic",
    "queryLanguage": "en-us",
    "semanticConfiguration": "my-semantic-config",
    "answers": "extractive|count-3",
    "captions": "extractive|highlight-true",
    "count": "true"
}
  • クエリ文字列を null にすることはできません。また、質問の形式で作成する必要があります。

  • "queryType" は "semantic" に設定する必要があります。

  • "queryLanguage" は、サポートされている言語の一覧 (REST API) の値のいずれかである必要があります。

  • "semanticConfiguration" によって、抽出モデルにトークンを提供する文字列フィールドが決まります。 回答は、キャプションを生成する同じフィールドからも生成されます。 詳細については、セマンティック構成の作成に関するページを参照してください。

  • "answers" の場合、パラメーターの構造は "answers": "extractive" です。ここで、返される回答の既定の数は 1 です。 上記の例に示すように、count を追加することで、回答の数を最大 10 個まで増やすことができます。 複数の回答が必要かどうかは、アプリのユーザー エクスペリエンスと、結果の表示方法によって異なります。

応答から "回答" をアンパックする

回答は、"@search.answers" 配列で提供されます。この配列は、クエリ応答の最初に表示されます。 配列の各回答には次のものが含まれます。

  • ドキュメント キー
  • 回答のテキストまたはコンテンツ (プレーンテキストまたは書式設定付き)
  • 信頼度スコア

回答が不確定の場合には、応答は "@search.answers": [] として表示されます。 回答の配列の後には、セマンティック クエリの標準的な応答である値の配列が続きます。

次の例は、"How do clouds form" (クラウドの形成方法) というクエリを指定した場合の回答を示します。

{
    "@search.answers": [
        {
            "key": "4123",
            "text": "Sunlight heats the land all day, warming that moist air and causing it to rise high into the   atmosphere until it cools and condenses into water droplets. Clouds generally form where air is ascending (over land in this case),   but not where it is descending (over the river).",
            "highlights": "Sunlight heats the land all day, warming that moist air and causing it to rise high into the   atmosphere until it cools and condenses into water droplets. Clouds generally form<em> where air is ascending</em> (over land in this case),   but not where it is<em> descending</em> (over the river).",
            "score": 0.94639826
        }
    ],
    "value": [
        {
            "@search.score": 0.5479723,
            "@search.rerankerScore": 1.0321671911515296,
            "@search.captions": [
                {
                    "text": "Like all clouds, it forms when the air reaches its dew point—the temperature at which an air mass is cool enough for its water vapor to condense into liquid droplets. This false-color image shows valley fog, which is common in the Pacific Northwest of North America.",
                    "highlights": "Like all<em> clouds</em>, it<em> forms</em> when the air reaches its dew point—the temperature at    which an air mass is cool enough for its water vapor to condense into liquid droplets. This false-color image shows valley<em> fog</em>, which is common in the Pacific Northwest of North America."
                }
            ],
            "title": "Earth Atmosphere",
            "content": "Fog is essentially a cloud lying on the ground. Like all clouds, it forms when the air reaches its dew point—the temperature at  \n\nwhich an air mass is cool enough for its water vapor to condense into liquid droplets.\n\nThis false-color image shows valley fog, which is common in the Pacific Northwest of North America. On clear winter nights, the \n\nground and overlying air cool off rapidly, especially at high elevations. Cold air is denser than warm air, and it sinks down into the \n\nvalleys. The moist air in the valleys gets chilled to its dew point, and fog forms. If undisturbed by winds, such fog may persist for \n\ndays. The Terra satellite captured this image of foggy valleys northeast of Vancouver in February 2010.\n\n\n",
            "locations": [
                "Pacific Northwest",
                "North America",
                "Vancouver"
            ]
        }
    ]
}

回答を含む検索結果ページを設計するときは、回答が見つからない場合の対処方法を含めてください。

@search.answers 内:

  • "key" は一致するドキュメントのキーまたは ID です。 ドキュメント キーが指定されている場合は、Lookup Document API を使用して、検索ページまたは詳細ページに含める検索ドキュメントの任意またはすべての部分を取得できます。

  • "text""highlights" はどちらも、提供するコンテンツは同じで、プレーン テキストと強調表示したものです。

    既定では、強調表示は <em> としてスタイル設定されます。これは、既存の highlightPreTag パラメーターと highlightPostTag の各パラメーターを使用してオーバーライドできます。 他の場所に記載されているように、回答の内容は、検索ドキュメントからの逐語的コンテンツです。 抽出モデルは、回答の特性を検索して適切なコンテンツを検索しますが、応答で新しい文章を作成しません。

  • "score" は、回答の強度を示す信頼度スコアです。 応答に複数の回答がある場合は、このスコアで順序が決定されます。 上位の回答と上位のキャプションは、別々の検索ドキュメントから得られることがあります。上位の回答と上位のキャプションが別々のドキュメントから派生するというものですが、一般的には、各配列内の上位の位置には同じドキュメントが表示されます。

回答の後に "value" 配列が続きます。この配列には常に、スコア、キャプション、および既定で取得可能なあらゆるフィールドが含まれています。 select パラメーターを指定した場合、"value" 配列には指定したフィールドのみが含まれます。 詳しくは、セマンティック ランカーの構成に関する記事をご覧ください。

高品質な回答を得るためのヒント

最良の結果を得るためには、次の特性を持つドキュメント コーパスのセマンティック回答を返します。

  • "semanticConfiguration" には、回答が見つかる可能性のある十分なテキストを提供するフィールドを含める必要があります。 回答が含まれる可能性が高いフィールドは、"prioritizedContentFields" のリストの先頭に配置するようにします。 回答として表示できるのは、ドキュメントからの逐語的なテキストだけです。

  • クエリ文字列を null (search=*) にすることはできません。また、この文字列は、任意の順序の語句が含まれているキーワード検索ではなく、"何" または "どのように" などの質問の特性を持つものである必要があります。 クエリ文字列が質問のように見えない場合は、要求によって "answers" がクエリ パラメーターとして指定されていても、回答処理はスキップされます。

  • セマンティック抽出と概要作成では、適切なタイミングで分析できるドキュメントあたりのトークン数が制限されています。 実際には、何百ページにもわたる大きなドキュメントがある場合、まずコンテンツをより小さいドキュメントに分割してみてください。

次のステップ