DEV Community

Cover image for แปลงเอกสาร Unstructured เป็น Structured ด้วย Jev 4 สูตรที่ตรวจสอบได้
Nokka
Nokka

Posted on AI-assisted

แปลงเอกสาร Unstructured เป็น Structured ด้วย Jev 4 สูตรที่ตรวจสอบได้

โดย Nokka (นก-กา) | 21 กันยายน 2569

บทความนี้เขียนโดย AI (โมเดล glm-5.3 ของผู้ให้บริการ ollama-cloud) ผ่าน Hermes Agent จาก Nous Research ตรวจสอบและเรียบเรียงโดย Nokka


คำถามที่ผมเจอบ่อยที่สุดเวลาพูดถึง Jev คือ "โมเดลที่เขียนข้อความไม่ได้ จะเอาไปจัดเอกสารมั่ว ๆ ให้เป็นข้อมูลมีโครงสร้างได้ยังไง" คำตอบสั้น ๆ คือได้ และเป็นคำมั่นที่มีสูตรจริงรองรับ TypeSafe เจ้าของโมเดลเขียนสูตรทางการไว้ 4 สูตรเลยในหน้า cookbook ของเขาเอง ครอบคลุมตั้งแต่ซ่อมฟอร์แมตเอกสารที่พัง ดึงค่าสำคัญ ดึงวันที่ ไปจนถึงจัดหมวดใส่โครงสร้างลึกหลายชั้น

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

ภาพประกอบ: 4 สูตรแปลงเอกสาร unstructured เป็น structured ด้วย Jev

หลักคิดก่อนดูสูตร: ตัดสินแทนที่จะเขียน

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

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

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

สูตรที่ 1: ซ่อมฟอร์แมตเอกสารที่พัง (Structure Recovery)

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

วิธีทำงาน 2 รอบ

  • รอบแรกเป็นการประกบประโยค ถาม Noul (คำถามจริง/ไม่ใช่ที่คำตอบคือค่าความมั่นใจ) ทีละคู่บรรทัดติดกันว่า "บรรทัดที่สองนี้เป็นการต่อประโยคจากบรรทัดแรกไหม" ทุกคู่ถามพร้อมกันในการเรียกครั้งเดียว แล้วประกบบรรทัดที่ต่อกันกลับเป็นก้อน
  • รอบสองเป็นการติดป้ายก้อน ถาม Choice ทีละก้อนว่าเป็นหัวข้อ ย่อหน้า รายการ คำพูด โค้ด หรือคำเตือน พร้อมคำถามประกบอย่างระดับหัวข้อหรือลำดับขั้น ที่อ่านเฉพาะเมื่อชนิดของก้อนทำให้เกี่ยวข้อง

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

ตัวเลขจากต้นทาง: เอกสารบันทึกทีมฉบับเต็มจบใน 2 การเรียก API ใช้ 10,211 โทเคน เวลา 0.8 วินาที ค่าใช้จ่าย 0.0015 ดอลลาร์ (เป็นตัวเลขที่ TypeSafe ประกาศเองใน cookbook) ทั้งที่ไม่มีตัวอักษรเดียวในผลลัพธ์ที่ไม่ได้มาจากต้นฉบับ [1]

สูตรที่ 2: ดึงค่าด้วย regex นำทาง (Pre-parsed Value Extraction)

โจทย์จริง: จากอีเมลลูกค้ายาว ๆ ต้องการ "อีเมลที่ผู้ส่งขอให้ตอบกลับ" "เบอร์โทรของผู้ส่ง" และ "ยอดรวมของใบแจ้งหนี้" โดยค่าต้องถูกตรงตัวอักษรเป๊ะ ๆ

วิธีทำงาน 3 ขั้น

  • regex หาค่า candidate ทั้งหมดก่อน โดยตั้งใจให้เจอเกินจริง (over-find) ปล่อยให้หาเยอะ
  • Jev เลือกจาก candidate ที่ regex เจอว่าตัวไหนตรงกับสิ่งที่คำถามถามหา พร้อมอ่านคุณสมบัติประกบเช่นสกุลเงิน ประเทศ หรือยอดนี้เป็นเงินเข้าหรือเงินออก
  • โค้ดก๊อปค่าที่ถูกเลือกไปทำ normalize (เช่นจัดเบอร์โทรเป็นรูปแบบมาตรฐาน)

จุดเด่นอยู่ที่ความจำกัดที่ดูเหมือนข้อเสียแต่จริง ๆ คือความปลอดภัย ค่าที่ได้กลับมาเป็นสำเนาตรง ๆ จากสิ่งที่ regex เจอจริง ไม่มีทางเกิดตัวเลขสลับหลักหรืออีเมลที่ถูกปรุงขึ้นใหม่ ถ้าไม่มี candidate ไหนตรง มีทางหนีคือตอบ none แล้วส่งต่อให้คนดู [2]

สูตรที่ 3: ดึงวันที่แบบไม่ให้โมเดลทำเลข (Date Extraction)

โจทย์จริง: เอกสารเขียนวันส่งฟอร์มได้หลายแบบ ทั้งแบบระบุเต็ม แบบย่อ และแบบสัมพัทธ์เช่น "พรุ่งนี้" หรือ "วันพฤหัสถัดไป" ซึ่งเป็นจุดที่ LLM มักเผลอทำเลขผิด

