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

Hướng dẫn

Tại sao các mô hình VLM lại 'mù' trước biểu mẫu? Giải pháp cấu trúc hóa dữ liệu từ LlamaParse

(giờ Việt Nam)

Tóm tắt AI

LlamaParse chỉ ra rằng các VLM đa năng không tối ưu cho việc đọc biểu mẫu. Thay vào đó, công cụ này sử dụng cấu trúc JSON dạng cây để phân loại chính xác các trường dữ liệu, giúp giải quyết triệt để vấn đề nhầm lẫn thông tin với chi phí thấp hơn.

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

Why VLMs Can't Read Forms?

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ý 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 riêng biệt 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 hộp văn bản (textbox), hộp kiểm (checkbox) và nhãn (label) gắn liền với các thành phần điều khiển bên cạnh chúng. Do đó, 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 với những thay đổi xuất hiện từ năm này sang năm khác. Hiện tượng "ảo giác" (hallucination) gây hậu quả nghiêm trọng ở đây hơn hầu hết các trường hợp khác. Một biểu mẫu có cấu trúc chính xác, và chỉ cần sai lệch nhỏ cũng làm thay đổi hoàn toàn ý nghĩa. Việc một hộp kiểm được chọn hay không có thể làm thay đổi toàn bộ hành động xử lý tiếp theo của tác nhân (agent). Trong bài viết này, chúng tôi sẽ giải thích lý do tại sao 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 dạng lỗi chúng tôi ghi nhận được khi yêu cầu 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 cú pháp 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 việc tăng cường khả năng suy luậ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 chuyên biệt cho việc 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 gồm các trường (field) và phần (section). 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 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: Định danh ngắn gọn được in trên biểu mẫu, ví dụ 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 hộp 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 hộp chữ ký, đã ký hoặc chưa ký.
  • value: Giá trị của trường. Văn bản cho trường text; true/false cho checkbox hoặc signature.

Đố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 text với id là 1, label là "Wages, tips, other compensation" và value 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ả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 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. Để vượt qua 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ỏ, kiểm tra từng hộp 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 hộp đã đượ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 (checked) với độ tin cậy cao.

Hình 3. Sửa lỗi trạng thái checkbox trên mẫu W-9. Hộp kiểm “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 lại 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 kiếm các hộp

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 Mẫu 1040. Các hộp màu xanh dương đánh dấu trường văn bản, và hộp 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 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 hộp 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.

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

Cũng có một số mô hình trọng số mở, 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. Nhưng 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 viết tay được quét.

Gán nhãn cho các hộp

Gán nhãn (Attribution) là yếu tố giúp việc 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 tương ứng.

Hình 9. Hình chữ nhật được phát hiện cho dòng 8c được gán cho nhãn quản lý nó, “Cancellation of debt.”

Một VLM tổng quát có thể thử thực hiện việc gán nhãn này, nhưng với độ tin cậy hạn chế. Việc khớp một bounding box với nội dung đúng đòi hỏi phải hiểu ý nghĩa của từng thành phần trong biểu mẫu. Độ phức tạp tăng lên khi biểu mẫu trở nên dày đặc hơn. Thật không may, việc khớp có thể thất bại âm thầm ngay cả khi văn bản được đọc hoàn hảo. Hình 10 cho thấy một lỗi gán nhãn của VLM: mô hình trả về giá trị đúng cho dòng 8b là 70870, nhưng lại gắn bounding box của nó vào dòng 8a.

Hình 10. Một lỗi gán nhãn âm thầm, và các dòng tương tự được xử lý chính xác. Trái: VLM tổng quát phiên âm đúng giá trị của dòng 8b nhưng gắn bounding box vào dòng 8a. Phải: LlamaParse gán đúng giá trị cho dòng 8b.

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

LlamaParseVLMTrích xuất dữ liệuXử lý tài liệuAI

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.

Tại sao các mô hình VLM lại 'mù' trước biểu mẫu? Giải pháp cấu trúc hóa dữ liệu từ LlamaParse | AIHOT.vn