ការបង្រៀនBERTឲ្យយល់ភាសារខ្មែរ

សេចក្តីណែនាំអំពី​ NLP⁣ ⁣ជាសាមញ្ញ

Phylypo Tum
4 min readApr 11, 2020

ខ្ញុំ​បាន​ចំណាយ​ពេល​ខ្លះ​ដើម្បី​ពិសោធន៍​ ⁣”របៀប​ដែល⁣​ម៉ាស៊ីន​រៀន” ⁣⁣ជាមួយ​និង​ភាសាខ្មែរ​ ⁣ហើយ​ចាប់​ផ្តើម​សាកល្បង​ជាមួយ​ការ​ជឿនលឿន​ចុង​ក្រោយ​នៃ​បញ្ញា​សិប្បនិម្មិត ដែល​គេ​ហៅ​ថា បឺត ⁣(BERT) ។ នៅ​ក្នុង​អត្ថបទ​នេះ ខ្ញុំ​សរសេរ​អំពី​ប្រវត្តិ​ខ្លះៗ និង​ការណែនាំ​ ទាក់ទង​ទៅ​នឹង ដំណើរ​ការ​ភាសា​ធម្មជាតិ (NLP) ដើម្បី​ផ្តល់​ឱ្យ​អ្នក​យល់​ពី​ក្បួន​ដោះស្រាយ ប៉ុន្តែ​សំខាន់​ជាង​នេះ​ទៅទៀត ខ្ញុំ​បាន​រៀបរាប់​លម្អិត​អំពី​ដំណើរការ ដែល​ពាក់ព័ន្ធ​នឹង​របៀប​ម៉ាស៊ីន​រៀន​ភាសា​យើង។​ ⁣អ្នក​អាច​អាន​បន្ថែម វិធីសាស្ត្រ​លម្អិត​ផ្សេង ⁣នៅ​ទីនេះជា​ភាសា​អង្គ្លេស។

សេចក្តីផ្តើម

អ្នក​វិទ្យាសាស្ត្រ​ខាង​កុំព្យូទ័រ​កំពុង​ព្យាយាម​បង្កើត​កម្មវិធី​សិប្បនិម្មិត (AI) ដែល​អាច​យល់​ពី​ ⁣ភាសា​របស់​មនុស្ស។ ⁣យើង​បាន​ឃើញ​វឌ្ឍនភាព​ដែល​ម៉ាស៊ីន ⁣បាន​ប្រកួត​ប្រជែង​ជាមួយ​មនុស្ស ⁣នៅ​ក្នុង​ល្បែង Jeopardy ក្នុងឆ្នាំ២០១១⁣។​ ⁣​ វ៉ាតសុន​ ⁣(Watson) ⁣​ដែល​ជា​កម្មវិធី ⁣ដែល​បង្កើត​ឡើង​ដោយ ⁣ក្រុមហ៊ុន IBM បាន​ឈ្នះ​ល្បែង Jeopardy ប្រឆាំង​នឹង​អ្នក​ជើងឯក​ពីរ​រូប។ នេះ​ជា​សញ្ញា​បង្ហាញ​ពី​របៀប​ ⁣ដែល​ម៉ាស៊ីន​អាច​រៀន​ពី​ភាសា​អង់គ្លេស⁣​បាន​ល្អ​គ្រប់គ្រាន់​ ⁣ដើម្បី​នឹង​លេងល្បែង​នេះ។ អ្នកបង្កើត ⁣ប្រព័ន្ធ​នេះ ⁣បាន​ចំណាយ​ពេល​ជា​ច្រើន​ឆ្នាំ ⁣ដើម្បី​បណ្តុះបណ្តាល​និង​កែ​លម្អ​ក្បួន​ដោះស្រាយ ⁣ដើម្បី​លេង​ល្បែង​នេះ។

បឺត​ ⁣(BERT)

ការ​រីក​ចម្រើន​ថ្មី​មួយ​នៅ​ក្នុង​ផ្នែក​នេះ ⁣គឺ​ជា​វិធីសាស្ត្រ​មួយ​ ⁣ដែល​ម៉ាស៊ីន​អាច​រៀន​ភាសា​បាន ⁣ដោយ​មិន​ចាំបាច់​ ⁣សរសេរ⁣​ច្បាប់​ជាក់លាក់ ⁣របស់​ភាសា​នោះ។ ការ​ជឿនលឿន​នៃ​វិធីសាស្ត្រ​នេះ ⁣ត្រូវ​បាន​គេ​ស្គាល់​ថា BERT បង្កើត​ដោយ​ហ្គូហ្គល ⁣(Google) ⁣ក្នុងឆ្នាំ២០១៨ ដែល​អាច​ ⁣ឆ្លើយ​សំណួរ​បាន ⁣ប្រសើរ​ជាង​មនុស្ស។ ក្នុង​ករណី​នេះ ⁣BERT មិនមែន​ជា​តួអង្គ Sesame Street ទេ ⁣តែ​ជា​ឈ្មោះ​នៃ​កម្មវិធី​របស់​ម៉ាស៊ីន​ដែល​រៀន (ML) ⁣ដែល​មាន​នៃ​ថា ⁣“Bidirectional Encoder for Transformers” ។ ⁣គេ​អាច​បណ្តុះបណ្តាល​វិធីសាស្ត្រ​នេះ​ដោយ​ប្រើ ​អត្ថបទ​ជា​ច្រើន​ពី​វីគីភីឌៀ​ ⁣(Wikipedia) ⁣និង​សៀវភៅ។ យើង​គ្រាន់តែ​បញ្ចូល​អត្ថបទ​ទាំងអស់​នេះ ⁣ទៅ​ក្នុង​ក្បួន​កម្មវិធី​⁣ប៉ុណ្ណោះ ⁣ហើយ​វា​និង​រៀន​ដោយ​ខ្លួន​វា។ ជា​មួយ​អត្ថបទ​ជា​ច្រើន​នោះ ⁣ម៉ាស៊ីន​អាច​រៀន​ពី​វាក្យស័ព្ទ​ ⁣ រចនាសម្ព័ន្ធ​នៃ​អត្ថបទ និង​ខ្លឹមសារ ⁣ឬ​អត្ថន័យ​នៃ​អត្ថបទ ⁣ដោយ​មិន​ប្រាប់​ពី​ក្បួន​ជាក់លាក់​អ្វី​ទេ។

