AI และ OCR

7 กรณีที่ AI อ่าน Invoice พลาด และวิธีตรวจจับ

บทความนี้เขียนจากไฟล์จริงที่เราเอามาทดสอบระหว่างพัฒนาตัวอ่านเอกสาร ไม่ใช่รายการข้อจำกัดเชิงทฤษฎี ทุกกรณีข้างล่างนี้เคยทำให้ข้อมูลที่ดึงออกมาผิดจริง และหลายกรณีผิดแบบที่ดูเผินๆ เหมือนถูก ซึ่งอันตรายกว่าการอ่านไม่ออกไปเลย เพราะถ้าอ่านไม่ออกอย่างน้อยคนก็รู้ว่าต้องกรอกเอง

จุดร่วมของเกือบทุกกรณีคือ ปัญหาไม่ได้อยู่ที่ “อ่านตัวอักษรผิด” แต่อยู่ที่ การตัดสินใจว่าอะไรเป็นคอลัมน์ อะไรเป็นแถว ซึ่งเป็นขั้นที่เกิดก่อนการอ่านตัวเลขเสียอีก

1. สองคอลัมน์ตัวเลขถูกยุบรวมเป็นช่องเดียว

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

ทำไมถึงเกิด: ตัวตรวจจับคอลัมน์อาศัยช่องว่างแนวตั้งเป็นเส้นแบ่ง เมื่อระยะห่างแคบกว่าเกณฑ์ หัวคอลัมน์หลายอันจะถูกจับรวมเป็นจุดยึดเดียว และเมื่อใช้เส้นทางที่เชื่อถือหัวตารางเป็นหลัก ระบบจะข้ามขั้นตอนกู้คืนด้วยการผ่าช่องซ้ำไปเลย

สัญญาณเตือน: คอลัมน์ตัวเลขว่างทั้งคอลัมน์ ในขณะที่คอลัมน์ข้างๆ มีตัวเลขยาวผิดปกติเช่น 12.5087500.00250

2. เอกสารที่ฝังตัวอักษรแยกทีละตัว

PDF บางฉบับ โดยเฉพาะที่สร้างจากโปรแกรมออกแบบหรือส่งออกจากระบบเก่า จะฝังข้อความไม่ใช่เป็นคำ แต่เป็นตัวอักษรทีละตัวพร้อมพิกัดของตัวเอง คำว่า QUANTITY จึงกลายเป็นแปดชิ้นข้อความแยกกัน ตัวจับคอลัมน์ที่นับ “ชิ้นข้อความต่อบรรทัด” จะเห็นตารางนี้เป็นแถวที่มีคอลัมน์นับสิบ และแบ่งคอลัมน์ผิดทั้งหน้า

วิธีแก้ที่ได้ผล: ต้องมีขั้นตอนรวมตัวอักษรที่อยู่ติดกันในบรรทัดเดียวกัน กลับเป็นคำก่อน แล้วค่อยเข้าสู่การวิเคราะห์ตาราง จุดที่ต้องระวังคือเกณฑ์ระยะห่างที่ใช้รวม ถ้าหลวมเกินไปจะไปรวมค่าของสองคอลัมน์เข้าด้วยกันแทน

สัญญาณเตือน: คำอธิบายสินค้ามีช่องว่างแทรกกลางคำ หรือจำนวนคอลัมน์ที่ตรวจพบสูงผิดปกติเมื่อเทียบกับที่ตาเห็น

3. บรรทัดรหัสกลายเป็นรายการสินค้าผี

Invoice หลายฉบับพิมพ์ข้อมูลกำกับไว้ใต้รายการสินค้า เช่น ประเทศกำเนิด หรือรหัสพิกัดของประเทศผู้ขาย บรรทัดพวกนี้มีตัวเลขอยู่ในตำแหน่งเดียวกับคอลัมน์จำนวน ระบบจึงนับเป็นรายการสินค้าเพิ่มมาอีกหลายแถว และที่แย่กว่านั้นคือรหัสพิกัดถูกจับใส่ช่องจำนวน ทำให้ยอดรวมจำนวนเพี้ยนไปมาก

วิธีแก้ที่ได้ผล: ต้องมีตัวคัดกรองที่รู้จักรูปแบบของรหัสพิกัด และรูปแบบบรรทัดกำกับ เพื่อไม่ให้ถูกนับเป็นแถวสินค้า หลังแก้แล้วยอดรวมจำนวนที่ระบบดึงได้เข้าใกล้ยอดในเอกสารต้นทางมากขึ้นอย่างชัดเจน

สัญญาณเตือน: จำนวนแถวสินค้าที่ระบบดึงได้มากกว่าที่นับด้วยตา หรือมีแถวที่คำอธิบายสินค้าเป็นชื่อประเทศ

4. คอลัมน์สเปกที่ไม่ได้ใช้ ถูกรวมเข้ากับจำนวน

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

วิธีแก้ที่ได้ผล: ดึงเฉพาะตัวเลขที่อยู่ท้ายสุดของช่องที่ยุบรวมกันมา และในทางกลับกันสำหรับคอลัมน์ที่มีค่าปนอยู่ด้านหน้า ต้องดึงตัวเลขตัวแรกแทน ทั้งสองกรณีต้องตัดสัญลักษณ์สกุลเงินออกก่อนแปลงเป็นตัวเลขด้วย

5. พิกัดที่มีเว้นวรรคถูกผ่าเป็นสามคอลัมน์

