Data Augmentation in Natural Language Processing


Share this article

สำหรับคนที่เคยทำงานด้าน Machine Learning และ Deep Learning น่าจะเป็นที่ทราบกันดีว่าการที่จะสอนให้โมเดลเรียนรู้ความสัมพันธ์ภายในข้อมูลและทำนายข้อมูลได้อย่างแม่นยำ จำเป็นจะต้องใช้ข้อมูลจำนวนมากที่มีคุณภาพดีมาเป็นตัวอย่างให้โมเดลได้เรียนรู้ และในการเทรนโมเดลแบบ Supervised Learning มนุษย์จะต้องทำการ label ข้อมูลชุดนั้น ก่อนจะนำมาเข้าโมเดล

แน่นอนว่าชุดข้อมูลเหล่านี้ไม่ได้มาฟรีๆ บางครั้งมีข้อจำกัดมากในการนำไปประยุกต์ใช้ เช่น ถ้าโจทย์ปัญหาของเรามีข้อมูลจำกัด เช่น การเก็บข้อมูลเป็นกระบวนการที่มีต้นทุนสูงต้องใช้ผู้เชี่ยวชาญมาช่วย label ข้อมูล หรือ สถิติของข้อมูลมีความเป็นเอกลักษณ์ ทำให้เราไม่สามารถหาข้อมูลจากแหล่งอื่นได้อีกแล้ว เพราะกระบวนการในการสร้างข้อมูลอาจจะไม่เหมือนกัน และ ผู้ให้ข้อมูลกับเราไม่สามารถที่จะหาข้อมูลมาให้เพียงพอที่จะเทรนโมเดล ในกรณีแบบนี้ Machine Learning Engineer ก็จะใช้วิธีการที่เรียกว่า Data Augmentation ในการแก้ปัญหา

Data Augmentation เป็นขั้นตอนวิธีในการดัดแปลงข้อมูลต้นฉบับให้กลายเป็นข้อมูลใหม่ที่ยังใกล้เคียงกับข้อมูลเดิมอยู่เพื่อเพิ่มปริมาณของข้อมูลที่นำมาใช้ในการเทรนโมเดล ซึ่งการทำ Augmentation เป็นกระบวนการสำคัญและใช้งานกันมากในงานด้าน Computer Vision  ซึ่งใช้วิธีการนำรูปภาพเดิมมาทำการเลื่อน หมุน พลิก ตัดบางส่วนออก ใส่ Noise ลงไป หรือปรับแสงสี ความคมของภาพ เพื่อให้ได้ข้อมูลที่ต่างไปจากเดิมเล็กน้อย แต่ยังคงมีความหมายเหมือนเดิม

 

 

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

แต่ถ้าหากข้อมูลของเราไม่ใช่รูปภาพ แต่เป็นข้อความล่ะ?

ข้อมูลข้อความนั้นต่างกับรูปภาพตรงที่ว่า ข้อความนั้นประกอบไปด้วยหน่วยย่อย (เช่น คำ หรือ ตัวอักษร) ที่มีความสัมพันธ์กันในเชิงลำดับการเกิด (Temporal relationship) นั่นคือหน่วยย่อยที่เกิดทีหลัง จะมีความสัมพันธ์บางอย่างกับหน่วยย่อยที่เกิดก่อน โดยเราไม่สามารถระบุได้ชัดเจนว่าคำแต่ละหน่วยย่อยจะมีความสัมพันธ์กับหน่วยใกล้เคียงกี่หน่วยก่อนหน้า ต่างกับข้อมูลรูปภาพที่หน่วยย่อย (พิกเซล) มีความสัมพันธ์กันในเชิงพื้นที่ (Spatial relationship)

อีกความแตกต่างก็คือ ในรูปภาพ 1 รูป อาจจะประกอบไปด้วยหน่วยย่อยหรือ พิกเซล (Pixel) จำนวนมาก เช่น รูปภาพขนาด 256 x 256 พิกเซล ถ้าเป็นรูปสีที่มี 3 channels (RGB) จะประกอบไปด้วยหน่วยย่อยกว่า 196,608 หน่วย และค่อนข้างสัมพันธ์กันในพื้นที่เล็ก ๆ (Localized) ในขณะที่ข้อมูลที่เป็นข้อความ หนึ่งข้อความหรือเอกสาร อาจจะมีหน่วยย่อยที่สุดที่มีความหมาย (คำ หรือ Lexeme) เพียงไม่กี่พันตัว หรืออาจจะน้อยกว่านั้น และยังสัมพันธ์กันในลักษณะ Temporal แบบไม่มีขอบเขตความสัมพันธ์ที่ชัดเจนอีกด้วย หากเราแปลงข้อมูลโดยไม่คำนึงถึงสถิติของความสัมพันธ์ ความหมายของข้อความอาจจะเปลี่ยนไปแบบคนละเรื่องได้เลยทีเดียว

