پردازنده های تخصصی با Document AI (Python)

۱. مقدمه

در این آزمایشگاه کد، شما یاد خواهید گرفت که چگونه از پردازنده‌های تخصصی هوش مصنوعی اسناد برای طبقه‌بندی و تجزیه اسناد تخصصی با پایتون استفاده کنید. برای طبقه‌بندی و تقسیم‌بندی، از یک فایل pdf نمونه حاوی فاکتورها، رسیدها و صورت‌حساب‌های کاربردی استفاده خواهیم کرد. سپس، برای تجزیه و استخراج موجودیت، از یک فاکتور به عنوان نمونه استفاده خواهیم کرد.

این رویه و کد نمونه با هر سند تخصصی پشتیبانی شده توسط Document AI کار خواهد کرد.

پیش‌نیازها

این آزمایشگاه کد بر اساس محتوای ارائه شده در سایر آزمایشگاه‌های کد هوش مصنوعی اسناد ساخته شده است.

توصیه می‌شود قبل از ادامه، Codelabs زیر را تکمیل کنید:

آنچه یاد خواهید گرفت

  • نحوه طبقه‌بندی و شناسایی نقاط تقسیم برای اسناد تخصصی.
  • نحوه استخراج موجودیت‌های طرح‌واره‌ای با استفاده از پردازنده‌های تخصصی.

آنچه نیاز دارید

  • یک پروژه ابری گوگل
  • یک مرورگر، مانند کروم یا فایرفاکس
  • آشنایی با پایتون ۳

۲. راه‌اندازی

این آزمایشگاه کد فرض می‌کند که شما مراحل راه‌اندازی هوش مصنوعی سند که در آزمایشگاه کد مقدماتی ذکر شده است را تکمیل کرده‌اید.

لطفا قبل از ادامه مراحل زیر را انجام دهید:

همچنین باید Pandas ، یک کتابخانه محبوب تحلیل داده برای پایتون، را نصب کنید.

pip3 install --upgrade pandas

۳. پردازنده‌های تخصصی ایجاد کنید

ابتدا باید نمونه‌هایی از پردازنده‌هایی که برای این آموزش استفاده خواهید کرد را ایجاد کنید.

  1. در کنسول، به نمای کلی پلتفرم هوش مصنوعی اسناد بروید
  2. روی ایجاد پردازنده کلیک کنید، به پایین بروید تا به بخش تخصصی (Specialized) برسید و گزینه تقسیم‌کننده اسناد تدارکات (Procurement Doc Splitter) را انتخاب کنید.
  3. نام آن را «codelab-procurement-splitter» (یا هر نام دیگری که به خاطر دارید) بگذارید و نزدیک‌ترین ناحیه را در لیست انتخاب کنید.
  4. برای ایجاد پردازنده خود، روی ایجاد کلیک کنید
  5. شناسه پردازنده را کپی کنید. بعداً باید از آن در کد خود استفاده کنید.
  6. مراحل ۲ تا ۶ را با Invoice Parser (که می‌توانید آن را "codelab-invoice-parser" بنامید) تکرار کنید.

پردازنده را در کنسول تست کنید

شما می‌توانید با آپلود یک سند، تجزیه‌کننده فاکتور را در کنسول آزمایش کنید.

روی «بارگذاری سند» کلیک کنید و یک فاکتور برای تجزیه و تحلیل انتخاب کنید. اگر فاکتور نمونه‌ای برای استفاده ندارید، می‌توانید آن را دانلود و استفاده کنید.

فاکتور گوگل.png

خروجی شما باید به این شکل باشد:

تجزیه‌کننده فاکتور.png

۴. دانلود نمونه اسناد

ما چند نمونه سند برای استفاده در این آزمایشگاه داریم.

شما می‌توانید فایل‌های PDF را با استفاده از لینک‌های زیر دانلود کنید. سپس آنها را در نمونه Cloud Shell آپلود کنید .

از طرف دیگر، می‌توانید آنها را با استفاده از gsutil از مخزن ذخیره‌سازی ابری عمومی ما دانلود کنید.

gsutil cp gs://cloud-samples-data/documentai/codelabs/specialized-processors/procurement_multi_document.pdf .

gsutil cp gs://cloud-samples-data/documentai/codelabs/specialized-processors/google_invoice.pdf .

۵. اسناد را طبقه‌بندی و تقسیم کنید

در این مرحله شما از API پردازش آنلاین برای طبقه‌بندی و تشخیص نقاط تقسیم منطقی برای یک سند چند صفحه‌ای استفاده خواهید کرد.

