Thai N-NER: Thai Nested Named Entity Recognition

Weerayut Buaphet
AIResearch.in.th
Published in
3 min readApr 20, 2022

Nested Named Entity Recognition (N-NER) เป็นงาน NER ที่เพิ่มความสามารถในแท็กหลายๆชื่อที่ซ้อนกันอยู่ออกมาได้ ทำให้เราสามารถสกัดข้อมูลของชื่อได้ละเอียดมากขึ้น โดยทาง VISTEC-depa Thailand Artificial Intelligence Research Institute ได้เปิดชุดข้อมูล nested NER สำหรับภาษาไทยสู่สาธารณะ โดยได้รับการสนับสนุนจาก SCB ภายใต้ชื่อ scb-nner-th-2022

อะไรคือ Named Entity Recognition

หากพูดถึงงานพื้นฐาน NLP ก็คงจะขาดไปไม่ได้สำหรับ Named Entity Recognition (NER) ซึ่งเป็น task สำหรับการแท็กคำที่เป็นชื่อเฉพาะในประโยค

Figure 1 การแท็กข้อมูลของ NER

จากรูปเป็นตัวอย่างการกำกับข้อมูลของ NER ซึ่งเราสามารถนำเอาชื่อที่ถูกกำกับว่าเป็นชนิดต่างๆนั้น ไปใช้กับ Chat-bot/Dialogue ต่อได้ [1]

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

Nested Named Entity Recognition

เราเรียกงานประเภทนี้ว่า Nested NER

Figure 2 การแท็กข้อมูลแบบ N-NER

ข้อดีจากการแท็กชื่อที่ซ้อนกันนั้นทำให้เราสามารถแท็กชนิดและรายละเอียดของชื่อได้มากขึ้น นอกจากนี้เรายังจะได้เห็นความสัมพันธ์ระหว่างชื่อเฉพาะนั้นกับชนิดของชื่อที่มากกว่าหนึ่งชนิด จากตัวอย่าง Figure 2 จะเห็นว่านอกจากกำกับคำทั้งหมดว่าเป็นชนิดตำแหน่ง (role) แล้ว ยังให้รายละเอียดส่วนย่อยของชื่อนั้นได้ว่าเป็นชื่อที่มีความเกี่ยวเนื่องกับการเมือง เช่น “คณะกรรมการ 40 ปี 14 ตุลาเพื่อประชาธิปไตรสมบูรณ์” (org political) รวมไปถึงช่วงเวลา “40 ปี” (duration) “14 ตุลา” (date, day, month) จะเห็นได้ว่าทั้งชื่อเฉพาะที่ใหญ่ที่สุดนั้นยังมีส่วนย่อยที่เรายังสามารถสกัดข้อมูลได้อีก

ด้วยเหตุนี้ทาง AIResearch ได้ตัดสินใจสร้าง Thai N-NER dataset ที่มีชนิดของชื่อเฉพาะที่ละเอียดและเก็บความเป็น structure ของส่วนประกอบต่างๆ ขึ้นมา เพื่อให้รองรับกับงานที่จะนำไปใช้ที่หลากหลายมากขึ้น ไม่ว่าจะเป็นการเลือกได้ว่าต้องการชื่อเฉพาะชนิดไหน หรือต้องการความสัมพันธ์ที่เป็น structure ของชื่อเฉพาะก็สามารถใช้ชุดข้อมูลนี้ได้

ในปี 2022 ทาง AIResearch ได้ทำการปล่อยดาต้าเซ็ตใหม่ชื่อ scb-nner-th-2022 โดยตัวดาต้าเซ็ตได้รับการตอบรับให้ตีพิมพ์ที่ ACL2022 ใน Findings Track โดยปล่อยใน license CC-by-SA 3.0 (ใครเอาไปใช้ก็ได้ แต่ต้องให้เครดิตด้วย)

ขั้นตอนการเตรียมชุดข้อมูล

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

ซึ่งในส่วนของการเก็บข้อมูล เราเก็บข้อมูลมาจากดาต้าเซ็ตของ Prachatai จำนวน 4,396 บทความ และ Wongnai 489 บทความ เพื่อนำมากำกับชื่อเฉพาะ เราได้เลือกสองดาต้าเซ็ตนี้เนื่องจากเราต้องการสร้างชุดข้อมูลสำหรับงานทั่วไป โดย Prachatai เป็นข้อมูลที่เก็บรวบรวมจากข่าวทั่วไป และ Wongnai เป็นชุดข้อมูลเกี่ยวกับร้านอาหาร ซึ่งทั้งสอง domain นี้ สามารถประยุกต์ใช้กับงานทั่วไปได้อย่างหลากหลาย

ในขั้นตอนการสร้างกฏในการกำกับคำนั้นเราได้ใช้แนวคิดจากเปเปอร์ NNE: A Dataset for Nested Named Entity Recognition in English Newswire [2] ซึ่งเป็นมาตราฐานการสร้าง Nested NER ในปัจจุบัน โดยเราได้เพิ่มกฎและแก้ไขให้เหมาะสมสำหรับบริบทของภาษาไทย