วิธีทำงาน: ฟังก์ชัน extract_date(document, role) รับเอกสารกับคำบรรยายว่าต้องการวันไหน แล้ว Jev ตอบ Choice ในการเรียกเดียวว่า วันนี้เป็นแบบระบุตรงหรือแบบสัมพัทธ์ เดือนไหน วันที่เท่าไร ปีอะไร หรือวันอะไรในสัปดาห์ จากนั้นโค้ดเป็นคนคำนวณปฏิทินจริง รวมถึงการนับจากวันนี้สำหรับวันแบบสัมพัทธ์

การแบ่งแรงแบบนี้ทำให้จุดอ่อนเรื่องเลขของโมเดลหายไป เพราะโมเดลแค่อ่านสิ่งที่ข้อความบอก ส่วนคณิตศาสตร์ปฏิทินเป็นหน้าที่ของโค้ดที่ตรวจซ้ำได้ ผลที่ได้กลับมาพร้อมค่าความมั่นใจ ถ้าต่ำก็ถูกแฟล็กให้คนพิสูจน์ต่อ [3]

สูตรที่ 4: จัดหมวดลงโครงสร้างหลายชั้น (Hierarchical Classification)

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

วิธีทำงาน: ใช้ Choice เดินจากรากลงหาใบ ทีละชั้น เลือกลูกที่น่าจะใช่ที่สุดแล้วเดินลงต่อ (Greedy Search) หรือถ้าอยากแม่นขึ้น ทำ Beam Search โดยถามหลายทางขนานกันในการเรียกเดียว เก็บเส้นทางที่ดีที่สุด K เส้นตามค่าความน่าจะเป็นแบบคูณเฉลี่ยเรขาคณิต แล้วตัดที่เหลือทิ้ง

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

เมื่อไรไม่ควรใช้ Jev กับงานนี้

เพื่อให้ภาพครบ มีสองกรณีที่สูตรข้างบนยังไม่ตอบ

  • ฟิลด์ที่ต้อง "เขียนใหม่" เช่นคำอธิบายสั้นของสินค้าจากย่อหน้าหลายพัน สรุปใจความจากหลายย่อหน้า Jev ยังทำเองไม่ได้เพราะไม่เขียนข้อความ วิธีที่ต้นทางเสนอคือให้โมเดลเขียนเป็นคนเขียนแล้ว Jev ทำหน้าที่ตรวจทีละฟิลด์ว่าค่านั้นมีอยู่จริงในต้นฉบับไหม ซึ่งก็คือสูตร SDE cascade ที่เราเคยเจาะกันแล้วในบทก่อนหน้าของชุดนี้ [5] [6]
  • ฟิลด์ที่รูปแบบกระจัดกระจายเกินกว่า regex จะหา candidate ได้ เช่นชื่อบริษัทที่เขียนได้ทั้งชื่อเต็มชื่อย่อชื่อเล่น ต้องใช้โมเดลอ่านช่วยหาก่อนแล้วค่อยเข้าสูตร

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

สำหรับทีมที่อยากลอง ทั้งสี่สูตรเป็น cookbook จริงในเอกสารทางการที่รันตามได้ด้วย SDK ทางการ มี cache ผลลัพธ์ให้เล่นก่อนโดยไม่เสียค่า API และตัวเลขทุกตัวในบทความนี้หาย้อนได้จากหน้า cookbook นั้นเอง [1] [2] [3] [4]


เขียนโดย Nokka (นก-กา) นักเขียนอิสระแกะรอยเทคโนโลยี สนใจเรื่องการทำคอนเทนต์ให้คนหาเจอมาตลอด ถ้าชอบบทความแนว AI แบบอิงหลักฐานจริง ติดตามได้ที่ dev.to/sarantoon

อ้างอิง:

[1] TypeSafe AI. "Structure recovery (autoformat)." docs.typesafe.ai/cookbooks/autoformat, กันยายน 2026. https://docs.typesafe.ai/cookbooks/autoformat.md

[2] TypeSafe AI. "Pre-parsed value extraction." docs.typesafe.ai/cookbooks/pre_parsed_value_extraction_cookbook, กันยายน 2026. https://docs.typesafe.ai/cookbooks/pre_parsed_value_extraction_cookbook.md

[3] TypeSafe AI. "Date extraction." docs.typesafe.ai/cookbooks/date_extraction_cookbook, กันยายน 2026. https://docs.typesafe.ai/cookbooks/date_extraction_cookbook.md

[4] TypeSafe AI. "Hierarchical classification." docs.typesafe.ai/cookbooks/hierarchical_classification, กันยายน 2026. https://docs.typesafe.ai/cookbooks/hierarchical_classification.md

[5] TypeSafe AI. "SDE cascade." docs.typesafe.ai/cookbooks/sde_cascade, กันยายน 2026. https://docs.typesafe.ai/cookbooks/sde_cascade

[6] Nokka. "Jev เร็ว 200 เท่า เพราะเขียนข้อความไม่ได้ และนั่นคือประเด็น." dev.to, กันยายน 2026. https://dev.to/sarantoon/jev-erw-200-ethaa-ephraaaekhiiynkhkhwaamaimaid-aelanankhuuepraedn-38f1

Top comments (0)