همچنین اگر می‌خواهید چندین فایل ارسال کنید یا اگر اندازه فایل از حداکثر تعداد صفحات پردازش آنلاین بیشتر است، می‌توانید از API پردازش دسته‌ای استفاده کنید. می‌توانید نحوه انجام این کار را در آزمایشگاه کد OCR هوش مصنوعی سند (Document AI OCR Codelab) مرور کنید.

کد لازم برای ارسال درخواست API برای یک پردازنده عمومی، جدا از شناسه پردازنده، یکسان است.

تقسیم‌کننده/طبقه‌بندی‌کننده تدارکات

یک فایل به نام classification.py ایجاد کنید و از کد زیر استفاده کنید.

به جای PROCUREMENT_SPLITTER_ID ، شناسه‌ی پردازنده‌ی تقسیم‌کننده‌ی تدارکات که قبلاً ایجاد کرده‌اید را قرار دهید. به جای YOUR_PROJECT_ID و YOUR_PROJECT_LOCATION ، به ترتیب شناسه‌ی پروژه‌ی ابری و موقعیت پردازنده‌ی خود را قرار دهید.

طبقه‌بندی.py

import pandas as pd
from google.cloud import documentai_v1 as documentai


def online_process(
    project_id: str,
    location: str,
    processor_id: str,
    file_path: str,
    mime_type: str,
) -> documentai.Document:
    """
    Processes a document using the Document AI Online Processing API.
    """

    opts = {"api_endpoint": f"{location}-documentai.googleapis.com"}

    # Instantiates a client
    documentai_client = documentai.DocumentProcessorServiceClient(client_options=opts)

    # The full resource name of the processor, e.g.:
    # projects/project-id/locations/location/processor/processor-id
    # You must create new processors in the Cloud Console first
    resource_name = documentai_client.processor_path(project_id, location, processor_id)

    # Read the file into memory
    with open(file_path, "rb") as file:
        file_content = file.read()

    # Load Binary Data into Document AI RawDocument Object
    raw_document = documentai.RawDocument(content=file_content, mime_type=mime_type)

    # Configure the process request
    request = documentai.ProcessRequest(name=resource_name, raw_document=raw_document)

    # Use the Document AI client to process the sample form
    result = documentai_client.process_document(request=request)

    return result.document


PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "YOUR_PROJECT_LOCATION"  # Format is 'us' or 'eu'
PROCESSOR_ID = "PROCUREMENT_SPLITTER_ID"  # Create processor in Cloud Console

# The local file in your current working directory
FILE_PATH = "procurement_multi_document.pdf"
# Refer to https://cloud.google.com/document-ai/docs/processors-list
# for supported file types
MIME_TYPE = "application/pdf"

document = online_process(
    project_id=PROJECT_ID,
    location=LOCATION,
    processor_id=PROCESSOR_ID,
    file_path=FILE_PATH,
    mime_type=MIME_TYPE,
)

print("Document processing complete.")

types = []
confidence = []
pages = []

# Each Document.entity is a classification
for entity in document.entities:
    classification = entity.type_
    types.append(classification)
    confidence.append(f"{entity.confidence:.0%}")

    # entity.page_ref contains the pages that match the classification
    pages_list = []
    for page_ref in entity.page_anchor.page_refs:
        pages_list.append(page_ref.page)
    pages.append(pages_list)

# Create a Pandas Dataframe to print the values in tabular format.
df = pd.DataFrame({"Classification": types, "Confidence": confidence, "Pages": pages})

print(df)

خروجی شما باید چیزی شبیه به این باشد:

$ python3 classification.py
Document processing complete.
         Classification Confidence Pages
0     invoice_statement       100%   [0]
1     receipt_statement        98%   [1]
2                 other        81%   [2]
3     utility_statement       100%   [3]
4  restaurant_statement       100%   [4]

توجه داشته باشید که تقسیم‌کننده/طبقه‌بندی‌کننده تدارکات، انواع اسناد را در صفحات 0-1 و 3-4 به درستی شناسایی کرده است.

صفحه ۲ شامل یک فرم مصرف پزشکی عمومی است، بنابراین طبقه‌بندی‌کننده به درستی آن را به عنوان other شناسایی کرده است.

۶. استخراج موجودیت‌ها

اکنون می‌توانید موجودیت‌های طرح‌واره‌شده، شامل نمرات اطمینان، ویژگی‌ها و مقادیر نرمال‌شده را از فایل‌ها استخراج کنید.

کد مربوط به ایجاد درخواست API مشابه مرحله قبل است و می‌توان آن را با درخواست‌های آنلاین یا دسته‌ای انجام داد.