หลังจากมีการเลือกชุดข้อมูลและออกแบบขั้นตอนการสร้างแล้ว เพื่อที่จะสร้างดาต้าเซ็ตให้มีคุณภาพ เราต้องมีนักกำกับข้อมูลที่มีความรู้ในการกำกับข้อมูลและสามารถจำแนกชื่อเฉพาะได้ดีในบริบทต่างๆ ซึ่งในงานนี้เราได้ “Hope Data Annotations” มาจัดการตรงนี้ โดยทาง Hope ได้ปรับแต่งกฎตามความเหมาะสมระหว่างขั้นตอนการกำกับข้อมูลที่มีปัญหาเกิดขึ้น

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

  • Inconsistency เนื่องจากการกำกับข้อมูลชุดนี้ใช้ผู้กำกับข้อมูลเป็นจำนวนมากทำให้เกิดรูปแบบในการกำกับแตกต่างกัน ในกรณีที่อยู่นอกเหนือกฎที่ใช้ร่วมกัน เราได้แก้ไขปัญหาด้วยการหาตัวอย่างที่เกิดขึ้นบ่อยและทำข้อตกลงร่วมกันภายในกลุ่มผู้กำกับข้อมูล
  • Ambiguity ในบางกรณีชื่อเฉพาะบางชื่อมีความกำกวมระหว่างสองชนิด เพื่อลดปัญหาดังกล่าว ทางทีมงานกำกับข้อมูลมีการสร้างกลุ่มเพื่อปรึกษากันหากไม่มั่นใจและเพื่อหาข้อตกลงร่วมกันในการกำกับข้อมูล
  • 104 fine-grained classes และความยากอีกอย่างหนึ่งในการกำกับข้อมูลชุดนี้ก็คือด้วยชนิดของชื่อเฉพาะที่มีจำนวนมหาศาลทำให้ผู้กำกับข้อมูลต้องวิเคราะห์ถึงบริบทมากกว่าปกติรวมถึงการลำดับความลึกการกำกับข้อมูล หลักการหนึ่งที่เราได้ตกลงรวมกันคือจะมีการกำกับชื่อที่ใหญ่ที่สุดก่อนและกำกับชื่อที่ซ้อนกันในรูปแบบของ tree structure และจะไม่มีการ overlapping กันระหว่างชื่อเฉพาะ
  • การกำกับที่ไม่ได้ทำตาม guideline การกำกับข้อมูลที่เยอะและมีจำนวนชนิดที่หลากหลายย่อมมีการผิดพลาดเป็นธรรมดา ในที่นี้เราตรวจสอบชื่อเฉพาะที่ถูกกำกับโดยใช้ลิสต์รายชื่อสำหรับแต่ละคลาส(gazetteers) เพื่อหาชื่อเฉพาะที่มีโอกาสผิดพลาดและกลับไปตรวจสอบชื่อที่มีโอกาสผิดพลาดและมีการแก้ไขตามบริบทนั้น เช่น ในกลุ่มของตัวเลขไม่ควรมีชื่อคนอยู่ เป็นต้น

ในขั้นตอนหลังจากมีการกำกับข้อมูลเรียบร้อยแล้วเราได้สุ่มเลือกประโยคเดิมขึ้นมากำกับซ้ำเพื่อหาคะแนนความตรงกันของการกำกับข้อมูลซึ่งเราได้คำนวณคะแนน(Cohen’s Kappa agreement score) และได้ 0.79 (CONLL) และ 0.85 (Pyramid) ซึ่งถือว่าอยู่ในเกณฑ์ของชุดข้อมูลที่มีคุณภาพ

สถิติของชุดข้อมูล

ชุดข้อมูลของเราประกอบด้วยคำทั้งหมด 1,272,381 คำ จาก 4,894 บทความ มีการกำกับชื่อทั้งหมด 104 ชนิด ซึ่งหลังจากได้กำกับข้อมูลเสร็จแล้วมีชื่อเฉพาะที่ถูกกำกับ 264,798 ชื่อเฉพาะ เราได้แบ่งชนิดข้อมูลออกเป็น train/dev/test ในอัตราส่วน 60%/20%/20% ตามลำดับเพื่อให้ง่ายต่อการนำไปทดลอง และในการแบ่งข้อมูลนั้นเราได้สุ่มชุดข้อมูลให้ชุด train และ test มีชนิดของชื่อครบทุกชนิด

Table 1 สถิติการนับจำนวนชื่อเฉพาะแบ่งออกเป็น train/dev/test และแยกตามความลึกของชั้นที่ซ้อนกัน

เมื่อเทียบกับภาษาอื่น scb-nner-th-2022 มีขนาดใกล้เคียงกับ N-NER dataset ที่มีในภาษาอังกฤษ ทั้งจำนวนชื่อที่มีการกำกับและชนิดของชื่อเฉพาะ และเมื่อเปรียบเทียบกับภาษาอื่นๆ ที่ไม่ใช่ภาษาอังกฤษชุดข้อมูลของเรายังมีขนาดที่ใหญ่กว่ามาก