យើង​នឹង​មិន​និយាយ​លម្អិត​អំពី​របៀប​ដែល​កម្មវិធី​ដំណើរ​ការ​នោះ​ទេ ⁣ប៉ុន្តែ​យើង​និយាយ​អំពី​រចនាសម្ព័ន្ធ​នៃ​វិធីសាស្ត្រ​នេះ។ ⁣ម៉ាស៊ីន​ដែល​រៀន​របៀប​នេះ ⁣ត្រូវ​បាន​គេ​ហៅ​ថា ⁣“ការ​រៀន​ស៊ី​ជម្រៅ”​ ⁣(deep learning) ដែល​សំដៅ​ទៅលើ ⁣ស្ថាបត្យកម្ម​ដែល​ធ្វើ​តាម​របៀប​ដែល​ខួរក្បាល​មនុស្ស ⁣ តាម​កម្រិត​ណឺរ៉ូន ⁣(neuron) ⁣ដំណើរការ។ ពេល​ដែល​សំណុំ​នៃ​ណឺរ៉ូន ⁣⁣នៅ​ក្នុង​ខួរក្បាល​របស់​យើង​ទទួល​ព័ត៌មាន ⁣ពី​ភ្នែក​ឬ​ត្រចៀក វា​ផ្ញើ​បន្ត ⁣​ទៅ​ណឺរ៉ូន​ផ្សេង​ទៀត ជា​ច្រើន​សន្ទាប់​ជា​បន្តបន្ទាប់។ លោក Jeffrey Hinton ជា​សាស្ត្រាចារ្យ មកពី ⁣សាកលវិទ្យាល័យ​តូរ៉ុនតូ ⁣(Toronto) ⁣បាន​ចាប់ផ្តើម ⁣ធ្វើ​ឲ្យ​មាន​⁣ប្រជាប្រិយភាព ⁣លើ​ម៉ាស៊ីន​ដែល​រៀន ⁣ប្រភេទ​នេះ​ ⁣ក្នុង​ឆ្នាំ ២០១២ នៅ​ក្នុង​ចក្ខុវិស័យ​នៃ​កុំព្យូទ័រ​ ⁣(computer vision) ⁣ជាមួយ​កម្មវិធី ⁣អាឡិចណិត​ ⁣(AlexNet) ⁣ដែល​ឈ្នះ​ការប្រកួតប្រជែង របៀប​ដែល​ម៉ាស៊ីន​អាច​មើល​រូបភាព ⁣បាន​ល្អ​ប្រសើរ​ជាង​មុន ។ ការប្រកួតប្រជែង ⁣ImageNet Competition នេះ ⁣បាន​ធ្វើឡើង​ជា​ទៀងទាត់ ⁣ដើម្បី​បង្ហាញ​ពី​ភាព​ប្រសើរ​ឡើង​នៃ​កម្មវិធី​ថ្មីៗ។

វិធីសាស្ត្រ​ប្រជាប្រិយ​មួយ​⁣ដែល​ត្រូវ​បាន​ប្រើ​នៅក្នុង​ចក្ខុវិស័យ​កុំព្យូទ័រ ⁣គឺ​ដំបូង​ត្រូវ​បណ្តុះបណ្តាល​កម្មវិធី​ដោយ​ប្រើ​រូបភាព​យ៉ាង​ច្រើន។ ⁣ការ​ធ្វើ​បែប​នេះ ⁣អនុញ្ញាត​ឲ្យ​​ ⁣កម្មវិធី​រៀន​ពី​ទ្រង់ទ្រាយ​នៃ​រូបភាព។ ⁣ ⁣រូបភាព​ទាំងនេះ​ត្រូវ​បាន​ដាក់​ស្លាក​រួច​ហើយ ⁣នូវ​អ្វី​ដែល​ជា​វត្ថុ​ ⁣ក្នុង​រូបភាព​នោះ ⁣ដូចជា ImageNet ដែល​មាន​រូបភាព​ចំនួន ១៤ លាន​រូប ⁣និង ២០,០០០ ថ្នាក់ (វត្ថុ​ផ្សេងៗ​ក្នុង​រូបភាព) ។ បន្ទាប់មក គេ​យក​កម្មវិធី​នេះ​ ⁣ទៅ​ហ្វឹកហាត់​លើ​រូបភាព​ដែល​គេ​ចង់​វិភាគ។ របៀប​នេះ​បង្កើន​លទ្ធផល​ត្រឹមត្រូវ​ច្រើន​ជាង​ការ​បណ្តុះបណ្តាល​ត្រឹម​តែ​លើ​រូបភាព​ដែល​អ្នក​ចង់​វិភាគ។ វិធីសាស្ត្រ​នេះ​ត្រូវ​បាន​គេ​ហៅ​ថា​ការ​រៀន​ផ្ទេរ ⁣(transfer learning)។

