#อ่านNLProc Talk: คุณชารินทร์ พลภาณุมาศ

Mr.P L
AIResearch.in.th
Published in
6 min readFeb 28, 2021

ถ้าหากพูดถึง WangchangBERTa ก็ต้องเขาคนนี้! @cstorm125 หรือพี่ชาริน!!

หลังจากห่างหายไปนานกับช่วงสัมภาษณ์คนที่ทำงานด้าน NLP วันนี้เรากลับมาอีกครั้ง พร้อมกับบทสัมภาษณ์ของบุคคลอีกท่านในวงการ NLP ที่เป็นส่วนหนึ่งในทีมพัฒนา WangchanBERTa (language model ที่ใหญ่และประสิทธิผลดีที่สุดของไทยในขณะนี้)

เป็นใครไปไม่ได้เลยนอกจาก @cstorm125 หรือพี่ชาริน (ชารินทร์ พลภาณุมาศ) หนึ่งใน contributor ของ PyThaiNLP และเป็นคนพัฒนา thai2fit อีกด้วย!!

#อ่านNLProc: สวัสดีครับ ช่วยแนะนำตัวเองหน่อยครับ ว่าเป็นใคร ทำอะไรที่ไหน

พี่ชาริน: ผมเป็น Lead Data Scientist (ชื่อตำแหน่งอย่างเป็นทางการคือ Head of Data Science แต่มันดู “เป็นทางการ” เกินไป) ของ Central Retail Corporation ซึ่งเป็นบริษัทค้าปลีกประเภทห้างสรรพสินค้าขนาดใหญ่ของประเทศไทย (เวียดนาม และอิตาลี?) ประมาณ 3–4 ปีที่แล้วทางบริษัทต้องการสร้างช่องทางการขายออนไลน์ขึ้นมาเพื่อตอบโจทย์ยุทศาสตร์ omnichannel นั่นคือการเลือกซื้อของผ่านช่องทางออนไลน์อย่างเว็บไซต์หรือแอพพลิเคชั่นแล้วไปรับที่ร้านค้าในห้างหรือดูของในร้านแล้วกดสั่งของออนไลน์ จึงได้ตั้งบริษัทลูกเพื่อพัฒนาช่องทางการขายออนไลน์ขึ้นมาเรียกว่า Central Tech ผมเป็นหนึ่งในหัวหน้าทีมของบริษัทลูกนี้

ทีม data science ที่ผมดูแลรับผิดชอบ use case ประเภท onsite ต้องอธิบายก่อนว่าการทำ data science สำหรับ e-commerce ส่วนใหญ่แบ่งเป็นสองประเภทคือ offsite และ onsite ส่วน offsite คือการนำลูกค้าเข้ามาในแพลตฟอร์ม (ส่วนใหญ่คือเว็บไซต์หรือแอพพลิเคชั่น) ให้ได้มีประสิทธิภาพที่สุด (จ่ายเงินน้อย-ได้ลูกค้าเยอะ-ลูกค้ามีคุณภาพ) ส่วนใหญ่ทำผ่านช่องทางโฆษณา เช่น Google Adwords, Facebook Ads หรือสื่ออื่นๆ

ส่วน onsite คือการดูแลลูกค้าหลังจากที่เขาเข้ามาในแพลตฟอร์มของเราแล้ว ในทีมที่ทำก็จะมี 3 งานหลักคือ search (ทำอย่างไรให้ลูกค้าหาของที่อยากซื้อเจอง่ายที่สุด), recommendation (นำเสนอสินค้าที่ลูกค้ามีโอกาสซื้อมากที่สุด-สร้างกำไรให้บริษัทได้มากที่สุดในระยะยาว) และ customer segmentation (ทำความเข้าใจฐานลูกค้าและทำการตลาดอย่างตรงเป้า)

ก่อนหน้านี้ประสบการณ์งานแรกในฐานะ data scientist คือการทำงานในทีม regional marketing ของ Lazada งานแรกที่ขึ้น production คือระบบประเมินคุณภาพโฆษณาที่ ad networks นำมาขายให้กับ Lazada งานนี้ยังคงเป็นที่จดจำสำหรับผมในฐานะงานที่สร้างผลลัพธ์ทางธุรกิจได้มากที่สุดในเส้นทางอาชีพ เพราะสามารถประหยัดค่าโฆษณาให้ Lazada ได้ปีละหลายล้านดอลล่าร์ รวมทั้งส่งผลให้บริษัทจ่ายค่าโฆษณาอย่างมีประสิทธิภาพกว่าคู่แข่งหลายเท่า ณ เวลานั้น

