Leistung auswerten

Document AI generiert Bewertungsmesswerte wie Precision und Recall, damit Sie die Vorhersageleistung Ihrer Prozessoren ermitteln können.

Diese Bewertungsmesswerte werden durch einen Vergleich der vom Prozessor zurückgegebenen Entitäten (Vorhersagen) mit den Annotationen in den Testdokumenten generiert. Wenn Ihr Prozessor keinen Testsatz hat, müssen Sie zuerst einen Datensatz erstellen und die Testdokumente labeln.

Bewertung ausführen

Eine Bewertung wird automatisch ausgeführt, wenn Sie eine Prozessorversion trainieren oder aktualisieren.

Sie können eine Bewertung auch manuell ausführen. Dies ist erforderlich, um aktualisierte Messwerte zu generieren, nachdem Sie den Testsatz geändert haben, oder wenn Sie eine vorab trainierte Prozessorversion bewerten.

Web-UI

  1. Rufen Sie in der Google Cloud Console die Seite Prozessoren auf und wählen Sie Ihren Prozessor aus.

    Zur Seite „Prozessoren“

  2. Wählen Sie auf dem Tab Bewerten und testen die Version des zu bewertenden Prozessors aus und klicken Sie dann auf Neue Bewertung ausführen.

Danach enthält die Seite Bewertungsmesswerte für alle Labels und für jedes einzelne Label.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Document AI Python API.

Richten Sie zur Authentifizierung bei Document AI Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


from google.api_core.client_options import ClientOptions
from google.cloud import documentai  # type: ignore

# TODO(developer): Uncomment these variables before running the sample.
# project_id = 'YOUR_PROJECT_ID'
# location = 'YOUR_PROCESSOR_LOCATION' # Format is 'us' or 'eu'
# processor_id = 'YOUR_PROCESSOR_ID'
# processor_version_id = 'YOUR_PROCESSOR_VERSION_ID'
# gcs_input_uri = # Format: gs://bucket/directory/


def evaluate_processor_version_sample(
    project_id: str,
    location: str,
    processor_id: str,
    processor_version_id: str,
    gcs_input_uri: str,
) -> None:
    # You must set the api_endpoint if you use a location other than 'us', e.g.:
    opts = ClientOptions(api_endpoint=f"{location}-documentai.googleapis.com")

    client = documentai.DocumentProcessorServiceClient(client_options=opts)

    # The full resource name of the processor version
    # e.g. `projects/{project_id}/locations/{location}/processors/{processor_id}/processorVersions/{processor_version_id}`
    name = client.processor_version_path(
        project_id, location, processor_id, processor_version_id
    )

    evaluation_documents = documentai.BatchDocumentsInputConfig(
        gcs_prefix=documentai.GcsPrefix(gcs_uri_prefix=gcs_input_uri)
    )

    # NOTE: Alternatively, specify a list of GCS Documents
    #
    # gcs_input_uri = "gs://bucket/directory/file.pdf"
    # input_mime_type = "application/pdf"
    #
    # gcs_document = documentai.GcsDocument(
    #     gcs_uri=gcs_input_uri, mime_type=input_mime_type
    # )
    # gcs_documents = [gcs_document]
    # evaluation_documents = documentai.BatchDocumentsInputConfig(
    #     gcs_documents=documentai.GcsDocuments(documents=gcs_documents)
    # )
    #

    request = documentai.EvaluateProcessorVersionRequest(
        processor_version=name,
        evaluation_documents=evaluation_documents,
    )

    # Make EvaluateProcessorVersion request
    # Continually polls the operation until it is complete.
    # This could take some time for larger files
    operation = client.evaluate_processor_version(request=request)
    # Print operation details
    # Format: projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID
    print(f"Waiting for operation {operation.operation.name} to complete...")
    # Wait for operation to complete
    response = documentai.EvaluateProcessorVersionResponse(operation.result())

    # After the operation is complete,
    # Print evaluation ID from operation response
    print(f"Evaluation Complete: {response.evaluation}")