Table 2 ตารางสถิติชุดข้อมูลของเราเมื่อเปลียบเทียบกับชุดข้อมูลในภาษาต่างๆ

หลังจากมีการกำกับข้อมูลเสร็จแล้วเราได้เห็นสถิติของจำนวนชื่อเฉพาะในแต่ละชนิดที่ไม่เท่ากันและอยู่ในรูปแบบของ long-tail distribution problems ซึ่งทำให้เราทำการทดลองของปัญหาดังกล่าวด้วยข้อสงสัยที่ว่า โมเดลที่ดีที่สุดในตอนนี้สามารถจัดการกับชุดข้อมูลที่มีชนิดของชื่อเฉพาะที่มีจำนวนมากและมีปัญหา Long-tail distributions ได้ดีขนาดไหน

Figure 3 กราฟแสดงชื่อในแต่ละชนิดที่มีการเรียงลำดับจากมากไปหาน้อย จะเห็นว่า 80% ของชื่อเฉพาะทั้งหมดอยู่ใน 20 ชนิดแรกเท่านั้น

การทดลอง: สร้างโมเดลจากดาต้าเซ็ตของเรา

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

ในการทดลองของเราในครั้งนี้ได้ใช้ model หลากหลาย architecture ที่มีอยู่ในภาษาอังกฤษ ไม่ว่าจะเป็น

  • Second-best-learning [3]
  • Pyramid [4]
  • Locate and label [5]

ซึ่งนั้นก็หมายความว่า เราสามารถเอาเทคนิคจากภาษาอื่นมาประยุกต์ใช้กับภาษาไทยได้

นอกเหนือจากนั้นเราได้สร้าง model ที่เป็น baseline ง่ายๆ ขึ้นมา ซึ่งเป็นโมเดลที่เพียงแท็กชื่อเฉพาะในแต่ละ nested level แยกกัน แล้วนำคำตอบมารวมกันอีกที ทั้งนี้เพื่อให้คนที่สนใจนำชุดข้อมูลเราไปใช้ได้ง่ายขึ้น อีกทั้งโมเดลที่ไม่ได้มีความซับซ้อนมากอย่าง WangchanBERTa-sp/-sh ก็ยังสามารถทำได้ดีในระดับหนึ่ง

Table 3 ตารางเปรียบเทียบผมลัพธ์ที่ได้จากโมเดลแบบง่ายและโมเดลที่มีอยู่ในภาษาอังกฤษโดยได้แสดงผลตามกลุ่มความถี่ Head/Body/Tail และผลรวมทั้งหมด

จากผลการทดลองเมื่อเปรียบเทียบระหว่าง baseline model และ state-of-the-art แล้วผลรับได้ใกล้เคียงกัน และจะเห็นว่า baseline model ของเรายังทำงานได้ค่อนข้างดีในกรณีของกลุ่ม body และ tail แต่ในส่วนของ head มีผลแย่กว่า

บทสรุป

เราได้สร้างชุดข้อมูลสำหรับ Nested NER ซึ่งเป็นชุดข้อมูลแรกในภาษาไทย ที่มีการแบ่งชนิดของชื่อเฉพาะมากถึง 104 ชนิด โดยมีคำทั้งหมด 1,272,381 คำ เราได้กำกับข้อมูลชื่อเฉพาะทั้งหมดมากถึง 264,789 ชื่อ โดยชุดข้อมูลเรามีขนาดใหญ่เทียบเท่ากับชุดข้อมูลมาตรฐานของภาษาอังกฤษ และเรายังได้ทำการทดลองชุดข้อมูลของเรากับหลายๆโมเดลเพื่อให้นักวิจัยที่สนใจสามารถต่อยอดและเปรียบเทียบได้

Acknowledgment

ชุดข้อมูลชุดได้รับการช่วยเหลือจาก VISTEC-depa Thailand Research Institute และ Hope Data Annotations ในการสร้างชุดข้อมูลและได้รับเงินทุนสนับสนุนจาก the Digital Economy Promotion Agency (depa) Digital Infrastructure Fund MP-62–003 และ Siam Commercial Bank.

Conference Publication:
Weerayut Buaphet, Can Udomcharoenchaikit, Peerat Limkonchotiwat, Attapol T. Rutherford, Sarana Nutanong
Thai Nested Named Entity Recognition Corpus. ACL(Findings) 2022

ทดลองเล่นได้แล้วที่

Github:
https://github.com/vistec-AI/Thai-NNER

Colab: https://colab.research.google.com/drive/16m7Vx0ezLpPY2PQLlIMlbfmI9KBO5o7A

อ้างอิง

[1] SOLOIST: Building Task Bots at Scale with Transfer Learning and Machine Teaching

[2] NNE: A Dataset for Nested Named Entity Recognition in English Newswire

[3] Nested Named Entity Recognition via Second-best Sequence Learning and Decoding

[4] Pyramid: A Layered Model for Nested Named Entity Recognition

[5] Locate and Label: A Two-stage Identifier for Nested Named Entity Recognition

--

--