評估流程和計量
評估流程是一種特殊的提示流程類型,可計算計量,以評估執行輸出是否符合特定準則和目標。 您可以建立或自定義針對工作和目標量身打造的評估流程和計量,並使用它們來評估其他提示流程。 本文說明評估流程、如何開發和自定義它們,以及如何在提示流程批次執行中使用它們來評估流程效能。
了解評估流程
提示流程是處理輸入和輸出的節點序列。 評估流程也會耗用必要的輸入,併產生通常為分數或計量的對應輸出。 評估流程與其撰寫體驗和使用方式中的標準流程不同。
評估流程通常會在執行之後執行,方法是接收其輸出,並使用輸出來計算分數和計量。 使用提示流程 SDK log_metric()
函式評估流程記錄計量。
評估流程的輸出是測量所測試流程效能的結果。 評估流程可以有匯總節點,其會計算在測試數據集上所測試流程的整體效能。
下一節說明如何在評估流程中定義輸入和輸出。
輸入
評估流程會藉由接受其正在測試的執行輸出來計算批次執行的計量或分數。 例如,如果所測試的流程是 QnA 流程,會根據問題產生答案,您可以將評估輸入命名為 answer
。 如果正在測試的流程是分類流程,會將文字分類成類別,您可以將評估輸入命名為 category
。
您可能需要其他輸入作為基礎真相。 例如,如果您想要計算分類流程的精確度,您必須提供 category
數據集的數據行作為基礎事實。 如果您想要計算 QnA 流程的正確性,您必須提供 answer
資料集的數據行做為基礎事實。 您可能需要一些其他輸入來計算計量,例如 question
QnA 中的 和 context
或擷取增強產生 (RAG) 案例。
您可以定義評估流程的輸入,就像定義標準流程的輸入一樣。 根據預設,評估會使用與所測試執行相同的數據集。 不過,如果對應的標籤或目標地面真值位於不同的數據集中,您可以輕鬆地切換至該數據集。
輸入描述
若要描述計算計量所需的輸入,您可以新增描述。 當您在批次執行提交中對應輸入來源時,會出現描述。
若要新增每個輸入的描述,請在開發評估方法時,選取 [在輸入區段中顯示描述 ],然後輸入描述。
若要隱藏輸入表單的描述,請選取 [ 隱藏描述]。
輸出和計量
評估的輸出是顯示所測試流程效能的結果。 輸出通常包含分數等計量,也可以包含推理和建議的文字。
輸出分數
提示流程會一次處理一個數據列,併產生輸出記錄。 同樣地,評估流程可以計算每個數據列的分數,因此您可以檢查流程對每個個別數據點的執行方式。
您可以將每個數據實例的分數記錄為評估流程輸出,方法是在評估流程的輸出區段中指定這些分數。 撰寫體驗與定義標準流程輸出相同。
當您選取 [檢視輸出] 時,您可以在 [輸出] 索引卷標中檢視個別分數,這與您檢查標準流程批次執行的輸出相同。 您可以將這些實體層級分數附加至您所測試流程的輸出。
匯總和計量記錄
評估流程也提供執行的整體評估。 為了區分整體結果與個別輸出分數,這些整體執行效能值稱為 計量。
若要根據個別分數計算整體評估值,請選取 評估流程中 Python 節點上的 [匯總 ] 複選框,將其轉換成 縮減 節點。 節點接著會以清單的形式傳入輸入,並將它們當作批次處理。
藉由使用匯總,您可以計算及處理每個流程輸出的所有分數,並使用每個分數計算整體結果。 例如,若要計算分類流程的精確度,您可以計算每個分數輸出的精確度,然後計算所有分數輸出的平均精確度。 然後,您可以使用 將平均精確度記錄為計量 promptflow_sdk.log_metric()
。 計量必須是數值,例如 float
或 int
。 不支援字串類型計量記錄。
下列代碼段是計算整體精確度的範例,其方式是平均所有數據點的精確度分數 grades
。 整體精確度會使用 promptflow_sdk.log_metric()
記錄為計量。
from typing import List
from promptflow import tool, log_metric
@tool
def calculate_accuracy(grades: List[str]): # Receive a list of grades from a previous node
# calculate accuracy
accuracy = round((grades.count("Correct") / len(grades)), 2)
log_metric("accuracy", accuracy)
return accuracy
因為您在 Python 節點中呼叫此函式,所以不需要將它指派到別處,您稍後即可檢視計量。 在批次執行中使用這個評估方法之後,您可以在檢視輸出時選取 [計量] 索引卷標來檢視顯示整體效能的 計量。
開發評估流程
若要開發您自己的評估流程,請選取 [Azure Machine Learning 工作室 提示流程] 頁面上的 [建立]。 在 [ 建立新的流程 ] 頁面上,您可以:
在 [依類型建立] 底下的 [評估流程] 卡片上選取 [建立]。 此選取專案提供用於開發新評估方法的範本。
在 [探索資源庫] 中選取 [評估流程],然後從其中一個可用的內建流程中選取 。 選取 [ 檢視詳細數據 ] 以取得每個流程的摘要,然後選取 [ 複製 ] 以開啟和自定義流程。 流程建立精靈可協助您修改自己的案例流程。
計算每個數據點的分數
評估流程會計算數據集上執行的流程分數和計量。 評估流程的第一個步驟是計算每個個別數據輸出的分數。
例如,在內建的分類精確度評估流程中,grade
測量每個流程產生的輸出到其對應地面真相的精確度,會計算在等級 Python 節點中。
如果您使用評估流程範本,請在 line_process Python 節點中計算此分數。 您也可以將 line_process python 節點取代為大型語言模型 (LLM) 節點,以使用 LLM 來計算分數,或使用多個節點來執行計算。
您可以將這個節點的輸出指定為評估流程的輸出,這表示輸出是針對每個數據範例計算的分數。 您也可以輸出原因以取得詳細資訊,其體驗與在標準流程中定義輸出相同。
計算和記錄計量
評估的下一個步驟是計算評估回合的整體計量。 您可以在已選取 [匯總] 選項的 Python 節點中計算計量。 此節點會接受先前計算節點的分數,並將其組織成清單,然後計算整體值。
如果您使用評估範本,此分數會計算在匯總節點中。 下列代碼段顯示匯總節點的範本。
from typing import List
from promptflow import tool
@tool
def aggregate(processed_results: List[str]):
"""
This tool aggregates the processed result of all lines and log metric.
:param processed_results: List of the output of line_process node.
"""
# Add your aggregation logic here
aggregated_results = {}
# Log metric
# from promptflow import log_metric
# log_metric(key="<my-metric-name>", value=aggregated_results["<my-metric-name>"])
return aggregated_results
您可以使用自己的匯總邏輯,例如計算分數平均值、中位數或標準偏差。
使用函 promptflow.log_metric()
式記錄計量。 您可以在單一評估流程中記錄多個計量。 計量必須是數值 (float
/int
)。
使用評估流程
建立自己的評估流程和計量之後,您可以使用流程來評估標準流程的效能。 例如,您可以評估 QnA 流程,以測試它在大型數據集上執行的方式。
在 Azure Machine Learning 工作室 中,開啟您想要評估的流程,然後選取頂端功能表欄中的 [評估]。
在 [ 批次執行和評估 精靈] 中,完成 基本設定 和 Batch 回合設定 ,以載入數據集以進行測試和設定輸入對應。 如需詳細資訊,請參閱 提交批次執行和評估流程。
在 [ 選取評估 ] 步驟中,您可以選取一或多個要執行的自定義評估或內建評估。 自訂評估 會列出您建立、複製或自定義的所有評估流程。 處理相同專案的其他人所建立的評估流程不會出現在本節中。
在 [ 設定評估] 畫面上,指定評估方法所需的任何輸入數據來源。 例如,地面真相數據行可能來自數據集。 如果您的評估方法不需要來自數據集的數據,則不需要選取數據集,或參考輸入對應區段中的任何數據集數據行。
在 [ 評估輸入對應 ] 區段中,您可以指出評估所需的輸入來源。 如果資料來源來自您的執行輸出,請將來源設定為
${run.outputs.[OutputName]}
。 如果資料來自測試資料集,請將來源設定為${data.[ColumnName]}
。 您為資料輸入設定的任何描述也會出現在這裡。 如需詳細資訊,請參閱 提交批次執行和評估流程。重要
如果您的評估流程具有 LLM 節點,或需要連線來取用認證或其他密鑰,您必須在此畫面的 [連線 ] 區段中輸入連線數據,才能使用評估流程。
選取 [ 檢閱 + 提交 ],然後選取 [ 提交 ] 以執行評估流程。
評估流程完成之後,您可以選取 [檢視批次執行>] 檢視所評估流程頂端的最新批次執行輸出,以查看實例層級分數。 從 [ 附加相關結果 ] 下拉式清單中選取您的評估回合,以查看每個數據列的 等級 。