5 คะแนน โดย GN⁺ 2024-08-10 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ออกแบบมาเพื่อยกระดับคุณภาพของผลลัพธ์จากการรู้จำอักขระด้วยแสง (OCR) อย่างมาก
  • ใช้เทคโนโลยีการประมวลผลภาษาธรรมชาติสมัยใหม่และโมเดลภาษาขนาดใหญ่ (LLM) เพื่อแปลงข้อความ OCR ดิบให้เป็นเอกสารที่มีความแม่นยำสูง จัดรูปแบบดี และอ่านง่าย

ฟีเจอร์

  • แปลง PDF เป็นรูปภาพ
  • ทำ OCR ด้วย Tesseract
  • การแก้ไขข้อผิดพลาดขั้นสูงด้วย LLM (แบบโลคัลหรือผ่าน API)
  • การแบ่งข้อความอัจฉริยะเพื่อการประมวลผลที่มีประสิทธิภาพ
  • ตัวเลือกการจัดรูปแบบ Markdown
  • ซ่อนส่วนหัวและหมายเลขหน้า (ทางเลือก)
  • ประเมินคุณภาพของผลลัพธ์สุดท้าย
  • รองรับ LLM แบบโลคัลและผู้ให้บริการ API บนคลาวด์ (OpenAI, Anthropic)
  • การประมวลผลแบบอะซิงโครนัสเพื่อเพิ่มประสิทธิภาพ
  • การบันทึกล็อกอย่างละเอียดเพื่อติดตามกระบวนการและดีบัก
  • การเร่งความเร็วด้วย GPU สำหรับการอนุมานของ LLM แบบโลคัล

ข้อกำหนด

  • Python 3.12+
  • Tesseract OCR engine
  • ไลบรารี PDF2Image
  • PyTesseract
  • OpenAI API (ไม่บังคับ)
  • Anthropic API (ไม่บังคับ)
  • รองรับ LLM แบบโลคัล (ไม่บังคับ ต้องใช้โมเดล GGUF ที่เข้ากันได้)

วิธีใช้งาน

  1. วางไฟล์ PDF ไว้ในไดเรกทอรีของโปรเจ็กต์
  2. อัปเดตตัวแปร input_pdf_file_path ในฟังก์ชัน main() ให้เป็นชื่อไฟล์ PDF
  3. รันสคริปต์:
    python llm_aided_ocr.py  
    
  4. สคริปต์จะสร้างไฟล์เอาต์พุตหลายไฟล์ ซึ่งรวมถึงข้อความหลังการประมวลผลขั้นสุดท้าย

วิธีการทำงาน

โปรเจ็กต์ LLM-Aided OCR ใช้กระบวนการหลายขั้นตอนเพื่อแปลงผลลัพธ์ OCR ดิบให้เป็นข้อความคุณภาพสูงที่อ่านง่าย:

  1. การแปลง PDF: ใช้ pdf2image เพื่อแปลง PDF อินพุตเป็นรูปภาพ
  2. OCR: ใช้ Tesseract OCR เพื่อดึงข้อความจากรูปภาพ
  3. การแบ่งข้อความ: แบ่งผลลัพธ์ OCR ดิบออกเป็นส่วนย่อยที่จัดการได้
  4. การแก้ไขข้อผิดพลาด: แต่ละส่วนย่อยจะถูกประมวลผลด้วย LLM เพื่อแก้ไขข้อผิดพลาดของ OCR และเพิ่มความสามารถในการอ่าน
  5. การจัดรูปแบบ Markdown (ทางเลือก): จัดรูปแบบข้อความที่แก้ไขแล้วใหม่ให้เป็น Markdown ที่สะอาดและสม่ำเสมอ
  6. การประเมินคุณภาพ: เปรียบเทียบคุณภาพของผลลัพธ์สุดท้ายกับข้อความ OCR ต้นฉบับผ่านการประเมินด้วย LLM

สรุปโดย GN⁺

  • โปรเจ็กต์ LLM-Aided OCR เป็นระบบที่ใช้เทคโนโลยีการประมวลผลภาษาธรรมชาติสมัยใหม่และโมเดลภาษาขนาดใหญ่เพื่อยกระดับคุณภาพของผลลัพธ์ OCR อย่างมาก
  • แปลง PDF เป็นรูปภาพ ดึงข้อความด้วย Tesseract จากนั้นใช้ LLM เพื่อแก้ไขข้อผิดพลาดและจัดรูปแบบใหม่เป็น Markdown
  • รองรับทั้ง LLM แบบโลคัลและบนคลาวด์ พร้อมเพิ่มประสิทธิภาพด้วยการประมวลผลแบบอะซิงโครนัส
  • โปรเจ็กต์นี้มีฟีเจอร์ขั้นสูงหลากหลายเพื่อเพิ่มความแม่นยำและความสามารถในการอ่านของผลลัพธ์ OCR โดยมีประโยชน์อย่างยิ่งกับการประมวลผลเอกสารขนาดใหญ่
  • โปรเจ็กต์ที่มีฟังก์ชันคล้ายกัน ได้แก่ ABBYY FineReader, Adobe Acrobat OCR เป็นต้น

