Sdílet prostřednictvím


Přizpůsobení toku vyhodnocení a metrik

Toky vyhodnocení jsou speciální typy toků, které vyhodnocují, jak dobře výstupy běhu odpovídají konkrétním kritériím a cílům pomocí výpočtu metrik.

V toku výzvy můžete přizpůsobit nebo vytvořit vlastní tok vyhodnocení a metriky přizpůsobené vašim úkolům a cílům a pak ho použít k vyhodnocení dalších toků. Tento dokument se naučíte:

  • Principy vyhodnocení v toku výzvy
    • Vstupy
    • Výstupy a protokolování metrik
  • Vývoj toku vyhodnocení
  • Jak používat přizpůsobený tok vyhodnocení v dávkovém spuštění

Principy vyhodnocení v toku výzvy

V toku výzvy je tok posloupnost uzlů, které zpracovávají vstup a generují výstup. Toky vyhodnocení mohou podobně přijímat požadované vstupy a vytvářet odpovídající výstupy, což jsou často skóre nebo metriky. Koncepty toků hodnocení se podobají standardním tokům, ale existují určité rozdíly v prostředí pro vytváření obsahu a způsobu jejich použití.

Mezi speciální funkce toků vyhodnocení patří:

  • Obvykle poběží po spuštění, který se má testovat příjmem jeho výstupů. Použije výstupy k výpočtu skóre a metrik. Výstupy toku vyhodnocení jsou výsledky, které měří výkon testovaného toku.
  • Můžou mít uzel agregace, který vypočítá celkový výkon toku testovaného přes testovací datovou sadu.
  • Můžou protokolovat metriky pomocí log_metric() funkce.

Ukážeme si, jak se mají vstupy a výstupy definovat při vývoji metod hodnocení.

Vstupy

Toky vyhodnocení vypočítají metriky nebo skóre dávkového spuštění toku na základě datové sady. Aby to udělali, musí převzít výstupy testovaného spuštění. Vstupy toku vyhodnocení můžete definovat stejným způsobem jako definování vstupů standardního toku.

Tok vyhodnocení se spustí po jiném spuštění, aby posoudil, jak dobře výstupy tohoto spuštění odpovídají konkrétním kritériím a cílům. Proto vyhodnocení obdrží výstupy vygenerované z daného spuštění.

Pokud je tok testovaný například tok QnA, který generuje odpovědi na základě otázky, můžete odpovídajícím způsobem pojmenovat vstup vyhodnocení jako answer. Pokud testovaný tok je klasifikační tok, který klasifikuje text do kategorie, můžete pojmenovat vstup vyhodnocení jako category.

Další vstupy, například ground truth mohou být také potřeba. Pokud například chcete vypočítat přesnost toku klasifikace, musíte zadat category sloupec v datové sadě jako základní pravdu. Pokud chcete vypočítat přesnost toku QnA, musíte zadat answer sloupec v datové sadě jako základní pravdu.

Ve výchozím nastavení používá vyhodnocení stejnou datovou sadu jako testovací datová sada poskytnutá testovanému spuštění. Pokud jsou ale odpovídající popisky nebo cílové hodnoty základní pravdy v jiné datové sadě, můžete na tuto datovou sadu snadno přepnout.

K výpočtu metrik, jako question context jsou a ve scénáři QnA nebo RAG, mohou být potřeba některé další vstupy. Tyto vstupy můžete definovat stejným způsobem jako definování vstupů standardního toku.

Input description

Pokud chcete připomenout, jaké vstupy jsou potřeba k výpočtu metrik, můžete přidat popis pro každý požadovaný vstup. Popisy se zobrazí při mapování zdrojů v odeslání dávkového spuštění.

Snímek obrazovky s mapováním vstupu vyhodnocení se zvýrazněným popisem odpovědí

Pokud chcete přidat popisy pro každý vstup, při vývoji metody vyhodnocení vyberte Zobrazit popis ve vstupní části. Popis můžete skrýt výběrem možnosti Skrýt popis.

Snímek obrazovky vyhodnocení přesnosti klasifikace se zvýrazněným skrytím popisu

Tento popis se zobrazí při použití této metody vyhodnocení v dávkovém odeslání.

Výstupy a metriky

Výstupy vyhodnocení jsou výsledky, které měří výkon testovaného toku. Výstup obvykle obsahuje metriky, jako jsou skóre, a může také obsahovat text z důvodů a návrhů.

