Data Augmentation in NLP ในโลกที่ต้องการดาต้า ด้วย Backtranslation
คุณเคยประสบปัญหานี้หรือไม่ ดาต้าไม่พอ,ดาต้ามีความ Imbalance
สำหรับโจทย์อื่นอาจจะนำไปทำการ Upampling, Downsampling แต่สำหรับการนำไปทำโจทย์ด้าน NLP(Natural Language Processing) นั้นมันช่างยากเย็น เนื่องด้วยการทำ Upsampling ปกติจะทำให้ได้ตัว ดาต้า ที่มีหน้าตา feature เหมือนเดิมเป๊ะๆ การนำไปทำใช้จริงอาจจะก่อให้เกิดการ Overfit ได้ สิ่งที่เราต้องการคือการให้โมเดลเราได้เรียนรู้ ข้อมูลใหม่ๆที่ยังมีความคล้ายคลึงกับข้อมูลที่เรามีอยู่
วิธีที่จะเพิ่มข้อมูล หรือ การทำ Data Augmentaion ในส่วนของ Image นั้นสามารถทำได้ด้วยวิธีการ เช่น การเบลอ,การหมุนรูป,การย้อมสี อย่างละน้อยเพื่อยังคงความเป็น Characterisic ของตัวข้อมูลเดิมได้ ทำให้โมเดลได้เรียนรู้ข้อมูลที่หลากหลายมากขึ้น
Data Augmentation in NLP
แต่ถ้าเป็น Text หละ วิธีการ Augmentation ของ NLP ในปัจจุบันก็มีหลากหลายเทคนิค เช่น การสุ่มแทนบางคำด้วย Synonym,การสุ่มแทนคำด้วย TF-IDF เป็นต้น สิ่งที่เราต้องใส่ใจคือการสร้างข้อมูลใหม่โดยยังคง Characteristic ของตัวเดิมไว้ให้ได้มากที่สุด หรือก็คือ บริบทของข้อความนั้นยังเป็นเหมือนเดิม
โดยเทคนิค Augmentation ที่จะมานำเสนอก็ คือ Backtranslation การทำงานอย่างคร่าวๆก็คือ การนำข้อความที่เราต้องการจะทำ Data Augmentation นำไปแปลให้เป็นอีกภาษา และแปลกลับมาเป็นภาษาเดิม
จากภาพจะเห็นขั้นตอนการทำงานของ Backtranslation ได้ว่า
- เรานำข้อความภาษาไทยที่เราต้องการ Augment ไปแปลเป็นภาษาอังกฤษ คือ
“ถึงแม้ฉันอยากจะกินไก่ทอด แต่ฉันว่าร้านนั้นมันไม่อร่อย ฉันเลยเลือกไปกินกระเพราไก่ร้านยายน้อย”
นำไปแปลเป็นภาษาอังกฤษ - นำข้อความภาษาอังกฤษที่แปลได้ กลับมาแปลเป็นภาษาไทยอีกครั้งได้ผลลัพธ์ คือ
“ถึงอยากกินไก่ทอด แต่คิดว่าร้านนั้นไม่อร่อย เลยเลือกไปกินกระเพาไก่ร้านยายน้อย”
ซึ่งจากผลจะเห็นได้ว่าเราจะได้ข้อมูลใหม่ที่หน้าตาไม่ได้เหมือนกันเปี้ยบ แต่เรื่องของความหมายและบริบทยังคงเดิมไว้ได้มาก ซึ่งในภาษาไทยเราสามารถเลือกใช้เครื่องมือได้หลากหลายแบบ ซึ่งตัว Open source ที่น่าสนใจก็คือตัว
Machine Translation ของทาง VISTEC ซึ่งมีการเคลมว่าได้ผลความแม่นยำได้ดีพอๆ กับ Google API และที่สำคัญคือฟรีด้วย 😍 😍
VISTEC Machine Translation
ตัวของ Machine Translation ของทาง VISTEC เราสามารถเลือกใช้ได้หลากหลายโมเดล เช่น word2bpe และ bpe2bpe ซึ่งมีตัวอย่างตัวโค้ด Python ในการลองใช้ Machine Translation คร่าวๆ
ผลจากการทำ Backtranslation ด้วยโมเดลของ VISTEC ซึ่งรูปแบบของข้อความเปลี่ยนแปลงไปเล็กน้อย แต่ความหมายโดยรวมยังคงคล้ายเดิม
NLP Data Augmentation for Text Classification
โจทย์ NLP ที่จะมาลองใช้การทำ Data Augmentation ก็คือโจทย์ Text Classification ซึ่งโจทย์ที่จะนำมาแก้ก็คือการทำ Sentiment Analysis ของชุดข้อมูล wisesight-sentiment ซึ่งมีทีมงาน Pythainlp ได้ทำตัว Benchmark ไว้
เริ่มจากการ Explore Data เราจะพบว่าปัญหาที่หลอกหลอนก็ คือ ปัญหา Imbalance อีกแล้ววว
สิ่งที่เราต้องทำต่อมาคือการทำให้ข้อมูลของ Class อื่นได้มีหน้ามีตาบ้าง เพราะปัญหา Imbalance มันจะทำให้โมเดลเรานิสัยไม่ดี เช่น เจอ Class : neu บ่อยๆ มันก็ขี้เกียจคิดและเลือกตอบ neu ไปเลยในบางที เพราะฉะนั้น Class ที่จะนำไปทำ Data Augmentation คือ Class : neg(negative),pos(positive),q(question)
จากภาพจะเห็นว่ากรอบสีน้ำเงิน คือ ผลการแปลอาจจะไม่ตรงกับข้อความต้นฉบับมาก และ ยิ่งกรอบสีแดงเห็นชัดได้ว่าคือ อารมณ์ความหมายของข้อความต้นฉบับเปลี่ยนไปเป็นอีกด้านนึง 😮 😮
ฉะนั้นเราต้องมีเกณฑ์อะไรบางอย่างในการคัดเลือก ประโยคที่เราทำการ Backtranslation นั้นยังคงมี ภาพรวมและบริบทใกล้เคียงกับประโยคต้นฉบับ ซึ่งเราจะใช้ Text Similariry ในการวัด
Text Similarity
Sentence Embedding+ Cosine-Similarity
การใช้ Cosine-similarity สามารถใช้วัดความเหมือนกันของประโยคสองประโยค(ในเชิงควาหมาย Semantic Similarity) ได้เนื่องด้วยตัว Feature ของเราคือ Word-embedding (ULM-fit) ซึ่งมีความสามารถในการเก็บความหมายของคำอยู่แล้วทำให้การหา distance ของ Word-embedding ที่ใกล้เคียงกันที่สุด ซึ่งที่เราจะทำคือ Take Average ของ Word-embedding ทุกคำในประโยคและคำนวณ Cosine-similairity
SIF Sentence Embedding + Cosine-Smilairty
SIF (Smooth Inverse Frequency) เนื่องจากการ Take Average ของ Word-embedding ทั้งหมด อาจจะทำให้เกิด การให้ weight ใน Word embedding ของคำที่ไม่ได้สำคัญ ไม่ได้มีคุณลักษณะในการสื่อความหมายเท่าไหร่ เช่น คำที่เกิดบ่อย
(ที่
,
,?
,ซึ่ง
และ อื่นๆ) ซึ่งการทำ SIF จะช่วยให้ลดการให้น้ำหนักกับคำประเภทนี้
BLEU
BLEU Score เป็นที่นิยมในการใช้วัดความเหมือนกันของข้อความต้นฉบับ กับข้อความที่ถูก Generate ขึ้นมา เช่น Machine Translation ซึ่งตรงกับโจทย์ของเรา (BLEU Score ไม่ได้มีการคำนวณในส่วนของเหมือนกันทางด้านความหมาย เพราะเป็น exact match)
สังเกตุจากภาพข้างบนจะเห็นว่าในกรอบสีส้มในข้างบนต่อให้มีค่า Cosine-Similarity ที่สูงกับต้นฉบับ แต่มีบริบทไม่ถูกต้องเมื่อมองด้วยตา ทำให้การใช้ BLEU Score ยังคงมีประโยชน์ในการคัดเลือก
กำหนด Threshold ในการเลือกประโยคที่ดีที่สุด
หลังจากได้ค่าคะแนน หลายชนิดมาเป็นเกณฑ์ ต่อไปเราต้องเลือกว่าจะใช้ค่าคะแนนแต่ละชนิดในการเป็น Threshold ว่าเราควรจะกำหนดไว้ที่เท่าใด (แล้วแต่โจทย์และแล้วแต่ความพึงพอใจของแต่ละคน)
SUMMARY
ซึ่งจากผลลัพธ์จากภาพจะเห็นว่า การทำ Data Augmentation ด้วย Backtranslation ถือว่าทำหน้าที่ได้ค่อนข้างดี ในการที่ยังคงบริบทความหมายของตัวประโยคต้นฉบับได้พอสมควร ซึ่งนี่คงเป็นตอนจบของบทความนี้ ในบทความถัดไปเราจะนำ Data ที่เรา Augmentation แล้วนำเข้าไปเทรนเพื่อดูว่าสามารถเพิ่มประสิทธิภาพให้กับการทำ Text Classification หรือไม่