Vertex AI Search アプリで検索する際に、ドキュメント レベルの関連性フィルタを指定して、フィルタしきい値を満たすドキュメントのみが結果として返されるようにすることができます。このページでは、しきい値の種類、しきい値の最適化の重要性、関連性フィルタとそのしきい値を指定する方法について説明します。
ドキュメント レベルの関連性でフィルタする方法について
検索クエリが結果を返すと、取得された各ドキュメントに関連性レベルが割り当てられます。検索リクエストでしきい値を設定すると、フィルタのしきい値を満たすドキュメントのみが返されます。しきい値を高く設定すると、クエリで返されるドキュメントの数を減らすことができます。しきい値を低く設定すると、ユーザーのクエリとの関連性が低いドキュメントが結果に混入する可能性があります。
したがって、結果にユーザーにとって関連性の低いドキュメントが過剰に多く含まれている場合は、関連性のしきい値を高に設定して、最も関連性の高い少数の結果のみに絞り込みます。しきい値が高すぎて制限が厳しすぎる場合は、より最適な値に下げることができます。
検索の種類
関連性フィルタは、次の種類の検索に適用できます。
- キーワード検索: キーワード検索に基づいてドキュメントを取得します。
- セマンティック類似性検索: エンベディングに基づいてドキュメントを取得します。
関連性フィルタの定義では、これらの検索ごとにしきい値のタイプを指定できます。検索では、指定された検索のドキュメントを取得し、指定されたしきい値を適用します。
しきい値の種類
検索リクエストを送信するときに、キーワード検索とセマンティック類似性検索のしきい値として次のいずれかのタイプを指定できます。
関連性のしきい値: このしきい値を設定すると、検索では独自のモデルを使用してドキュメントの関連性が判断されます。この場合、検索では、キーワードの類似性スコア、トピックの関連性スコア、意味の類似性スコアなど、関連性の高いシグナルが使用されることがあります。
関連性しきい値は、
HIGH、MEDIUM、LOW、LOWESTの値を指定できる粗粒度の設定です。HIGHしきい値では関連性の高いスコアのドキュメントが少なく返されることがありますが、LOWESTしきい値では検索クエリに関連していない可能性のあるドキュメントが多く返されることがあります。意味的関連性のしきい値: このしきい値を設定すると、フィルタは意味的類似性スコアのみに基づいてドキュメントの関連性を判断します。
セマンティック関連性のしきい値は、きめ細かい設定であり、[0,1] の範囲内の浮動小数点値です。しきい値を 0 に設定するとすべてのドキュメントが返され、しきい値を 1 に設定すると最も関連性の高いドキュメントが返されます。
関連性フィルタの定義と例
検索リクエストで関連性フィルタを定義するには、検索タイプ(キーワード検索とセマンティック検索)ごとに 1 つのタイプのしきい値(関連性しきい値とセマンティック関連性しきい値)のみを指定します。関連性フィルタの仕様内で、検索のタイプを 1 つまたは両方指定できます。ただし、各検索タイプ内で定義できるしきい値のタイプは 1 つだけです。たとえば、次の点を考えます。
{
"relevanceFilterSpec": {
"keywordSearchThreshold": {
"relevanceThreshold": "LOW"
},
"semanticSearchThreshold": {
"semanticRelevanceThreshold": 0.871
}
}
}
この検索リクエストでは、結果は取得とフィルタリングの 2 つの段階で返されます。
- 検索では、キーワードの一致に基づいてドキュメントが取得され、関連性の低いしきい値でドキュメントがフィルタされます。これにより、大量の取得済みドキュメントが返されます。
- 同時に、検索は意味的類似性に従ってドキュメントを取得し、意味的関連性の高いドキュメントを
0.871のしきい値でフィルタします。これにより、取得されるドキュメントの数が少なくなります。
検索では、意味的類似性よりもキーワードの一致が重視されます。フィルタを使用すると、キーワード一致によって取得されるドキュメントの数が増えます。
同様に、関連性フィルタを次のように定義して、一致するキーワードを含むドキュメントの数を減らし、セマンティック類似性を持つドキュメントの数を増やすことができます。
"relevanceFilterSpec": {
"keywordSearchThreshold": {
"semanticRelevanceThreshold": 0.871
},
"semanticSearchThreshold": {
"relevanceThreshold": "LOW"
}
}
ドキュメント レベルの関連性フィルタでサポートされているデータ型とアプリ
ドキュメント レベルの関連性フィルタは、次の種類のデータを含むデータストアに適用できます。
- ウェブサイトの高度なインデックス登録を使用したウェブサイト データ
- カスタム非構造化データ
- カスタム構造化データ
ドキュメント レベルの関連性フィルタは、ウェブサイトの基本的なインデックス登録、メディアデータ、医療データを含むデータストアでは機能しません。
また、ドキュメント レベルの関連性フィルタは統合検索アプリでは使用できません。統合検索アプリは、複数のデータストアに接続されているアプリです。
その他の種類のフィルタ
ドキュメント レベルの関連性フィルタは、クエリで返されるデータをフィルタするための唯一の方法ではありません。フィルタ式を使用して、メタデータ(ウェブサイトの高度なインデックス登録とメタデータ データストアを使用した非構造化データ)とフィールド値(構造化データストア)に基づいて結果をフィルタすることもできます。
詳細については、以下をご覧ください。
フィルタ式とドキュメント レベルの関連性フィルタの両方を使用すると、最初にフィルタ式が結果に適用され、次にドキュメント レベルの関連性フィルタが適用されます。
始める前に
アプリとデータストアを作成し、データストアにデータを取り込んだことを確認します。詳細については、検索アプリを作成するをご覧ください。ドキュメント レベルの関連性フィルタでサポートされているデータ型とアプリもご覧ください。
ドキュメント レベルの関連性に基づいて結果を検索、フィルタする
関連性でフィルタするには、次の手順を行います。
アプリ ID を調べます。アプリ ID をすでに保有している場合は、次のステップに進みます。
Google Cloud コンソールで、[AI Applications] ページに移動します。
[アプリ] ページで、アプリの名前を見つけ、[ID] 列からアプリの ID を取得します。
ドキュメント レベルの関連性で検索をフィルタするには、
engines.servingConfigs.searchメソッドを使用して、検索タイプごとに 1 つのタイプのしきい値のみを定義するrelevanceFilterSpecフィールドを指定します。つまり、特定のタイプの検索に対してrelevanceThresholdまたはsemanticRelevanceThresholdのいずれかを指定できます。curl -X POST -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \ -d '{ "servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search", "query": "QUERY", "relevanceFilterSpec": { "keywordSearchThreshold": { "relevanceThreshold": "RELEVANCE_THRESHOLD" }, "semanticSearchThreshold": { "semanticRelevanceThreshold": SEMANTIC_RELEVANCE_THRESHOLD } } }'次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。APP_ID: クエリする Vertex AI Search アプリの ID。QUERY: 検索するクエリテキスト。RELEVANCE_THRESHOLD:HIGH、MEDIUM、LOW、LOWESTのいずれかです。SEMANTIC_RELEVANCE_THRESHOLD: [0,1] の範囲の浮動小数点値。
さまざまなしきい値で複数のクエリをテストして、データとアプリケーションに最適なしきい値設定を特定します。