ما به اطلاعات زیر از نهادها دسترسی خواهیم داشت:

  • نوع موجودیت
    • (مثلاً invoice_date ، receiver_name ، total_amount )
  • مقادیر خام
    • مقادیر داده‌ها همانطور که در فایل سند اصلی ارائه شده است.
  • مقادیر نرمال شده
    • در صورت لزوم، مقادیر داده‌ها در قالب نرمال‌شده و استاندارد.
    • همچنین می‌تواند شامل غنی‌سازی از نمودار دانش سازمانی باشد.
  • ارزش‌های اعتماد به نفس
    • مدل چقدر «مطمئن» است که مقادیر دقیق هستند.

برخی از انواع موجودیت‌ها، مانند line_item می‌توانند شامل ویژگی‌هایی باشند که موجودیت‌های تو در تو هستند، مانند line_item/unit_price و line_item/description .

این مثال، ساختار تو در تو را برای سهولت مشاهده، مسطح می‌کند.

تجزیه‌کننده فاکتور

یک فایل به نام extraction.py ایجاد کنید و از کد زیر استفاده کنید.

INVOICE_PARSER_ID با شناسه‌ی پردازشگر تجزیه‌گر فاکتور که قبلاً ایجاد کرده‌اید جایگزین کنید و از فایل google_invoice.pdf استفاده کنید.

استخراج.py

import pandas as pd
from google.cloud import documentai_v1 as documentai


def online_process(
    project_id: str,
    location: str,
    processor_id: str,
    file_path: str,
    mime_type: str,
) -> documentai.Document:
    """
    Processes a document using the Document AI Online Processing API.
    """

    opts = {"api_endpoint": f"{location}-documentai.googleapis.com"}

    # Instantiates a client
    documentai_client = documentai.DocumentProcessorServiceClient(client_options=opts)

    # The full resource name of the processor, e.g.:
    # projects/project-id/locations/location/processor/processor-id
    # You must create new processors in the Cloud Console first
    resource_name = documentai_client.processor_path(project_id, location, processor_id)

    # Read the file into memory
    with open(file_path, "rb") as file:
        file_content = file.read()

    # Load Binary Data into Document AI RawDocument Object
    raw_document = documentai.RawDocument(content=file_content, mime_type=mime_type)

    # Configure the process request
    request = documentai.ProcessRequest(name=resource_name, raw_document=raw_document)

    # Use the Document AI client to process the sample form
    result = documentai_client.process_document(request=request)

    return result.document


PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "YOUR_PROJECT_LOCATION"  # Format is 'us' or 'eu'
PROCESSOR_ID = "INVOICE_PARSER_ID"  # Create processor in Cloud Console

# The local file in your current working directory
FILE_PATH = "google_invoice.pdf"
# Refer to https://cloud.google.com/document-ai/docs/processors-list
# for supported file types
MIME_TYPE = "application/pdf"

document = online_process(
    project_id=PROJECT_ID,
    location=LOCATION,
    processor_id=PROCESSOR_ID,
    file_path=FILE_PATH,
    mime_type=MIME_TYPE,
)

types = []
raw_values = []
normalized_values = []
confidence = []

# Grab each key/value pair and their corresponding confidence scores.
for entity in document.entities:
    types.append(entity.type_)
    raw_values.append(entity.mention_text)
    normalized_values.append(entity.normalized_value.text)
    confidence.append(f"{entity.confidence:.0%}")

    # Get Properties (Sub-Entities) with confidence scores
    for prop in entity.properties:
        types.append(prop.type_)
        raw_values.append(prop.mention_text)
        normalized_values.append(prop.normalized_value.text)
        confidence.append(f"{prop.confidence:.0%}")

# Create a Pandas Dataframe to print the values in tabular format.
df = pd.DataFrame(
    {
        "Type": types,
        "Raw Value": raw_values,
        "Normalized Value": normalized_values,
        "Confidence": confidence,
    }
)

print(df)

خروجی شما باید چیزی شبیه به این باشد:

$ python3 extraction.py
                     Type                                         Raw Value Normalized Value Confidence