Ergebnisse einer Bewertung abrufen

Web-UI

  1. Rufen Sie in der Google Cloud Console die Seite Prozessoren auf und wählen Sie Ihren Prozessor aus.

    Zur Seite „Prozessoren“

  2. Wählen Sie auf dem Tab Bewerten und testen die Version des Prozessors aus, um die Bewertung aufzurufen.

Danach enthält die Seite Bewertungsmesswerte für alle Labels und für jedes einzelne Label.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Document AI Python API.

Richten Sie zur Authentifizierung bei Document AI Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


from google.api_core.client_options import ClientOptions
from google.cloud import documentai  # type: ignore

# TODO(developer): Uncomment these variables before running the sample.
# project_id = 'YOUR_PROJECT_ID'
# location = 'YOUR_PROCESSOR_LOCATION' # Format is 'us' or 'eu'
# processor_id = 'YOUR_PROCESSOR_ID' # Create processor before running sample
# processor_version_id = 'YOUR_PROCESSOR_VERSION_ID'
# evaluation_id = 'YOUR_EVALUATION_ID'


def get_evaluation_sample(
    project_id: str,
    location: str,
    processor_id: str,
    processor_version_id: str,
    evaluation_id: str,
) -> None:
    # You must set the api_endpoint if you use a location other than 'us', e.g.:
    opts = ClientOptions(api_endpoint=f"{location}-documentai.googleapis.com")

    client = documentai.DocumentProcessorServiceClient(client_options=opts)

    # The full resource name of the evaluation
    # e.g. `projects/{project_id}/locations/{location}/processors/{processor_id}/processorVersions/{processor_version_id}`
    evaluation_name = client.evaluation_path(
        project_id, location, processor_id, processor_version_id, evaluation_id
    )
    # Make GetEvaluation request
    evaluation = client.get_evaluation(name=evaluation_name)

    create_time = evaluation.create_time
    document_counters = evaluation.document_counters

    # Print the Evaluation Information
    # Refer to https://cloud.google.com/document-ai/docs/reference/rest/v1beta3/projects.locations.processors.processorVersions.evaluations
    # for more information on the available evaluation data
    print(f"Create Time: {create_time}")
    print(f"Input Documents: {document_counters.input_documents_count}")
    print(f"\tInvalid Documents: {document_counters.invalid_documents_count}")
    print(f"\tFailed Documents: {document_counters.failed_documents_count}")
    print(f"\tEvaluated Documents: {document_counters.evaluated_documents_count}")

Alle Bewertungen für eine Prozessorversion auflisten

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Document AI Python API.

Richten Sie zur Authentifizierung bei Document AI Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


from google.api_core.client_options import ClientOptions
from google.cloud import documentai  # type: ignore

# TODO(developer): Uncomment these variables before running the sample.
# project_id = 'YOUR_PROJECT_ID'
# location = 'YOUR_PROCESSOR_LOCATION' # Format is 'us' or 'eu'
# processor_id = 'YOUR_PROCESSOR_ID' # Create processor before running sample
# processor_version_id = 'YOUR_PROCESSOR_VERSION_ID'


def list_evaluations_sample(
    project_id: str, location: str, processor_id: str, processor_version_id: str
) -> None:
    # You must set the api_endpoint if you use a location other than 'us', e.g.:
    opts = ClientOptions(api_endpoint=f"{location}-documentai.googleapis.com")

    client = documentai.DocumentProcessorServiceClient(client_options=opts)

    # The full resource name of the processor version
    # e.g. `projects/{project_id}/locations/{location}/processors/{processor_id}/processorVersions/{processor_version_id}`
    parent = client.processor_version_path(
        project_id, location, processor_id, processor_version_id
    )

    evaluations = client.list_evaluations(parent=parent)

    # Print the Evaluation Information
    # Refer to https://cloud.google.com/document-ai/docs/reference/rest/v1beta3/projects.locations.processors.processorVersions.evaluations
    # for more information on the available evaluation data
    print(f"Evaluations for Processor Version {parent}")

    for evaluation in evaluations:
        print(f"Name: {evaluation.name}")
        print(f"\tCreate Time: {evaluation.create_time}\n")