BERT ប្រើ​វិធីសាស្ត្រ​រៀន​ផ្ទេរ​ដូចគ្នា ⁣ដោយ​បណ្តុះបណ្តាល​លើ​ចំនួន​អត្ថបទ​ដ៏​ច្រើន។ អត្ថបទ​ងាយ​រក​បាន​ពី​អ៊ីនធឺណិត (Internet) ⁣ដូច​ជា​ទំព័រ​វីគីភីឌៀ ⁣(Wikipedia) ⁣ដោយ​មិន​ចាំបាច់​ធ្វើការ​ដាក់​ស្លាក ⁣ដូច​ជា​វិធីសាស្ត្រ​ចក្ខុវិស័យ​កុំព្យូទ័រ ⁣ដែល​មនុស្ស​ ⁣ត្រូវ​កំណត់​ថា​នៅ​ក្នុង​រូបភាព​នោះ​មាន​វត្ថុ​អ្វី។

ជា​មួយ​អត្ថបទ​ដ៏​ច្រើន​នេះ (៨០០ លាន​ពាក្យ​ពី​សៀវភៅ​និង ២,៥ ពាន់​លាន​ពាក្យ​ពី​វីគីភីឌៀ​អង់គ្លេស) បឺត​មាន​ភារកិច្ច​ផ្ទាល់​ខ្លួន​ដោយ​បញ្ចូល​ប្រយោគ​នីមួយៗ​ទៅ​ក្នុង​ក្បួន​ដោះស្រាយ ⁣ដោយ​លុប​បំបាត់​ពាក្យ​ខ្លះ។ ពាក្យ​ដែល​បាត់​ទាំងនោះ​ត្រូវ​បាន​គេ​ហៅ​ថា ⁣ពាក្យ“លាក់បាំង” (masking)។ បន្ទាប់​មក ⁣វា​ព្យាយាម​ទាយ​ពាក្យ​ដែល​បាត់​នោះ។ ⁣ដោយ​ការ​លាក់បាំង​ពាក្យ​មួយ​ចំនួន ⁣វា​ប្រឹង​រៀន​ពី​របៀប⁣​ទស្សន៍ទាយ​ពាក្យ​ទាំង​នោះ ។​ ⁣⁣ក្បួន​នេះ​បាន​បង្រៀន​វា​ ពី​រចនាសម្ព័ន្ធ​នៃ​ភាសា ⁣ទម្រង់​របស់​អត្ថបទ ⁣និង​អត្ថន័យ​របស់​ពាក្យ។

ការ​ជឿនលឿន​ក្នុង​វិធីសាស្ត្រ​នេះ ⁣គឺ​ដោយសារ​តែ​កុំព្យូទ័រ​មាន​ល្បឿន​លឿន​ជាង​មុន ⁣ដែល​អាច​ដំណើរ​ការ​លើ​អត្ថបទ​បាន​កាន់តែ​ច្រើន។ លើស​ពី​នេះ​ទៀត ⁣ក្បួន​មូលដ្ឋាន ⁣“transformer” អនុញ្ញាត​ឱ្យ​កម្មវិធី​ជា​ច្រើន​ដំណើរការ​ស្រប​ជា​មួយ​គ្នា​យ៉ាង​លឿន​ប្រសើរ​ជាង​ក្បួន​មុនៗ។ ជា​មួយ​គ្នា​នេះ ⁣ស្ថាបត្យកម្ម​ប្រើ​ស្រទាប់​ជា​ច្រើន​ដែល​មាន​ប៉ារ៉ាម៉ែត្រ​ជាង ៣០០ លាន ⁣ធ្វើ​ ⁣ឲ្យ​ក្បួន​នេះ​បាន​ក្លាយ​ជា​ក្បួន​ល្អ​បំផុត​ក្នុង​កំឡុង​ពេល​នោះ​ក្នុង​ឆ្នាំ​២០១៨។

ស្ថាបត្យកម្ម BERT នេះ​អាច​អនុវត្ត​បាន​ចំពោះ​ភាសា​ណា​ក៏​បាន​ដែរ ⁣ដរាប​ណា​ភាសា​នោះ ⁣មាន​អត្ថបទ​គ្រប់គ្រាន់​សម្រាប់​ហ្វឹកហាត់។ តាម​ពិត​ហ្គូហ្គល​បាន​ហ្វឹកហាត់​ភាសា​គំរូ​មុន​ប្រមាណ ១០០ ភាសា។ ភាសា​ទាំងនេះ​គឺ​ជា​ភាសា១០០ ដែល​មាន​ចំនួន​អត្ថបទ​នៅ​វីគីភីឌៀ​ច្រើន​ជាង​គេ។ ភាសា​ខ្មែរ​មិន​ត្រូវ​បាន⁣​ហ្គូហ្គល​​ហ្វឹកហាត់​ទេ ⁣ព្រោះ​ចំនួន​អត្ថបទ ⁣ដែល​សរសេរ​ជា​ភាសា​ខ្មែរ ⁣នៅ​ក្នុង​វីគីភីឌៀ ⁣បាន​ជាប់​ចំណាត់​ថ្នាក់​ទី ១៥៥ នៃ​ភាសា​ទាំងអស់។ ⁣នេះ​ជាមូល​ហេតុ​ដ៏​សំខាន់​មួយ​​ ⁣ដែល​យើង​ត្រូវ​បញ្ចូល​អត្ថបទ​ ⁣ជា​ភាសា​ខ្មែរ​ឲ្យ​បាន​ច្រើន​នៅ​ទំព័រ​វីគីភីឌៀ។

ស្គ្វ៉ដ (SQuAD)