0                     vat                                         $1,767.97                        100%
1          vat/tax_amount                                         $1,767.97      1767.97 USD         0%
2            invoice_date                                      Sep 24, 2019       2019-09-24        99%
3                due_date                                      Sep 30, 2019       2019-09-30        99%
4            total_amount                                         19,647.68         19647.68        97%
5        total_tax_amount                                         $1,767.97      1767.97 USD        92%
6              net_amount                                         22,379.39         22379.39        91%
7           receiver_name                                       Jane Smith,                         83%
8              invoice_id                                         23413561D                         67%
9        receiver_address  1600 Amphitheatre Pkway\nMountain View, CA 94043                         66%
10         freight_amount                                           $199.99       199.99 USD        56%
11               currency                                                 $              USD        53%
12          supplier_name                                        John Smith                         19%
13         purchase_order                                         23413561D                          1%
14        receiver_tax_id                                         23413561D                          0%
15          supplier_iban                                         23413561D                          0%
16              line_item                   9.99 12 12 ft HDMI cable 119.88                        100%
17   line_item/unit_price                                              9.99             9.99        90%
18     line_item/quantity                                                12               12        77%
19  line_item/description                                  12 ft HDMI cable                         39%
20       line_item/amount                                            119.88           119.88        92%
21              line_item           12 399.99 27" Computer Monitor 4,799.88                        100%
22     line_item/quantity                                                12               12        80%
23   line_item/unit_price                                            399.99           399.99        91%
24  line_item/description                              27" Computer Monitor                         15%
25       line_item/amount                                          4,799.88          4799.88        94%
26              line_item                Ergonomic Keyboard 12 59.99 719.88                        100%
27  line_item/description                                Ergonomic Keyboard                         32%
28     line_item/quantity                                                12               12        76%
29   line_item/unit_price                                             59.99            59.99        92%
30       line_item/amount                                            719.88           719.88        94%
31              line_item                     Optical mouse 12 19.99 239.88                        100%
32  line_item/description                                     Optical mouse                         26%
33     line_item/quantity                                                12               12        78%
34   line_item/unit_price                                             19.99            19.99        91%
35       line_item/amount                                            239.88           239.88        94%
36              line_item                      Laptop 12 1,299.99 15,599.88                        100%
37  line_item/description                                            Laptop                         83%
38     line_item/quantity                                                12               12        76%
39   line_item/unit_price                                          1,299.99          1299.99        90%
40       line_item/amount                                         15,599.88         15599.88        94%
41              line_item              Misc processing fees 899.99 899.99 1                        100%
42  line_item/description                              Misc processing fees                         22%
43   line_item/unit_price                                            899.99           899.99        91%
44       line_item/amount                                            899.99           899.99        94%
45     line_item/quantity                                                 1                1        63%

۷. اختیاری: پردازنده‌های تخصصی دیگر را امتحان کنید

شما با موفقیت از هوش مصنوعی اسناد برای تدارکات، برای طبقه‌بندی اسناد و تجزیه فاکتور استفاده کردید. هوش مصنوعی اسناد همچنین از سایر راه‌حل‌های تخصصی ذکر شده در اینجا پشتیبانی می‌کند:

شما می‌توانید همین رویه را دنبال کنید و از همان کد برای مدیریت هر پردازنده تخصصی استفاده کنید.

اگر مایلید سایر راه‌حل‌های تخصصی را امتحان کنید، می‌توانید آزمایشگاه را با انواع پردازنده‌های دیگر و اسناد نمونه تخصصی دوباره اجرا کنید.

اسناد نمونه

در اینجا چند نمونه سند وجود دارد که می‌توانید برای امتحان کردن سایر پردازنده‌های تخصصی از آنها استفاده کنید.

راه حل

نوع پردازنده

سند

هویت

تجزیه کننده گواهینامه رانندگی ایالات متحده

وام

تقسیم‌کننده و طبقه‌بندی‌کننده وام

وام

تجزیه‌گر W9

قراردادها

تجزیه‌کننده قرارداد

می‌توانید سایر اسناد نمونه و خروجی پردازنده را در مستندات پیدا کنید.

۸. تبریک

تبریک می‌گوییم، شما با موفقیت از هوش مصنوعی اسناد برای طبقه‌بندی و استخراج داده‌ها از اسناد تخصصی استفاده کردید. ما شما را تشویق می‌کنیم که با انواع دیگر اسناد تخصصی آزمایش کنید.

پاکسازی

برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش:

  • در کنسول ابری، به صفحه مدیریت منابع بروید.
  • در لیست پروژه‌ها، پروژه خود را انتخاب کنید و سپس روی حذف کلیک کنید.
  • در کادر محاوره‌ای، شناسه پروژه را تایپ کنید و سپس برای حذف پروژه، روی خاموش کردن (Shut down) کلیک کنید.

اطلاعات بیشتر

با این Codelabs های بعدی، به یادگیری در مورد هوش مصنوعی اسناد ادامه دهید.

منابع

مجوز

این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.