วิธีการทำ Data Augmentation สำหรับข้อมูลข้อความมีด้วยกันหลายวิธี เช่น

1. Synonym Replacement

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

 

2. Random Insert/Swap/Delete

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

 

3. Anti-Population Sampling หรือ Irrelevant Sample

เป็นวิธีการเพิ่มจำนวนข้อมูลในกรณีที่ใช้โมเดลแบบ Binary Classification แล้วไม่สามารถหาข้อมูลที่ไม่เกี่ยวข้องกับเป้าหมายที่สนใจได้มากพอ หรือก็คือชุดข้อมูลมี label 1 (Relevant Samples) มากกว่า label 0 (Irrelevant Samples) เป็นจำนวนมาก ทำให้โมเดลไม่สามารถแยกข้อมูลที่ไม่เกี่ยวข้อง (label เป็น 0) ออกจากข้อมูลที่เกี่ยวข้อง (label เป็น 1) ได้ดีพอ การทำ Augmentation ด้วยวิธีนี้มีขั้นตอนดังต่อไปนี้

3.1 สร้าง Wordbank จาก Dictionary

3.2 สร้าง Relevant Sample Word set โดยนำคำในข้อมูลที่มี label เป็น 1 มาสร้างเป็นเซ็ต

3.3 สร้าง Irrelevant Sample Word set โดยการนำ Wordbank ไปลบกับ Relevant Sample Word set

3.4 สุ่มตัวอย่างคำมาจาก Irrelevant Sample Word set เพื่อนำมาสร้างประโยค และกำหนด label ของประโยคที่สร้างขึ้นมาใหม่เป็น 0

อย่างไรก็ตาม วิธีการนี้จะใช้ได้ก็ต่อเมื่อมั่นใจว่าข้อมูลที่เรามีที่เกี่ยวข้องกับสิ่งที่เราสนใจ (label เป็น 1) ครอบคลุมทุกความเป็นไปได้ของสิ่งนั้นแล้วจริง ๆ เท่านั้น เช่น หากเราอยากทำนายว่า ข้อความนี้มีลักษณะเป็นการเหยียดหยามหรือดูถูกหรือไม่ เราก็ควรมีตัวอย่างข้อความที่เป็นการเหยียดหยามหรือดูถูกเป็นตัวอย่างให้ครอบคลุมก่อน แล้วจึงจะสร้างข้อมูลใหม่ด้วยวิธีข้างต้นได้ ไม่เช่นนั้นแล้วอาจเกิดปัญหาการไม่เคยเจอข้อมูลที่เกี่ยวข้องมาก่อน (Unobserved Positive Sample) ก่อให้เกิด False Negative ได้ (ข้อมูลจริงเป็น label 1 แต่โมเดลทำนายว่าเป็น label 0)

READ  Feature engineer: การแปลงข้อมูลโดใช้ค่าล็อก (Log Transformation)

 

4. Generative Model