ช่วงหนึ่งที่แตกต่างคือการร่วมงานกับ BridgeAsia ในธุรกิจด้านสุขภาพ โครงการใหญ่ที่สุดเป็นงานสร้างโมเดล computer vision ให้เครือโรงพยาบาลเอกชนขนาดใหญ่รายนึง เพื่อตรวจสอบความผิดปกติในฟิล์มเอกเรย์ การตรวจสุขภาพประจำปีครั้งหนึ่งมีคนเข้าร่วมจำนวนมาก เช่น รอบนึงอาจจะมีประมาณ 200,000 ฟิล์ม รังสีแพทย์บางครั้งใช้เวลาหลายเดือนหรืออาจจะถึงครึ่งปีถึงจะดูครบ พอดีถึงเวลาตรวจสุขภาพรอบต่อไปแล้ว ด้วยเหตุนี้จึงให้โมเดลมาช่วยสกรีนให้ก่อน (มีเพียงประมาณ 5–10% ของฟิล์มตรวจสุขภาพทั้งหมดที่มีความผิดปกติ) เช่น 200,000 อาจจะเหลือ 50,000 ฟิล์มให้รังสีแพทย์ดูก่อนเพื่อให้ตรวจได้เร็วขึ้น

#อ่านNLProc: พี่ชารินเองก็เป็นหนึ่งในผู้พัฒนา PyThaiNLP/ Thai2fit/ Thai Transformer ช่วยเล่าแบบย่อๆหน่อยครับ ว่าเกิดอะไรขึ้น ทำไมถึงก้าวเข้าสู่วงการนักพัฒนาซอฟต์แวร์เปิดสำหรับ Thai NLP

พี่ชาริน: โครงการ open source แรกที่ทำก็คือ PyThaiNLP จุดเริ่มต้นมันตลกมาก ตอนนั้นมีโปรเจคเล็กๆ ที่ Lazada ทำเรื่อง review classification ทำฮาๆ เล่นๆ ไม่ได้มี use case อะไรจริงเท่าไหร่ ตอนนั้นไม่รู้เรื่อง NLP เลย รู้แค่ว่าต้องเอาข้อความมา vectorize ด้วยวิธีบางอย่าง เช่น word count อะไรประมาณนั้น จินตนาการแค่ว่าต้องเอาข้อความมาทำเป็น bag of words เพื่อใส่เข้าไปในโมเดลทำนายบางอย่าง ผลคือมันไม่ค่อยเวิร์คสำหรับภาษาไทย เลยต้องไปค้นคว้าเพิ่มเติม ช่วงนั้นเรียนคอร์สนึงชื่อ fast.ai คนสอนคือ Jeremy Howard สอนให้ทำโมเดลซึ่งปัจจุบันเรารู้จักกันในชื่อ ULMFit แต่ตอนนั้นมันไม่มีชื่อ เขาบอกว่าพวกคุณไม่ต้องใช้ bag of words ก็ได้ คุณแค่ทำ embeddings แบบนี้ แล้วเอา embeddings พวกนั้นมาผ่าน neural network มันก็เวิร์คแล้ว

สิ่งที่ผมทำซึ่งคือการเอา ULMFiT มา pretrain ด้วย Wikipedia ภาษาไทยแล้ว finetune สำหรับ downstream task อื่นๆ เช่น review classification ปรากฎได้ผลดีมาก เหตุผลหลักคือเพราะในตอนนั้น NLP ภาษาไทยแทบไม่มีอะไรเลย ไม่มีแม้แต่ชุดข้อมูลไว้ทดสอบประสิทธิภาพของโมเดล (benchmark datasets) พูดง่ายๆทำอะไรมามันก็ state-of-the-art ทั้งนั้นแหละ เพราะมันไม่มีคนทำ!

ตอนนั้นผมชอบวิธีนี้มาก (ตอนนี้ก็ยังชอบ) เพราะคิดว่ามันเป็นวิธีการที่ง่ายที่สุดในฐานะคนที่แทบไม่รู้เรื่อง NLP และปกติทำงานแต่กับ tabular data เหมือนผม ULMFit มันช่วยให้เราสร้าง feature extractor ที่ดีสำหรับข้อมูลข้อความขึ้นมาได้ ที่เหลือเราก็แค่ทำเหมือนที่เราทำโมเดลทุกวัน

