ผมเชื่อว่าทุกคนเวลาทำงานก็คงอยากทำงานให้เสร็จได้เร็ว และมีประสิทธิภาพใช่ไหมครับ? และถ้าหากเราเจอว่า เราต้องทำการตรวจสอบและคัดกรองงานแปลว่า 3ล้านประโยค คำถามคือทำยังไงให้เร็วและไม่เปลือง cost เราจะทำยังไงกันดี

ซึ่งแน่นอนว่าไอเดียแรกคือการ ดูด้วยตา! แต่ 3ล้านประโยค ยังไงก็ไม่น่าจะทำเสร็จได้ใน 2 อาทิตย์แน่ๆ (นอกจากช่วยกันดูซัก 200 คนอาจจะพอรอด แต่ก็เปลือง cost ไปอีก)

แต่เมื่อเรานำงาน Research ของ Google ที่ปล่อยให้คนอื่นใช้ได้ฟรี ผ่าน Tensorflow Hub ที่ชื่อ Multilingual Universal Sentence Encoder เข้ามาช่วย งานนี้ก็สามารถทำเสร็จได้ทันเวลา ด้วยคน 1 คนครับ

และยังได้ผลพลอยได้ในการเอาไปต่อยอดกับงานอื่นๆได้อีกด้วย

ซึ่งในโพสนี้จะประกอบไปด้วย

  1. อธิบาย Paper: Multilingual Universal Sentence Encoder for Semantic Retrieval อย่างง่าย
  2. การเอาไปประยุกต์ใช้กับงานจริงๆ (Research & Non-research)
  3. ตัวอย่างผ่านทาง Colab

Multilingual Universal Sentence Encoder

Multilingual Universal Sentence Encoder (USE) คือ model ทางภาษาของ google ทำ Sentence Embedding เพื่อที่เราจะสามารถแปลงประโยคเป็นตัวเลข และ นำตัวเลขเหล่าไปนั้นคำนวณต่อได้ครับ

ซึ่งถ้ามองผิวเผินมันก็ไม่เห็นจะมีอะไร…เราเอา Word Embedding มาหา average หรือ อะไรก็ว่าไป มันก็ทำ Sentence Embedding ได้เหมือนกันนิ!

จริงๆความพิเศษของ USE อยู่ที่มันถูกเทรนกันข้ามภาษา นั้นหมายความว่า model ตัวนี้มันสามารถเข้าใจความเหมือนของประโยคได้แม้จะอยู่คนละภาษานั้นเอง หรือพูดอีกนัยหนึ่งคือ Vector Space ของทุกภาษามันอยู่ใน Vector space เดียวกัน และตอนนี้รองรับถึง 16 ภาษาซึ่งรวมภาษาไทยเข้าไปแล้วด้วยครับ

ถ้าอันไหนเหมือนกันสีก็จะยิ่งเข้มขึ้น

ซึ่งการที่จะได้ model ตัวนี้มา นั้นไม่ง่ายเลย และต้องใช้เทคนิคหลายๆอย่างที่มีความน่าสนใจตาม paper นี้เลยครับ

https://arxiv.org/pdf/1907.04307

หรือใครอยากอ่านเวอร์ชั่นอย่างย่อ อ่านต่อข้างล่างได้เลย

Training Task

การที่จะได้มา model ที่สามารถทำ sentence embedding ข้ามภาษาได้นั้นทาง google เค้าต้องใช้เทคนิค multi-task dual-encoder training หรือการกำหนด task หลายๆ task ในการเทรน model ซึ่ง task ที่นำมาเทรนคือ
- Multi-feature Q&A
- Translation
- Neutral language Inference (NLI)

Training corpus

ข้อมูลที่ใช้ในการ train นั้นแต่ละ task ก็จะใช้ข้อมูลคนละชุดกันคือ
- multi-feature Q&A จะใช้ข้อมูลจาก Reddit, StackOverflow, YahooAnswer
- Translational
- NLI จะใช้ข้อมูลจาก Standford NLI (SNLI)

ซึ่งหากดูจากแหล่งที่มาของข้อมูลแล้ว เรียกได้ว่าภาษาอังกฤษมาเต็มๆแน่นอน ส่วนภาษาอื่นๆน่าจะน้อยมาก

ซึ่งทางทีมวิจัยของเค้าเอง ก็ได้ทำการแปลโดยการใช้ google translate คือ เช่นข้อมูล SNLI ทั้งหมดจะต้องถูกแปลไปอีก 15 ภาษา และในส่วนของ Q&A นั้นต้องมีอย่างน้อย 60ล้าน คู่คำถามคำตอบครับ

ทางทีมวิจัยได้ ใช้ข้อมูล 90% ในการเทรน และ 10%ในการ Validate

Model Configuration

อันนี้ใน paper นี้ไม่ได้บอกละเอียดมากครับ แต่โดยหลักๆแล้ว เค้ามีการสร้างขึ้นมา 2 model คือ CNN base กับ Transformer base