គេ​បាន​បង្ហាញ​ថាBERT អាច​ឆ្លើយ​សំណួរ​តាម​អត្ថបទ​បាន​ប្រសើរ​ជាង​មនុស្ស។ សំណុំ​ទិន្នន័យ​ដែល​បាន​ប្រើ​មាន​ឈ្មោះថា ស្គ្វ៉ដ (SQuAD) ⁣មាន​ឈ្មោះ​សម្រាយ​គឺ ⁣⁣Stanford Question Answering Dataset ដែល ⁣BERT ⁣បាន​ពិន្ទុ ៨៧% ទល់​នឹង​មនុស្ស​ដែល​បាន​ពិន្ទុ ៨២% សំរាប់​ចម្លើយ​ត្រូវ​គ្រប់​ពាក្យ។

SQuAD 1.1 Leaderboard retrieved January 20, 2019 from https://rajpurkar.github.io/SQuAD-explorer/

SQuAD ⁣គឺជាសំណុំទិន្នន័យដែលបង្កើតឡើងដោយ ⁣សាកលវិទ្យាល័យស្ទែនហ្វត​ ⁣(Stanford University) ⁣សម្រាប់សហគមន៍បញ្ញាសិប្បនិម្មិត ដើម្បីសាកល្បងថាតើ ម៉ាស៊ីនអាចយល់អត្ថបទ បានល្អប៉ុណ្ណា។ ផ្អែកលើអត្ថបទដែលបានផ្តល់ឱ្យ វាមានសំណួរជាច្រើនដែលត្រូវសួរ។ ដើម្បីអាចឆ្លើយបាន កុំព្យូទ័រត្រូវតែយល់ពីរចនាសម្ព័ន្ធរបស់អត្ថបទខ្លះ។

ឧទាហរណ៍ៈ (អត្ថបទនៅខាងឆ្វេង ⁣សំណួរនិងចម្លើយត្រឹមត្រូវគឺនៅខាងស្តាំ) ។

ដើម្បីបកប្រែអត្ថបទនេះ៖

កាលីហ្វ័រញ៉ាភាគខាងត្បូង ជាញឹកញាប់ហៅកាត់ថា SoCal គឺជាតំបន់ភូមិសាស្ត្រនិងវប្បធម៌ ដែលជាទូទៅមានស្រុកចំនួន ១០ នៅខាងត្បូងបំផុតរបស់រដ្ឋ California ។ តំបន់នេះ ត្រូវបានពិពណ៌នាថាជា “ស្រុក ៨” ដោយផ្អែកលើប្រជាសាស្ត្រ និងទំនាក់ទំនង សេដ្ឋកិច្ច៖ Imperial, Los Angeles, Orange, Riverside, San Bernardino, San Diego, Santa Barbara, និង Ventura ។ និយមន័យនៃតំបន់ចំនួន ១០ ដែលទូលំទូលាយជាងនេះរួមមានរដ្ឋ Kern និង San Luis Obispo ក៏ត្រូវបានប្រើដោយផ្អែកលើការបែងចែកនយោបាយ ជាប្រវត្តិសាស្ត្រ ផងដែរ។ កាលីហ្វ័រញ៉ាខាងត្បូង គឺជាមជ្ឈមណ្ឌលសេដ្ឋកិច្ចដ៏សំខាន់មួយ សម្រាប់រដ្ឋកាលីហ្វ័រញ៉ា និងសហរដ្ឋអាមេរិក។

សំនួរ​:ទោះបីជាត្រូវបានគេពិពណ៌នាជាប្រពៃណីថាជា“ ស្រុក ៨” តើតំបន់នេះមានស្រុកប៉ុន្មានដែរ?

ចំលើយ: ១០

ក្នុងឧទាហរណ៍នេះ ⁣ដូចដែលអ្នកបានឃើញហើយ ⁣ចម្លើយមិនមាន ⁣នៅក្នុងប្រយោគ ⁣ជាមួយនឹងសំណួរនោះទេ។ ដូច្នេះកុំព្យូទ័រត្រូវរកចម្លើយពីប្រយោគមុន។

ប្រើភាសាខ្មែរក្នុងBERT ⁣

ឥឡូវយើងនឹងបណ្តុះបណ្តាលកម្មវិធីនេះដោយ​បញ្ចូលភាសាខ្មែរ។ យើងនឹងវាយតំលៃថាតើកម្មវិធីនេះយល់ពីអត្ថបទខ្មែរឬទេ ⁣ដោយឲ្យវាបែងចែកឯកសារ ⁣(document classification)។ កុំព្យូទ័រ នឹងពិនិត្យមើលថា ⁣តើ⁣ឯកសារនិមួយៗ ត្រូវជាប្រភេទឯកសារ​ណាមួយ។ ⁣ឧទាហរណ៏ដែលគេនិយមប្រើគឺឲ្យកម្មវិធីសម្រាច់ថា ⁣តើអ៊ីម៉ែលនិមួយៗ ⁣គឺជាអ៊ីម៉ែលឥតបានការ ⁣(spam) ⁣ឬអត់។