Generative Model เป็นโมเดลรูปแบบหนึ่งที่จะสร้างข้อมูลชุดใหม่ขึ้นมาจากข้อมูลที่โมเดลเคยเรียนรู้ไป เช่น โมเดลที่สามารถวาดรูปหรือแต่งเพลงเลียนแบบสไตล์ของศิลปินในอดีต (GANGogh: https://towardsdatascience.com/gangogh-creating-art-with-gans-8d087d8f74a1 , DeepBach: https://arxiv.org/abs/1612.01010) โมเดลประเภทนี้เรียนรู้ข้อมูลและสร้างข้อมูลขึ้นมาใหม่โดยอาศัยความสัมพันธ์ภายในข้อมูล โดยอาจจะมีการเพิ่มความแปรผันเข้าไปในขั้นตอนการสร้างข้อมูลเพื่อให้ได้ข้อมูลที่ต่างออกไปจากเดิมได้ ซึ่งแนวคิดดังกล่าวก็สามารถนำมาใช้กับการทำ Data Augmentation กับข้อมูลข้อความได้ ขั้นตอนคร่าวๆ มีดังนี้

4.1 นำข้อมูลข้อความทั้งหมดในชุดข้อมูลไปเป็นข้อมูลในการ Train ของ Generative Model โดยไม่สนใจ label ดั้งเดิมของข้อความ

4.2 เมื่อ Train เสร็จแล้ว ทำการสร้างข้อมูลใหม่ โดยกำหนดคำเริ่มต้นของข้อมูลใหม่อย่างสุ่ม และอาจเพิ่ม Noise เพื่อเพิ่มโอกาสในการสร้างประโยคใหม่ๆ ที่ต่างไปจากเดิมขึ้น

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

 

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

สรุปข้อดี ข้อเสีย และสถานการณ์ที่เหมาะกับการใช้งานของ Data Augmentation วิธีการต่างๆ

วิธีการ ข้อดี ข้อเสีย สถานการณ์ที่เหมาะกับการใช้งาน
Synonym Replacement ความหมายของข้อความเปลี่ยนน้อยมากหรือไม่เปลี่ยนเลย ใช้ได้ทุกสถานการณ์
Random Insert/Delete/Swap ง่าย รวดเร็ว ความหมายของข้อความอาจเปลี่ยนไป จึงควรตรวจสอบผลที่ได้จากโมเดลทุกผลลัพธ์ว่าควรเป็น label ใด ใช้ได้ทุกสถานการณ์
Anti-Population Sampling ช่วยเพิ่มความสามารถของโมเดลในการแยกข้อมูลที่ไม่เกี่ยวข้อง ออกจากข้อมูลที่เกี่ยวข้อง ต้องมีข้อมูลที่เกี่ยวข้อง (Relevant) ให้ครอบคลุม ใช้เพิ่มข้อมูลที่ไม่เกี่ยวข้องในกรณีที่มีข้อมูลที่เกี่ยวข้องมากๆ
Generative Model ช่วยเพิ่มความหลากหลายของข้อมูลด้วยการเพิ่มความแปรผันในขั้นตอนการสร้างข้อมูลใหม่ หากข้อมูลตั้งต้นมีไม่เยอะพอก็ไม่เกิดประโยชน์ และต้องตรวจสอบผลที่ได้จากโมเดลทุกผลลัพธ์ว่าควรเป็น label ใด มีข้อมูลตั้งต้นเยอะ และอยากเพิ่มความหลากหลายเข้าไปอีก

 

Conclusion

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

 

Code

โค้ดง่าย ๆ ของการทำ Data Augmentation โดยใช้ Python และ Library NLTK ในการประมวลผลข้อความ Colab: https://colab.research.google.com/drive/1IsfgWviy0wUJuYgfMu8F0vnKz1IJ8rhE

 

References

Giridhara, P., Mishra, C., Venkataramana, R., Bukhari, S., & Dengel, A. (2019). A Study of Various Text Augmentation Techniques for Relation Classification in Free Text. 8th International Conference on Pattern Recognition Applications and Methods. Prague.

Sharifirad, S., Jafarpour, B., & Matwin, S. (2018). Boosting Text Classification Performance on Sexist Tweets by Text Augmentation and Text Generation Using a Combination of Knowledge Graphs. Proceedings of the Second Workshop on Abusive Language Online (ALW2). Brussels.

Wei, J., & Zou, K. (2019). EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks. 2019 Conference on Empirical Methods in Natural Language Processing and 9th International Joint Conference on Natural Language Processing. Hong Kong.

 


Leave a Reply  

Your Email Required address will not be published. Required fields are marked *

ลงทะเบียนรับข่าวสาร

ไม่พลาดทุกการอัพเดทจาก Big Data Experience Center

Big Data Experience Center (BX)

ชั้น 14 อาคาร Knowledge Exchange Center (KX)
110/1 ถนนกรุงธนบุรี, แขวงบางลำภูล่าง เขตคลองสาน กรุงเทพฯ 10600
อีเมล์: [email protected]
Tel: 097-941-9889

ABOUT

SERVICES