CNN base:
- input จะถูกจำกัดไว้ที่ 256 token
- CNN encoder จะเป็น CNN 2 layer
- Filter width จะเป็น [1,2,3,4,5] และ ขนาด 256

Transformer base:
- input จะถูกจำกัดไว้ที่ 100 token
- Encoder เป็น 6 layers transformer
- 8 attention heads, hidden 512, filter ขนาด 2048

Test Result

ในการ test นั้นเค้าได้ใช้ Dataset Q&A ของ Quora และ AskUbuntu ครับ ซึ่งทั้งสอง Dataset นั้นเป็นภาษาอังกฤษทั้งหมด ทางทีมวิจัยเลยได้ทำการแปลไปเป็นอีก 15 ภาษา และทำการวัดผลเช่นเดียวกับภาษาอังกฤษ โดย Metric ที่ใช้วัดคือ Mean Average Precision at K ครับ

ผลของ Test data ในภาษาต่างๆ

จะเห็นได้ว่า Transformer base นั้นชนะเกือบทุก Test set ครับ

Resource Usage

การใช้ทรัพยากรเครื่องก็เป็นอีกหนึ่งเรื่องที่ควรนำมาพิจารณาเวลาเลือกใช้ model ด้วยครับ ซึ่งใน paper นี้เค้าก็ได้เปรียบเทียบให้เห็นเลยระหว่าง CNN base และ Transformer base

Resource Usage

จะเห็นได้ว่ายิ่ง sentence ยาวเท่าไหร Transformer base นั้นจะก็จะยิ่งใช้ทรัพยากรเครื่องเยอะขึ้นแบบ exponential ในขณะที่ CNN จะขึ้นเป็น linear ครับ ซึ่งความแตกต่างตรงนี้ ถ้าเป็นประโยคยาวๆ CNN ดูเป็นตัวเลือกที่น่าจะเหมาะสมกว่าทีเดียว

Use Case

การนำไปใช้งานผมเชื่อว่า สามารถนำไปใช้งานได้หลากหลายนะครับ แต่หนึ่งในตัวอย่างงานที่ผมได้มีโอกาสนำไปใช้คือการตรวจสอบคุณภาพการแปลของประโยคจำนวนประมาณ 3ล้านประโยค คู่ภาษาไทยอังกฤษของ dataset opensubtitles

  1. นำข้อมูลทั้งไทย และ อังกฤษมา ทำ Sentence Embedding ด้วย (USE)
  2. หา Distance ในที่นี้ผมใช้ Cosine Similarity
  3. หา Threshold ในการตัดว่า range ไหนถึงเป็นคู่ประโยคที่ถูกต้อง

นี้คือตัวอย่างของคู่ประโยคที่มี Score(distance) ต่างกัน

ตัวอย่างคู่ประโยคที่มี score น้อยๆ
ตัวอย่างคู่ประโยคที่มี score เยอะๆ

Distribution ของคะแนนใน Dataset นี้

ซึ่งการนำไปใช้งานในการทำงานจริงๆ เราก็สามารถประยุกต์ได้หลากหลายนะครับ เช่นการตรวจสอบดูว่า สินค้าในเว็ปไซต์เรา TH-EN แปลข้อมูลตรงกันไหม หรือ แม้กระทั้งการตรวจสอบงานแปลของ outsource เช่นจ้างทำ subtitle ใส่ video presentation และอื่นๆ

หรือแม้กระทั้งการทำ multilingual information retrieval ก็เป็นอีกอย่างที่ USE จะสามารถนำไปช่วยได้ เช่นการหาข้อมูลใน pdf ภาษาอังกฤษ โดยเราพิมพ์หาเป็นภาษาไทย (อันนี้ใครทำแล้วเอามาแชร์กันได้นะครับ)

นอกจากงานตรวจสอบคุณภาพแล้วยังสามารถเอาไปทำ Sentence alignment, Sentence matching, และอื่นๆได้อีกด้วยนะครับ

ใครอยากลองรันโค้ดตาม สามารถไปที่ Colab ที่เราได้เตรียมไว้ให้ได้เลยครับ

https://colab.research.google.com/drive/1GWH-FMudkXBR3tJhV9QZLH7u4Eiw088G?usp=sharing

บทความนี้จัดทำโดยสถาบันวิจัยปัญญาประดิษฐ์ประเทศไทย (AIResearch)
Facebook & Medium
: AIResearch.in.th

Reference

Yinfei Yang , Daniel Cer , Amin Ahmad , Mandy Guo , Jax Law , Noah Constant, Gustavo Hernandez Abrego, Steve Yuan, Chris Ta , Yun-Hsuan Sung, Brian Strope , Ray Kurzweil. 2019. Multilingual Universal Sentence Encoder for Semantic Retrieval. arXiv:1907.04307v1

--

--