មុននេះយើងបានបង្កើតគេហទំព័រព័ត៌មានខ្មែរ ដែលយកចំណងជើងពីគេហទំព័រខ្មែរជាច្រើន ហើយបង្ហាញរួមលើទំព័រមួយ។ នៅក្នុងដំណើរការនេះ ⁣យើងបានឃើញថា​ ⁣មានអត្ថបទ ទាក់ទងនឹងគ្រោះថ្នាក់ចរាចរណ៍ច្រើន ⁣ដែលនាំឲ្យពិបាកមើល​ ⁣ចំណងជើងសំខាន់ៗផ្សេងទៀត។ ជាលទ្ធផល ⁣យើងបានបង្កើតកម្មវិធី AI មួយ ⁣ដើម្បីរកអត្ថបទដែលមានគ្រោះថ្នាក់ចរាចរណ៍ ⁣ហើយ​ទុកដើយឡែក ⁣ពី​អត្ថបទដ៏ទៃ ⁣ដើម្បីកុំឲ្យនៅជាន់ ⁣លើអត្ថបទនៅទំព័រដើម។ ដូច្នេះយើងនឹងប្រើកិច្ចការដូចគ្នានេះ ⁣ដើម្បីមើលថាតើកម្មវិធី ⁣BERT នេះអាចបែងចែកអត្ថបទទាំងនោះបានល្អឬទេ។

យើងមានអត្ថបទ ៨២០ មាត្រាដែលយើងបានជ្រើសរើសនិងដាក់ស្លាកនីមួយៗថា​ ⁣“១” ប្រសិនបើវានិយាយអំពីគ្រោះថ្នាក់ចរាចរណ៍ ⁣ឬ “០” ប្រសិនបើវា ⁣មិនមែនជាអត្ថបទ ⁣គ្រោះថ្នាក់ចរាចរណ៍ទេ។ នេះជាសំណុំអត្ថបទ ⁣ដែល​យើង​និង​ប្រើ​​ឲ្យ⁣កម្មវិធីបឹតបែងចែក​អត្ថបទ។​

នេះជាអត្ថបទឧទាហរណ៍និងស្លាករបស់វាថា “គ្រោះថ្នាក់” ឬអត់។

នៅក្នុងដំណើរការនេះ យើងមាន ២ ជំហាន។ នៅជំហានទី ១ យើងបញ្ចូលអត្ថបទជាភាសាខ្មែរជាច្រើនទៅក្នុងក្បួនដោះស្រាយ BERT ដើម្បី​ឲ្យ​វា⁣អាចរៀន ⁣រចនាសម្ព័ន្ធភាសាខ្មែរ។ ដំណើរការនេះត្រូវបានគេហៅថាការហ្វឹកហាត់ជាមុន ⁣(pre-train) ⁣នៃគំរូភាសា។ ក្នុងជំហ៊ានទី ២ យើងបញ្ចូលអត្ថបទ ⁣ដែលយើងបានជ្រើសរើសជាមួយស្លាក ⁣ដែលប្រាប់ពីក្បួនដោះស្រាយ ⁣ដើម្បីរៀនបែងចែករវាងថ្នាក់ ០ ឬថ្នាក់ទី ១ ។ ជំហ៊ាននេះ ⁣ត្រូវបានគេហៅថា ការកែរតំរូវ ⁣(finetune) សំរាប់កិច្ចការបែងចែក​អត្ថបទ។

ជំហានទី ១: ⁣ការហ្វឹកហាត់ភាសាគំរូជាមុន

ក្នុងជំហានទី ១ យើងបញ្ចូលអត្ថបទជាភាសាខ្មែរទៅក្នុងក្បួនដោះស្រាយ។ អត្ថបទត្រូវតែអនុញ្ញាតឱ្យ ក្បួនដោះស្រាយ បំបែកអត្ថបទទៅជាពាក្យ។ ដោយសារខ្មែរមិនប្រើ អក្សរដកឃ្លារវាងពាក្យ ⁣យើងត្រូវធ្វើកិច្ច​ការមួយដែល​ត្រូវបានគេហៅថា ⁣“ការបែងចែកពាក្យ” (word segmentation)។ យើងនឹងប្រើក្បួនដែលហៅថា CRF ដែលមានដំណើរការល្អ​ ⁣សម្រាប់ភាសាខ្មែរ។ សូមមើលអត្ថបទមុនរបស់ខ្ញុំសម្រាប់ព័ត៌មានលម្អិត។

ដល់ចំណុចនេះ យើងបាន​ដាក់ចន្លោះរវាងពាក្យដល់​គ្រប់អត្ថបទរួចហើយ។ បន្ទាប់មក ⁣ក្បួនដោះស្រាយ⁣ត្រូវបង្កើតបញ្ជីពាក្យទាំងអស់ ⁣ដែល​មាន​នៅគ្រប់​អត្ថបទ⁣។​ ពាក្យនីមួយៗនឹងត្រូវមានតំណាងលេខមួយៗ ⁣ដែលក្បួនដោះស្រាយអាចយក​ទៅប្រើ។

Input Text: “ឃាត់​ ⁣ជនសង្ស័យ ⁣ម្នាក់ ⁣បន្ទាប់ពី”
Tokenized: [‘ឃាត់’, ‘ជនសង្ស័យ’, ‘ម្នាក់’, ‘បន្ទាប់ពី’]
Token IDs: [1585, 1438, 1062, 1482]

ក្នុងឧទាហរណ៍ខាងលើ ⁣ដំបូងយើងបែងចែកអត្ថបទជា ៤ ពាក្យដោយ ⁣កម្មវិធី​បែងចែកពាក្យ ⁣របស់យើង។ បន្ទាប់មកវាប្រែទៅជាលេខចំពោះពាក្យ​និមួយៗ ​ដែលត្រូវនឹងពាក្យនៅក្នុងវចនានុក្រម ⁣ដែលយើងបានបង្កើតពីមុននេះ។ លេខទាំងនេះនឹង​ត្រូវបញ្ចូលទៅក្នុងក្បួនដោះស្រាយ។