พิกัดศุลกากรมักถูกพิมพ์แบบเว้นวรรคเพื่อให้อ่านง่าย เช่น 6206 90 00 ตัวหาเส้นแบ่งคอลัมน์เห็นช่องว่างสองช่องนี้เป็นช่องว่างแนวตั้งที่สม่ำเสมอทั้งคอลัมน์ จึงตัดสินใจผ่าออกเป็นสามคอลัมน์ ผลคือพิกัดเดียวกลายเป็นสามค่าที่ไม่มีความหมาย

วิธีแก้ที่ได้ผล: ต้องมีกฎที่รู้ว่ากลุ่มตัวเลขรูปแบบนี้เป็นรหัสเดียว ห้ามผ่า และต้องกำหนดระยะห่างขั้นต่ำก่อนจะยอมตัดคอลัมน์ใหม่

สัญญาณเตือน: ช่องพิกัดในผลลัพธ์มีแค่สี่หลัก และมีคอลัมน์ตัวเลขสองหลักที่ไม่มีหัวคอลัมน์โผล่ขึ้นมา

6. เลขที่ B/L ที่ถูกตราประทับหรือขีดฆ่าทับ

ใบตราส่งสินค้าที่ผ่านการแก้ไขมักมีเลขเดิมถูกขีดฆ่าแล้วประทับเลขใหม่ทับลงไป การอ่านตามปกติจะได้เลขเดิมที่ถูกยกเลิกไปแล้ว ซึ่งเป็นความผิดพลาดที่ร้ายแรง เพราะเลขใบตราส่งเป็นตัวอ้างอิงหลักของ shipment

วิธีแก้ที่ได้ผล: ตัดเฉพาะบริเวณช่องเลขที่ออกมาขยายความละเอียด ทำภาพเป็นขาวดำ แล้วลบเส้นตรงแนวนอนที่เป็นรอยขีดฆ่าออกก่อน จึงค่อยอ่านซ้ำ วิธีนี้ช่วยได้กับรอยขีดฆ่าเป็นเส้น แต่ยังไม่แก้กรณีที่ตราประทับทึบทับตัวเลข

สัญญาณเตือน: เลขที่ B/L ที่อ่านได้ไม่ตรงกับที่สายเรือแจ้งใน Delivery Order กรณีนี้ต้องยึดเอกสารจากสายเรือเป็นหลักเสมอ

7. บรรทัดยอดรวมถูกนับเป็นรายการสินค้า

บรรทัด TOTAL ท้ายตารางมีตัวเลขอยู่ในคอลัมน์เดียวกับรายการสินค้า ถ้าไม่มีการคัดออก มันจะถูกเพิ่มเป็นสินค้าอีกหนึ่งรายการ และทำให้ยอดรวมของใบขนเป็นสองเท่าของความจริง กรณีนี้ตรวจง่ายที่สุดในเจ็ดข้อ แต่ก็เป็นกรณีที่หลุดบ่อยที่สุดเช่นกัน เพราะเอกสารบางฉบับมีบรรทัดยอดรวมย่อยแทรกกลางตารางด้วย ไม่ได้อยู่แค่ท้ายสุด

วิธีตรวจจับ 4 ข้อที่ใช้ได้กับทุกกรณี

ไม่ต้องรู้ว่าระบบพลาดด้วยสาเหตุอะไร แค่ตรวจสี่อย่างนี้ก็จับปัญหาข้างบนได้เกือบทั้งหมด

  1. นับจำนวนแถว — จำนวนรายการที่ระบบดึงได้ต้องเท่ากับจำนวนบรรทัดสินค้าในเอกสาร ถ้ามากกว่า แปลว่ามีบรรทัดกำกับหรือบรรทัดยอดรวมหลุดเข้ามา
  2. กระทบยอดสามตัว — ยอดรวมมูลค่า ยอดรวมจำนวน และยอดรวมน้ำหนัก ต้องตรงกับที่พิมพ์ไว้ท้ายเอกสาร ถ้าตัวใดตัวหนึ่งเพี้ยน ปัญหามักอยู่ที่การแบ่งคอลัมน์
  3. ตรวจว่ามีคอลัมน์ไหนว่างทั้งคอลัมน์ — คอลัมน์ที่ควรมีค่าแต่ว่างเปล่าทั้งใบ คือสัญญาณของการยุบคอลัมน์
  4. สุ่มตรวจสามบรรทัด — บรรทัดแรก บรรทัดกลาง และบรรทัดสุดท้าย เทียบกับต้นฉบับทีละช่อง ถ้าสามบรรทัดนี้ถูกหมด โอกาสที่ทั้งตารางจะถูกก็สูง
สิ่งที่บทความนี้อยากบอกจริงๆ: AI อ่านเอกสารช่วยลดเวลาคีย์ได้จริง แต่ไม่ควรถูกใช้แบบที่ไม่มีใครดูผลลัพธ์เลย ระบบที่ออกแบบมาดีคือระบบที่แสดงข้อมูลที่อ่านได้ในตารางที่แก้ไขได้ทุกช่อง ให้กระทบยอดได้ง่าย และไม่บันทึกอะไรเข้าใบขนโดยที่คนยังไม่ได้กด

ดูหน้าจออ่านเอกสารที่ให้ตรวจและแก้ไขได้ทุกช่องก่อนบันทึก · อ่านเรื่องการกระทบยอดข้ามเอกสาร

← กลับไปหน้ารวมบทความ