Výstupy vyhodnocení – skóre na úrovni instance

V toku výzvy tok zpracuje vždy jeden řádek dat a vygeneruje výstupní záznam. Podobně ve většině případů vyhodnocení pro každý výstup existuje skóre, které vám umožní zkontrolovat, jak tok funguje u jednotlivých dat.

Tok vyhodnocení může vypočítat skóre pro jednotlivá data a skóre pro každou ukázku dat můžete zaznamenat jako výstupy toku tak, že je nastavíte ve výstupní části toku vyhodnocení. Toto prostředí pro vytváření obsahu je stejné jako definování standardního výstupu toku.

Snímek obrazovky oddílu s výstupy zobrazující název a hodnotu

Skóre můžete zobrazit na kartě Přehled a> výstup , když se tato metoda vyhodnocení použije k vyhodnocení jiného toku. Tento proces je stejný jako kontrola výstupů dávkového spuštění standardního toku. Skóre na úrovni instance se připojí k výstupu testovaného toku.

Protokolování metrik a uzel agregace

Kromě toho je také důležité poskytnout celkové hodnocení běhu. Abychom se odlišili od jednotlivých skóre vyhodnocení jednotlivých výstupů, voláme hodnoty pro vyhodnocení celkového výkonu spuštění jako "metriky".

Pokud chcete vypočítat celkovou hodnotu posouzení na základě každého jednotlivého skóre, můžete zkontrolovat agregaci uzlu Pythonu v toku vyhodnocení a převést ji na uzel "redukce", což umožňuje uzlu vzít vstupy jako seznam a zpracovat je v dávce.

Snímek obrazovky s nadpisem uzlu Pythonu ukazujícího na nezaškrtnuté políčko

Tímto způsobem můžete vypočítat a zpracovat všechna skóre každého výstupu toku a vypočítat celkový výsledek pro každý výstup skóre. Pokud například chcete vypočítat přesnost toku klasifikace, můžete vypočítat přesnost každého výstupu skóre a pak vypočítat průměrnou přesnost všech výstupů skóre. Pak můžete pomocí promptflow_sdk.log_metrics() protokolovat průměrnou přesnost jako metriku. Metriky by měly být číselné (float/int). Protokolování metrik typu string se nepodporuje.

Následující fragment kódu je příkladem výpočtu celkové přesnosti průměrem skóre přesnosti (grade) jednotlivých dat. Celková přesnost se protokoluje jako metrika pomocí promptflow_sdk.log_metrics().

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

Jak jste volali tuto funkci v uzlu Pythonu, nemusíte ji přiřazovat nikde jinde a metriky si můžete prohlédnout později. Pokud se tato metoda vyhodnocení používá při dávkovém spuštění, metriky označující celkový výkon se dají zobrazit na kartě Přehled a> metriky .

Snímek obrazovky s kartou Metriky, která zobrazuje metriky protokolované metrikou protokolu

Začínáme s vývojem metody vyhodnocení

Existují dva způsoby, jak vyvíjet vlastní metody hodnocení:

  • Vytvořte nový tok vyhodnocení úplně od začátku: Vytvořte zcela novou metodu vyhodnocení od základů. Na domovské stránce karty toku výzvy v části Vytvořit podle typu můžete zvolit Tok vyhodnocení a zobrazit šablonu toku vyhodnocení.

Snímek obrazovky s vytvořením nového toku vyhodnocení od začátku

  • Přizpůsobení integrovaného toku vyhodnocení: Úprava integrovaného toku vyhodnocení Najděte integrovaný tok vyhodnocení v průvodci vytvořením toku – galerii toků a vyberte Klonovat a proveďte přizpůsobení. Pak můžete zobrazit a zkontrolovat logiku a tok předdefinovaných vyhodnocení a pak tok upravit. Tímto způsobem nezačínáte úplně od začátku, ale ukázku, kterou můžete použít pro vlastní nastavení.

Snímek obrazovky klonování integrovaného toku vyhodnocení

Výpočet skóre pro jednotlivá data

Jak už bylo zmíněno, vyhodnocení se spustí pro výpočet skóre a metrik na základě toku, který se spouští v datové sadě. Proto první krok v tocích vyhodnocení počítá skóre pro každý jednotlivý výstup.