នៅក្នុងតំណាក់កាល pretrain នេះ ⁣ដំបូងវាជ្រើសរើស 15% នៃពាក្យហើយ​ដាក់ជាពាក្យ ⁣“របាំង” ។ បន្ទាប់មកវារៀនទាយពាក្យរបាំងនេះ។ នៅពេលវាប្រៀបធៀបការទាយទៅនឹងពាក្យរបាំង ⁣វាកែសម្រួលទម្ងន់ឬប៉ារ៉ាម៉ែត្ររបស់វា ដើម្បីឲ្យការទាយ​នោះបានប្រសើលើក​ក្រោយ។ វានឹងបញ្ចូលប្រយោគបន្ទាប់ហើយកែទំងន់របស់វាម្តងទៀត។ វាធ្វើម្តងហើយម្តងទៀត ⁣រហូតទាល់តែអត្ថបទទាំងអស់ត្រូវបានដំណើរការ។

នេះគឺជាផ្នែកមួយ ⁣ដែលចំណាយពេលយូរក្នុងដំណើរការ ⁣នៅពេលមានអត្ថបទច្រើន។ ហ្គូហ្គោល ⁣បង្រៀន BERT សម្រាប់ភាសាអង់គ្លេសដោយ​ប្រើអត្ថបទដែល​មានជាង ៣ ពាន់លានពាក្យ ⁣ហើយចំណាយពេលប្រហែល ៥៤ ម៉ោងដោយ​ប្រើ​កុំព្យុទ័រហ្គូហ្គល TPUs ។ ក្នុងករណីរបស់យើង ⁣យើងមានអត្ថបទតិចោះ​ ⁣ចូច្នេះយើងចំណាយពេលតែពីរបីនាទីប៉ុណ្ណោះ ⁣សម្រាប់អត្ថបទ⁣ព័ត៌មានខ្មែរ​ចំនួន ១០០០ អត្ថបទ ⁣ដែល​មានពាក្យចំនួន ៣៣៤ ពាន់ពាក្យ។

ដំណើរការបណ្តុះបណ្តាលនេះ ⁣អនុញ្ញាតឲ្យ⁣កម្មវិធីយើងរៀនពីរចនាសម្ព័ន្ធនៃប្រយោគ ⁣និងវិធីដែលពាក្យទាក់ទងគ្នា។

ជំហានទី ២៖ កែរតំរូវ ⁣BERT សម្រាប់ការបែងចែកប្រភេទឯកសារ

ក្នុងជំហ៊ានទី ២ យើងនឹងប្រើអត្ថបទរបស់យើងដែលមានចំនួន ៨២០ ដែលយើងដាក់ស្លាក ⁣ថាជាគ្រោះថ្នាក់ចរាចរណ៍ឬអត់។ ស្លាកលេខ ១ បញ្ជាក់ថាវាជាគ្រោះថ្នាក់ចរាចរណ៍ ⁣ហើយស្លាកលេខ ០ បញ្ជាក់ថាមិនមែនទេ។ យើងបញ្ចូលអត្ថបទនិងស្លាករបស់វាទៅក្នុង​ក្បួនដោះស្រាយ ⁣ដែលមានស្ថាបត្យកម្មបន្ថែមដើម្បីឲ្យវាអាចធ្វើការបែងចែកប្រភេទឯកសារ។

យើងមិនបានដាក់កម្មវិធីអ្វីជាក់លាក់អ្វីអំពីគ្រោះថ្នាក់ចរាចរណ៍ទៅ​ក្នុងក្បួនដោះស្រាយយើង​ទេ។ ម៉ាស៊ីនមិនដឹងថាអ្វីជាស្លាកលេខ ១ ឬ ០ទេ​ក្រៅពីអត្ថបទ​ដែល​យើង​ពញ្ចូល។ វាត្រូវតែសន្និដ្ឋាន ⁣អំពីអ្វីដែលជាភាពខុសគ្នា ⁣រវាងអត្ថបទដែលមានស្លាកលេខ ០ និងអត្ថបទដែលមានស្លាកលេខ ១ ។

ខ្ញុំអាចណែនាំវិធីសាស្រ្តដែលកុំព្យូទ័រអាចដោះស្រាយបញ្ហានេះ។ វាអាចរកឃើញថាអត្ថបទនៃជំពូកទី ១ មានពាក្យ ⁣“ឡាន” ឬ ⁣“ម៉ូតូ” ។ ប៉ុន្តែយើងដឹងថាអត្ថបទមួយចំនួនអំពី ⁣“ការបង្ហាញរថយន្ត” ឬ ⁣“ម៉ូតូសម្រាប់លក់” មិនមែនជាស្លាក ⁣១ទេ។ ដូច្នេះវាចាំបាច់ត្រូវរៀនសម្គាល់ថាអត្ថបទអំពី ⁣“ការបង្ហាញរថយន្ត” ឬ“ ការលក់ម៉ូតូ” ដែល​មាន​ពាក្យ​ ⁣ឡាន ⁣ឬ​ ⁣ម៉ូតូ ⁣មិនមែនជាជំពូកទី ១ ទេ។ វាអាចរកឃើញថាអត្ថបទរបស់ ស្លាកទី ១ មាន​ពាក្យ ⁣“⁣ការស្លាប់” ⁣ឬ “⁣របួស” ⁣ប៉ុន្តែយើងដឹងថា អត្ថបទអំពីអំពើចោរប្លន់ ⁣និងឃាតកម្ម ⁣ជាស្លាកថា ០ ដែល​មិន​ទាក់​ទង​នឹង​ចរាចរណ៍ទេ។ ដូច្នេះវាត្រូវបែងចែកចំណុចទាំងនោះ ⁣ជាស្លាកលេខ ០។ កម្មវិធីក្បួនដោះស្រាយយើង នឹងព្យាយាមរៀនពីលក្ខណៈពិសេស ⁣នៅក្នុងប្រយោគ ⁣មិនគ្រាន់តែមើលពាក្យ ⁣ដូចដែលបាននិយាយខាងលើទេ ⁣ ក្នុងគោលបំណង ⁣ដើម្បី​អាចរក ភាពខុសគ្នា រវាងអត្ថបទនិមួយៗ។