ส่วนเริ่มทำ open source ได้อย่างไรคือตอนนั้นได้ไปรู้จักกับต้นตาล

จำได้ว่าบทสนทนาแรก ๆ กับต้นตาลคือ

พี่ชาริน: สวัสดีครับคุณต้นตาล PyThaiNLP มี word vector ป่าวครับ

ต้นตาล: ยังไม่มีเลยครับ

พี่ชาริน: อ้อ งั้นเดี๋ยวผมทำให้

ก็เลยได้ออกมาเป็นชื่อ “thai2vec” ซึ่งชื่อนี้มันเป็นหลักฐานเลยว่า เวลาพูดว่าเมื่อก่อนไม่ได้รู้เรื่อง NLP เลย คือผมไม่รู้จริง ๆ เพราะ ULMFiT มันไม่ใช่ word2vec ถูกปะ เราก็ไม่ควรเรียกมันว่า thai2vec เพราะวิธีการเทรนมันคนละแบบเลย มันไม่ได้ถูกเทรนด้วย skip-gram มันเป็นแค่ embeddings ที่เอาไปต่อกับ LSTM คือมันไม่ได้ถูกเทรนมาด้วย task แบบ word2vec ด้วยซ้ำ พอ Jeremy เค้ามีเปเปอร์เราก็เลยเปลี่ยนชื่อตามเป็น thai2fit ผลงานนี้เป็นสิ่งที่ทำให้เวลามีคนมาบอกว่า ชารินมีปัญญาแค่ใช้ GPU ทำงานเพราะไม่รู้เรื่อง NLP เนี่ย ผมสามารถตอบได้เต็มปากเลยว่า

จริง! ใช่เลย! ก็เพราะไม่รู้อะไรไงเลยเลือกใช้ deep learning

มันเป็นจุดเริ่มต้นที่ทำให้ผมเริ่มมีส่วนร่วมกับ PyThaiNLP หลังจากนั้นก็ช่วยมาเรื่อยๆ ส่วนใหญ่หน้าที่ของผมใน PyThaiNLP คือการทำ pretrained models เช่น โมเดลแปลภาษาไทย-อังกฤษที่ถูกเทรนด้วยชุดข้อมูล scb-mt-en-th-2020 และ OPUS ที่มีผลการแปลทั้งสองทางดีกว่า Google Translate ลำดับต่อไปคิดว่าอยากเอา WangchanBERTa ที่เพิ่งเทรนเสร็จมาใส่เป็น module พื้นฐานบางอย่างใน PyThaiNLP เหมือนกัน

กรณีการเอา pretrained models มาให้คนเรียกใช้ง่ายๆใน PyThaiNLP เป็นเรื่องที่ผมทั้งอยากทำและไม่อยากทำในขณะเดียวกัน แน่นอนเวลาเราเทรนโมเดลดีๆอย่าง WangchanBERTa รวมทั้งตัวที่ finetune สำหรับงานบางอย่าง เช่น sentiment classification บน ‘wisesight-sentiment’ เราก็อยากให้คนเอาไปใช้เยอะๆอยู่แล้ว ปัญหาคือเราไม่สามารถไปบังคับผู้ใช้ได้ว่าเขาจะเอาไปใช้ยังไง โดยเรื่องที่ห่วงที่สุดคือ “บริบทของการใช้งาน

นี่เป็นหนึ่งในเรื่องที่ผมมีส่วนร่วมในการตัดสินใจทิศทางของ PyThaiNLP เมื่อก่อน PyThaiNLP มันจะมีตัว built-in function สำหรับทำ sentiment classification อยู่

pythainlp.sentiment(‘ข้อความที่อยากรู้ว่าเป็นบวกหรือลบ’)

ตอนที่ทำ ULMFit เสร็จ ผมบอกต้นตาลว่า “เอาออกเหอะมันไม่เวิร์ค” เหตุผลที่มันไม่เวิร์คคือ โดยทั่วไปแล้ว มันแทบจะเป็นไปไม่ได้เลยที่คุณจะเอา pretrained models ไปใช้แล้วได้ผลดี ต่อให้เราเทรนโมเดลที่เป็น state-of-the-art สำเร็จในบริบทหนึ่ง การเอาไปใช้โดยไม่ finetune ต่อก็มีโอกาสประสบความสำเร็จเฉพาะเวลาใช้ในบริบทเดิม-มีสัดส่วนการกระจายตัวข้อมูลใกล้เคียงกับของเดิมเท่านั้น พูดง่ายๆถ้าคุณเอา WangchanBERTa ที่เป็น state-of-the-art บน ‘wisesight-sentiment’ ไปใช้กับข้อมูล social media ชุดอื่นโดยไม่ finetune เลย (หรือ finetune ผิดวิธี) ผมค่อนข้างแน่ใจว่ามันจะพังไม่เป็นท่า (ผมหวังว่าคงไม่มีใครบ้าจี้เอา transformer ไปทำงานง่ายๆอย่าง sentiment analysis นะ ถ้ามีขอให้เลิกเถอะ accuracy ไม่ถึง 5% ที่เพิ่มมาจาก NBSVM นั้นไม่คุ้มค่า GPU แน่นอน)

