ការបង្រៀនBERTឲ្យយល់ភាសារខ្មែរ
សេចក្តីណែនាំអំពី NLP ជាសាមញ្ញ
ខ្ញុំបានចំណាយពេលខ្លះដើម្បីពិសោធន៍ ”របៀបដែលម៉ាស៊ីនរៀន” ជាមួយនិងភាសាខ្មែរ ហើយចាប់ផ្តើមសាកល្បងជាមួយការជឿនលឿនចុងក្រោយនៃបញ្ញាសិប្បនិម្មិត ដែលគេហៅថា បឺត (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 គឺជាសំណុំទិន្នន័យដែលបង្កើតឡើងដោយ សាកលវិទ្យាល័យស្ទែនហ្វត (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/ ។