តាមពិតវិធីសាស្រ្តដែលបានលើកឡើង ដោយគ្រាន់តែមើលពាក្យ គឺជាវិធីសាស្រ្តចាស់មួយ ដែលមានឈ្មោះថា “ថង់ពាក្យ” (bag of words) ដែលកម្មវិធីប្រើ ចំនួនពាក្យនៅក្នុងអត្ថបទនីមួយៗ ដើម្បីធ្វើការបែងចែកប្រភេទឯកសារ។ វិធីសាស្រ្តនេះមិនមានដំណើរការល្អទេ ⁣ព្រោះវាមិនគិតពីលំដាប់លំដោយរបស់ពាក្យ ⁣ឬរចនាសម្ព័ន្ធរបស់​ប្រយោគ ⁣ដែលអាចមានសារៈសំខាន់ ⁣ក្នុងការបែងចែកប្រភេទឯកសារ។

ដើម្បីបន្តដំណើរការបណ្តុះបណ្តាលរបស់យើង ជំហានដំបូង គឺត្រូវបំបែកអត្ថបទរបស់យើង ទៅជាសំណុំបណ្តុះបណ្តាល (training set) និងសំណុំសុពលភាព (validation set)។ គោលដៅនៃសំណុំសុពលភាព គឺត្រូវទុកអត្ថបទខ្លះៗដើម្បីកុំឲ្យក្បួនដោះស្រាយដឹង ⁣នៅពេលបណ្តុះបណ្តាល។ សំណុំនេះនឹងត្រូវបានប្រើនៅចុងបញ្ចប់ ⁣ដើម្បីផ្ទៀងផ្ទាត់ ⁣ថាតើក្បួនដោះស្រាយអាចបែងចែកប្រភេទឯកសារបាន​ល្អប៉ុណ្ណា។ យើងបានរក្សាទុកអត្ថបទ ១០ ភាគរយជាសំណុំសុពលភាព។ យើងប្រើអត្ថបទ ៩០% សម្រាប់ការបណ្តុះបណ្តាល ⁣ឯកសារក្នុងចំនួនសរុប ៨២០ អត្ថបទ។ ដូច្នេះចំនួនអត្ថបទសំរាប់ ⁣ការបណ្តុះបណ្តាលមានចំនួន ៧៣៨ និងសំណុំសុពលភាពមានចំនួន ៨២ ។

សំណុំបណ្តុះបណ្តាល:738
សំណុំសុពលភាព: 82
ឯកសារសរុប: 820

នៅជំហានដំបូង កម្មវិធី​យកអត្ថបទ​មកបញ្ចូលហើយព្យាយាម​កែសម្រួល​ទម្ងន់របស់វាដើម្បីធ្វើឱ្យការទាយកាន់តែប្រសើរឡើង។ បន្ទាប់ពីវាបានឆ្លងកាត់គ្រប់ទិន្នន័យបណ្តុះបណ្តាលទាំងអស់ម​ក​ដែល​មានចំនួន ៧៣៨ ចំនួនកំហុស(ការបាត់បង់) លទ្ធផលគឺប្រហែល ០,៧ ឬ ៧០% ដូចដែលបានបង្ហាញក្នុងខ្សែពណ៌ខៀវខាងក្រោម។ ដំណើរការនៃការឆ្លងកាត់សំណុំទិន្នន័យទាំងមូលត្រូវបានគេស្គាល់ថាជាអ៊ីប៉ក់ ⁣(epoch) ⁣មួយ។ ក្នុងពេលនេះ ⁣⁣យើងសាកទាយសំណុំសុពលភាពម្ដង​ថា​តើវាមានភាពត្រឹមត្រូវប៉ុណ្ណា។ ⁣យើង​ឃើញថា​វា​បានត្រូវប្រហែល ⁣50% ⁣ដូចតាមបន្ទាត់ក្រហមនៅក្នុងតារាងខាងក្រោម។ លទ្ធិផលនេះ​គី​មិនល្អ​ទេ។ លទ្ធិផលនេះគឺដូចនឹងយើងត្រូវទាយចម្លើយដោយចៃដន្យ។

ឥឡូវយើងអនុញ្ញាតឱ្យវាឆ្លងកាត់ទិន្នន័យដូចគ្នាម្តងទៀតនិងកែទំងន់របស់វាហើយទទួលបានការបាត់បង់ដូចគ្នាក្នុងរវាង៥ អ៊ីប៉ក់ខាងមុខទៀត។ វាបានទាយ​ត្រូវ ⁣លើសំណុំសុពលភាពប្រហែល 50% ។

បន្ទាប់មក ⁣ដល់អ៊ីប៉ក់ទី ៦ យើងឃើញការទាយបានល្អជាងមុនបន្តិច។ សំណុំសុពលភាព ⁣បង្ហាញអំពីភាពត្រឹមត្រូវប្រហែល 70% ។ នេះល្អប្រសើរជាងមុន ⁣តែមិនទាន់អស្ចារ្យទេ។ បន្ទាប់មកនៅក្នុងអ៊ីប៉ក់ទី៧ ⁣ភាពត្រឹមត្រូវបានកើនឡើងដល់ជាង 90% ។ បន្ទាប់មក ⁣ក្នុងអ៊ីប៉ក់ទាំង ៩ វាឡើងដល់ ៩៩% ។ ⁣មក ⁣ដល់អ៊ីប៉ក់ទី ១៧ វាឈានដល់ ១០០% បន្ទាប់មក ៩៩% នៅលើអ៊ីប៉ក់ក្រោយៗ។ លទ្ធិផលនេះបានល្អ​ជាងកម្មវិធីចាស់ៗរបស់យើង។

