Mengevaluasi performa

Document AI menghasilkan metrik evaluasi, seperti presisi dan perolehan, untuk membantu Anda menentukan performa prediktif pemroses.

Metrik evaluasi ini dihasilkan dengan membandingkan entitas yang ditampilkan oleh pemroses (prediksi) dengan anotasi dalam dokumen pengujian. Jika pemroses tidak memiliki set pengujian, Anda harus membuat set data dan memberi label pada dokumen pengujian terlebih dahulu.

Menjalankan evaluasi

Evaluasi otomatis dijalankan setiap kali Anda melatih atau melatih ulang versi prosesor.

Anda juga dapat menjalankan evaluasi secara manual. Hal ini diperlukan untuk menghasilkan metrik yang diperbarui setelah Anda mengubah set pengujian, atau jika Anda mengevaluasi versi pemroses terlatih.

UI Web

  1. Di konsol Google Cloud, buka halaman Processors dan pilih prosesor Anda.

    Buka halaman Processors

  2. Di tab Evaluate & Test, pilih Version prosesor yang akan dievaluasi, lalu klik Run new evaluation.

Setelah selesai, halaman akan berisi metrik evaluasi untuk semua label dan untuk setiap label individual.

Python

Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Document AI.

Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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}")

Mendapatkan hasil evaluasi

UI Web

  1. Di konsol Google Cloud, buka halaman Processors dan pilih prosesor Anda.

    Buka halaman Processors

  2. Di tab Evaluate & Test, pilih Version dari prosesor untuk melihat evaluasi.

Setelah selesai, halaman akan berisi metrik evaluasi untuk semua label dan untuk setiap label individual.

Python

Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Document AI.

Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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}")

Mencantumkan semua evaluasi untuk versi pemroses

Python

Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Document AI.

Untuk melakukan autentikasi ke Document AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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")

Metrik evaluasi untuk semua label

evaluate-the-performance-of-processors-1

Metrik untuk Semua label dihitung berdasarkan jumlah positif benar, positif palsu, dan negatif palsu dalam set data di semua label, sehingga diberi bobot berdasarkan frekuensi kemunculan setiap label dalam set data. Untuk definisi istilah ini, lihat Metrik evaluasi untuk setiap label.

  • Presisi: proporsi prediksi yang cocok dengan anotasi dalam set pengujian. Ditentukan sebagai True Positives / (True Positives + False Positives)

  • Perolehan: proporsi anotasi dalam set pengujian yang diprediksi dengan benar. Ditentukan sebagai True Positives / (True Positives + False Negatives)

  • Skor F1: rata-rata harmonis presisi dan perolehan, yang menggabungkan presisi dan perolehan menjadi satu metrik, dengan memberikan bobot yang sama untuk keduanya. Ditentukan sebagai 2 * (Precision * Recall) / (Precision + Recall)

Metrik evaluasi untuk setiap label

evaluate-the-performance-of-processors-2

  • Positif Benar: entitas yang diprediksi yang cocok dengan anotasi dalam dokumen pengujian. Untuk mengetahui informasi selengkapnya, lihat perilaku pencocokan.

  • Positif Palsu: entity yang diprediksi yang tidak cocok dengan anotasi apa pun dalam dokumen pengujian.

  • Negatif Palsu: anotasi dalam dokumen pengujian yang tidak cocok dengan entitas yang diprediksi.

    • Negatif Palsu (Di Bawah Nilai Minimum): anotasi dalam dokumen pengujian yang akan cocok dengan entitas yang diprediksi, tetapi nilai keyakinan entitas yang diprediksi berada di bawah nilai minimum keyakinan yang ditentukan.

Ambang batas keyakinan

Logika evaluasi mengabaikan prediksi apa pun dengan keyakinan di bawah Nilai Minimum Keyakinan yang ditentukan, meskipun prediksi tersebut benar. AI Dokumen menyediakan daftar Negatif Palsu (Di Bawah Nilai Minimum), yang merupakan anotasi yang akan memiliki kecocokan jika nilai minimum keyakinan ditetapkan lebih rendah.

AI Dokumen secara otomatis menghitung nilai minimum optimal, yang memaksimalkan scor F1, dan secara default, menetapkan nilai minimum keyakinan ke nilai optimal ini.

