LlamaIndex: Sản phẩm, kỹ thuật và đánh giá
Điểm AI 50/100

Hướng dẫn

LlamaParse ra mắt tính năng Enriched Forms: Giải mã lý do các mô hình VLM gặp khó khi đọc biểu mẫu

(giờ Việt Nam)

Tóm tắt AI

LlamaIndex giới thiệu tính năng Enriched Forms cho LlamaParse, giúp chuyển đổi biểu mẫu thành cấu trúc JSON với tọa độ bounding box chính xác, hỗ trợ kiểm định dữ liệu hiệu quả thay vì dựa vào VLM.

Chính văn · Bản dịch AI

Why VLMs Can't Read a Form

Biểu mẫu là một trong những loại tài liệu quan trọng nhất đối với doanh nghiệp vì nó chứa dữ liệu đầu vào có giá trị từ khách hàng. Ngoài những phức tạp đi kèm với việc xử lý một lượng lớn văn bản, bao gồm chi phí, hiệu suất và độ trễ, biểu mẫu còn đặt ra những thách thức độc đáo cho bất kỳ quy trình xử lý tài liệu nào. Các biểu mẫu có cấu trúc phức tạp hơn những gì Markdown tiêu chuẩn có thể biểu diễn, bao gồm các ô nhập văn bản (textboxes), ô chọn (checkboxes) và nhãn (labels) gắn liền với các thành phần điều khiển bên cạnh chúng. Vì vậy, hệ thống phải được thiết kế đặc biệt dựa trên các đặc tính đó. Đầu ra phải nhất quán trên các tài liệu cùng loại biểu mẫu, đồng thời vẫn phải thích ứng được với những thay đổi xuất hiện trong cùng một biểu mẫu qua từng năm. Hiện tượng "ảo giác" (hallucination) gây hại ở đây nhiều hơn hầu hết các nơi khác. Một biểu mẫu có cấu trúc chính xác, và chỉ cần sai lệch một chút cũng làm thay đổi hoàn toàn ý nghĩa. Việc một ô chọn được đánh dấu hay không có thể làm thay đổi toàn bộ hành động tiếp theo mà một tác nhân (agent) thực hiện. Trong bài viết này, chúng tôi sẽ giải thích lý do tại sao các biểu mẫu cần quy trình xử lý đặc biệt, cách LlamaParse biểu diễn biểu mẫu dưới dạng JSON và các kiểu lỗi chúng tôi ghi nhận được khi yêu cầu một VLM thực hiện công việc tương tự.

Tại sao biểu mẫu cần một trình phân tích cú pháp chuyên dụng

Có nhiều cách để phân tích một biểu mẫu, nhưng chúng khác biệt rất nhiều về chi phí và hiệu suất. Mặc dù VLM là một công cụ hợp lý để thử nghiệm (chỉ cần gửi ảnh chụp màn hình trang và yêu cầu xuất kết quả), nó đi kèm với những thách thức về chi phí, độ tin cậy và hiệu suất. VLM được tối ưu hóa cho suy luận tổng quát, không phải cho xử lý tài liệu hoặc biểu mẫu, và kết quả của chính chúng tôi đã cho thấy rằng khả năng suy luận tăng lên không thực sự mang lại kết quả phân tích tốt hơn.

LlamaParse được xây dựng đặc biệt để hiểu tài liệu và biểu mẫu, và nó vượt trội hơn VLM tổng quát với chi phí thấp hơn nhiều. Về mặt kỹ thuật, các quy trình tối ưu hóa để trích xuất nội dung biểu mẫu và phát hiện khung bao (bounding box) được tinh chỉnh và kết hợp để đạt kết quả tối ưu.

Biểu diễn cấu trúc của biểu mẫu

Một biểu mẫu có thể được biểu diễn dưới dạng cây các trường (fields) và phần (sections). Các trường có thể có id, label và value. Thuộc tính field xác định loại đầu vào, trong khi section nhóm các trường liên quan trong các items. Dưới đây là các ví dụ về các phần tử trong lược đồ biểu mẫu của chúng tôi:

  • id: Mã định danh ngắn được in trên biểu mẫu, chẳng hạn như 1, 12a hoặc e.
  • label: Văn bản mô tả trường đó là gì.
  • field: Loại của một trường.
  • – checkbox: Một ô với giá trị boolean: true khi được chọn và false khi không được chọn.
  • – text: Một trường để nhập văn bản, bao gồm số, ngày tháng và địa chỉ.
  • – signature: Một ô chữ ký, đã ký hoặc chưa ký.
  • value: Giá trị của trường. Văn bản cho trường văn bản; true/false cho checkbox hoặc chữ ký.