เพราะฉะนั้นเราไม่ควรทำ fucntion วิเศษแบบนี้ ในฐานะ library เราควรเป็นเครื่องมือที่คุณเอาไปใช้ได้ในหลากหลายบริบทมากกว่า อาจจะพูดได้ว่าเราอยากช่วยคุณทำโมเดลที่เหมาะกับคุณมากกว่าให้คุณมากดเรียกโมเดลที่เราอ้างว่าดีที่สุด อีกอย่างถ้าเราพูดว่า function ของเราใช้ได้ทุกบริบทเราจะกลายเป็นคนโกหกใช่ไหม แต่ถ้าเราไม่โกหกคนก็คงถามว่าถ้ามันใช้ได้แค่บริบทเดียวจะมีไว้ทำไม-ยังไงต้องทำใหม่อยู่ดี นี่ก็เป็นหนึ่งในเหตุผลของการเปลี่ยนแปลงทางปรัชญาครั้งหนึ่งของ PyThaiNLP

#อ่านNLProc: ซึ่งเคยมีบทสนทนานี้กับพี่ตอนนั้นที่จะเขียนบทความวิธีใช้ PyThaiNLP แล้วมันก็มี sentiment analysis แล้วพี่ก็บอกว่าจะเอา sentiment analysis ออกจาก PyThaiNLP แล้ว หลังจากนั้นก็มีโพสว่าทำไมต้องทำเอง เพราะมันก็จริงเพราะงาน NLP มันมี domain dependency สูงมาก งานพวก domain mismatch คนก็ยังทำวิจัยอยู่เพราะมันยากมาก

พี่ชาริน: ถูก งั้นขอโฆษณาให้เลยแล้วกัน ยกตัวอย่างเช่น ถ้าเราใช้ SEFR มาตัดคำ (SEFR เป็นตัวตัดคำที่ออกแบบมาจัดการปัญหา domain adaptation)

เราก็สามารถได้ performance ที่ดีกว่าตัวตัดคำที่ไม่ได้ทำ domain adaptation (ปรับให้เข้ากับบริบท) แต่มันไม่ใช่เฉพาะ NLP ที่มีปัญหานี้ สำหรับโมเดล machine learning โดยทั่วไป โมเดลที่ทำได้ดีส่วนใหญ๋ก็คือโมเดลที่เรียนรู้การกระจายตัวของข้อมูลได้ดีและถูกนำไปใช้ตรงบริบท การสร้างโมเดลไม่ว่ากรณีใดก็ตามเลยจำเป็นต้องใส่ใจบริบทมากๆ

#อ่านNLProc: รับรองว่าคนที่มาดูบทความนี้น่าจะได้ research gap ไปทำเพิ่มแน่

พี่ชาริน: ผมคิดว่ามันน่าสนใจตรงนี้นิดนึง ในอุตสาหกรรม เรามีเรื่อง data drift ให้เห็นทุกวัน พฤติกรรมลูกค้าปีนี้กับปีที่แล้ว (แม้แต่เดือนนี้กับเดือนที่แล้ว?) อาจจะต่างกันโดยสิ้นเชิง มันเลยเป็นสิ่งจำเป็นที่เราจะต้องใส่ใจกับเรื่องบริบทตรงนี้ ส่วนในงานวิชาการ อาจจะไม่เจอบ่อยนัก ยกตัวอย่างเคยคุยกับนักวิจัยคนนึงที่ทำ recommendation ว่าสนใจลองใช้ชุดข้อมูลของ Central ดูไหม เขาก็ดูไม่ค่อยสนใจเท่าไหร่ เพราะเขาก็ใช้ MovieLens หรือชุดข้อมูลมาตราฐานทั่วไป

#อ่านNLProc:คือในงาน acdemia คนจะชอบทำงานที่เอาไปเทียบกับคนอื่นได้

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

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