Anda bebas memilih nilai minimum keyakinan Anda sendiri dengan memindahkan panel penggeser. Secara umum, nilai minimum keyakinan yang lebih tinggi akan menghasilkan:

  • presisi yang lebih tinggi, karena prediksi lebih cenderung benar.
  • recall yang lebih rendah, karena ada lebih sedikit prediksi.

Entitas tabular

Metrik untuk label induk tidak dihitung dengan langsung menghitung rata-rata metrik turunan, tetapi dengan menerapkan nilai minimum keyakinan induk ke semua label turunannya dan menggabungkan hasilnya.

Nilai minimum yang optimal untuk induk adalah nilai nilai minimum keyakinan yang, jika diterapkan ke semua turunan, akan menghasilkan skor F1 maksimum untuk induk.

Perilaku pencocokan

Entity yang diprediksi cocok dengan anotasi jika:

Perhatikan bahwa jenis dan nilai teks adalah satu-satunya yang digunakan untuk pencocokan. Informasi lainnya, seperti anchor teks dan kotak pembatas (kecuali entitas tabel yang dijelaskan di bawah) tidak digunakan.

Label kemunculan tunggal versus multi-kejadian

Label kemunculan tunggal memiliki satu nilai per dokumen (misalnya, ID invoice) meskipun nilai tersebut dianotasi beberapa kali dalam dokumen yang sama (misalnya, ID invoice muncul di setiap halaman dokumen yang sama). Meskipun beberapa anotasi memiliki teks yang berbeda, anotasi tersebut dianggap sama. Dengan kata lain, jika entity yang diprediksi cocok dengan anotasi, entity tersebut akan dihitung sebagai kecocokan. Anotasi tambahan dianggap sebagai sebutan duplikat dan tidak berkontribusi pada jumlah positif benar, positif palsu, atau negatif palsu.

Label multi-kejadian dapat memiliki beberapa nilai yang berbeda. Dengan demikian, setiap entity dan anotasi yang diprediksi akan dipertimbangkan dan dicocokkan secara terpisah. Jika dokumen berisi N anotasi untuk label multi-kejadian, maka dapat ada N kecocokan dengan entitas yang diprediksi. Setiap entity dan anotasi yang diprediksi dihitung secara independen sebagai positif benar, positif palsu, atau negatif palsu.

Pencocokan Fuzzy

Tombol Pencocokan Buram memungkinkan Anda memperketat atau melonggarkan beberapa aturan pencocokan untuk mengurangi atau meningkatkan jumlah kecocokan.

Misalnya, tanpa pencocokan fuzzy, string ABC tidak cocok dengan abc karena huruf besar. Namun, dengan pencocokan fuzzy, keduanya cocok.

Jika pencocokan fuzzy diaktifkan, berikut adalah perubahan aturan:

  • Normalisasi spasi kosong: menghapus spasi kosong di awal dan di akhir serta mengabungkan spasi kosong perantara yang berurutan (termasuk baris baru) menjadi satu spasi.

  • Penghapusan tanda baca di awal/akhir: menghapus karakter tanda baca awal-akhir berikut !,.:;-"?|.

  • Pencocokan yang tidak peka huruf besar/kecil: mengonversi semua karakter menjadi huruf kecil.

  • Normalisasi uang: Untuk label dengan jenis data money, hapus simbol mata uang di awal dan akhir.

Entitas tabular

Entitas dan anotasi induk tidak memiliki nilai teks dan dicocokkan berdasarkan kotak pembatas gabungan turunannya. Jika hanya ada satu induk yang diprediksi dan satu induk yang dianotasi, keduanya akan otomatis dicocokkan, terlepas dari bounding box.

Setelah induk dicocokkan, turunannya akan dicocokkan seolah-olah merupakan entity non-tabel. Jika induk tidak cocok, Document AI tidak akan mencoba mencocokkan turunan induk tersebut. Artinya, entity turunan dapat dianggap salah, bahkan dengan konten teks yang sama, jika entity induknya tidak cocok.

Entitas induk / turunan adalah fitur Pratinjau dan hanya didukung untuk tabel dengan satu lapisan bertingkat.

Mengekspor metrik evaluasi

  1. Di konsol Google Cloud, buka halaman Processors dan pilih prosesor Anda.

    Buka halaman Processors

  2. Di tab Evaluasi & Pengujian, klik Download Metrik, untuk mendownload metrik evaluasi sebagai file JSON.