Jako příklad vezměte předdefinovaný tok vyhodnocení, gradekteré měří přesnost každého výstupu generovaného tokem Classification Accuracy Evaluation na odpovídající základní pravdu, se vypočítá v grade uzlu. Pokud při vytváření podle typu vytvoříte tok vyhodnocení a upravíte ho úplně od začátku, toto skóre se vypočítá v line_process uzlu v šabloně. Uzel Pythonu můžete také nahradit line_process uzlem LLM, který použije LLM k výpočtu skóre, nebo můžete k výpočtu použít více uzlů.

Snímek obrazovky s uzlem procesu řádku v šabloně

Pak je potřeba zadat výstup uzlů jako výstupy toku vyhodnocení, což označuje, že výstupy jsou skóre vypočítaná pro každý vzorek dat. Můžete také zobrazit odůvodnění jako další informace a je to stejné prostředí při definování výstupů ve standardním toku.

Počítá a protokoluje metriky.

Druhým krokem při vyhodnocování je výpočet celkové metriky pro vyhodnocení spuštění. Jak už bylo zmíněno, metriky se počítají v uzlu Pythonu, který je nastavený jako Aggregation. Tento uzel přebírá skóre vypočítané v předchozím uzlu a uspořádá skóre jednotlivých ukázek dat do seznamu a pak je vypočítá společně najednou.

Pokud při vytváření podle typu vytváříte a upravujete úplně od začátku, vypočítá se toto skóre v aggregate uzlu. Fragment kódu je šablona uzlu agregace.


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

Můžete použít vlastní logiku agregace, jako je výpočet průměru, střední hodnoty nebo směrodatná odchylka skóre.

Pak musíte metriky protokolovat pomocí promptflow.logmetrics() funkce. Do jednoho toku vyhodnocení můžete protokolovat několik metrik. Metriky by měly být číselné (float/int).

Použití přizpůsobeného toku vyhodnocení

Po vytvoření vlastního toku vyhodnocení a metrik můžete tento tok použít k vyhodnocení výkonu standardního toku.

  1. Nejprve začněte na stránce vytváření toku, na které chcete vyhodnotit. Například tok QnA, se kterým ještě víte, jak funguje u velké datové sady a chcete testovat. Klikněte na Evaluate tlačítko a zvolte Custom evaluation.

    Snímek obrazovky s tlačítkem vyhodnocení

  2. Podobně jako v krocích odeslání dávkového spuštění, jak je uvedeno v dávkovém spuštění a vyhodnocení toku v toku výzvy, postupujte podle prvních několika kroků a připravte datovou sadu ke spuštění toku.

  3. Pak jsou v Evaluation settings - Select evaluation kroku spolu s předdefinovanými vyhodnoceními k dispozici také přizpůsobené vyhodnocení. Zobrazí se seznam všech vašich toků vyhodnocení v seznamu toků, které jste vytvořili, naklonovali nebo přizpůsobili. Toky vyhodnocení vytvořené jinými uživateli ve stejném projektu se v této části nezobrazí.

    Snímek obrazovky s výběrem přizpůsobeného vyhodnocení

  4. Dále v Evaluation settings - Configure evaluation kroku je potřeba zadat zdroje vstupních dat, které jsou potřeba pro metodu vyhodnocení. Například sloupec základní pravdy může pocházet z datové sady.

    Pokud chcete spustit vyhodnocení, můžete při odesílání vyhodnocení určit zdroje těchto požadovaných vstupů v části "mapování vstupu" . Tento proces je stejný jako konfigurace uvedená v dávkovém spuštění a vyhodnocení toku v toku výzvy.

    • Pokud zdroj dat pochází z výstupu spuštění, je zdroj označený jako ${run.output.[OutputName]}
    • Pokud zdroj dat pochází z testovací datové sady, je zdroj označený jako ${data.[ColumnName]}

    Snímek obrazovky s mapováním vstupu vyhodnocení

    Poznámka:

    Pokud vaše vyhodnocení nevyžaduje data z datové sady, nemusíte odkazovat na žádné sloupce datové sady ve vstupní části mapování, což znamená, že výběr datové sady je volitelná konfigurace. Výběr datové sady neovlivní výsledek vyhodnocení.

  5. Pokud se tato metoda vyhodnocení použije k vyhodnocení jiného toku, můžete skóre na úrovni instance zobrazit na kartě Přehled ->Výstup .

    Snímek obrazovky s kartou výstupu s připojeným a zvýrazněným výsledkem vyhodnocení

Další kroky