Bewertungsmesswerte für alle Labels

evaluate-the-performance-of-processors-1

Die Messwerte für Alle Labels werden anhand der Anzahl der echten positiven, falsch positiven und falsch negativen Ergebnisse im Datensatz für alle Labels berechnet. Sie werden also nach der Häufigkeit gewichtet, mit der jedes Label im Datensatz vorkommt. Definitionen dieser Begriffe finden Sie unter Bewertungsmesswerte für einzelne Labels.

  • Präzision:Der Anteil der Vorhersagen, die mit den Anmerkungen im Testsatz übereinstimmen. Definiert als True Positives / (True Positives + False Positives)

  • Recall:Der Anteil der Anmerkungen im Testsatz, die korrekt vorhergesagt werden. Definiert als True Positives / (True Positives + False Negatives)

  • F1-Wert:Der harmonische Mittelwert von Precision und Recall, der beide Messwerte in einem einzigen Messwert kombiniert und ihnen dieselbe Gewichtung zuweist. Definiert als 2 * (Precision * Recall) / (Precision + Recall)

Bewertungsmesswerte für einzelne Labels

evaluate-the-performance-of-processors-2

  • Richtig positive Ergebnisse:Die vorhergesagten Entitäten, die mit einer Anmerkung im Testdokument übereinstimmen. Weitere Informationen finden Sie unter Abgleichsverhalten.

  • Falsch positive Ergebnisse:Die vorhergesagten Entitäten, die mit keiner Anmerkung im Testdokument übereinstimmen.

  • Falsch-Negativ-Ergebnisse: Die Anmerkungen im Testdokument, die mit keiner der vorhergesagten Entitäten übereinstimmen.

    • Falsch negative Ergebnisse (unter dem Grenzwert): Die Anmerkungen im Testdokument, die mit einer vorhergesagten Entität übereinstimmen würden, deren Konfidenzwert jedoch unter dem angegebenen Konfidenzgrenzwert liegt.

Konfidenzwert

Die Bewertungslogik ignoriert alle Vorhersagen mit einem Konfidenzwert unter dem angegebenen Konfidenzschwellenwert, auch wenn die Vorhersage korrekt ist. Document AI bietet eine Liste der Falsch-Negativ-Ergebnisse (unter dem Grenzwert). Das sind die Anmerkungen, die übereinstimmen würden, wenn der Konfidenzgrenzwert niedriger festgelegt wäre.

Document AI berechnet automatisch den optimalen Grenzwert, mit dem der F1-Wert maximiert wird. Der Konfidenzgrenzwert wird standardmäßig auf diesen optimalen Wert festgelegt.

Sie können den Konfidenzgrenzwert selbst festlegen, indem Sie den Schieberegler bewegen. Im Allgemeinen führt ein höherer Konfidenzgrenzwert zu:

  • höhere Precision, da die Vorhersagen mit höherer Wahrscheinlichkeit korrekt sind.
  • niedrigerer Recall, da es weniger Vorhersagen gibt.

Tabellarische Entitäten

Die Messwerte für ein übergeordnetes Label werden nicht durch direktes Mitteln der untergeordneten Messwerte berechnet, sondern durch Anwenden des Konfidenzgrenzwerts des übergeordneten Labels auf alle untergeordneten Labels und Aggregieren der Ergebnisse.

Der optimale Grenzwert für das übergeordnete Element ist der Konfidenzgrenzwert, der bei Anwendung auf alle untergeordneten Elemente den maximalen F1-Wert für das übergeordnete Element ergibt.

Abgleichsverhalten

Eine vorhergesagte Entität stimmt mit einer Anmerkung überein, wenn:

Für den Abgleich werden nur Typ und Textwert verwendet. Andere Informationen wie Textanker und Begrenzungsboxen (mit Ausnahme der unten beschriebenen tabellarischen Entitäten) werden nicht verwendet.

Labels für einzelne und mehrere Vorkommen