Đối tượng biểu mẫu có thể được biểu diễn thông qua các lớp Pydantic đơn giản dưới đây. Cấu trúc có thể có mức độ lồng nhau tùy ý, tùy thuộc vào độ phức tạp thực tế của biểu mẫu.

Xem lược đồ tối giản dưới dạng các lớp Pydantic:

Mã
from typing import Literal, Optional, Union
from pydantic import BaseModel, Field


class FormField(BaseModel):
    """One entry on the form: a text box, a checkbox, a signature, or a group of choices."""
    field: Literal["text", "checkbox", ...]
    id: Optional[str] = Field(None, description="Designator printed on the form, e.g. '1', '12a', 'e'")
    label: Optional[str] = Field(None, description="Caption printed next to the field")
    value: Optional[Union[str, bool]] = Field(
        None, description="Verbatim text for a text field; true/false for a checkbox or signature")


class FormSection(BaseModel):
    """A printed grouping of fields, such as 'Part III' or 'Sign Here'."""
    type: Literal["section"] = "section"
    id: Optional[str] = None
    label: Optional[str] = None
    items: list["FormNode"]


FormNode = Union[FormField, FormSection]

Hình 1 cho thấy cách các thành phần này khớp với nhau trên mẫu W-2. Ô 1 trở thành một trường văn bản với id là 1, nhãn là Wages, tips, other compensation và giá trị là 230303.03. Ô 13 vẫn là một nhóm với ba tùy chọn checkbox. Ô 9 trống, nhưng vẫn xuất hiện trong đầu ra.

Xem đầu ra JSON

Mã
[
  {
    "type": "field",
    "field": "text",
    "id": "a",
    "label": "Employee's social security number",
    "value": "827-37-3673"
  },
  {
    "type": "field",
    "field": "text",
    "id": "1",
    "label": "Wages, tips, other compensation",
    "value": "230303.03"
  },
  {
    "type": "field",
    "field": "text",
    "id": "9",
    "isEmpty": true
  },
  {
    "type": "field",
    "field": "multi_select",
    "id": "13",
    "valueItems": [
      {
        "type": "field",
        "field": "checkbox",
        "label": "Statutory employee",
        "value": false
      },
      {
        "type": "field",
        "field": "checkbox",
        "label": "Retirement plan",
        "value": false
      },
      {
        "type": "field",
        "field": "checkbox",
        "label": "Third-party sick pay",
        "value": true
      }
    ]
  },
  {
    "type": "section",
    "id": "12a",
    "items": [
      {
        "type": "field",
        "field": "text",
        "label": "Code",
        "value": "H"
      },
      {
        "type": "field",
        "field": "text",
        "value": "8699"
      }
    ]
  }
]

Hình 1. Nguồn W-2 và biểu diễn biểu mẫu. Trang nguồn xuất hiện ở bên trái; một mảng json biểu diễn biểu mẫu xuất hiện ở bên phải.

Mặc dù việc xác định đúng từng trường là bước đầu tiên, đầu ra cũng phải bảo toàn mối quan hệ giữa chúng. Hình 2 cho thấy hai phần được in với các trường “Date” riêng biệt. Một danh sách phẳng các phần tử sẽ làm mất thông tin về việc mỗi trường thuộc phần nào, do đó hai trường Date sẽ trở nên không thể phân biệt được. Thay vào đó, LlamaParse nhóm các trường vào các phần, liên kết mỗi trường ngày tháng với phần cha tương ứng của nó.

Hình 2. Các phần của Biểu mẫu 1040 được hiển thị: “Sign Here” và “Paid Preparer Use Only.” Mỗi phần chứa trường “Date” riêng.

Mã
Flat list   
{ signature, "Your signature" }, { text, "Date" }, { text, "Phone no." },
{ text, "Preparer's name" }, { text, "Date" }      // 54 nodes, 0 sections

Grouped into sections    
{ section, "Sign Here",              items: [ signature, Date, occupation, Phone ] },
{ section, "Paid Preparer Use Only", items: [ name, Date, PTIN, Phone ] }
                                                            // 28 nodes, 5 sections

Mặc dù trạng thái checkbox là một trong những thông tin quan trọng nhất trên biểu mẫu, đây là một nhiệm vụ đầy thách thức đối với VLM vì nó phải đọc toàn bộ trang và dự đoán tất cả nội dung cùng một lúc. Để khắc phục những hạn chế mà chúng tôi quan sát thấy với VLM, chúng tôi đã xây dựng một bộ phân loại trạng thái checkbox nhỏ, xem xét từng ô riêng lẻ để dự đoán trạng thái và sửa lại dự đoán ban đầu của mô hình.