ในงานวิจัยเรามักจะทำ offline validation กับข้อมูลในอดีต แต่นี่คือสิ่งที่เจอในชีวิตจริงบ่อยๆคือ offline validation กับ online validation ไม่ได้ผลตรงกันเสมอไป ยกตัวอย่างเช่น recommendation system โดยทั่วไปเวลาทำ offline validation เราก็จะใช้ top-k accuracy หรือ normalized discounted cumulative gain (NDCG) ในการวัดผล ผมเคยนะเวลาทำออกมาผล offline validation สวยมาก แต่พอไปทำ A/B test จริงๆดันแพ้แบบวิธีที่แค่เรียงของที่คนซื้อบ่อยที่สุดขึ้นก่อน เหตุผลที่เรียบง่ายมากก็คือเวลาทำ offline validation เราไม่มีโอกาสได้เห็นพฤติกรรมผู้บริโภคที่เปลี่ยนไปจากผลการทำนายของโมเดลเรา เช่น โมเดล recommendation เรียนรู้จากการเดาว่าคนจะซื้ออะไรต่อ แต่พอเอาไปใช้จริงเราไม่ได้ให้มันเดา เราเอาผลการทำนายไปเสนอให้เขาซื้อ ซึ่งมันเป็นไปได้นะว่าพอเขาถูกเสนอแล้วเขาจะไม่ซื้อ (หรือซื้อโดยไม่กดจาก recommendation)

ในอุตสาหกรรมเราเลยมีสิ่งที่เรียกว่า online validation หรือ A/B testing (หรือ multi-armed bandit ถ้าคุณอยากทำอะไรแฟนซี) คือการทดสอบประสิทธิภาพของโมเดลในการใช้จริงโดยแบ่งกลุ่มลูกค้าเป็น control กับ test เวลาทำอะไรแบบนี้มันตื่นเต้นนิดนึงเพราะเราไม่รู้เลยว่ามันจะเวิร์คหรือไม่เวิร์ค ใครสนใจเรื่อง A/B testing อ่านต่อได้ที่

#อ่านNLProc: เมื่อก่อนเคยทำ thai2fit มาแล้วตอนนี้มี pretrained อันนึงชื่อ wangchanBERTa ที่ถือว่าเป็นโมเดลภาษาไทยที่ใหญ่ที่สุดและดีที่สุดในตอนนี้ ช่วยเล่าความเป็นมาหน่อยครับ ว่าเกิดอะไรขึ้น ทำไมถึงมาทำ

พี่ชาริน: อันนี้คิดมานานแล้ว (ปีที่แล้วประมาณกรกฏาคม) คิดมานานแล้วว่า thai2fit (ULMFit) มันก็ไม่ได้แย่อะไร สำหรับงานที่ไม่ยากนักประเภท sequence classification หรือ token classification โมเดลนี้ก็ยังได้ผลอยู่ในระดับที่น่าพอใจ อีกทั้งตอนนั้นโมเดล BERT ของ ThaiKeras (ผู้เป็นนักวิจัยปัญญาประดิษฐ์และนักกีฬา e-sports สาขา data science ที่ผมให้ความเคารพมากที่สุดคนหนึ่ง) เองก็ยังใช้งานได้อย่างไม่เต็มประสิทธิภาพของสถาปัตยกรรม (ผล wongnai-reviews ยังแย่กว่า ULMFit) เหตุผลหลักคือการเทรนสถาปัตยกรรม BERT ต้องใช้ทรัพยากรค่อนข้างมาก เมื่อมีทรัพยากรไม่พออาจทำให้ผลลัพธ์ของโมเดลไม่ดี รวมถึงปัจจัยอีกหลายๆอย่าง เช่น

  1. Sentencepiece มันไม่ค่อยเวิร์คกับภาษาไทย เช่น ภาษาเราไม่มี space วิธีแก้ก็อาจจะแก้ด้วยการเปลี่ยน space เป็น space token บางอย่าง เช่น ‘<_>’ ของ WangchanBERTa
  2. การเทรนโมเดลด้วย sequence length ที่ 128 subword tokens (ประมาณ 90–100 คำ) มันสั้นมาก ทำให้อาจจะไม่เหมาะกับประโยคยาวๆ ส่งผลให้โมเดลเองไม่ได้เรียนรู้ประโยคที่ซับซ้อนไปด้วย
  3. ข้อมูลในการเทรนมีเพียงแค่ Wikipedia ภาษาไทยเหมือนกับ ULMFit แน่นอนว่าข้อมูลมันใหญ่ไม่พอให้โมเดลใหญ่ขนาดนี้ได้เรียนรู้อย่างเต็มศักยภาพ

