5 điểm bởi GN⁺ 2024-08-10 | 1 bình luận | Chia sẻ qua WhatsApp
  • Được thiết kế để cải thiện đáng kể chất lượng đầu ra của nhận dạng ký tự quang học (OCR)
  • Tận dụng các kỹ thuật xử lý ngôn ngữ tự nhiên hiện đại và mô hình ngôn ngữ lớn (LLM) để chuyển đổi văn bản OCR thô thành các tài liệu có độ chính xác cao, được định dạng tốt và dễ đọc

Tính năng

  • Chuyển đổi PDF thành hình ảnh
  • OCR bằng Tesseract
  • Sửa lỗi nâng cao bằng LLM (cục bộ hoặc dựa trên API)
  • Chia nhỏ văn bản thông minh để xử lý hiệu quả
  • Tùy chọn định dạng Markdown
  • Loại bỏ header và số trang (tùy chọn)
  • Đánh giá chất lượng đầu ra cuối cùng
  • Hỗ trợ LLM cục bộ và các nhà cung cấp API trên đám mây (OpenAI, Anthropic)
  • Xử lý bất đồng bộ để cải thiện hiệu năng
  • Ghi log chi tiết để theo dõi quy trình và gỡ lỗi
  • Tăng tốc GPU cho suy luận LLM cục bộ

Yêu cầu

  • Python 3.12+
  • Công cụ Tesseract OCR
  • Thư viện PDF2Image
  • PyTesseract
  • OpenAI API (tùy chọn)
  • Anthropic API (tùy chọn)
  • Hỗ trợ LLM cục bộ (tùy chọn, yêu cầu mô hình GGUF tương thích)

Cách sử dụng

  1. Đặt tệp PDF vào thư mục dự án
  2. Cập nhật biến input_pdf_file_path trong hàm main() thành tên tệp PDF
  3. Chạy script:
    python llm_aided_ocr.py  
    
  4. Script sẽ tạo nhiều tệp đầu ra, bao gồm văn bản hậu xử lý cuối cùng

Cách hoạt động

Dự án LLM-Aided OCR sử dụng quy trình nhiều bước để chuyển đầu ra OCR thô thành văn bản chất lượng cao, dễ đọc:

  1. Chuyển đổi PDF: dùng pdf2image để chuyển PDF đầu vào thành hình ảnh
  2. OCR: áp dụng Tesseract OCR để trích xuất văn bản từ hình ảnh
  3. Chia khối văn bản: tách đầu ra OCR thô thành các khối có thể quản lý
  4. Sửa lỗi: mỗi khối được xử lý bằng LLM để sửa lỗi OCR và cải thiện khả năng đọc
  5. Định dạng Markdown (tùy chọn): định dạng lại văn bản đã sửa thành Markdown sạch và nhất quán
  6. Đánh giá chất lượng: so sánh chất lượng đầu ra cuối cùng với văn bản OCR gốc bằng đánh giá dựa trên LLM

Tổng hợp của GN⁺

  • Dự án LLM-Aided OCR là một hệ thống tận dụng các kỹ thuật xử lý ngôn ngữ tự nhiên hiện đại và mô hình ngôn ngữ lớn để cải thiện đáng kể chất lượng đầu ra OCR
  • Hệ thống chuyển PDF thành hình ảnh, trích xuất văn bản bằng Tesseract, sau đó dùng LLM để sửa lỗi và tái cấu trúc dưới dạng Markdown
  • Hỗ trợ cả LLM cục bộ lẫn LLM dựa trên đám mây, đồng thời tối ưu hiệu năng bằng xử lý bất đồng bộ
  • Dự án cung cấp nhiều tính năng nâng cao để tăng độ chính xác và khả năng đọc của đầu ra OCR, đặc biệt hữu ích khi xử lý tài liệu lớn
  • Các dự án có chức năng tương tự gồm ABBYY FineReader, Adobe Acrobat OCR, v.v.