Hình 3 cho thấy một ô đã được đánh dấu mà VLM ban đầu trả về là false; bộ phân loại của chúng tôi sửa lại và đọc nó là đã chọn với độ tin cậy cao.

Hình 3. Sửa lỗi trạng thái checkbox trên W-9. Ô checkbox “Other” đã được đánh dấu, mặc dù VLM ban đầu ghi nhận là false; mô hình trạng thái checkbox sửa nó thành true.

Mã
before   { "field": "checkbox", "label": "Other (see instructions)", "value": false }
                                          // state model reads that box checked @ 0.94
after    { "field": "checkbox", "label": "Other (see instructions)", "value": true }
                                          // value corrected, box untouched

Tìm các ô (boxes)

Bounding box là hình chữ nhật bao quanh đối tượng bạn quan tâm, trên biểu mẫu nghĩa là một trường văn bản hoặc checkbox. Bounding box rất quan trọng đối với các ứng dụng hạ nguồn và xác minh vì chúng cho phép người đánh giá và người dùng đối chiếu với tài liệu gốc.

Hình 4. Bounding box trên Biểu mẫu 1040. Các ô màu xanh dương đánh dấu trường văn bản, và các ô màu xanh lá cây đánh dấu checkbox.

VLM đặc biệt hoạt động kém hiệu quả ở nhiệm vụ này và sẽ bỏ sót rất nhiều bounding box. Sử dụng một mô hình xác định (deterministic model) chuyên dụng mang lại kết quả vượt trội hơn nhiều. Tại LlamaIndex, chúng tôi đã huấn luyện một mô hình phát hiện bounding box biểu mẫu từ đầu để cải thiện đáng kể hiệu suất cho nhiệm vụ này.

Hình 5 cho thấy một lỗi quan sát được: VLM thô chỉ trả về hai ô trong lần chạy này, trong khi LlamaParse phát hiện tất cả các bounding box của trường.

Hình 5. Một lỗi phát hiện của VLM quan sát được trên biểu mẫu kỹ thuật số. Đầu ra toàn trang của VLM chứa hai ô bị đặt sai vị trí—một ở lề trống và một ở mũi tên in sẵn (trái); một phần cắt từ đầu ra của LlamaParse trên cùng trang cho thấy các ô nhập liệu được phát hiện trong phần cost-of-goods (phải).

Ngay cả khi VLM xuất được nhiều bounding box, việc căn chỉnh các ô được phát hiện đó với các ô thực tế trên trang vẫn là một thách thức đối với VLM.

Hình 6. Căn chỉnh bounding-box trên W-4 đã quét. Các ô của VLM bị lệch giữa các hàng nhập liệu (trái), trong khi LlamaParse đặt một ô trên mỗi trong số 23 ô nhập liệu (phải).

Cũng có một số mô hình mã nguồn mở (open-weight), chẳng hạn như FFDNet, được xây dựng và đo lường trên các biểu mẫu kỹ thuật số, và chúng có thể đánh bại VLM về độ chính xác. Tuy nhiên, các mô hình mở này được huấn luyện và đánh giá trên các biểu mẫu kỹ thuật số trống, và thiếu sự mạnh mẽ đối với dữ liệu đã điền hoặc bản quét. Hình 7 cho thấy những lỗi này trên mẫu W-9 đã điền, trong khi Hình 8 cho thấy chúng trên mẫu 1040 đã quét và điền tay.

Hình 7. Phát hiện bounding-box trên W-9 đã điền. Bộ phát hiện mã nguồn mở bỏ sót các ô đã chọn và dịch chuyển các ô ra khỏi các giá trị đã nhập (trái); LlamaParse định vị các trường và các thành phần điều khiển trên cùng trang (phải).

Hình 8. Phát hiện bounding-box trên Biểu mẫu 1040 đã quét và điền tay. Bộ phát hiện mã nguồn mở trả về một ô trên trường trống (trái); LlamaParse phát hiện tất cả 51 trường đã điền trên cùng trang (phải).

Gán các ô cho các trường

Việc gán (attribution) là yếu tố giúp quá trình xử lý tài liệu bằng AI có thể kiểm chứng được. Sau khi các bounding box đã được trích xuất, chúng phải được liên kết ngược lại với phần tử biểu mẫu mà chúng tương ứng.

Bài gốc còn tiếp — xem tiếp tại bài gốc ↗

LlamaParseLlamaIndexVLMXử lý tài liệuJSON

Bài viết được AI dịch và tổng hợp tự động từ LlamaIndex: Sản phẩm, kỹ thuật và đánh giá. Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.

LlamaParse ra mắt tính năng Enriched Forms: Giải mã lý do các mô hình VLM gặp khó khi đọc biểu mẫu | AIHOT.vn