เหล่านี้เป็นเหตุผลที่ตอนนั้นยังไม่เริ่มคิดจะเทรนโมเดลด้วย BERT ต่อมาพอ AIResearch.in.th เกิดขึ้น ข้อจำกัดพวกนี้ก็หายไป โดยเหตุเกิดจาก อ.สรณะ นุชอนงค์ (หัวหน้าศูนย์ AIResearch.in.th) เสนอว่า

“ถ้าอยากยืมใช้เครื่องคอมแรงๆกับนักวิจัยมาช่วยบอกได้”

ทำให้ตัดสินใจได้ว่าต้องเริ่มทำ language model ด้วย transformer กันแล้ว ถึง ULMFit จะทำได้ดีมากๆในงานที่เรามี benchmark dataset อย่าง sequence classification และ token classification แต่ transformer น่าจะช่วยให้เราทำได้ดีขึ้นทั้งกับงานที่ค่อนข้างง่ายพวกนี้ หรืองานที่ยากขึ้นอย่าง question answering หรือ semantic search ด้วย

เราเลือกใช้ RoBERTa เป็นสถาปัตยกรรมหลักและเปลี่ยน tokenization เป็นแบบที่เข้ากับภาษาไทย ผมกับนักวิจัยเพื่อนร่วมงาน (โดยเฉพาะ @artificiala ที่เป็นผู้นำอีกคนของโครงการ) ค่อนข้างจำเป็นที่จะต้องลองผิดลองถูกกันพอสมควร เพราะยังไม่เคยมีใครลองเทรน transformer กับภาษาไทย (และปล่อยเป็นสาธารณะ) ยกเว้น ThaiKeras ที่ได้ให้คำปรึกษากับเราตลอดระยะเวลาการทำงาน ปัญหามีหลากหลายมาก เช่น learning rate ที่สูงเกินไปทำให้เกิด gradient explosion เทรนมาสวยๆหนึ่งสัปดาห์อยู่ดีๆ loss กระโดดขึ้นไป 3 เท่าแล้วค้างเป็นเส้นตรง (RIP us) ทั้งๆที่เรา setup เหมือนกับต้นฉบับทุกอย่าง จนไปพบว่าเกิดจาก sequence length ของเราไม่เท่ากับต้นฉบัน หรือเรื่องพื้นฐานอย่างความจริงที่ว่าคอมพิวเตอร์ของเราแรงไม่เท่าของต้นฉบับ โดยเราใช้ V100 8 ใบ (DGX-1 1 เครื่อง) ใช้เวลาการเทรนทั้งหมด 3 เดือน (น่าจะเป็นโมเดลที่เทรนนานที่สุดในชีวิตผมแล้ว) แต่ต้นฉบับใช้ V100 ทั้งหมด 1,024 ใบ (WTF!?) เทรนโมเดลเสร็จ 500,000 epochs ในเวลาเพียง 1 วัน!

อีกส่วนหนึ่งที่อยากจะยกเครดิตให้คืองานวิจัยที่นำ WangchanBERTa ไปทำ data augmentation สำหรับงานที่มีข้อมูลตั้งต้นน้อยแล้วได้ผลดีขึ้นมาก

ทำให้ผมรู้สึกเริ่มอยากทำโมเดลนี้จริงๆจังๆมากขึ้น ในเวอร์ชั่นถัดไปเราก็มีแผนสำหรับการพัฒนา WangchanBERTa ให้ดียิ่งขึ้นแน่นอน เช่น เรากำลังพิจารณาที่จะใช้ตัวตัดพยางค์เป็น tokenizer เพื่อช่วยลดปัญหา domain dependency เพราะไม่ว่าในบริบทไหนพยางค์ก็คือพยางค์

#อ่านNLProc:พี่มีแผนจะเอา WangchanBERTa ไปใช้ในงานอุตสาหกรรมบ้างไหมครับ? ถ้าใช้จะเอาไปใช้ด้านไหน?

