Lalita Machine Translation Chinese-Thai
จุดเริ่มต้นที่อยากจะทำ Model Machine Translation จีน-ไทย ขึ้นมา เริ่มต้นมาจากที่ตามปกติหากว่าเรากำลังติดต่อสื่อสารกับคนจีนหรือคนต่างชาติ แต่เราไม่สามารถสื่อสาร พูดคุยกับเค้าเข้าใจ ฟังไม่รู้เรื่อง ไม่รู้จะตอบยังไงดี แต่อยากติดต่อกับคนจีน ไม่ว่าจะเป็นเรื่องเรียน อยากเริ่มต้นเรียนภาษาจีน เรื่องธุรกิจ อยากติดต่อซื้อขายกับคนจีนไม่ว่าจะนำเข้าส่งออก หรือการทำธุรกิจร่วมกัน หรือ ไม่เข้าใจความรู้สึกของคำพูด เช่น ในภาษาไทยของเรามี ค่ะ/ครับ แต่ภาษาจีนไม่มี ทำให้บางทีต่อให้พูดเก่งหรือมีคำศัพท์เยอะแค่ไหนยังรู้สึกไม่มั่นใจในหลักมารยาทของการใช้ภาษาที่คุยหรือตอบกลับไป
วิธีการปกติของทุกคน ก็คงจะต้องเข้า Google Translate เพื่อแปลข้อความเหล่านั้นออกมาเป็นภาษาไทย หรือถ้าต้องการตอบกลับก็จำเป็นที่จะต้อง แปลข้อความที่ต้องการจากภาษาไทยกลับไปอีกที่นึง ซึ่งถ้าหากว่าเราพอมีความรู้ทางด้านภาษามาบ้าง เวลาเห็นผลลัพธ์การแปลของ Google Translate ก็จะรู้สึกได้ว่า คำหรือภาษาที่เอามาใช้นั้นมีลักษณะแปลกๆ โดยเฉพาะ เวลาแปล ภาษาจีนเป็นภาษาไทย หรือ ภาษาไทยเป็นภาษาจีน จะรู้สึกได้เลยว่าข้อความที่ถูกแปลนั้นไม่ถูกต้อง ไม่ว่าจะเป็นทางด้าน Grammar หรือ ศัพท์ต่างๆ ซึ่งเราสามารถตรวจสอบด้วยวิธีง่ายๆ โดยการ แปลจากภาษาจีนเป็นภาษาไทย แล้วนำคำตอบ ภาษาไทยนั้นกลับไปเป็นภาษาจีนใหม่ จะเห็นได้ชัดเลยว่าคำตอบที่มาจากการแปล และคำเริ่มต้นนั้นไม่เหมือนกัน
ด้วยเหตุจึงรู้สึกว่าอยากที่จะสร้าง เครื่องมือที่จะสามารถช่วยในการแปลภาษา จีน-ไทย เพื่อที่จะสามารถเข้าใจ ติดต่อสื่อสารกับคนจีน หรือแปลได้อย่างถูกต้อง ยิ่งถ้าเรานำ Model เหล่านี้เข้าไปอยู่ใน Application Website หรือ อุปกรณ์ต่างๆ ก็จะเป็นตัวช่วยได้อย่างมากเลยทีเดียว
การเตรียมข้อมูล OPUS DataSet
Opus เป็น Collection Data Set ของ ข้อความที่แปล OPUS เป็นข้อมูลสาธารณะจาก website ต่างๆ เพื่อให้ทุกคนสามารถเข้าไปใช้ Data Set ได้ ซึ่งนั้นทำให้คู่ประโยคในชุดข้อมูลนั้นอาจไม่ถูกต้องเสมอไป จึงทำให้เราจำเป็นที่จะต้องเลือก Data Set ที่เหมาะสมกับความต้องการของ Model และ ความถูกต้องในคู่ประโยคของ Data Set
ในการทำ Machine Translation จีน-ไทย ในครั้งนี้ ได้ทำการเลือกใช้ตัว Data Set ของ Open Subtitles v2018 และ TED2020 v1 โดยที่ DataSet Open Subtitles v2018 มีอยู่ด้วยกันทั้งหมด 1.4 ล้านคู่ประโยค และ TED2020 v1 มีประมาณ 2 แสนคู่ประโยค อย่างที่กล่าวไปข้างต้น คู่ประโยคล้านกว่าประโยคนั้นอาจจะไม่ถูกต้องเสมอไป สาเหตุที่เลือกใช้ Data Set ของ Open Subtitles v2018 และ TED2020 v1 เนื่องจาก คู่ประโยคใน Data Set ของทั้งคู่เหมาะสำหรับการใช้งานในรูปแบบคำพูดในชีวิตประจำวัน
Split DataSet
เราจะแบ่งข้อมูลออกมาเป็นสามส่วน โดยที่เรามีการเลือกใช้ Data Set ทั้งหมด 2 ตัว ดังนั้น เราจะใช้ Open Subtitles v2018 Data Set และ Data Set จากการ Back Translation SCB_MT_OPUS แบ่งเป็น 2 ส่วน ก็คือ Training Set กับ Validation Set แบ่งเป็น Training Set 99.9% (ประมาณ 5 ล้านประโยค) และ Validation Set 1% (ประมาณ 5 หมื่นประโยค) และในส่วนของ Test Set นั้นเราจะใช้ Data Set ของ TED2020 v1 (ประมาณ 2 แสนประโยค)
- Training Set: คือ Set ที่ใช้สำหรับการ Train Model
- Validation Set: คือ Set ที่ใช้สำหรับการทดสอบหาค่า Metrics และค่า Accuracy ของ Model
- Test Set: คือ Set ที่ใช้สำหรับการทดสอบว่า Model ของเราทำงานได้ดีแค่ไหนกับข้อมูลที่นอกเหนือจากการ Train
คุณภาพของชุดข้อมูล Cleaning Data
เนื่องจาก DataSet นี้เรานำมาจาก OPUS ซึ่งเป็น Open DataSet ดังนั้นข้อมูลนี้ไม่ได้สะอาดทั้งหมด หมายความว่า เราจำเป็นที่จะต้องนำข้อมูลเหล่านี้ไป clean ให้เสร็จเรียบร้อยก่อนถึงจะนำไป Train ได้ เพื่อให้ได้ประสิทธิภาพที่ดีในการนำไปใช้งาน ดังนั้นเราจึงมีขั้นตอนการ clean data ดังนี้:
- Drop duplication เราจะทำการ drop duplicates เพื่อลบคู่ประโยคที่ซ้ำกันทิ้ง
- Unique เราจะใช้คำสั่งนี้ในการเช็คว่าแต่ละ column มีค่าแปลกๆอยู่ในประโยคหรือไม่
- Similarity Score เราจะใช้ model ของ multilingual universal sentence encoder (v3 base; Yang et al, 2019) ของ Google เข้ามาช่วยในการหาความหมายทางภาษาที่มีความคล้ายคลึงกันของภาษาจีนและภาษาไทย หลังจากนั้นเราจะทำการคัดกรองคู่ประโยคที่มีความหมายทางภาษาคล้ายเคียงกันเกิน 60% ขึ้นไป
ตัวอย่างของผลลัพธ์หลังจากทำการหาค่า Similarity Score
คู่ประโยคที่มีค่า similarity ระหว่าง 0.0 ถึง 0.1
zh: 还是 一人分一张 (ความหมายที่ถูกต้อง: หรือคนละหนึ่ง)
th: หรือว่าเราควรไปทางใครทางมัน พาคนอื่นมาแทนดี?
Similarity Score: 0.1
คู่ประโยคที่มีค่า similarity ระหว่าง 0.2 ถึง 0.3
zh: 我只想说祝你好运 (ความหมายที่ถูกต้อง: ฉันแค่อยากจะบอกว่าโชคดี)
th: กรุณาเอามือมาไว้ข้างหลังด้วยครับ
Similarity Score: 0.207
คู่ประโยคที่มีค่า similarity ระหว่าง 0.45 ถึง 0.55
zh: 嘿 Michael 他说他不认识你妈妈 (ความหมายที่ถูกต้อง: เฮ้ ไมเคิล เขาบอกว่า เขาไม่รู้จักแม่ของคุณ)
th: ใช่สิ ไมเคิล เขาบอกว่า
Similarity Score: 0.515
คู่ประโยคที่มีค่า similarity ระหว่าง 0.65 ถึง 0.75
zh: 这儿是我家 我不走 (ความหมายที่ถูกต้อง: นี่คือบ้านของฉัน ฉันไม่ไป)
th: นี่คือบ้านของฉัน! ฉันอยู่
Similarity Score: 0.673
คู่ประโยคที่มีค่า similarity ระหว่าง 0.85 ถึง 0.95
zh: 我从没有做过这样的事 (ความหมายที่ถูกต้อง: ฉันไม่เคยทําอะไรแบบนี้มาก่อน)
th: แบบนี้ฉันไม่เคยทำ
Similarity Score: 0.89
4. Word Ratio เป็นการเปรียบเทียบ Ratio หรืออัตราส่วนของคำระหว่างภาษาจีนต่อภาษาไทย เนื่องจากว่า Data Set ของเราอาจจะมี คู่ประโยคที่มีจำนวนคำต่างกันเกินไป ถ้าหากมี Ratio ที่ต่างกันมาก นั้นก็อาจจะทำให้คู่ประประโยคนั้นแปลไม่ครบ หรือ มีความหมายที่ไม่เท่ากัน หลังจากนั้น เราจะทำการคัดกรองคู่ประโยคที่มีอัตราส่วนของคำคล้ายเคียงกันระหว่าง 0.7 ถึง 1.2
ตัวอย่างของผลลัพธ์หลังจากทำการหาค่าอัตราส่วนของคำ Word Ratio
คู่ประโยคที่มีค่า Word Ratio ระหว่าง 1.0 ถึง 2.0
zh: 我是晚上去的 (ความหมายที่ถูกต้อง: ฉันจะไปตอนกลางคืน)
th: กลางคืนมัน
Ratio: 1.75
คู่ประโยคที่มีค่า Word Ratio ระหว่าง 0.7 ถึง 1.0
zh: 你们就不应该让我进来 (ความหมายที่ถูกต้อง: พวกคุณไม่ควรให้ฉันเข้ามา)
th: คุณไม่น่าปล่อยให้ฉันเข้ามา
Ratio: 0.8
คู่ประโยคที่มีค่า Word Ratio ระหว่าง 0.5 ถึง 0.7
zh: 这儿是我家 我不走 (ความหมายที่ถูกต้อง: นี่คือบ้านของฉัน ฉันไม่ไป)
th: นี่คือบ้านของฉัน! ฉันอยู่
Ratio: 0.5
โดยส่วนใหญ่แล้ว หากว่าคู่ประโยคนั้น มีค่า Similarity Score ที่สูง ค่าของตัว Ratio ก็จะใกล้ 1 ไปด้วย ดังนั้น การที่ค่าของทั้ง 2 อย่างไปในทิศทางเดียวกันนั้นเป็นสิ่งที่ดีมาก เพราะเราจำเป็นที่จะต้องเลือกคู่ประโยคที่ตรงกับทั้งสอง Condition แต่บางประโยคก็อยาจจะไม่เป็นอย่างนั้น
5. อัตราส่วนของคำภาษาอังกฤษในประโยค เราจะ filter คำภาษาอังกฤษและอักษรพิเศษออกจากประโยคภาษาไทย และ ภาษาจีน เราจำเป็นต้องคัดภาษาอังกฤษออกเพื่อคุณภาพประสิทธิภาพของชุดข้อมูลในการ Train model โดยที่เราจะ filter ประโยคที่มีภาษาที่กำหนด > 0.7 % (เต็ม 1.0) หรือเรียกง่ายๆว่าในประโยคที่จะนำไปเทรนจะมีคำภาษาอังกฤษและอักษรพิเศษน้อยกว่า 30% ของประโยค
ตัวอย่างของผลลัพธ์หลังจากทำการหาค่าอัตราส่วนของคำภาษาอังกฤษในประโยค
คู่ประโยคที่มีค่าอัตราส่วนของคำภาษาอังกฤษในประโยค ระหว่าง 0.0 ถึง 0.1
th: “ ’cause I fell on”
th_ratio: 0.0
zh: ♪ ’cause I fell on ♪
zh_ratio: 0.0
คู่ประโยคที่มีค่าอัตราส่วนของคำภาษาอังกฤษในประโยค ระหว่าง 0.1 ถึง 0.3
th:ไชโย-ki-yay, motherfuckers!
th_ratio: 0.148
zh: 爽翻了 我操! Yippee -ki
zh_ratio: 0.278
คู่ประโยคที่มีค่าอัตราส่วนของคำภาษาอังกฤษในประโยค ระหว่าง 0.3 ถึง 0.5
th: ♪ Love is an open ความรักคือการเปิด
th_ratio: 0.485
zh: {\1cH0080FF}爱就如大门 开..
zh_ratio: 0.38
คู่ประโยคที่มีค่าอัตราส่วนของคำภาษาอังกฤษในประโยค ระหว่าง 0.5 ถึง 0.7
th: ! # เสียงระฆัง, กลิ่นลิงกัง…
th_ratio: 0.7
zh: # 乱响的铃铛, 猴味的臭香 …
zh_ratio: 0.55
คู่ประโยคที่มีค่าอัตราส่วนของคำภาษาอังกฤษในประโยค ระหว่าง 0.7 ถึง 1.0
th: ! คุณไม่น่าปล่อยให้ฉันเข้ามา!
th_ratio: 0.89
zh: 你们就不应该让我进来!
zh_ratio: 0.9
ปัญหาหลักๆที่เจอหลังจากการเตรียม Dataset สำหรับ Machine Translation จีน-ไทย ก็คือจำนวนประโยค Dataset ที่ไม่เพียงพอสำหรับการ Train ข้อมูล เพื่อให้ Model ของเรามีประสิทธิภาพที่ดีขึ้น ดังนั้นจึงแก้ปัญหา Dataset ไม่เพียงพอ โดยการทำ Back Translation หรือการแปลย้อนกลับนั้นเอง
หลังจากการ Cleaning และ Filter Dataset ตามขั้นตอนทั้งหมดเราจะได้ Training Set ทั้งหมดประมาณ 1.2 ล้านคู่ประโยค Validation Set ทั้งหมดประมาณ 1 หมื่นคู่ประโยค และ Test Set ทั้งหมดประมาณ 6 หมื่นคู่ประโยค ขั้นตอนต่อไปคือการทำ Tokenizer โดย Sentence Piece
Sentence Piece
คือ Text Tokenizer and Detokenizer หรือที่เรียกง่ายๆว่า “การตัดคำ” ซึ่งจะทำการตัดคำในรูปแบบ Sub-word หรือใช้ Algorithm ที่เรียกว่า Subword Regularization คือการแบ่งหรือตัดเป็นคำย่อย ซึ่งตัว Sentence Piece สามารถนำไป train จากประโยคเต็มได้เลย
เราสามารถ Tokenizer ออกมาได้ 2 รูปแบบ อย่างแรกคือ pieces หรือ word คือ การ Tokenize ออกมาเป็นคำๆ และอย่างที่สองคือ Token คือ การ Tokenize ออกมาเป็น ids ของแต่ละคำ
ตัวอย่างการ Tokenizer ประโยค:
zh: 我能感受到透过玻璃的阳光
th: ฉันรู้สึกได้ถึงแสงอาทิตย์ลอดผ่านกระจกเข้ามา
ผลลัพธ์การ Tokenize แบบ Pieces/Word:
zh: [‘▁我能’, ‘感受’, ‘到’, ‘透’, ‘过’, ‘玻’, ‘璃’, ‘的’, ‘阳’, ‘光’]
th: [‘▁ฉันรู้สึก’, ‘ได้’, ‘ถึง’, ‘แสง’, ‘อาทิตย์’, ‘ลอ’, ‘ด’, ‘ผ่าน’, ‘กระจก’, ‘เข้ามา’]
ผลลัพธ์การ Tokenize แบบ ids/Token:
zh:[1805, 6479, 90, 3916, 124, 11486, 13968, 7, 7910, 736]
th: [689, 619, 1829, 130, 3, 693, 2150, 1796, 4554]
หลังจากการ Tokenizes ประโยคเสร็จเรียบร้อยแล้ว เราก็นำไปสู่ขั้นตอนต่อไปก็คือการเทรน model ด้วย Transformer ในรูปแบบของ Sequence to Sequence Model ต่อไป
Transformer
เป็น Model Machine Learning ในรูปแบบ Sequence to Sequence คือการรับ input เข้ามาเป็น Sequence นึงและแสดง output ออกไปเป็นอีก Sequence นึง และช่วยในการเพิ่มความเร็วในการ Train Model โดยมี concept มาจาก Attention. Attention คือหลักการหรือ concept ที่ช่วยในการพัฒนาประสิทธิภาพของ Machine Translation.
การทำงานของ Model จะแบ่งออกมาเป็น 2 ส่วน คือ encoder และ decoder โดยที่ encoder จะเป็นตัวรับ input เข้ามาที่ละหน่วย ผ่านกระบวณการต่างๆ และไปยัง decoder ซึ่งก็จะได้ผลลัพธ์ออกมาทีละหน่วย ซึ่งในแต่ละ encoder และ decoder ก็จะมี layer การทำงานภายใน เบื้องต้นในแต่ละ layer ของ encoder จะประกอบไปด้วย Self-Attention และ Feed Forward และในส่วนของ decoder ก็จะประกอบไปด้วย Self-Attention, Encoder-Decoder Attention และ Feed Forward
ก่อนที่จะมาเป็น Tensors หรือ Vector input ที่เราได้รับมาจะอยู่ในรูปแบบ word โดยที่เราจะเปลี่ยน input คำแต่ละคำให้เป็น vector หรือ tensor โดยใช้ embedding algorithm ในการทำงาน จากนั้นก็นำ tensors ที่เราได้ไปยัง step ต่อๆไปใน Sub-layer ของ encoder
การทำงานภายใน Self-Attention: เริ่มจากการคำนวณ Self-Attention โดยการแปลง input มาเป็น vector 3 ตัวสำหรับแต่ละ encoder คือในแต่ละคำเราจะแปลง vector โดยแบ่งเป็น 3 ประเภท คือ Query vector, Key vector และ Value vector ทำการคำนวณคะแนน โดยการนำไปทำ dot product กับ query vector และ key vector โดยที่จะทำงานตามลำดับไปเรื่อย และหลังจากนั้นเราจะนำคะแนนที่คำนวณมาได้ไปหาร 8 (สามารถใช้เลขอื่นได้) จากนั้นนำผลลัพธ์ไปผ่าน softmax ซึ่งเป็นการ normalizes คะแนนของเราให้เป็นบวกและอยู่ในค่าระหว่าง 0 ถึง 1 หลังจากการทำ Softmax จะช่วยทำให้เรารู้ว่าแต่ละคำมันมีผลลัพธ์ออกมาดีแค่ไหนในตำแหน่งนั้นๆ จากนั้นเราจะนำแต่ละ value vector ไปคูณกับ softmax score ที่เราคำนวณมา จะช่วยในการเก็บคำที่ต้องการและ ลบคำที่ไม่เกี่ยวข้องออก และขั้นตอนสุดท้ายเราจะนำทั้งหมดมา sum รวมกันเพื่อให้ได้ผลลัพธ์ของ self-attention layer สำหรับคำที่ 1 หลังจากนั้น resulting vector จะถูกส่งต่อไปยัง feed-forward ต่อไป
Encoder เริ่มกระบวนการทำงานจาก input sequence จากนั้น output ที่ได้มาจะถูกแปลงไปเป็น set ของ attention key และ value vector หลังจากนั้นจะถูกส่งไปยัง encoder-decoder attention layer ของ Decoder เราจะต้องทำตามขั้นตอนนี้ไปเรื่อยๆ จนกว่าจะเจอสัญลักษณ์พิเศษซึ่งนั้นหมายถึงจบการทำงานในส่วนของ decoder เราทำการ embed และ เพิ่ม positional encoding เข้าไปใน input ของ decoder เพื่อบ่งบอกถึงตำแหน่งของแต่ละคำ ในส่วนของ Decoder self-attention layer จะนำตำแหน่งก่อนหน้าไปรวมอยู่ใน output sequence โดยการทำงานของ masking future positions ช่วยในการป้องกันไม่ให้ model เห็นบางข้อมูล และจะต้องทำก่อนขั้นตอนของ softmax ในการคำนวณ self-attention.
ขั้นตอนสุดท้ายใน layer ของ Decoder คือนำ vector ที่ได้มาไปผ่าน Linear และ Softmax layer โดยที่เรียงจาก Linear layer → Softmax layer. Linear layer เชื่อมต่อ Neuron Network และคำนวณ vector ของ decoder ออกมาเป็น vector จำนวนเยอะมาก หรือที่เรียกว่า logits vector หลังจากนั้น Softmax layer ก็จะนำคะแนนเหล่านั้นแปลงมาเป็นความน่าจะเป็น โดยที่ผลลัพธ์ที่ได้ออกมานั้นจะเป็นบวกและอยู่ในค่าระหว่าง 0 ถึง 1 ช่องที่มีความน่าจะเป็นสูงสุดก็คือคำที่มีความน่าจะเป็นสูงสุดจะถูกเลือกออกมาเป็น output word หรือผลลัพธ์นั้นเอง
หลังจากที่เราเทรนได้ model มาแล้ว เราก็นำ model มาวัดผล metric โดยที่เราจะทำการ predict จาก Test Set ที่เราเตรียมไว้โดยใช้ BLEU Score ในการวัดผล
BLEU Score (Bilingual Evaluation Understudy)
BLEU Score คือการวัดความต่างกันระหว่าง ประโยคสองประโยค โดยจะวัดจากจำนวน n-gram ในของระดับคำ (1-gram, 2-gram, 3-gram and 4-gram precision) ที่ตรงกันระหว่างประโยคที่เกิดจากการแปลโดย model machine translation (predictions) เปรียบเทียบกับ ประโยคที่แปลโดยมนุษย์ (reference translation) จากประโยคที่มาเดียวกัน โดยที่จะนับคำที่มีตรงกัน ไม่จำเป็นที่จะต้องอยู่ในตำแหน่งเดียวกัน ยิ่งเปอร์เซ็นต์คำที่มีตรงกันเหมือนกันมากเท่าไหร่ คะแนนก็ยิ่งเพิ่มขึ้นมากเท่านั้น คะแนนจะอยู่ในช่วง 0–100
ตัวอย่างในการคำนวณค่าประสิทธิภาพโมเดลด้วย BLEU Score:
Predictions: 你吃饭吗
Reference: 你吃饭了吗
BLEU Score: 0.84
และตัวอย่างผลลัพธ์การคำนวณโดยวัดจากจำนวน n-gram ในของระดับคำ:
1-gram: ได้ผลลัพธ์ที่ 0.75 มีคำที่ตรงกันคือ ‘你’ , ‘吃’ และ ‘饭’ โดยคำนวณจากคำที่ตรงกันใน 1-gramทั้งหมด 3/4 ก็จะเท่ากับ 0.75
2-gram: ได้ผลลัพธ์ที่ 0.67 มีคำที่ตรงกันคือ ‘你吃’ และ ‘吃饭’ โดยคำนวณจากคำที่ตรงกันใน 2-gramทั้งหมด 2/3 ก็จะเท่ากับ 0.67
3-gram: ได้ผลลัพธ์ที่ 0.5 มีคำที่ตรงกันคือ ‘你吃饭’ โดยคำนวณจากคำที่ตรงกันใน 3-gram ทั้งหมด 1/2 ก็จะเท่ากับ 0.5
4-gram: ได้ผลลัพธ์ที่ 1.0 มีคำที่ตรงกันคือ ‘你吃饭吗’ โดยคำนวณจากคำที่ตรงกันใน 4-gram ทั้งหมด 1/1 ก็จะเท่ากับ 1.0
Error Analysis Test Set BLEU Score Results:
เรานำ model ที่เรา train ออกมา ไปทำการ predict test set ของเราโดยทำการ predict ทั้งหมด 1226 ประโยค เนื่องจากว่าเราทำการเปรียบเทียบ Benchmarks กับ Google และ AI for Thai ซึ่งเราทำการดึง API ของทั้ง 2 มาเพื่อทำการ predict ประโยคจาก Test set ทั้งหมด 1500 ประโยค เพื่อนำไปเปรียบเทียบและวัด BLEU Score และเนื่องจากเราต้องทำการเปรียบเทียบกับทั้ง 2 ที่ แต่ AI for Thai ไม่สามารถแปลได้หมด เนื่องจาก error จึงทำให้ Test set ของเราเหลือทั้งหมด 1226 ประโยคเพื่อความเท่าเทียมในการวัดค่า BLEU Score
ตารางผลลัพธ์ของการวัดและเปรียบเทียบ BLEU Score:
หลังจากที่เราทำการวัด BLEU Score เสร็จเรียบร้อยทั้งหมดแล้ว เรานำผลลัพธ์ BLEU Score ของแต่ละประโยคมาดูสาเหตุและความผิดพลาด โดยทำการเปรียบเทียบ BLEU Score ระหว่างโมเดลของเรากับของ Google ทั้งหมด 4 เงื่อนไขด้วยกัน
Predict Test Set จีน(ZH_CN) → ไทย (TH_Word)
เงื่อนไขที่ 1: ประโยคที่เราแปลได้ดี และ Google แปลได้ดี
เงื่อนไขที่ 2: ประโยคที่เราแปลได้ไม่ดี และ Google แปลได้ดี
เงื่อนไขที่ 3: ประโยคที่เราแปลได้ดี และ Google แปลได้ไม่ดี
เงื่อนไขที่ 4: ประโยคที่เราแปลได้ไม่ดี และ Google แปลได้ไม่ดี
Predict Test Set ไทย (TH) → จีน(ZH_CN)
เงื่อนไขที่ 1: ประโยคที่เราแปลได้ดี และ Google แปลได้ดี
เงื่อนไขที่ 2: ประโยคที่เราแปลได้ไม่ดี และ Google แปลได้ดี
เงื่อนไขที่ 3: ประโยคที่เราแปลได้ดี และ Google แปลได้ไม่ดี
เงื่อนไขที่ 4: ประโยคที่เราแปลได้ไม่ดี และ Google แปลได้ไม่ดี
เหตุผลที่ผลลัพธ์การ predict test set BLEU Score ของเราที่ไม่ดีอาจเกิดได้จากจำนวน Dataset ที่ไม่เพียงพอในการ Train ทำให้โมเดลของเรานั้นมีคำเฉพาะที่ไม่มากเพียงพอ ที่จะทำให้ประโยคนั้นสมบูรณ์ หรือมีความหมายที่ถูกต้อง และอีกปัญหานึงที่ได้เรียนรู้ก็คือ บางประโยคใน Test Set ของเราก็มีการแปลที่ไม่สละสลวยเท่าที่ควร ทำให้บางครั้งที่โมเดลของเราอาจจะแปลได้ดีกว่าแต่กลับได้คะแนน BLEU Score น้อยเมื่อเปรียบเทียบกับประโยคผลลัพธ์ใน Test Set ของเรา เราสามารถแก้ปัญหาที่เกิดขึ้นโดยการหา Dataset มาเพิ่มเติม ไม่ว่าจะเป็นการหา Dataset คู่ประโยคไทย-จีน หรือ ไทยไปภาษาอื่นๆ หรือ จีนไปภาษาอื่นๆ แล้วนำมา BackTranslation เพื่อนำไปเทรนเพิ่มต่อจากโมเดลเดิมของเราต่อไป
Deployment:
หลังจากที่เราปรับปรุงโมเดลจนได้คะแนนตามที่ต้องการแล้ว เราสามารถนำ model ที่เราได้ไป deploy บนช่องต่างๆ ที่ต้องการได้เลย ไม่ว่าจะเป็น Hugging Face, Heroku หรือเว็ปไซต์เพจของเราเอง เพื่อเป็น API ที่สามารถนำ model ไปแก้ปัญหาในช่องทางอื่นๆ
Link to Web App: https://lalita-translation-ch-th.herokuapp.com/
Link to GitHub Repo: https://github.com/LalitaDeelert/NLP-ZH_TH-Project
Reference:
- scb-mt-en-th-2020: ก้าวแรกสู่สังเวียน Machine Translation นานาชาติกับชุดข้อมูล Open Data คู่ภาษาอังกฤษ-ไทย
- สูตรการทำเครื่องแปล Machine Translation ที่บ้าน
- A Gentle Introduction to Calculating the BLEU Score for Text in Python
- The Illustrated Transformer
- Attention Is All You Need
Credits:
Mentors:
- P’ Charin (Github: @cstorm125)
- P’ Joy (LinkedIn: https://th.linkedin.com/in/nattakarnphaphoom)
- Uncle Engineer (Facebook: https://www.facebook.com/UncleEngineer)
- P’ A (Facebook: https://www.facebook.com/kanes.sumetpipat/)
- VISTEC, AIReaserch and Central Tech: https://vistec-ai.github.io/ai-builders/, https://www.facebook.com/aibuildersx