1 bình luận

 
GN⁺ 2024-08-10
Ý kiến trên Hacker News
  • Việc ra mắt mô hình schnell mới có thể mở ra khả năng có được bộ dữ liệu để tạo ra các mô hình thị giác SOTA

    • Hiện tại, phần lớn các mô hình thị giác vẫn dựa trên các caption CLIP/BLIP cũ
    • Các mô hình như LLAVA hay phi-llava vẫn bị giới hạn bởi các thành phần thị giác được tiền huấn luyện sẵn
    • Pipeline của Tessy và LLM hoạt động hiệu quả, đồng thời mở ra khả năng để các mô hình đa ngôn ngữ đọc và dịch các tài liệu đã được số hóa
    • LLAVA-PHI3 có thể phiên âm tiếng Hebrew một cách nhất quán nhưng vẫn có vấn đề ảo giác
    • Khi có mô hình thị giác SOTA mới, chất lượng được kỳ vọng sẽ cải thiện đáng kể
  • Trong các bài báo khoa học, mô hình nougat của Meta là phù hợp nhất

    • Với hóa đơn và hồ sơ, mô hình donut tốt hơn
    • Cả hai mô hình đều có thể thất bại trong một số trường hợp, và cần dùng LLM để xử lý vấn đề
    • Trong quá trình OCR, các chi tiết bị mất đi nên khó xử lý chính xác bảng biểu và biểu đồ
    • Google Gemini có cung cấp khả năng tinh chỉnh cho hình ảnh, nhưng chưa thử
    • Prompt few-shot giúp ngăn ảo giác của LLM và đưa đầu ra về đúng định dạng được yêu cầu
  • Kết quả từng thử trước đây cho thấy nó hoạt động tốt trong 90% trường hợp

    • Với các tài liệu như hợp đồng thuê nhà, có khó khăn ở phần số liệu và tên riêng (tên người hoặc địa danh/địa chỉ)
    • LLM không thể tự biết chính xác tiền thuê nhà là bao nhiêu hay tên của một người cụ thể là gì
  • Nếu chuyển các trang PDF sang PNG rồi yêu cầu gpt4 phiên âm hình ảnh thì độ chính xác rất cao

    • Chính xác hơn Tesseract hay OCR cổ điển
  • Đã từng thử dùng Tesseract để nhận dạng OCR tiếng Trung cách đây 10 năm

    • Sau khi nhận dạng văn bản tiếng Anh thì khá dễ dọn dẹp
    • Với tiếng Trung, nếu chỉ một ký tự bị nhận sai thì rất khó phát hiện lỗi
    • Đã dùng thủ thuật xử lý ảnh để biến đổi ảnh rồi đưa vào Tesseract, sau đó bỏ phiếu chọn kết quả tốt nhất dựa trên tần suất thống kê của các câu được nhận dạng
    • Độ chính xác được cải thiện đáng kể
  • Đã có kết quả tốt hơn khi dùng PaddlePaddle

    • Đã viết một triển khai Python dùng PPOCRv3 để cắt sách ở cấp độ từ
    • PPOCRv4 không có giới hạn về kích thước pixel nên có thể "dùng ngay"
    • Mô hình phát hiện của PPOCRv3 hoạt động tốt hơn
  • Có người hỏi liệu đã thử các gói OCR khác chưa

    • Từng gặp vấn đề Tesseract đọc "77" thành "7"
  • Việc tinh chỉnh prompt để mô hình hiểu rõ hơn là rất quan trọng

    • Đã suy nghĩ rất nhiều về LLM và tài liệu
    • Cho rằng OCR sắp trở thành một bài toán được giải quyết hoàn toàn
    • Thách thức là làm sao mô tả hiệu quả sự mơ hồ và chi tiết của các tài liệu phức tạp cho mô hình AI
  • Đang làm một công việc tương tự là phân tích rubric và bài nộp của sinh viên

    • Quan tâm đến việc tích hợp với GPT-4V
    • Muốn liên hệ qua email
  • Có người hỏi về cách tiếp cận dùng prompt "fix this text" để sửa lỗi OCR

    • Đề xuất dùng mô hình completion thay vì mô hình chat, đưa đầu vào theo từng token và lấy xác suất token tiếp theo
    • Cho rằng cách này có thể giảm ảo giác đáng kể