- โมเดล OCR แบบภาพเป็น Markdown ประสิทธิภาพสูงที่ก้าวข้ามการรู้จำตัวอักษรแบบพื้นฐาน ไปสู่การ แปลงเอกสารทั้งฉบับให้อยู่ในโครงสร้าง Markdown
- แปลงสมการคณิตศาสตร์เป็น รูปแบบ LaTeX, เพิ่ม คำอธิบายภาพอัตโนมัติ ให้กับรูปภาพ, และส่งออกตารางเป็น ตาราง HTML/Markdown เพื่อสร้าง ผลลัพธ์ที่เหมาะกับการใช้งานร่วมกับ LLM
- รองรับการรู้จำ ลายเซ็น, ลายน้ำ, ช่องทำเครื่องหมาย ฯลฯ และแปลงเป็นรูปแบบ
<signature>, <watermark>, ☐/☑ แสดงให้เห็นถึง ความสามารถเด่นในการจัดการองค์ประกอบแต่ละส่วนของเอกสาร
- ใช้งานได้สะดวกผ่าน Transformers หรือ vLLM server ของ Hugging Face และสามารถใช้งานในรูปแบบเว็บแอปผ่านไลบรารี
docext ได้
- มี ความแม่นยำและระดับการจัดโครงสร้างสูงมาก สำหรับเอกสารหลายประเภทและเลย์เอาต์ที่ซับซ้อน จึงมีประโยชน์อย่างมากกับสัญญา แบบฟอร์ม รายงาน ฯลฯ
ภาพรวมโครงการและความสำคัญ
- Nanonets-OCR-s เป็นโมเดลที่ก้าวข้ามความสามารถของ OCR ทั่วไป (การรู้จำอักขระด้วยแสง) โดย วิเคราะห์ความหมายและโครงสร้างของเอกสาร แล้วส่งออกผลลัพธ์ในรูปแบบ Markdown
- โมเดลสามารถแยกแยะสมการ รูปภาพ ตาราง ช่องทำเครื่องหมาย ลายเซ็น และลายน้ำ แล้วแปลงให้อยู่ในรูปแบบ การแท็กและการแสดงผลที่มีความหมาย (เช่น LaTeX, HTML, Markdown) ทำให้เหมาะสำหรับงาน downstream หรือ การประมวลผลเอกสารด้วย LLM (โมเดลภาษาขนาดใหญ่)
- เมื่อเทียบกับโครงการ OCR โอเพนซอร์สเดิม โมเดลนี้แสดงประสิทธิภาพที่เหนือกว่าในการจัดการโครงสร้างเอกสารที่ซับซ้อนและการดึงองค์ประกอบเชิงความหมายที่หลากหลาย พร้อมศักยภาพในการนำไปใช้กับเวิร์กโฟลว์อัตโนมัติ
- เป็นเวอร์ชันที่ fine-tune จากโมเดล Qwen2.5-VL-3B-Instruct เพื่อระบุองค์ประกอบต่าง ๆ ของเอกสารและแท็กด้วยมาร์กอัปที่มีความหมาย
คุณสมบัติหลัก
- การรู้จำสมการ LaTeX
- แปลง สมการและสูตรคณิตศาสตร์ ที่อยู่ในเอกสารเป็น ไวยากรณ์ LaTeX โดยอัตโนมัติ ตามประเภท inline(
$...$) หรือ display($$...$$)
- คำอธิบายภาพอัจฉริยะ
- สำหรับแต่ละภาพ จะอธิบาย ลักษณะ สไตล์ และเนื้อหา ของภาพอย่างละเอียดภายในแท็ก
<img>
- ยังอธิบายรูปภาพหลากหลายประเภท เช่น โลโก้ แผนภูมิ กราฟ โดยคงบริบทและความหมายไว้ เพื่อแปลงเป็น อินพุตที่เหมาะกับการใช้งาน LLM
- การตรวจจับและแยกลายเซ็น
- แยกรูปลายเซ็นออกจากข้อความ แล้วประมวลผลไว้ในแท็ก
<signature> แยกต่างหาก
- มีคุณค่าสูงสำหรับการประมวลผลเอกสาร ด้านกฎหมายและธุรกิจ แบบอัตโนมัติ
- การดึงลายน้ำ
- ตรวจจับ ข้อความลายน้ำ ที่แทรกอยู่ในเอกสาร แล้วจัดเก็บแยกไว้ในแท็ก
<watermark>
- การแปลงช่องทำเครื่องหมายและปุ่มตัวเลือก
- ส่งออกเป็น สัญลักษณ์ Unicode มาตรฐาน ในรูปแบบ * ☐ (ไม่เลือก), ☑ (เลือกแล้ว), ☒ (ปฏิเสธ)
- เพิ่มความน่าเชื่อถือในการประมวลผลเอกสารประเภทแบบสอบถาม แบบสมัคร ฯลฯ
- การดึงโครงสร้างตารางที่ซับซ้อน
- แปลงตารางที่ซับซ้อนให้อยู่ในรูปแบบ ตาราง Markdown และ HTML เพื่อการนำไปใช้ต่อได้อย่างมีประสิทธิภาพ
วิธีการใช้งานหลัก
ตัวอย่างโค้ด Python
- สามารถโหลดและรันโมเดลได้อย่างง่ายดายด้วยไลบรารี transformers ของ Hugging Face
- เมื่อนำรูปภาพเข้าเป็นอินพุต จะได้ผลลัพธ์ในรูปแบบ Markdown ที่มีโครงสร้าง ซึ่งรวมถึงข้อความ ตาราง สมการ คำอธิบายภาพ ลายน้ำ ฯลฯ
- หมายเลขหน้าและลายน้ำสามารถครอบด้วย
, เพื่อแยกส่วนได้
- ช่องทำเครื่องหมายจะแสดงผลเป็น สัญลักษณ์ Unicode (☐, ☑)
การใช้งานบนพื้นฐาน vLLM
- สามารถลงทะเบียนโมเดลบนเซิร์ฟเวอร์ vLLM และเชื่อมต่อใช้งานได้ง่ายผ่าน OpenAI-compatible API
- เมื่อป้อนรูปภาพเข้าไป จะส่งออกผลลัพธ์การแปลงข้อความ ตาราง สมการ ลายน้ำ ฯลฯ ในรูปแบบที่สม่ำเสมอ
การใช้งานแพ็กเกจ docext
- ผ่านแพ็กเกจแยกต่างหากชื่อ
docext ผู้ใช้สามารถนำ Nanonets-OCR-s ไปใช้กับการจัดโครงสร้างเอกสารได้ทันที เพียงรันคำสั่งที่กำหนด
- ดูได้จาก เอกสาร GitHub
2 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผมทำงานอยู่ที่ Nanonets และตื่นเต้นมากที่ได้เปิดตัวโมเดล VLM ขนาด 3B ชื่อ Nanonets-OCR-s
โมเดลนี้เป็นโมเดลขนาดเล็กที่ปรับให้เหมาะกับการแปลงเอกสารเป็น Markdown ที่สะอาดและมีโครงสร้าง
เพราะมันเรียนรู้โครงสร้างและบริบทของเอกสารมาแล้ว เช่น ตาราง สมการ รูปภาพ แผนภาพ ลายน้ำ ช่องทำเครื่องหมาย เป็นต้น
ความสามารถหลักได้แก่ การรู้จำสมการ LaTeX (แยกแปลงสมการแบบอินไลน์และแบบบล็อกได้ถูกต้อง), คำอธิบายรูปภาพแบบฝังในตัว (ใช้แท็ก img รองรับกราฟ โลโก้ แผนภาพ ฯลฯ), การตรวจจับและแยกลายเซ็น (แสดงผลในบล็อก signature), การดึงลายน้ำ (เก็บด้วยแท็ก watermark), การจัดการ checkbox/radio button อย่างชาญฉลาด (แปลงเป็น Unicode เพื่อให้ post-processing เชื่อถือได้มากขึ้น), และการดึงโครงสร้างตารางที่ซับซ้อน (ตารางหลายแถว/หลายคอลัมน์ก็แสดงออกมาเป็น Markdown และ HTML ได้ดี)
ถ้าอยากลองใช้ด้วยตัวเอง ดูได้ที่ Huggingface หรือ Docext Colab
ลิงก์ที่ถูกต้องของ Docext คือ README.md
อยากรู้ว่ามีอาการหลอน (hallucination) จาก LLM ที่ใช้อยู่หรือไม่
อยากรู้ว่าสามารถดึงไฟล์รูปภาพตัวจริงออกมาได้เลยไหม หรือยังต้องมีขั้นตอนแยกต่างหากอยู่
อยากรู้ว่านำไปใช้ parse รูปเมนูร้านอาหารหรือ PDF ให้เข้ากับ JSON schema ได้ไหม (อาจร่วมกับ LLM สำหรับ post-processing) หรือจริง ๆ แล้ว multimodal LLM ขนาดใหญ่จะเหมาะกับงานแบบนี้มากกว่า
ผมลองใช้ LLM หลายตัวเพื่อแปลพจนานุกรม Shipibo (ภาษาชนพื้นเมืองในเปรู)-สเปน ให้เป็นพจนานุกรมอังกฤษ แต่โมเดลเข้าใจยากเพราะมีสองคอลัมน์ มีการตัดบรรทัดแปลก ๆ และในคำจำกัดความก็ปนทั้ง Shipibo และสเปน
แถมคุณภาพสแกนก็ไม่ดีอีก
คิดว่าน่าจะต้องลองโมเดลนี้ดูสักครั้ง
ผมตามหาโซลูชันมานานที่จะรับไฟล์ทั้งหมดที่เก็บอยู่ใน Word และ PowerPoint มาหลายสิบปี แล้วแปลงเป็นรูปแบบมาตรฐานเพื่อให้แต่ละองค์ประกอบนำกลับไปใช้ในฟอร์แมตอื่นได้
นี่คือ building block สำคัญที่จำเป็นต่อการสร้างระบบแบบนั้น
ตอนนี้ยังต้องการฟีเจอร์ archive หรือ history เพิ่มด้วย คืออยากให้ archive และเรียกคืนแต่ละองค์ประกอบได้ง่าย
เป็นงานที่ยอดเยี่ยมมาก
น่าเสียดายที่โมเดลพวกนี้ตั้งเป้าแค่ Markdown
ในทางปฏิบัติ Markdown มีหลายเวอร์ชัน และรองรับเชิงอรรถ บรรณานุกรม หรือรูปภาพได้ไม่ดีนัก
จึงควรมีฟอร์แมตที่มีโครงสร้างมากกว่าและมีสเปกชัดเจนกว่า
ที่จริงเราฝึกโมเดลให้ทำ semantic tagging ไปพร้อมกับการแปลงเป็น Markdown ด้วย
ตัวอย่างเช่น สมการจะถูกดึงออกมาเป็น LaTeX และรูปภาพ (แผนภาพ รูปประกอบ ฯลฯ) จะถูกอธิบายอย่างละเอียดด้วยแท็ก img
รวมถึงใช้แท็กกับลายเซ็น (signature), ลายน้ำ (watermark), เลขหน้า ฯลฯ ด้วย
ตารางที่ซับซ้อน (หลายแถว/หลายคอลัมน์) จะดึงออกมาเป็นตาราง HTML แทนที่จะเป็น Markdown
ตอนแรกแนวคิดเรื่อง "structured Markdown" ทำให้ตื่นเต้นมากกว่าตัวโมเดล OCR แบบ LLM เองเสียอีก แต่สุดท้ายก็ยังให้ความรู้สึกว่าเป็นเพียงการแท็กองค์ประกอบบางอย่าง ทำให้การนำไปใช้ภายนอกโมเดลยังค่อนข้างจำกัด
อยากรู้ว่าถ้าเทียบกับ docling(https://github.com/docling-project/docling) แล้วมีข้อดีข้อเสียอย่างไร
อยากรู้ว่าต่างจาก Datalab/Marker(https://github.com/datalab-to/marker) อย่างไร
ผมเทียบตัวแปลง PDF->MD มาหลายตัวแล้ว และตอนนี้ Marker ถือว่าดีที่สุดเท่าที่เคยลอง แม้จะยังไม่สมบูรณ์
จากประสบการณ์ส่วนตัว Marker ค่อนข้างเหมาะกับการแปลงงานวิชาการที่มีทั้งสมการซับซ้อนและโค้ดปะปนกัน
ตัวอย่างเช่น ถ้าเอาหน้าที่มีทั้งสมการ (ผสมทั้ง inline/display) และบล็อกโค้ดแบบ monospaced จากบทความ Fortran เรื่อง inverse Laplace transform ไปให้ Marker จัดการ มันจะทำให้ inline $\sigma_0$ กลายเป็น "<sup>s</sup> 0" และ $f(t)$ กลายเป็น "<i>f~</i>~t*!" แบบเพี้ยน ๆ
จุดแข็งของโมเดลนี้คือสามารถส่งออกส่วนเหล่านี้ได้อย่างถูกต้องภายในตัว
ภาพตัวอย่างอ้างอิง(https://imgur.com/a/Q7UYIfW)
ผมเพิ่งเริ่มทำการเทียบข้ามเครื่องมือแบบของตัวเอง ถ้าพอจะแชร์รายชื่อเครื่องมือที่อยู่ในข่ายพิจารณาได้จะขอบคุณมาก
ผมทำสคริปต์ Powershell สำหรับรันโมเดลนี้กับ PDF จากที่ไหนก็ได้ด้วยตัวเอง
พอลองจริงพบว่า GPU (1080 8GB) ค่อนข้างเก่า เลยรันช้ามาก (อย่างน้อย 5 นาทีต่อหน้า)
ถ้าใครอยากลองใช้ยูทิลิตีแปลง PDF เป็น markdown ที่รันบน Cloud Run (รองรับ external GPU) ก็บอกได้
ถ้าทำเสร็จแล้วจะมาแชร์ลิงก์ด้วย
เพิ่งเอาไปรันบน Cloud Run แล้วรายงานผลตัวอย่าง
ดูผลบางส่วนจาก animate.pdf แล้วพบว่าดึง title, author, publisher, ภาพประกอบขาวดำ (อธิบายผ่านแท็ก img) และแท็ก Google digitization ออกมาได้ดี
สารบัญก็ถูกดึงออกมาเป็นตารางได้อย่างสมบูรณ์
นอกจากความช้าแล้ว ในแง่ฟังก์ชันและความแม่นยำถือว่าน่าพอใจมาก
สนใจบริการ PDF to markdown บน Cloud Run มาก
อยากรู้ว่ารับมือเอกสารที่มีตารางหลายคอลัมน์หรือหลายแถวอย่างไร (ตัวอย่าง: PDF นี้ ที่หน้า 1 มี rowspan, หน้า 29 มี colspan เป็นต้น)
อยากรู้ว่าประสิทธิภาพการรู้จำข้อความที่ไม่ใช่ภาษาอังกฤษเป็นอย่างไร
เข้าใจว่า OCR แบบอิง LLM ที่มีอยู่ตอนนี้ยังสู้ OCR แบบดั้งเดิมในด้านรองรับภาษาต่างประเทศไม่ได้มากนัก
จากประสบการณ์ของผม ถ้าใช้ Google Translate กับ ChatGPT โดยตรงกับรูปภาพ ChatGPT ทำได้ดีกว่าเสมอ
โดยเฉพาะเมนูภาษาญี่ปุ่นที่เขียนด้วยลายมือ ก็ยังแปลและอธิบายได้ดี
โมเดลที่ไม่พูดถึงการรองรับหลายภาษา ในโลกจริงมักทำงานกับ PDF ที่ไม่ใช่ภาษาอังกฤษได้แย่มาก
ยิ่งไปกว่านั้น โมเดลฐาน (Qwen-2.5-VL-3B) ก็เป็นโมเดลหลายภาษา
เคยเห็นโพสต์บน Reddit บอกว่าภาษาจีนก็ใช้ได้ดีเหมือนกัน(ลิงก์)
ลองประมวลผลตัวอย่างใบเสร็จรับเงินจากบัตรภาษาเกาหลีดูแล้ว ความเร็วค่อนข้างช้าแต่กำลังอ่านได้อย่างสมบูรณ์แบบ