1 ความคิดเห็น

 
GN⁺ 2024-08-10
ความคิดเห็นจาก Hacker News
  • การเปิดตัวโมเดล schnell ใหม่อาจทำให้สามารถสร้างชุดข้อมูลสำหรับผลิตโมเดลวิชันระดับ SOTA ได้

    • ปัจจุบันโมเดลวิชันส่วนใหญ่ยังอิงจากคำบรรยายภาพ CLIP/BLIP รุ่นเก่า
    • โมเดลอย่าง LLAVA หรือ phi-llava ก็ยังคงถูกจำกัดโดยคอมโพเนนต์วิชันที่พรีเทรนไว้ล่วงหน้า
    • ไปป์ไลน์ของ Tessy และ LLM มีประสิทธิภาพ และเปิดโอกาสให้โมเดลหลายภาษาสามารถอ่านและแปลงานที่ถูกดิจิไทซ์ได้
    • LLAVA-PHI3 สามารถถอดความภาษาฮีบรูได้อย่างสม่ำเสมอ แต่มีปัญหาเรื่องอาการหลอน
    • คาดว่าคุณภาพจะดีขึ้นมากเมื่อมีโมเดลวิชันระดับ SOTA รุ่นใหม่ออกมา
  • สำหรับบทความวิทยาศาสตร์ โมเดล nougat ของ Meta เหมาะสมที่สุด

    • สำหรับใบแจ้งหนี้และบันทึกต่าง ๆ โมเดล donut ดีกว่า
    • ทั้งสองโมเดลอาจล้มเหลวได้ในบางกรณี และต้องใช้ LLM เพื่อแก้ปัญหา
    • รายละเอียดบางส่วนสูญหายไประหว่างกระบวนการ OCR จึงทำให้จัดการตารางและกราฟได้อย่างแม่นยำยาก
    • Google Gemini มีความสามารถในการทำ fine-tuning กับภาพ แต่ยังไม่ได้ลอง
    • พรอมป์ต์แบบ few-shot ช่วยป้องกันอาการหลอนของ LLM และช่วยให้ผลลัพธ์ตรงตามรูปแบบที่ต้องการได้
  • จากที่เคยลองในอดีต พบว่าใช้งานได้ดีใน 90% ของกรณี

    • ในเอกสารอย่างสัญญาเช่า มีปัญหากับตัวเลขและชื่อ (ชื่อคนหรือสถานที่/ที่อยู่)
    • LLM ไม่สามารถรู้ค่าเช่าที่ถูกต้องหรือรู้ชื่อของบุคคลใดบุคคลหนึ่งได้อย่างแม่นยำ
  • หากแปลงหน้า PDF เป็น PNG แล้วขอให้ gpt4 ถอดข้อความจากภาพ จะได้ความแม่นยำสูงมาก

    • แม่นยำกว่า Tesseract หรือ OCR แบบดั้งเดิม
  • เมื่อ 10 ปีก่อนเคยพยายามใช้ Tesseract ทำ OCR ภาษาจีน

    • หลังรู้จำข้อความภาษาอังกฤษแล้วทำความสะอาดต่อได้ง่าย
    • แต่ภาษาจีนถ้ารู้จำผิดไปหนึ่งตัวอักษร จะตรวจจับข้อผิดพลาดได้ยาก
    • จึงใช้ ImageMagick แปลงภาพหลายแบบแล้วส่งให้ Tesseract จากนั้นโหวตผลที่ดีที่สุดตามความถี่เชิงสถิติของประโยคที่รู้จำได้
    • ความแม่นยำดีขึ้นอย่างมาก
  • ได้ผลลัพธ์ที่ดีกว่าเมื่อใช้ PaddlePaddle

    • เขียนอิมพลีเมนต์ Python ที่ใช้ PPOCRv3 เพื่อตัดหนังสือในระดับคำ
    • PPOCRv4 ไม่มีข้อจำกัดเรื่องขนาดพิกเซล จึง "ใช้งานได้ทันที"
    • โมเดลตรวจจับของ PPOCRv3 ทำงานได้ดีกว่า
  • มีคำถามว่าได้ลองใช้แพ็กเกจ OCR อื่นหรือไม่

    • เคยเจอปัญหาที่ Tesseract อ่าน "77" เป็น "7"
  • การปรับพรอมป์ต์ให้โมเดลเข้าใจได้ชัดเจนขึ้นเป็นเรื่องสำคัญ

    • คิดเรื่อง LLM และเอกสารอยู่มาก
    • มองว่า OCR น่าจะเป็นปัญหาที่จะถูกแก้ได้อย่างสมบูรณ์ในไม่ช้า
    • ความท้าทายคือการอธิบายความกำกวมและรายละเอียดของเอกสารที่ซับซ้อนให้โมเดล AI เข้าใจอย่างมีประสิทธิภาพ
  • กำลังทำงานลักษณะคล้ายกันในการพาร์สเกณฑ์การให้คะแนนและงานส่งของนักเรียน

    • สนใจการผสานรวมกับ GPT-4V
    • ต้องการให้ติดต่อทางอีเมล
  • มีคำถามเกี่ยวกับแนวทางแก้ข้อผิดพลาด OCR โดยใช้พรอมป์ต์ "fix this text"

    • เสนอให้ใช้ completion model แทน chat model โดยป้อนข้อมูลทีละโทเคนและดูความน่าจะเป็นของโทเคนถัดไป
    • คิดว่าวิธีนี้อาจช่วยลดอาการหลอนได้อย่างมาก