พี่ชาริน: มีแน่นอนครับ ถ้าเรามองว่าโมเดลนี้คือ feature extractor ตัวใหม่ เราก็ใช้ตัวนี้แทน ULMFit ได้เลย เช่น การเอาไปใช้กับ sequence หรือ token classification ยกเว้นบางงานที่เราแก้มันได้ง่ายๆ เราอาจจะไม่ต้องการของพวกนี้ แค่ใช้ NBSVM ก็แก้ได้แล้ว การเอาโมเดลไปใช้งานในอุตสาหกรรมไม่ว่าโมเดลไหน แน่นอนว่าผล benchmark ที่ดีเป็นสิ่งสำคัญแต่เราก็ต้องพิจารณาถึงความสะดวกและค่าใช้จ่ายในการนำไปใช้ด้วย เช่น คงไม่มีใครเอา BERT ไปทำ real-time inference ยกเว้นบริษัทที่มีคอมแรงๆและได้มูลค่าทางธุรกิจชัดเจนอย่าง Google สำหรับพวกเราที่เหลือผมมองว่าการใช้เป็น feature extractor นี้เวิร์คมากๆ เช่นทำ semantic search สำหรับ e-commerce ต่างๆ เช่น พิมพ์ว่า “อยากได้รองเท้า Adidas สีชมพูสไตล์สตรีทๆหน่อย” ถ้าเราจะใช้โมเดลที่เป็นที่นิยมอย่าง BM25 (ซึ่งทำได้ดีมากๆอยู่แล้ว) เราจำเป็นที่จะต้องมีการเก็บข้อมูลสินค้าอย่างเป็นระบบว่าสินค้าแต่ละชิ้นมีแบรนด์-สี-สไตล์อย่างไร (ซึ่งเป็นเรื่องที่ทุกบริษัทควรทำตั้งแต่แรก) แต่สำหรับบริษัทที่ไม่ได้เก็บข้อมูลอย่างมีระบบนัก ทางเลือกหนึ่งคือการใช้โมเดลอย่าง WangchanBERTa เปลี่ยน free text ในคำอธิบายสินค้าแล้วทำ similarity search กับคำค้นหา

ผมมองว่าการทำโมเดล search ลักษณะนี้ให้ได้ผลลัพธ์เป็นที่พอใจ 1–90% เป็นเรื่องง่าย งานพวกนี้ไม่ซับซ้อนมาก แต่การจะไปจาก 91–100% มันก็จะยากหน่อย นั่นคือส่วนที่คิดว่า WangchanBERTa จะมาช่วยได้

การใช้งานที่ตรงไปตรงมายิ่งกว่านั้นอีกคือการสร้าง sentence embeddings จาก WangchanBERTa

ถ้าเราไม่ใช่คนที่เชี่ยวชาญการทำ NLP มาก เป็นแค่คนทำ ML ธรรมดาๆคนหนึ่งที่ไม่ค่อยเข้าใจความซับซ้อนของภาษาไทย (เหมือนผม) เราก็แค่เอา WangchanBERTa มา finetune ด้วยข้อมูล/บริบทของเราสัก 5–10 epochs ด้วย learning rate ต่ำๆ แค่นี้ก็เอาไปใช้สร้าง sentence embeddings ที่เหมาะกับงานเราได้แล้ว จากนั้นจะเอาไปทำ supervised หรือ unsupervised learning ก็แล้วแต่จะจินตนาการ

#อ่านNLProc: ในอนาคตมีแผนจะพัฒนาอะไรเพิ่มใน PyThaiNLP เพิ่มไหมครับ? แล้วคิดว่าในอีก 5 ปีข้างในวงการ NLP จะเป็นยังไงบ้างครับ?

พี่ชาริน: เป้าหมายของ PyThaiNLP ตอนนี้คือ “ทำให้สิ่งต่างๆใน NLP ภาษาต่างประเทศ มีในภาษาไทยด้วย” ไม่ว่าจะเป็นสำหรับใช้เพื่ออุตสาหกรรมหรืองานวิจัย อาจสังเกตุได้ว่าสิ่งที่ open source contributer หลายคนที่ทำมาใน 3–4 ปีนี้ มันไม่ได้สูญเปล่าเลย จากที่เราตามภาษาอื่น 100 ก้าว ตอนนี้เราอาจจะตามเขาเหลือ 50 ก้าว เราก็พยายามกันต่อไป ส่วนในอีก 5 ปีข้างหน้า ผมอยากเห็น PyThaiNLP ไม่ใช่เรื่องพิเศษอะไร ถ้าเลิกใช้ไปได้ก็ดีเลย เพราะนั่นหมายถึงการทำ NLP ภาษาไทยถูกหลอมรวมกับภาษาอื่นๆในโลกแล้ว ถ้ามีงานวิจัยอะไรใหม่ๆก็จะมีภาษาไทยด้วยเสมอ ไม่ต้องมาคอยลุ้นกด ctrl+f พิมพ์ “thai” ทุกครั้งที่มีงานวิจัยใหม่ๆออกมา

