取得拡張生成 (RAG) システムは、ユーザーのクエリに応答して、グラウンド ドキュメントと一致する最も関連性の高い回答を生成しようとします。 大まかに言えば、ユーザーのクエリによって、ドキュメントの接地のコーパスで検索検索がトリガーされ、AI モデルが応答を生成するための接地コンテキストが提供されます。 次の点を評価することが重要です。
- ユーザーのクエリに対する取得結果の関連性: クエリ固有のドキュメントの関連性のラベルがある場合は ドキュメントの取得 を使用し、より正確な測定を行うにはクエリの関連性判定 (qrels) を使用します。 取得したコンテキストのみが存在するが、そのようなラベルがなく、より細かい測定に対する許容度が高い場合は、[ 取得 ] を使用します。
- 接地ドキュメントに関して生成された応答の一貫性: オープンソースの LLM-judge プロンプトで接地の定義をカスタマイズする場合は Groundedness を使用します。簡単な定義が必要な場合は Groundedness Pro を使用します。
- クエリに対する最終的な応答の関連性: 根拠のある真理がない場合は 関連性 、信頼できる事実があり、重要な情報を見逃さないようにする場合の 応答の完全性 。
Groundedness と Response Completeness について考える良い方法は、接地とは、接地コンテキストの外部にコンテンツを含めてはならない応答の正確な側面に関する点です。一方、応答の完全性は、予想される応答 (地上の真実) と比較して重要な情報を見逃してはならない応答の再現率の側面に関することです。
AI 支援エバリュエーターのモデル構成
次のスニペットのリファレンスとして、AI 支援品質エバリュエーター (Groundedness Pro を除く) は LLM ジャッジのモデル構成を使用します。
import os
from azure.ai.evaluation import AzureOpenAIModelConfiguration
from dotenv import load_dotenv
load_dotenv()
model_config = AzureOpenAIModelConfiguration(
azure_endpoint=os.environ["AZURE_ENDPOINT"],
api_key=os.environ.get["AZURE_API_KEY"],
azure_deployment=os.environ.get("AZURE_DEPLOYMENT_NAME"),
api_version=os.environ.get("AZURE_API_VERSION"),
)
ヒント
推論機能とコスト効率のバランスを取るための o3-mini
を使用することをお勧めします。
取得
RAG におけるアップストリームの役割を考えると、取得品質は非常に重要です。取得品質が低く、応答にコーパス固有の知識が必要な場合、LLM モデルが満足できる回答を提供する可能性は低くなります。
RetrievalEvaluator
は、グラウンド・トゥルース (クエリ関連判定とも呼ばれます) を必要とせずに、LLM を使用して取得結果のテキスト品質を測定します。これは、DocumentRetrievalEvaluator
、ndcg
、xdcg
、および地上真偽を必要とするその他の古典的な情報取得メトリックを測定するfidelity
と比較して価値を提供します。 このメトリックは、(文字列としてエンコードされた) コンテキスト チャンクがクエリに対処する関連性と、最も関連性の高いコンテキスト チャンクがリストの一番上にどのように表示されるかに焦点を当てています。
取得の例
from azure.ai.evaluation import RetrievalEvaluator
retrieval = RetrievalEvaluator(model_config=model_config, threshold=3)
retrieval(
query="Where was Marie Curie born?",
context="Background: 1. Marie Curie was born in Warsaw. 2. Marie Curie was born on November 7, 1867. 3. Marie Curie is a French scientist. ",
)
取得出力
likert スケール (整数 1 から 5) の数値スコアと、より高いスコアの方が優れています。 数値のしきい値 (既定値が設定されています) を指定すると、スコア >= しきい値の場合は "pass" を出力し、それ以外の場合は "fail" も出力します。 理由フィールドを使用すると、スコアが高いか低いかを理解するのに役立ちます。
{
"retrieval": 5.0,
"gpt_retrieval": 5.0,
"retrieval_reason": "The context contains relevant information that directly answers the query about Marie Curie's birthplace, with the most pertinent information placed at the top. Therefore, it fits the criteria for a high relevance score.",
"retrieval_result": "pass",
"retrieval_threshold": 3
}
文書検索
RAG におけるアップストリームの役割を考えると、取得品質は非常に重要です。取得品質が低く、応答にコーパス固有の知識が必要な場合、LLM モデルが満足できる回答を提供する可能性は低くなります。 そのため、 DocumentRetrievalEvaluator
を使用して取得の品質を評価するだけでなく、RAG の検索パラメーターを最適化することも重要です。
- ドキュメント取得エバリュエーターは、RAG がドキュメント ストアから正しいドキュメントを取得する方法を測定します。 グランド トゥルースを持つ RAG シナリオに役立つ複合エバリュエーターとして、RAG パイプラインをデバッグするための便利な検索品質メトリックの一覧が計算されます。
メトリック | カテゴリ | 説明 |
---|---|---|
忠実性 | 検索の再現性 | 取得された上位 n 個のチャンクが、特定のクエリのコンテンツをどの程度反映しているか。データセット内の既知の適切なドキュメントの合計数から返された適切なドキュメントの数 |
NDCG | NDCG の検索 | すべての関連項目がリストの一番上にある理想的な順序にランク付けする方法。 |
XDCG | XDCG を検索する | 他のインデックス ドキュメントのスコア付けに関係なく、上位 k のドキュメントで結果がどれだけ優れているか |
最大関連性 N | 検索の最大関連性 | 上位 k 個のチャンクの最大関連性 |
穴 | 検索ラベルのサニティ | クエリの関連性の判断が不足しているドキュメントの数 (グラウンド トゥルース) |
- "パラメーター スイープ" というシナリオで RAG を最適化するには、これらのメトリックを使用して、検索パラメーターを調整して最適な RAG 結果を得ることができます。 テスト対象の検索アルゴリズム (ベクター、セマンティック)、top_k、チャンク サイズなど、さまざまな検索パラメーターに対して異なる取得結果を生成するだけです。 次に、
DocumentRetrievalEvaluator
を使用して、最高の取得品質をもたらす検索パラメーターを検索します。
ドキュメントの取得の例
from azure.ai.evaluation import DocumentRetrievalEvaluator
# these query_relevance_label are given by your human- or LLM-judges.
retrieval_ground_truth = [
{
"document_id": "1",
"query_relevance_label": 4
},
{
"document_id": "2",
"query_relevance_label": 2
},
{
"document_id": "3",
"query_relevance_label": 3
},
{
"document_id": "4",
"query_relevance_label": 1
},
{
"document_id": "5",
"query_relevance_label": 0
},
]
# the min and max of the label scores are inputs to document retrieval evaluator
ground_truth_label_min = 0
ground_truth_label_max = 4
# these relevance scores come from your search retrieval system
retrieved_documents = [
{
"document_id": "2",
"relevance_score": 45.1
},
{
"document_id": "6",
"relevance_score": 35.8
},
{
"document_id": "3",
"relevance_score": 29.2
},
{
"document_id": "5",
"relevance_score": 25.4
},
{
"document_id": "7",
"relevance_score": 18.8
},
]
document_retrieval_evaluator = DocumentRetrievalEvaluator(
ground_truth_label_min=ground_truth_label_min,
ground_truth_label_max=ground_truth_label_max,
ndcg_threshold = 0.5,
xdcg_threshold = 50.0,
fidelity_threshold = 0.5,
top1_relevance_threshold = 50.0,
top3_max_relevance_threshold = 50.0,
total_retrieved_documents_threshold = 50,
total_ground_truth_documents_threshold = 50
)
document_retrieval_evaluator(retrieval_ground_truth=retrieval_ground_truth, retrieved_documents=retrieved_documents)
ドキュメントの取得の出力
high_is_better=True
を持つholes
とholes_ratio
を除き、すべての数値スコアにhigh_is_better=False
があります。 数値のしきい値 (既定値は 3) を指定すると、スコア >= しきい値の場合は "pass" を出力し、それ以外の場合は "fail" も出力します。
{
"ndcg@3": 0.6461858173,
"xdcg@3": 37.7551020408,
"fidelity": 0.0188438199,
"top1_relevance": 2,
"top3_max_relevance": 2,
"holes": 30,
"holes_ratio": 0.6000000000000001,
"holes_higher_is_better": False,
"holes_ratio_higher_is_better": False,
"total_retrieved_documents": 50,
"total_groundtruth_documents": 1565,
"ndcg@3_result": "pass",
"xdcg@3_result": "pass",
"fidelity_result": "fail",
"top1_relevance_result": "fail",
"top3_max_relevance_result": "fail",
# omitting more fields ...
}
地に足のついた状態
AI モデルはコンテンツを作成したり、無関係な応答を生成したりできるため、応答がコンテキストに関連してどの程度根拠付けされているかを評価することが重要です。
GroundednessEvaluator
は、生成された応答が特定のコンテキスト (グラウンド ソース) とどの程度一致しているかを測定し、外部のコンテンツを製造しません。 このメトリックは、接地ソースとの応答アラインメントの 精度 の側面をキャプチャします。 スコアが低いということは、応答がクエリに関係ない、またはコンテキスト外で不正確なコンテンツが作成されたことを意味します。 このメトリックは、予想される応答との応答アラインメントのResponseCompletenessEvaluator
の側面をキャプチャするを補完します。
接地の例
from azure.ai.evaluation import GroundednessEvaluator
groundedness = GroundednessEvaluator(model_config=model_config, threshold=3)
groundedness(
query="Is Marie Curie is born in Paris?",
context="Background: 1. Marie Curie is born on November 7, 1867. 2. Marie Curie is born in Warsaw.",
response="No, Marie Curie is born in Warsaw."
)
接地の出力
likert スケール (整数 1 から 5) の数値スコアと、より高いスコアの方が優れています。 数値のしきい値 (既定値は 3) を指定すると、スコア >= しきい値の場合は "pass" を出力し、それ以外の場合は "fail" も出力します。 理由フィールドを使用すると、スコアが高いか低いかを理解するのに役立ちます。
{
"groundedness": 5.0,
"gpt_groundedness": 5.0,
"groundedness_reason": "The RESPONSE accurately answers the QUERY by confirming that Marie Curie was born in Warsaw, which is supported by the CONTEXT. It does not include any irrelevant or incorrect information, making it a complete and relevant answer. Thus, it deserves a high score for groundedness.",
"groundedness_result": "pass",
"groundedness_threshold": 3
}
グラウンデッドネス プロ
AI システムは、コンテンツを作成したり、特定のコンテキスト外で無関係な応答を生成したりできます。 Azure AI Content Safety を利用して、 GroundednessProEvaluator
は、取得拡張生成の質問と回答のシナリオで、生成されたテキスト応答が特定のコンテキストに対して一貫性があるか正確であるかを検出します。 クエリに応答するために応答がコンテキストに密接に準拠しているかどうかをチェックし、推測や製造を回避し、バイナリ ラベルを出力します。
Groundedness Pro の例
import os
from azure.ai.evaluation import GroundednessProEvaluator
from dotenv import load_dotenv
load_dotenv()
## Using Azure AI Foundry Hub
azure_ai_project = {
"subscription_id": os.environ.get("AZURE_SUBSCRIPTION_ID"),
"resource_group_name": os.environ.get("AZURE_RESOURCE_GROUP"),
"project_name": os.environ.get("AZURE_PROJECT_NAME"),
}
## Using Azure AI Foundry Development Platform, example: AZURE_AI_PROJECT=https://your-account.services.ai.azure.com/api/projects/your-project
azure_ai_project = os.environ.get("AZURE_AI_PROJECT")
groundedness_pro = GroundednessProEvaluator(azure_ai_project=azure_ai_project),
groundedness_pro(
query="Is Marie Curie is born in Paris?",
context="Background: 1. Marie Curie is born on November 7, 1867. 2. Marie Curie is born in Warsaw.",
response="No, Marie Curie is born in Warsaw."
)
Groundedness Pro の出力
ラベル フィールドは、応答内のすべてのコンテンツがコンテキスト内で完全に固定され、それ以外の場合はTrue
場合にFalse
ブールスコアを返します。 理由フィールドを使用して、スコアの背後にある判定の詳細を理解します。
{
"groundedness_pro_reason": "All Contents are grounded",
"groundedness_pro_label": True
}
関連性
AI モデルはユーザー クエリに関して無関係な応答を生成する可能性があるため、最終的な応答を評価することが重要です。 これに対処するには、応答がクエリにどの程度効果的に対処するかを測定する RelevanceEvaluator
を使用できます。 所定のクエリのみに基づいて、応答の正確性、完全性、および直接的な関連性を評価します。 スコアが高いほど、関連性が高くなります。
関連性の例
from azure.ai.evaluation import RelevanceEvaluator
relevance = RelevanceEvaluator(model_config=model_config, threshold=3)
relevance(
query="Is Marie Curie is born in Paris?",
response="No, Marie Curie is born in Warsaw."
)
関連性の出力
likert スケール (整数 1 から 5) の数値スコアと、より高いスコアの方が優れています。 数値のしきい値 (既定値は 3) を指定すると、スコア >= しきい値の場合は "pass" を出力し、それ以外の場合は "fail" も出力します。 理由フィールドを使用すると、スコアが高いか低いかを理解するのに役立ちます。
{
"relevance": 4.0,
"gpt_relevance": 4.0,
"relevance_reason": "The RESPONSE accurately answers the QUERY by stating that Marie Curie was born in Warsaw, which is correct and directly relevant to the question asked.",
"relevance_result": "pass",
"relevance_threshold": 3
}
応答の完全性
AI システムは、コンテンツを作成したり、特定のコンテキスト外で無関係な応答を生成したりできます。 地上の真実の応答を考えると、応答のアラインメントと予想される応答のResponseCompletenessEvaluator
の側面をキャプチャする。 これは、接地ソースとの応答アラインメントのGroundednessEvaluator
の側面をキャプチャするを補完します。
応答の完全性の例
from azure.ai.evaluation import ResponseCompletenessEvaluator
response_completeness = ResponseCompletenessEvaluator(model_config=model_config, threshold=3)
response_completeness(
response="Based on the retrieved documents, the shareholder meeting discussed the operational efficiency of the company and financing options.",
ground_truth="The shareholder meeting discussed the compensation package of the company CEO."
)
応答の完全性の出力
likert スケール (整数 1 から 5) の数値スコアと、より高いスコアの方が優れています。 数値のしきい値 (既定値は 3) を指定すると、スコア >= しきい値の場合は "pass" を出力し、それ以外の場合は "fail" も出力します。 理由フィールドを使用すると、スコアが高いか低いかを理解するのに役立ちます。
{
"response_completeness": 1,
"response_completeness_result": "fail",
"response_completeness_threshold": 3,
"response_completeness_reason": "The response does not contain any relevant information from the ground truth, which specifically discusses the CEO's compensation package. Therefore, it is considered fully incomplete."
}