Evaluatiestromen en metrische gegevens
Evaluatiestromen zijn een speciaal type promptstroom waarmee metrische gegevens worden berekend om te bepalen hoe goed de uitvoer van een uitvoering voldoet aan specifieke criteria en doelstellingen. U kunt evaluatiestromen en metrische gegevens maken of aanpassen die zijn afgestemd op uw taken en doelstellingen en deze gebruiken om andere promptstromen te evalueren. In dit artikel worden evaluatiestromen uitgelegd, hoe u deze kunt ontwikkelen en aanpassen en hoe u deze kunt gebruiken in promptstroombatchuitvoeringen om de stroomprestaties te evalueren.
Evaluatiestromen begrijpen
Een promptstroom is een reeks knooppunten die invoer verwerken en uitvoer genereren. Evaluatiestromen verbruiken ook vereiste invoer en produceren bijbehorende uitvoer die meestal scores of metrische gegevens zijn. Evaluatiestromen verschillen van standaardstromen in hun ontwerpervaring en gebruik.
Evaluatiestromen worden meestal uitgevoerd na de uitvoering die ze testen door de uitvoer te ontvangen en de uitvoer te gebruiken om scores en metrische gegevens te berekenen. Metrische gegevens van evaluatiestromen worden vastgelegd met behulp van de sdk-functie log_metric()
promptstroom.
De uitvoer van de evaluatiestroom zijn resultaten waarmee de prestaties van de geteste stroom worden gemeten. Evaluatiestromen kunnen een aggregatieknooppunt hebben waarmee de algehele prestaties van de stroom worden berekend die wordt getest via de testgegevensset.
In de volgende secties wordt beschreven hoe u invoer en uitvoer in evaluatiestromen definieert.
Invoerwaarden
Met evaluatiestromen worden metrische gegevens of scores voor batchuitvoeringen berekend door de uitvoer van de uitvoering te nemen die ze testen. Als de stroom die wordt getest bijvoorbeeld een QnA-stroom is waarmee een antwoord wordt gegenereerd op basis van een vraag, kunt u een evaluatie-invoer een naam geven als answer
. Als de stroom die wordt getest een classificatiestroom is waarmee een tekst in een categorie wordt geclassificeerd, kunt u een evaluatie-invoer noemen als category
.
Mogelijk hebt u andere invoer nodig als grondwaar. Als u bijvoorbeeld de nauwkeurigheid van een classificatiestroom wilt berekenen, moet u de category
kolom van de gegevensset opgeven als grondwaar. Als u de nauwkeurigheid van een QnA-stroom wilt berekenen, moet u de answer
kolom van de gegevensset opgeven als de grondwaar. Mogelijk hebt u enkele andere invoer nodig om metrische gegevens te berekenen, zoals question
en context
in QnA of scenario's voor het ophalen van augmented generation (RAG).
U definieert de invoer van de evaluatiestroom op dezelfde manier als u de invoer van een standaardstroom definieert. De evaluatie maakt standaard gebruik van dezelfde gegevensset als de uitvoering die wordt getest. Als de bijbehorende labels of doelwaarden voor waarheidswaarden zich echter in een andere gegevensset bevinden, kunt u eenvoudig overschakelen naar die gegevensset.
Invoerbeschrijvingen
Als u de invoer wilt beschrijven die nodig zijn voor het berekenen van metrische gegevens, kunt u beschrijvingen toevoegen. De beschrijvingen worden weergegeven wanneer u de invoerbronnen in batchuitvoeringsinzendingen toewijst.
Als u beschrijvingen voor elke invoer wilt toevoegen, selecteert u Beschrijving weergeven in de invoersectie bij het ontwikkelen van uw evaluatiemethode en voert u de beschrijvingen in.
Als u de beschrijvingen in het invoerformulier wilt verbergen, selecteert u Beschrijving verbergen.
Uitvoer en metrische gegevens
De uitvoer van een evaluatie zijn resultaten die de prestaties van de geteste stroom laten zien. De uitvoer bevat meestal metrische gegevens, zoals scores, en kan ook tekst voor redenering en suggesties bevatten.
Uitvoerscores
Een promptstroom verwerkt één rij gegevens tegelijk en genereert een uitvoerrecord. Evaluatiestromen kunnen ook scores berekenen voor elke rij met gegevens, zodat u kunt controleren hoe een stroom presteert op elk afzonderlijk gegevenspunt.
U kunt de scores voor elk gegevensexemplaren vastleggen als uitvoer van de evaluatiestroom door ze op te geven in de uitvoersectie van de evaluatiestroom. De ontwerpervaring is hetzelfde als het definiëren van een standaardstroomuitvoer.
U kunt de afzonderlijke scores bekijken op het tabblad Uitvoer wanneer u Uitvoer weergeven selecteert, net zoals u de uitvoer van een standaardstroombatchuitvoering controleert. U kunt deze scores op exemplaarniveau toevoegen aan de uitvoer van de stroom die u hebt getest.
Logboekregistratie van aggregatie en metrische gegevens
De evaluatiestroom biedt ook een algemene evaluatie voor de uitvoering. Als u de algemene resultaten van afzonderlijke uitvoerscores wilt onderscheiden, worden deze algemene uitvoeringsprestatiewaarden metrische gegevens genoemd.
Als u een algemene evaluatiewaarde wilt berekenen op basis van afzonderlijke scores, schakelt u het selectievakje Aggregatie in op een Python-knooppunt in een evaluatiestroom om deze om te zetten in een reductieknooppunt . Het knooppunt neemt vervolgens de invoer in als een lijst en verwerkt deze als een batch.
Met behulp van aggregatie kunt u alle scores van elke stroomuitvoer berekenen en verwerken en een algemeen resultaat berekenen met behulp van elke score. Als u bijvoorbeeld de nauwkeurigheid van een classificatiestroom wilt berekenen, kunt u de nauwkeurigheid van elke score-uitvoer berekenen en vervolgens de gemiddelde nauwkeurigheid van alle score-uitvoer berekenen. Vervolgens kunt u de gemiddelde nauwkeurigheid vastleggen als een metrische waarde met behulp van promptflow_sdk.log_metric()
. Metrische gegevens moeten numeriek zijn, zoals float
of int
. Logboekregistratie van metrische gegevens van tekenreekstypen wordt niet ondersteund.
Het volgende codefragment is een voorbeeld van het berekenen van de algehele nauwkeurigheid door de nauwkeurigheidsscore grades
van alle gegevenspunten te berekenen. De algehele nauwkeurigheid wordt vastgelegd als een metrische waarde met behulp van 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
Omdat u deze functie aanroept in het Python-knooppunt, hoeft u deze niet ergens anders toe te wijzen en kunt u de metrische gegevens later bekijken. Nadat u deze evaluatiemethode in een batchuitvoering hebt gebruikt, kunt u de metrische gegevens weergeven met de algehele prestaties door het tabblad Metrische gegevens te selecteren wanneer u uitvoer bekijkt.
Een evaluatiestroom ontwikkelen
Als u uw eigen evaluatiestroom wilt ontwikkelen, selecteert u Maken op de pagina Azure Machine Learning-studio Stroomprompt. Op de pagina Een nieuwe stroom maken kunt u het volgende doen:
Selecteer Maken op de evaluatiestroomkaart onder Maken per type. Deze selectie bevat een sjabloon voor het ontwikkelen van een nieuwe evaluatiemethode.
Selecteer Evaluatiestroom in de galerie Verkennen en selecteer een van de beschikbare ingebouwde stromen. Selecteer Details weergeven om een samenvatting van elke stroom op te halen en selecteer Klonen om de stroom te openen en aan te passen. Met de wizard Stroom maken kunt u de stroom voor uw eigen scenario wijzigen.
Scores berekenen voor elk gegevenspunt
Evaluatiestromen berekenen scores en metrische gegevens voor stromen die worden uitgevoerd op gegevenssets. De eerste stap in evaluatiestromen is het berekenen van scores voor elke afzonderlijke gegevensuitvoer.
In de ingebouwde evaluatiestroom voor classificatienauwkeurigheid wordt bijvoorbeeld de grade
nauwkeurigheid van elke door een stroom gegenereerde uitvoer gemeten naar de bijbehorende grondwaar, berekend in het Python-knooppunt van het cijfer .
Als u de evaluatiestroomsjabloon gebruikt, berekent u deze score in het knooppunt line_process Python. U kunt het line_process Python-knooppunt ook vervangen door een LLM-knooppunt (Large Language Model) om een LLM te gebruiken om de score te berekenen of meerdere knooppunten gebruiken om de berekening uit te voeren.
U geeft de uitvoer van dit knooppunt op als de uitvoer van de evaluatiestroom, wat aangeeft dat de uitvoer de scores zijn die voor elk gegevensvoorbeeld worden berekend. U kunt ook redenering uitvoeren voor meer informatie en het is dezelfde ervaring als het definiëren van uitvoer in een standaardstroom.
Metrische gegevens berekenen en vastleggen
De volgende stap in de evaluatie is het berekenen van algemene metrische gegevens om de uitvoering te evalueren. U berekent metrische gegevens in een Python-knooppunt waarvoor de optie Aggregatie is geselecteerd. Dit knooppunt neemt de scores van het vorige berekeningsknooppunt op en ordent deze in een lijst en berekent vervolgens de totale waarden.
Als u de evaluatiesjabloon gebruikt, wordt deze score berekend in het statistische knooppunt. In het volgende codefragment ziet u de sjabloon voor het aggregatieknooppunt.
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
U kunt uw eigen aggregatielogica gebruiken, zoals het berekenen van score gemiddelde, mediaan of standaarddeviatie.
Registreer de metrische gegevens met behulp van de promptflow.log_metric()
functie. U kunt meerdere metrische gegevens registreren in één evaluatiestroom. Metrische gegevens moeten numeriek (float
/int
) zijn.
Evaluatiestromen gebruiken
Nadat u uw eigen evaluatiestroom en metrische gegevens hebt gemaakt, kunt u de stroom gebruiken om de prestaties van een standaardstroom te beoordelen. U kunt bijvoorbeeld een QnA-stroom evalueren om te testen hoe deze presteert op een grote gegevensset.
Open in Azure Machine Learning-studio de stroom die u wilt evalueren en selecteer Evalueren in de bovenste menubalk.
Voltooi in de wizard Batch uitvoeren en evalueren de basisinstellingen en de Batch-uitvoeringsinstellingen om de gegevensset te laden voor het testen en configureren van de invoertoewijzing. Zie Batchuitvoering verzenden en een stroom evalueren voor meer informatie.
In de stap Evaluatie selecteren kunt u een of meer van uw aangepaste evaluaties of ingebouwde evaluaties selecteren om uit te voeren. Aangepaste evaluatie bevat alle evaluatiestromen die u hebt gemaakt, gekloond of aangepast. Evaluatiestromen die zijn gemaakt door anderen die aan hetzelfde project werken, worden niet weergegeven in deze sectie.
Geef in het scherm Evaluatie configureren de bronnen op van de invoergegevens die nodig zijn voor de evaluatiemethode. De kolom grondwaar kan bijvoorbeeld afkomstig zijn van een gegevensset. Als voor uw evaluatiemethode geen gegevens uit een gegevensset nodig zijn, hoeft u geen gegevensset te selecteren of naar kolommen met gegevenssets in de sectie invoertoewijzing te verwijzen.
In de sectie Evaluatieinvoertoewijzing kunt u de bronnen van vereiste invoer voor de evaluatie aangeven. Als de gegevensbron afkomstig is van de uitvoer van de uitvoering, stelt u de bron in op
${run.outputs.[OutputName]}
. Als de gegevens afkomstig zijn uit uw testgegevensset, stelt u de bron in op${data.[ColumnName]}
. Alle beschrijvingen die u voor de gegevensinvoer instelt, worden hier ook weergegeven. Zie Batchuitvoering verzenden en een stroom evalueren voor meer informatie.Belangrijk
Als uw evaluatiestroom een LLM-knooppunt heeft of een verbinding nodig heeft om referenties of andere sleutels te gebruiken, moet u de verbindingsgegevens invoeren in de sectie Verbinding van dit scherm om de evaluatiestroom te kunnen gebruiken.
Selecteer Beoordelen en verzenden en selecteer vervolgens Verzenden om de evaluatiestroom uit te voeren.
Nadat de evaluatiestroom is voltooid, kunt u de scores op exemplaarniveau zien door batchuitvoeringen weergeven te selecteren. Bekijk de meest recente uitvoer van batchuitvoeringen boven aan de stroom die u hebt geëvalueerd.> Selecteer de evaluatieuitvoering in de vervolgkeuzelijst Gerelateerde resultaten toevoegen om het cijfer voor elke gegevensrij weer te geven.