សេចក្ដីបញ្ចប់

នៅក្នុងឆ្នាំ ២០១៨ ក្បួនដោះស្រាយរបស់ BERT បានកើន​លើសសមត្ថភាពរបស់មនុស្ស ⁣ក្នុងបញ្ហាសំណួរនិងចម្លើយ ⁣ក្នុងសំណុំទិន្នន័យ SQuAD១.១ ។ យើងឃើញថា ⁣យើងអាចបង្រៀន​ ⁣BERT ⁣ទុកជាមុន ដោយប្រើអត្ថបទជាភាសាខ្មែរ ⁣ដើម្បីឲ្យវារៀនពី ⁣រចនាសម្ព័ន្ធនៃភាសា។ បន្ទាប់មក ⁣យើងកែរកម្មវិធីដោះស្រាយ ⁣ជាមួយអត្ថបទព័ត៌មាន ⁣ដែលយើងដាក់ស្លាកជាគ្រោះថ្នាក់ចរាចរណ៍ឬអត់។ លទ្ធផលរបស់យើងបង្ហាញថា ⁣កម្មវិធីអាចទាយយ៉ាង⁣ត្រឹមត្រូវ ⁣ថាតើអត្ថបទនេះមានទាក់ទងនឹងគ្រោះថ្នាក់ចរាចរណ៍ឬអត់ ។

យើងប្រហែលជាមិនដឹងជាក់លាក់ ⁣ពី​របៀបដែលក្បួនដោះស្រាយ ក្នុងការបែងចែក​⁣​អត្ថបទនោះទេ។ ប៉ុន្តែតាមលទ្ធផល យើង​ដឹងថា⁣⁣វាអាចបែងចែកយ៉ាងត្រឹមត្រូវល្អ ⁣បានដល់ ៩៩% ។ វាទាយខុសតែ ១ ឯកសាប៉ុណ្ណោះ ក្នុងចំនួន ១០០ ឯកសា។

តើនេះមានន័យថាBERT ⁣បានយល់ពីភាសាខ្មែរឬ? ⁣នោះអាស្រ័យលើរបៀប ⁣ដែលអ្នកគិតមើល។ អ្វីដែលយើងបញ្ចូលទៅក្នុងក្បួនដោះស្រាយនេះ ⁣គឺគ្រាន់តែជាលេខយោង ⁣របស់ពាក្យដែលមានក្នុងបញ្ជីវចនានុក្រមរបស់យើងប៉ុណ្ណោះ។ អ្នកអាចនិយាយថា ⁣វាមិនដឹងអ្វីទាំងអស់ពីពាក្យខ្មែរ។ ប៉ុន្តែនៅពេលយើងចិញ្ចូលលេខទាំងនោះជាច្រើន ⁣វាអានរៀនពីទ្រង់ទ្រាយពាក្យខ្មែរនិងលំដាប់របស់វា។ BERT ដឹងពីរចនាសម្ព័ន្ធមួយចំនួន​⁣នៃលេខទាំងនោះ ⁣ដែលត្រូវនឹងពាក្យខ្មែរយើង។ វាដឹងគ្រប់គ្រាន់ ⁣អំពីរចនាសម្ព័នរបស់ពាក្យខ្មែរ ដែលអាចបែងចែកបាន⁣ថាអត្ថបទណាមួយដែលទាក់ទងនិងគ្រោះថ្នាក់ចរាចរណ៍។

អ្នកអាចមើលកូដនៃវិធីដែលយើងបណ្តុះបណ្តាលក្បួនដោះស្រាយនៅទីនេះជាមួយសំណុំទិន្នន័យផ្សេងទៀតដែលអ្នកអាចពិសោធន៍បាន: https://github.com/phylypo/khmer-text-data.

កំណត់ចំណាំផ្សេងទៀត

យើង​អាចបង្ហាញប្រសើរជាងនេះ ⁣បើក្បួនដោះស្រាយនេះអាចសរសេរអត្ថបទជាភាសាខ្មែរ ⁣ដើម្បីបង្ហាញការយល់ដឹងអំពីភាសា។ ប៉ុន្តែ BERT មិនធ្វើ​សម្រាប់សរសេរអត្ថបទទេ។ ខ្ញុំបានបណ្តុះបណ្តាល ⁣កម្មវិធីៈULMFiT ផ្សេងទៀតដែល ដោយប្រើសំណុំទិន្នន័យ ⁣ស្រដៀងគ្នា ⁣និងអាចសរសេរពាក្យខ្លះបាន។ ដោយផ្តល់⁣ពាក្យមួយចំនួន ⁣វានឹងសរសេរពាក្យពីរបីបន្ទាប់ ⁣ដែលមាន​អត្ថន័យសមស្រប ⁣និងអាច​ត្រឹមត្រូវ​តាមវេយ្យាករណ៍ខ្មែរ ⁣ ដើម្បីបង្ហាញថាវាយល់អំពីភាសា។ សូមមើល​ទំព័រដែលខ្ញុំបានធ្វើពីវិធីនេះ៖ http://ml.tovnah.com/khmer-ulmfit/

--

--