จุดมุ่งหมายของผมคือ “Make Thai NLP uncool again” อยากให้ NLP ภาษาไทยไม่ใช่เรื่อง hype แบบทุกวันนี้ที่ใครต่างก็เข้ามาฉวยโอกาสเพื่อหลอกมือใหม่ แต่ให้ NLP ภาษาไทยเป็นเรื่องธรรมดาที่ไม่ว่าใครก็ทำได้

#อ่านNLProc: มีอะไรอยากจะฝากถึงคนอ่าน NLProc และ Thai NLP บ้างครับ?

พี่ชาริน: ผมเป็นแค่ data scientist/machine learning engineer ที่ทำงาน NLP บ่อยกว่าปกติ ไม่ใช่นักวิจัยโดยตรง เพราะงั้นผมคงไม่สามารถแนะนำอะไรนักวิจัยสาย NLP ได้ขนาดนั้น มันเกินตัวผมไปนิดนึง อาจจะอยากแบ่งปันมุมมองที่ผมมีต่องานวิจัย NLP โดยเฉพาะสำหรับภาษาไทยมากกว่า

ผมคิดว่า open datasets, pretrained models และ open source libraries คือสาธารณูโภคพื้นฐานของประเทศในทำนองเดียวกับทางเท้า สะพานลอย โรงเรียนรัฐบาล หรือขนส่งสาธารณะ และเป็นโชคดีที่เราสามารถช่วยสร้างสาธารณูโภคเหล่านี้ได้โดยไม่ต้องไปอ้อนวอนผู้มีอำนาจในภาครัฐหรือบริษัทขนาดใหญ่ วันนี้คุณกด pull request เข้าไปช่วยเพิ่ม feature ให้ PyThaiNLP ได้เลย คุณเปิดชุดข้อมูลหรือแบ่งปัน pretrained models เป็น CC-BY-SA 4.0 ให้คนเอาไปใช้ได้เลย โดยไม่ต้องได้รับการอนุมัติงบเป็นพันล้านหมื่นล้านใช้เวลาเป็นปีๆ

ในทางกลับกันเสียอีก ในวันที่นักพัฒนา open source อย่างพวกเรา PyThaiNLP อยู่ในจุดที่ “ไม่รู้จะทำอะไรต่อ” เพราะเราทำสิ่งที่ทำได้โดยไม่ต้องใช้งบประมาณเกินกว่าที่เรามีไปแทบจะหมดแล้ว เรามีศูนย์วิจัยและบริษัทขนาดใหญ่ที่เห็นคุณค่าของสาธารณูปโภคพื้นฐานด้านข้อมูล (AI?) เหล่านี้ยื่นมือเข้ามาช่วย ผมอยากยกความดีความชอบทั้งหมดให้กับทีมงาน VISTEC และ AIResearch.in.th ผู้ทำให้ผมเชื่ออย่างสุดใจว่านี่คือจุดเปลี่ยนสำคัญของ NLP และ AI ในภาพรวมของประเทศไทย ความสนับสนุนขององค์กรเหล่านี้รวมถึงผู้บริจาคเพื่อสร้างชุดข้อมูล/โมเดลอย่าง SCB และ AIS มันทำให้เราสามารถพูดได้ว่า ใครก็ได้ ไม่จำเป็นต้องเรียนจบมาสูงๆหรือเป็นใครยิ่งใหญ่มาจากไหนก็สามารถช่วยทำให้วงการนี้ดีขึ้นได้ ผมรู้สึกขอบคุณที่ได้ร่วมทำงานกับคนเหล่านี้มาก และเชื่อเป็นอย่างยิ่งว่าเรากำลังเข้าใกล้วันที่ทุกคนจะบอกว่า “NLP ภาษาไทยมันน่าเบื่อ” น่าเบื่อเพราะเราได้ทำหลายๆอย่างที่ควรจะมีให้มันมีไปแล้ว (แต่ถึงวันนั้นผมคิดว่าเราก็ยังคงต้องปวดหัวกับปัญหาการตัดคำอยู่เหมือนเดิม)

บทความนี้สนับสนุนโดย

--

--

Mr.P L
AIResearch.in.th

Lifestyle of Programmer & IoT (Node-RED|Blynk) & Data Science (ML,DL,NLP) and Whatever I want to do | cat can coding too | Ph.D. -> VISTEC -> IST