Labels mit nur einem Vorkommen haben einen Wert pro Dokument (z. B. Rechnungs-ID), auch wenn dieser Wert im selben Dokument mehrmals angegeben ist (z. B. wenn die Rechnungs-ID auf jeder Seite desselben Dokuments erscheint). Auch wenn die verschiedenen Anmerkungen unterschiedliche Texte enthalten, werden sie als gleich betrachtet. Mit anderen Worten: Wenn eine vorhergesagte Entität mit einer der Anmerkungen übereinstimmt, wird sie als Übereinstimmung gezählt. Die zusätzlichen Anmerkungen gelten als doppelte Erwähnungen und werden nicht zu den Werten für richtig positive, falsch positive oder falsch negative Ergebnisse gezählt.

Labels mit mehreren Vorkommen können mehrere unterschiedliche Werte haben. So werden alle vorhergesagten Entitäten und Anmerkungen berücksichtigt und separat abgeglichen. Wenn ein Dokument N Anmerkungen für ein Label mit mehreren Vorkommen enthält, kann es N Übereinstimmungen mit den vorhergesagten Entitäten geben. Jede vorhergesagte Entität und Anmerkung wird unabhängig als richtig positiv, falsch positiv oder falsch negativ gezählt.

Ungenaue Übereinstimmung

Mit der Ein/Aus-Schaltfläche Keine exakte Übereinstimmung können Sie einige der Abgleichsregeln verschärfen oder lockern, um die Anzahl der Übereinstimmungen zu verringern oder zu erhöhen.

Ohne den unscharfen Abgleich stimmt der String ABC beispielsweise aufgrund der Groß- und Kleinschreibung nicht mit abc überein. Bei der schiefwinkligen Übereinstimmung ist das jedoch der Fall.

Wenn die ungenaue Übereinstimmung aktiviert ist, gelten die folgenden Regeländerungen:

  • Normalisierung von Leerzeichen:Entfernt voran- und nachgestellte Leerzeichen und komprimiert aufeinanderfolgende Zwischenräume (einschließlich Zeilenumbrüchen) zu einzelnen Leerzeichen.

  • Voran- und nachgestellte Satzzeichen entfernen: Hiermit werden die folgenden voran- und nachgestellten Satzzeichen entfernt: !,.:;-"?|.

  • Groß- und Kleinschreibung ignorieren:Alle Zeichen werden in Kleinbuchstaben umgewandelt.

  • Normalisierung von Geldbeträgen:Entfernen Sie bei Labels mit dem Datentyp money die vor- und nachgestellten Währungssymbole.

Tabellarische Entitäten

Übergeordnete Entitäten und Anmerkungen haben keine Textwerte und werden anhand der kombinierten Begrenzungsboxen ihrer untergeordneten Elemente abgeglichen. Wenn es nur ein vorhergesagtes übergeordnetes Element und ein annotiertes übergeordnetes Element gibt, werden sie unabhängig von den Begrenzungsrahmen automatisch abgeglichen.

Sobald übergeordnete Entitäten zugeordnet wurden, werden ihre untergeordneten Entitäten so zugeordnet, als wären sie nicht tabellarische Entitäten. Wenn übergeordnete Elemente nicht abgeglichen werden, versucht Document AI nicht, ihre untergeordneten Elemente abzugleichen. Das bedeutet, dass untergeordnete Entitäten auch bei gleichem Textinhalt als falsch eingestuft werden können, wenn ihre übergeordneten Entitäten nicht übereinstimmen.

Eltern-/Kind-Entitäten sind eine Vorschaufunktion und werden nur für Tabellen mit einer Verschachtelungsebene unterstützt.

Bewertungsmesswerte exportieren

  1. Rufen Sie in der Google Cloud Console die Seite Prozessoren auf und wählen Sie Ihren Prozessor aus.

    Zur Seite „Prozessoren“

  2. Klicken Sie auf dem Tab Bewerten und testen auf Messwerte herunterladen, um die Bewertungsmesswerte als JSON-Datei herunterzuladen.