|
|
4 months ago | |
|---|---|---|
| .. | ||
| README.md | 4 months ago | |
| assignment.md | 4 months ago | |
README.md
យល់ពីភាសា
Sketchnote by Nitya Narasimhan. ចុចរូបភាពដើម្បីមើលជាថាតម្លៃធំជាងនេះ។
ពិនិត្យមុនម៉ោងរៀន
ការណែនាំ
នៅមេរៀនចុងក្រោយអ្នកបានបម្លែងសំឡេងទៅជាអត្ថបទ។ ដើម្បីឱ្យវាបានប្រើប្រាស់ក្នុងការបង្កើតម៉ោងកំណត់លំដាប់ឆ្លាតវៃ កូដរបស់អ្នកត្រូវតែមានការយល់ដឹងអំពីអ្វីដែលបាននិយាយ។ អ្នកអាចសន្មតថាអ្នកប្រើប្រាស់នឹងនិយាយឃ្លាមួយដែលបានកំណត់ដូចជា "កំណត់ម៉ោង 3 នាទី" ហើយបំលែងពាក្យនោះដើម្បីទទួលបានរយៈពេលម៉ោងដែលត្រូវការ ប៉ុន្តែវាមិនងាយស្រួលសម្រាប់អ្នកប្រើប្រាស់ទេ។ ប្រសិនបើអ្នកប្រើប្រាស់និយាយថា "គ្រប់គ្រងម៉ោងសម្រាប់ 3 នាទី" អ្នកឬខ្ញុំនឹងយល់អ្វីដែលពួកគេមានន័យ ប៉ុន្តែកូដរបស់អ្នកមិននឹងយល់ទេ ព្រោះវានឹងរំពឹងថាឃ្លាមួយដែលបានកំណត់ប៉ុណ្ណោះ។
នេះជាកន្លែងដែលការយល់ភាសាចូលមក មានការប្រើប្រាស់ម៉ូដែល AI ក្នុងការបកស្រាយអត្ថបទ និងត្រឡប់មកវិញនូវព័ត៌មានលម្អិតដែលត្រូវការ ឧទាហរណ៍ អាចទទួលបាន "កំណត់ម៉ោង 3 នាទី" និង "កំណត់ម៉ោងសម្រាប់ 3 នាទី" ស្របព្រម ហើយយល់ថាត្រូវការម៉ោងសម្រាប់រយៈពេល 3 នាទី។
នៅមេរៀននេះ អ្នកនឹងរៀនអំពីម៉ូដែលការយល់ភាសា របៀបបង្កើតវា របៀបបណ្តុះវា និងបង្កើតប្រើប្រាស់វាដែលបានតាមកូដរបស់អ្នក។
នៅក្នុងមេរៀននេះ យើងនឹងមានប្រធានបទ៖
ការយល់ភាសា
មនុស្សបានប្រើភាសាដើម្បីទំនាក់ទំនងរយៈពេលរាប់រយពាន់ឆ្នាំ។ យើងទំនាក់ទំនងដោយមួលសញ្ញាល្អ ពាក្យ សំឡេង ឬសកម្មភាព ហើយយល់អ្វីដែលបាននិយាយ ដោយទាំងមានន័យនៃពាក្យ សំឡេងឬសកម្មភាព និងបរិបទរបស់វា។ យើងយល់ពីស្នេហាក្តី និងការសរសើរ ឱ្យពាក្យដូចគ្នាមានន័យខុសគ្នា នឹងអាស្រ័យលើសម្លេងសំឡេងរបស់យើង។
✅ សូមគិតអំពីសំណួរខ្លះដែលអ្នកបានមានចុងពេលថ្មីៗនេះ។ មានប៉ុន្មាននៃការសន្ទនាដែលពិបាកសម្រាប់កុំព្យូទ័រយល់ ដោយសារត្រូវការបរិបទ?
ការយល់ភាសា ដែលត្រូវបានគេហៅថាយល់ភាសាធម្មជាតិ គឺជាសមាសភាពក្នុងវិស័យបញ្ញាសិប្បនិម្មិតដែលហៅថាប្រព័ន្ធដំណើរការភាសាធម្មជាតិ (NLP) ហើយវាគ្របដណ្តប់ពីការយល់អត្ថន័យ អ្នកព្យាយាមយល់លម្អិតពីពាក្យឬវេយ្យាករណ៏។ ប្រសិនបើអ្នកប្រើជំនួយសំឡេងដូចជា Alexa ឬ Siri អ្នកបានប្រើសេវាកម្មការយល់ភាសា។ វាជាសេវាកម្ម AI ផ្ទាំងក្រោយដែលបម្លែង "Alexa, លេងអាល់ប៊ុមថ្មីចុងក្រោយដោយ Taylor Swift" ទៅកូនស្រីរបស់ខ្ញុំកំពុងរុញរាំក្នុងបន្ទប់នៅតាមចំកំពូលតន្រ្តីចំណូលចិត្តរបស់នាង។
💁 កុំព្យូទ័រមិនថាពួកវាបានឈានទៅឆ្ងាយប៉ុនណាក៏ដោយ វានៅតែត្រូវមានចម្ងាយវែងមិនទាន់យល់អត្ថបទពេញលេញទេ។ នៅពេលដែលយើងនិយាយអំពីការយល់ភាសាជាមួយកុំព្យូទ័រ យើងមិនមានន័យថាវាជាការទំនាក់ទំនងដូចមនុស្សមែនទេ តែយើងមានន័យថាប្រមួលយកពាក្យខ្លះៗហើយដកស្រង់ព័ត៌មានសំខាន់ៗដែលត្រូវការ។
ជាមនុស្ស យើងយល់ភាសាបានដោយគ្មានការគិតក្នុងចិត្តប្រាកដណាស់។ ប្រសិនបើខ្ញុំសួរមនុស្សម្នាក់ម្នាក់ផ្សេងទៀតថា "លេងអាល់ប៊ុមថ្មីចុងក្រោយដោយ Taylor Swift" ពួកគេនឹងយល់ភ្លាមៗថាខ្ញុំមានន័យអ្វី។ តែសម្រាប់កុំព្យូទ័រពិបាកជាងនេះ វាត្រូវតែយកពាក្យដែលបានបម្លែងពីសំឡេងទៅអត្ថបទ ហើយបញ្ចេញព័ត៌មានដូចខាងក្រោម៖
- ត្រូវតែចាក់តន្រ្តី
- តន្រ្តីត្រូវតែជារបស់តារាចម្រៀង Taylor Swift
- តន្រ្តីជាអាល់ប៊ុមមួយដែលមានច្រៀងជាច្រើនតាមលំដាប់
- Taylor Swift មានអាល់ប៊ុមជាច្រើន ដូច្នេះវាត្រូវតែតម្រៀបតាមលំដាប់ពេលវេលា ហើយកំណត់អាល់ប៊ុមថ្មីចុងក្រោយជាគោលដៅ
✅ សូមគិតអំពីវាក្យបញ្ជាទៀតដែលអ្នកបាននិយាយពេលធ្វើសំណើអ្នកផ្នែកទំនាក់ទំនង រួមទាំងការបញ្ជាទិញកាហ្វេ ឬសូមគ្រួសារដើម្បីផ្តល់អ្វីមួយ។ ព្យាយាមបំបែកវាចេញជាធាតុព័ត៌មានដែលកុំព្យូទ័រត្រូវគឺមកដកស្រង់ដោយដើម្បីយល់វេយ្យាករណ៍។
ម៉ូដែលការយល់ភាសា គឺជាម៉ូដែល AI ដែលបានបណ្តុះបណ្តាលដើម្បីដកព័ត៌មានសំខាន់ៗពីភាសា ហើយបន្ទាប់មកបានបណ្តុះបណ្តាលសម្រាប់បេសកកម្មជាក់លាក់ ដោយប្រើបច្ចេកទេសបង្វឹកប្តូរ (transfer learning) ដូចដែលអ្នកបានបណ្តុះម៉ូដែល Custom Vision ដោយប្រើតំបន់រូបភាពតិចតួច។ អ្នកអាចយកម៉ូដែលមួយ បន្ទាប់មកបណ្តុះបណ្តាលវាជាមួយអត្ថបទដែលអ្នកចង់ឱ្យវាយល់។
បង្កើតម៉ូដែលការយល់ភាសា
អ្នកអាចបង្កើតម៉ូដែលការយល់ភាសាដោយប្រើ LUIS ដែលជាសេវាកម្មការយល់ភាសាមួយពីមីក្រូសូហ្វ ដែលជាផ្នែកមួយនៃសេវាកម្មជំនាញស្គាល់។
បេសកកម្ម - បង្កើតធនធានអ្នកនិពន្ធ
ដើម្បីប្រើ LUIS អ្នកត្រូវបង្កើតធនធានអ្នកនិពន្ធមួយ។
-
ប្រើពាក្យបញ្ជាខាងក្រោមដើម្បីបង្កើតធនធានអ្នកនិពន្ធក្នុងក្រុមធនធាន
smart-timerរបស់អ្នក៖az cognitiveservices account create --name smart-timer-luis-authoring \ --resource-group smart-timer \ --kind LUIS.Authoring \ --sku F0 \ --yes \ --location <location>ជំនួស
<location>ជាមួយទីតាំងដែលអ្នកបានប្រើនៅពេលបង្កើតក្រុមធនធាន។⚠️ LUIS មិនមាននៅក្នុងតំបន់ទាំងអស់ទេ ដូច្នេះប្រសិនបើអ្នកទទួលបានកំហុសដូចខាងក្រោម៖
InvalidApiSetId: The account type 'LUIS.Authoring' is either invalid or unavailable in given region.ជ្រើសរើសតំបន់ផ្សេងទៀត។
នេះនឹងបង្កើតធនធាន LUIS អ្នកនិពន្ធជាឥតគិតថ្លៃ។
បេសកកម្ម - បង្កើតកម្មវិធីការយល់ភាសា
-
បើកផ្ទាំងគេហទំព័រ LUIS នៅ luis.ai ក្នុងកម្មវិធីរុករករបស់អ្នក ភ្ជាប់ចូលដោយគណនីដែលអ្នកកំពុងប្រើសម្រាប់ Azure។
-
អនុវត្តតាមការណែនាំនៅលើប្រអប់ដើម្បីជ្រើសរើសការជាវ Azure របស់អ្នក បន្ទាប់មកជ្រើសរើសធនធាន
smart-timer-luis-authoringដែលអ្នកទើបបង្កើត។ -
ពីបញ្ជី កម្មវិធីសន្ទនា ជ្រើសយកប៊ូតុង កម្មវិធីថ្មី ដើម្បីបង្កើតកម្មវិធីថ្មី។ ឈ្មោះកម្មវិធីថ្មីហៅថា
smart-timerហើយកំណត់ វប្បធម៌ ជាភាសារបស់អ្នក។💁 មានវាលសម្រាប់ធនធានព្យាករណ៍។ អ្នកអាចបង្កើតធនធានទីពីរមួយសម្រាប់ព្យាករណ៍ ប៉ុន្តែធនធានអ្នកនិពន្ធឥតគិតថ្លៃអនុញ្ញាតឱ្យធ្វើព្យាករណ៍ 1,000 ដងក្នុងមួយខែ ដែលគួរតែគ្រប់គ្រាន់សម្រាប់ការអភិវឌ្ឍ ដូច្នេះអ្នកអាចទុកវាបោស។
-
អានតាមមគ្គុទេសក៍ដែលបង្ហាញបន្ទាប់ពីបង្កើតកម្មវិធី ដើម្បីយល់ពីជំហានដែលអ្នកត្រូវធ្វើដើម្បីបណ្តុះម៉ូដែលការយល់ភាសា។ បិទមគ្គុទេសក៍នេះពេលអ្នកបានធ្វើរួច។
ចេតនា និងអង្គធាតុ
ការយល់ភាសាត្រូវបានគោលគ្រប់គ្រងដោយ ចេតនា និង អង្គធាតុ។ ចេតនាគឺជាទិសដៅនៃពាក្យ ដូចជា លេងតន្រ្តី កំណត់ម៉ោង ឬបញ្ជាទិញម្ហូប។ អង្គធាតូមានន័យថាចេតនាអំពីអ្វី ដូចជា អាល់ប៊ុម រយៈពេលម៉ោង ឬប្រភេទម្ហូប។ ឃ្លាមួយដែលម៉ូដែលវាយល់ គួរតែមានចេតនាយ៉ាងហោចណាស់មួយ ហើយអាចមានអង្គធាតុមួយចំនួន ឬច្រើន។
ឧទាហរណ៍ខ្លះ៖
| ឃ្លា | ចេតនា | អង្គធាតុ |
|---|---|---|
| "លេងអាល់ប៊ុមថ្មីចុងក្រោយដោយ Taylor Swift" | លេងតន្រ្តី | អាល់ប៊ុមថ្មីចុងក្រោយដោយ Taylor Swift |
| "កំណត់ម៉ោង 3 នាទី" | កំណត់ម៉ោង | 3 នាទី |
| "បោះបង់ម៉ោងរបស់ខ្ញុំ" | បោះបង់ម៉ោង | គ្មាន |
| "បញ្ជាទិញភីហ្សាជំរាប៣និងសាឡាដ Caesar មួយចាន" | បញ្ជាទិញម្ហូប | ភីហ្សាជំរាប៣, សាឡាដ Caesar |
✅ ជាមួយឃ្លាដែលអ្នកបានគិតមុននេះ អ្វីទៅជាចេតនា និងអង្គធាតុ ក្នុងឃ្លានោះ?
ដើម្បីបណ្តុះ LUIS ជាមួយវា អ្នកត្រូវដំបូងកំណត់អង្គធាតុ។ អង្គធាតុទាំងនេះអាចជាបញ្ជីមួយដែលកំណត់រួច ឬរៀនពីអត្ថបទ។ ឧទាហរណ៍ អ្នកអាចផ្តល់បញ្ជីម្ហូបដែលអាចរកបានពីម៉ឺនុយរបស់អ្នក រួមជាមួយបម្លែងវា (ឬពាក្យស្រដៀង) នៃពាក្យនីមួយៗ ដូចជា egg plant និង aubergine ជាបម្លែងនៃ aubergine។ លUIS មានអង្គធាតុកំណត់រួចដែលអាចប្រើបានដូចជា លេខ និងទីតាំង។
សម្រាប់កំណត់ម៉ោង អ្នកអាចមានអង្គធាតុមួយសម្រាប់ឯកតារយៈពេល (នាទី ឬវិនាទី) និងមួយសម្រាប់លេខនៃនាទី ឬវិនាទី។ ក្នុងមួយឯកតានីមួយៗ អាចមានបម្លែងជាច្រើនដើម្បីគ្របដណ្តប់ទាំងមុខនិយាយរួម និងពហុប្រាប់ ដូចជា minute និង minutes។
បន្ទាប់ពីកំណត់អង្គធាតុរួច អ្នកបង្កើតចេតនា។ វាត្រូវបានរៀនដោយម៉ូដែលដោយផ្អែកលើឧទាហរណ៍ឃ្លាដែលអ្នកផ្តល់ (ហៅថា utterances)។ ឧទាហរណ៍ សម្រាប់ចេតនាកំណត់ម៉ោង set timer អ្នកអាចផ្តល់ឃ្លាដូចខាងក្រោម៖
set a 1 second timerset a timer for 1 minute and 12 secondsset a timer for 3 minutesset a 9 minute 30 second timer
បន្ទាប់មកអ្នកប្រាប់ LUIS ថាផ្នែកណានៃឃ្លាទាំងនេះដែលបញ្ជូនទៅអង្គធាតុ៖
ឃ្លា set a timer for 1 minute and 12 seconds មានចេតនា set timer។ វាក៏មាន 2 អង្គធាតុដែលមាន 2 តម្លៃមួយៗ៖
| រយៈពេល | ឯកតា | |
|---|---|---|
| 1 minute | 1 | minute |
| 12 seconds | 12 | second |
ដើម្បីបណ្តុះម៉ូដែលល្អ អ្នកត្រូវការឧទាហរណ៍ឃ្លាជាច្រើន ដើម្បីគ្របដណ្តប់វិធីសាស្ត្រផ្សេងៗនៃការស្នើសុំនូវអ្វីមួយដូចៗគ្នា។
💁 ដូចជាមួយម៉ូដែល AI ប៉ុន្មានទិន្នន័យនិងទិន្នន័យត្រឹមត្រូវប៉ុណ្ណា ដែលអ្នកប្រើសម្រាប់បណ្តុះបណ្តាល ម៉ូដែលនឹងមានគុណភាពល្អប៉ុណ្ណា។
✅ សូមគិតអំពីវិធីផ្សេងៗដែលអ្នកអាចស្នើអំពីអ្វីមួយ និងរំពឹងថាមនុស្សម្នាក់នឹងយល់។
បេសកកម្ម - បន្ថែមអង្គធាតុទៅម៉ូដែលការយល់ភាសា
សម្រាប់ម៉ោង អ្នកត្រូវបន្ថែមអង្គធាតុ 2 គឺមួយសម្រាប់ឯកតារយៈពេល (នាទី ឬវិនាទី) និងមួយសម្រាប់លេខនៃនាទី ឬវិនាទី។
អ្នកអាចរកការណែនាំដើម្បីប្រើផ្ទាំងគេហទំព័រ LUIS ក្នុងឯកសារ Quickstart: Build your app in LUIS portal documentation on Microsoft docs។
-
ពីផ្ទាំងគេហទំព័រ LUIS ជ្រើស Entities ហើយបន្ថែមអង្គធាតុ number ដែលបានកំណត់រួច ដោយចុចប៊ូតុង Add prebuilt entity ហើយជ្រើស number ពីបញ្ជី។
-
បង្កើតអង្គធាតុថ្មីសម្រាប់ឯកតាពេលវេលា ដោយប្រើប៊ូតុង Create។ ឈ្មោះអង្គធាតុ
time unitហើយកំណត់ប្រភេទជា List។ បន្ថែមតម្លៃminuteនិងsecondទៅក្នុងបញ្ជី Normalized values ហើយបន្ថែមមុខនិយាយទាំងឯកតា និងពហុត្រូវទៅក្នុងបញ្ជី synonyms។ ចុចreturnបន្ទាប់ពីបន្ថែមមុខនិយាយនីមួយៗដើម្បីបន្ថែមវាចូលក្នុងបញ្ជី។តម្លៃធម្មតា មុខនិយាយ minute minute, minutes second second, seconds
បេសកកម្ម - បន្ថែមចេតនាទៅម៉ូដែលការយល់ភាសា
-
ពីផ្ទាំង Intents ចុចប៊ូតុង Create ដើម្បីបង្កើតចេតនាថ្មី។ ឈ្មោះចេតនា
set timer។ -
ក្នុងឧទាហរណ៍ សូមបញ្ចូលវិធីផ្សេងៗដើម្បីកំណត់ម៉ោងប្រើរយៈពេលនាទី វិនាទី និងរួមបញ្ចូលគ្នា។ ឧទាហរណ៍អាចមាន៖
set a 1 second timerset a 4 minute timerset a four minute six second timerset a 9 minute 30 second timerset a timer for 1 minute and 12 secondsset a timer for 3 minutesset a timer for 3 minutes and 1 secondset a timer for three minutes and one secondset a timer for 1 minute and 1 secondset a timer for 30 secondsset a timer for 1 second
ផ្សំចំនួនជាអក្សរនិងលេខគណនាដើម្បីឱ្យម៉ូដែលរៀនទទួលបានទាំងពីរ។
-
នៅពេលអ្នកបញ្ចូលឧទាហរណ៍នីមួយៗ LUIS នឹងចាប់ផ្តើមរកឃើញអង្គធាតុ ហើយនឹងគូរសំគាល់ហើយដាក់ស្លាកអំពីអង្គធាតុដែលបានស្គាល់។
បេសកកម្ម - បណ្តុះ និងសាកល្បងម៉ូដែល
-
បន្ទាប់ពីកំណត់អង្គធាតុនិងចេតនា អ្នកអាចបណ្តុះម៉ូដែលដោយប្រើប៊ូតុង Train នៅម៉ឺនុយខាងលើ។ ជ្រើសប៊ូតុងនេះ ហើយម៉ូដែលនឹងបណ្តុះក្នុងរយៈពេលប៉ុន្មានវិនាទី។ ប៊ូតុងនឹងជារឺសពណ៌ប្រផេះពេលបណ្តុះ ហើយអាចប្រើបានវិញនៅពេលបញ្ចប់។
-
ជ្រើសប៊ូតុង Test ពីម៉ឺនុយខាងលើ ដើម្បីសាកល្បងម៉ូដែលការយល់ភាសា។ បញ្ចូលអត្ថបទដូចជា
set a timer for 5 minutes and 4 secondsហើយចុច return។ ឃ្លានឹងបង្ហាញនៅក្នុងប្រអប់ក្រោមប្រអប់អត្ថបទដែលអ្នកបានវាយបញ្ចូល ហើយក្រោមនោះគឺជាចេតនាដែលទទួលបានពិន្ទុខ្ពស់បំផុត (top intent) ដែលគួរតែជាចេតនាset timer។ ឈ្មោះចេតនានឹងតាមដានដោយភាគរយនៃលទ្ធផលល្អ។ -
ជ្រើសជម្រើស Inspect ដើម្បីមើលបំបែកលទ្ធផល។ អ្នកនឹងឃើញចេតនាដែលបានទទួលពិន្ទុខ្ពស់ជាមួយភាគរយបំផុត ជាមួយនឹងបញ្ជីអង្គធាតុដែលបានស្គាល់។
-
បិទផ្ទាំង Test ពេលអ្នកបានសាកល្បងរួច។
បេសកកម្ម - បោះពុម្ពផ្សាយម៉ូដែល
ដើម្បីប្រើម៉ូដែលនេះពីក្នុងកូដ អ្នកត្រូវបោះពុម្ពផ្សាយវា។ នៅពេលបោះពុម្ពផ្សាយពី LUIS អ្នកអាចបោះពុម្ពផ្សាយទៅបរិយាកាស staging សម្រាប់ការសាកល្បង ឬបរិយាកាសផលិតសម្រាប់ចេញផ្សាយពេញលេញ។ នៅក្នុងមេរៀននេះ បរិយាកាស staging គឺគ្រប់គ្រាន់។
-
ពីបណ្តាញ LUIS portal ជ្រើសរើសប៊ូតុង Publish ពីម៉ឺនុយខាងលើ។
-
ធ្វើឱ្យប្រាកដថា បានជ្រើសរើស Staging slot រួចជ្រើសរើស Done។ អ្នកនឹងមើលឃើញការជូនដំណឹងពេលដែលកម្មវិធីត្រូវបានផ្សាយ។
-
អ្នកអាចសាកល្បងចំណែកនេះផ្អែកលើ curl។ ដើម្បីបង្កើតពាក្យបញ្ជា curl អ្នកត្រូវការតម្លៃបីគឺ - ចំណុចបញ្ចប់ (endpoint), លេខសម្គាល់កម្មវិធី (App ID) និងកូនសោ API។ តម្លៃទាំងនេះអាចចូលដំណើរការបានពីហៅថ្មី MANAGE ដែលអាចជ្រើសរាបពីម៉ឺនុយខាងលើ។
-
ពីផ្នែក Settings ចំលង App ID
-
ពីផ្នែក Azure Resources ជ្រើស Authoring Resource, ហើយចំលង Primary Key និង Endpoint URL
-
-
សូមដំណើរការពាក្យបញ្ជា curl ខាងក្រោមក្នុងពាក្យបញ្ជា Command Prompt ឬ Terminal របស់អ្នក៖
curl "<endpoint url>/luis/prediction/v3.0/apps/<app id>/slots/staging/predict" \ --request GET \ --get \ --data "subscription-key=<primary key>" \ --data "verbose=false" \ --data "show-all-intents=true" \ --data-urlencode "query=<sentence>"ជំនួស
<endpoint url>ជាមួយ URL ចំណុចបញ្ចប់ពីព័ត៌មាន Azure Resources។ជំនួស
<app id>ជាមួយ App ID ពីផ្នែក Settings។ជំនួស
<primary key>ជាមួយ Primary Key ពីផ្នែក Azure Resources។ជំនួស
<sentence>ជាមួយវចនាធិប្បាយដែលអ្នកចង់សាកល្បង។ -
លទ្ធផលនៃការហៅនេះនឹងជាឯកសារ JSON ដែលពិពណ៌នាពីសំណួរ, ចេតនាកំពូល, និងបញ្ជីអង្គភាពត្រូវបានបំបែកតាមប្រភេទ។
{ "query": "set a timer for 45 minutes and 12 seconds", "prediction": { "topIntent": "set timer", "intents": { "set timer": { "score": 0.97031575 }, "None": { "score": 0.02205793 } }, "entities": { "number": [ 45, 12 ], "time-unit": [ [ "minute" ], [ "second" ] ] } } }JSON ខាងលើមកពីការសំណួរជាមួយ
set a timer for 45 minutes and 12 seconds៖set timerគឺជាចេតនាកំពូលដោយមានប្រភេទតម្លៃ 97%។- មានប្រុងចំនួនពីរដែលត្រូវបានស្គាល់,
45និង12។ - មានប្រុងតម្លៃម៉ោងពីរដែលត្រូវបានស្គាល់,
minuteនិងsecond។
ប្រើម៉ូឌែលអស់ក្នុងការយល់ភាសា
ពេលដែលត្រូវបានផ្សាយហើយ ម៉ូឌែល LUIS អាចត្រូវបានហៅពីកូដ។ ក្នុងមេរៀនមុន អ្នកបានប្រើ IoT Hub ដើម្បីគ្រប់គ្រងការប្រាស្រ័យទាក់ទងជាមួយសេវាកម្ម cloud ដោយជញ្ជូនទិន្នន័យ telemetry និងស្តាប់ការបញ្ជា។ ពីនេះជា asynchronous ល្អណាស់ - ពេលដែលបានផ្ញើ telemetry កូដរបស់អ្នកមិនចាំរង់ចាំការផ្លាស់ប្តូរ ក៏បើសេវាកម្ម cloud បានផ្អាក អ្នកនឹងមិនដឹង។
សម្រាប់ដៃម៉ាញលឿន (smart timer) យើងចង់ស្នើឆ្លើយតបបន្ទាន់ ដូច្នេះអ្នកអាចប្រាប់អ្នកប្រើថា ដៃម៉ាញបានដាក់ហើយ ឬព្រមានថាសេវាកម្ម cloud មិនអាចប្រើបាន។ ដើម្បីធ្វើបែបនេះ ឧបករណ៍ IoT របស់យើងនឹងហៅវេបសាយចំណុចបញ្ចប់ដោយផ្ទាល់ ជំនួសការ ទុកចិត្តលើ IoT Hub។
ជំនួសហៅ LUIS ពីឧបករណ៍ IoT អ្នកអាចប្រើកូដ serverless ជាមួយប្រភេទ trigger ផ្សេងៗមួយគឺជា HTTP trigger។ វាអនុញ្ញាតឲ្យកម្មវិធីអនុគមន៍របស់អ្នកស្តាប់សំណើ REST ហើយឆ្លើយតបជាមួយវា។ អនុគមន៍នេះនឹងជាចំណុចបញ្ចប់ REST ដែលឧបករណ៍អ្នកអាចហៅ។
💁 បើទោះបីអ្នកអាចហៅ LUIS ដោយផ្ទាល់ពីឧបករណ៍ IoT អ្នកកាន់តែល្អប្រើកូដបែប serverless។ ដូច្នេះនៅពេលមានបំណងផ្លាស់ប្ដូរកម្មវិធី LUIS ដែលអ្នកហៅ ដូចជាពេលដែលអ្នកបណ្ដុះម៉ូឌែលល្អជាងមុន ឬបណ្ដុះម៉ូឌែលភាសាផ្សេង អ្នកគ្រាន់តែត្រូវបន្ទាន់សម័យកូដ cloud តែប៉ុណ្ណោះ មិនចាំបាច់ដាក់កូដឡើងវិញក្នុងឧបករណ៍ IoT ច្រើនរាប់ពាន់ឬលានគ្រឿងឡើយ។
ប៉ះប៉ង - បង្កើតកម្មវិធី serverless functions
-
បង្កើតកម្មវិធី Azure Functions ដែលមានឈ្មោះ
smart-timer-triggerហើយបើកវានៅក្នុង VS Code -
បន្ថែម HTTP trigger ទៅកម្មវិធីនេះឈ្មោះ
speech-triggerដោយប្រើពាក្យបញ្ជាខាងក្រោមពី terminal ក្នុង VS Code៖func new --name text-to-timer --template "HTTP trigger"នេះនឹងបង្កើត HTTP trigger មានឈ្មោះ
text-to-timer។ -
សាកល្បង HTTP trigger ដោយរត់កម្មវិធី functions app។ ពេលវារត់ អ្នកនឹងឃើញចំណុចបញ្ចប់បង្ហាញនៅលើលទ្ធផល៖
Functions: text-to-timer: [GET,POST] http://localhost:7071/api/text-to-timerសាកល្បងនេះដោយផ្ទុក URL http://localhost:7071/api/text-to-timer នៅក្នុងកម្មវិធី រុករកគេហទំព័រ។
This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.
ប៉ះប៉ង - ប្រើម៉ូឌែលអស់ក្នុងការយល់ភាសា
-
SDK សម្រាប់ LUIS មាននៅតាម ប៉ែគ Pip។ បន្ថែមបន្ទាត់ខាងក្រោមចូលទៅ ឯកសារ
requirements.txtដើម្បីបន្ថែមការពឹងពាក់លើប៉ែគនេះ៖azure-cognitiveservices-language-luis -
ធ្វើឱ្យ VS Code terminal មាន virtual environment នៅក្នុងសកម្មភាព ហើយរត់ពាក្យបញ្ជាខាងក្រោមដើម្បីដំឡើងប៉ែគ Pip៖
pip install -r requirements.txt💁 បើទទួលបានកំហុស អ្នកប្រហែលជាត្រូវឡើងកម្រិត pip ដោយប្រើពាក្យបញ្ជាខាងក្រោម៖
pip install --upgrade pip -
បន្ថែមបញ្ចីថ្មីឲ្យឯកសារ
local.settings.jsonសម្រាប់ API Key, Endpoint URL និង App ID របស់ LUIS ពីប៊ូតុង MANAGE នៅក្នុង portal LUIS:"LUIS_KEY": "<primary key>", "LUIS_ENDPOINT_URL": "<endpoint url>", "LUIS_APP_ID": "<app id>"ជំនួស
<endpoint url>ជាមួយ URL ចំណុចបញ្ចប់ពីផ្នែក Azure Resources នៃប៊ូតុង MANAGE។ វានឹងមានរូបរាងhttps://<location>.api.cognitive.microsoft.com/។ជំនួស
<app id>ជាមួយ App ID ពីផ្នែក Settings នៃប៊ូតុង MANAGE។ជំនួស
<primary key>ជាមួយ Primary Key ពីផ្នែក Azure Resources នៃប៊ូតុង MANAGE។ -
បន្ថែមកូដទីមួយដោយបញ្ចូលសេចក្ដីដូចខាងក្រោមក្នុងឯកសារ
__init__.py៖import json import os from azure.cognitiveservices.language.luis.runtime import LUISRuntimeClient from msrest.authentication import CognitiveServicesCredentialsកូដនេះនាំចូលបណ្ណាល័យប្រព័ន្ធមួយចំនួន និងបណ្ណាល័យសម្រាប់ទំនាក់ទំនងជាមួយ LUIS។
-
លុបអត្ថបទនៅក្នុងមុខងារ
mainហើយបន្ថែមកូដខាងក្រោម៖luis_key = os.environ['LUIS_KEY'] endpoint_url = os.environ['LUIS_ENDPOINT_URL'] app_id = os.environ['LUIS_APP_ID'] credentials = CognitiveServicesCredentials(luis_key) client = LUISRuntimeClient(endpoint=endpoint_url, credentials=credentials)កូដនេះផ្ទុកតម្លៃដែលអ្នកបានបន្ថែមក្នុងឯកសារ
local.settings.jsonរបស់កម្មវិធី LUIS របស់អ្នក បង្កើតវត្ថុ credentials ជាមួយ API key របស់អ្នក ហើយបង្កើត client LUIS ដើម្បីទំនាក់ទំនងជាមួយកម្មវិធី LUIS របស់អ្នក។ -
HTTP trigger នេះនឹងត្រូវហៅដោយផ្ញើអត្ថបទសម្រាប់យល់ជា JSON ដែលអត្ថបទទាំងនោះនៅក្នុងគុណលក្ខណៈហៅ
text។ កូដខាងក្រោមនាំចេញតម្លៃពីរូបរាងនៃសំណើ HTTP ហើយកត់ត្រាទៅកុងសូល។ សូមបន្ថែមកូដនេះក្នុងមុខងារmain៖req_body = req.get_json() text = req_body['text'] logging.info(f'Request - {text}') -
សំណើព្យាករត្រូវបានទាមទារពី LUIS ដោយបញ្ជូនសំណើព្យាករជាឯកសារ JSON ដែលមានអត្ថបទត្រូវព្យាករ។ បង្កើតវាដោយកូដខាងក្រោម៖
prediction_request = { 'query' : text } -
បន្ទាប់មកអាចដាក់សំណើនេះទៅ LUIS ដោយប្រើ staging slot ដែលកម្មវិធីរបស់អ្នកត្រូវបានផ្សាយទៅ៖
prediction_response = client.prediction.get_slot_prediction(app_id, 'Staging', prediction_request) -
សំណើប៉ាន់ប្រមាណបង្ហាញចេតនាកំពូល (top intent) គឺជាចេតនាដែលមានពិន្ទុព្យាករណ៍ខ្ពស់បំផុត ជាមួយគ្នានឹងខ្សែអង្គភាព។ ប្រសិនបើចេតនាកំពូលគឺជា
set timer, អ្នកអាចអានអង្គភាពដើម្បីទាញយកពេលវេលាសម្រាប់ដៃម៉ាញ៖if prediction_response.prediction.top_intent == 'set timer': numbers = prediction_response.prediction.entities['number'] time_units = prediction_response.prediction.entities['time unit'] total_seconds = 0អង្គភាព
numberនឹងជាអារេនៃលេខ។ ឧទាហរណ៍ បើអ្នកថា "Set a four minute 17 second timer.", អារេnumberនឹងមានពេញត្រឹមពីរចំនួនគឺ ៤ និង ១៧។អង្គភាព
time unitនឹងជាអារេនៃអារេនៃស្នូលអក្សរ ដែលភាគីនីមួយៗជាអារេស្នូលអក្សរនៅក្នុងអារេ។ ឧទាហរណ៍ បើអ្នកថា "Set a four minute 17 second timer.", អារេtime unitនឹងមាន ២អារេ ដែលមានតម្លៃតែមួយនៅក្នុងនីមួយៗគឺ['minute']និង['second']។JSON នៃអង្គភាពទាំងនេះសម្រាប់ "Set a four minute 17 second timer." គឺជា៖
{ "number": [4, 17], "time unit": [ ["minute"], ["second"] ] }កូដនេះក៏កំណត់តម្លៃគិតសរុបនៃពេលវេលាដៃម៉ាញជាវិនាទី។ តម្លៃនេះនឹងគិតបញ្ចូលតាមតម្លៃពីអង្គភាពនេះ។
-
អង្គភាពមិនត្រូវបានភ្ជាប់ ដែលទើបអាចយកអត្រាពីពួកវា។ វានឹងធ្វើជាតំបន់ទិសដែលបាននិយាយ ដូច្នេះទីតាំងក្នុងអារេអាចប្រើដើម្បីកំណត់នូវលេខណាមួយត្រូវត្វីជាមួយនឹងតុកលក្ខណៈពេលវេលា។ ឧទាហរណ៍៖
- "Set a 30 second timer" - នេះមិនមានលេខតែមួយគឺ
30និងមួយតុកsecondដូច្នេះលេខតែមួយនឹងត្រូវគ្នាជាមួយតុកតែមួយ។ - "Set a 2 minute and 30 second timer" - នេះមានពីរលេខ គឺ
2និង30និងពីរតុក គឺminuteនិងsecondដូច្នេះលេខទីមួយនឹងសម្រាប់តុកទីមួយ (2 នាទី) និងលេខទីពីរសម្រាប់តុកទីពីរ (30 វិនាទី)។
កូដខាងក្រោមនេះទាញកំណត់ចំនួនធាតុនៅក្នុងអង្គភាពលេខ ហើយប្រើវាដើម្បីយកធាតុទីមួយពីគ្រប់អារេ ហើយបន្ទាប់មកធាតុទីពីរ និងអញ្ចឹងតទៅ។ បន្ថែមវានៅក្នុង
ifblock។for i in range(0, len(numbers)): number = numbers[i] time_unit = time_units[i][0]សម្រាប់ "Set a four minute 17 second timer." វានឹងចាប់ផ្តើមដោយម្តងពីរ ដោយផ្ដល់តម្លៃខាងក្រោម៖
ចំនួនជុំវិញ numbertime_unit0 4 minute 1 17 second - "Set a 30 second timer" - នេះមិនមានលេខតែមួយគឺ
-
ក្នុងជុំវិញនេះ សូមប្រើលេខ និងតុកពេលវេលាដើម្បីគណនាពេលវេលាសរុបសម្រាប់ដៃម៉ាញ ដោយបន្ថែម 60 វិនាទីសម្រាប់ម каждую минуту និងលេខវិនាទីសម្រាប់វិញទេ។
if time_unit == 'minute': total_seconds += number * 60 else: total_seconds += number -
ក្រៅជុំវិញនេះ តាមអង្គភាព សូមកត់ត្រាពេលវេលាសរុបសម្រាប់ដៃម៉ាញ:
logging.info(f'Timer required for {total_seconds} seconds') -
ចំនួនវិនាទីទាំងអស់ ត្រូវត្រឡប់ពីមុខងារជាលទ្ធផល HTTP។ នៅចុងប្លុក
if, បន្ថែមកូដខាងក្រោម៖payload = { 'seconds': total_seconds } return func.HttpResponse(json.dumps(payload), status_code=200)កូដនេះបង្កើតទម្រង់អត្ថបទផ្ទុកចំនួនវិនាទីសរុបសម្រាប់ដៃម៉ាញ បំលែងវាទៅជាសួត JSON ហើយបញ្ចូនវាជាលទ្ធផល HTTP ជាមួយកូដស្ថានភាព ២០០ ដែលមានន័យថា ការហៅបានជោគជ័យ។
-
ចុងបញ្ចប់ ក្រៅ
ifblock ដោះស្រាយករណីដែលចេតនាមិនត្រូវបានស្គាល់ដោយត្រឡប់កូដកំហុស៖return func.HttpResponse(status_code=404)404 ជាកូដស្ថានភាពសម្រាប់ not found។
-
រត់កម្មវិធី functions app ហើយសាកល្បងវាដោយប្រើ curl។
curl --request POST 'http://localhost:7071/api/text-to-timer' \ --header 'Content-Type: application/json' \ --include \ --data '{"text":"<text>"}'ជំនួស
<text>ជាមួយអត្ថបទនៃសំណើរបស់អ្នក, ឧទាហរណ៍set a 2 minutes 27 second timer។អ្នកនឹងឃើញចេញលទ្ធផលខាងក្រោមពីកម្មវិធី functions app៖
Functions: text-to-timer: [GET,POST] http://localhost:7071/api/text-to-timer For detailed output, run func with --verbose flag. [2021-06-26T19:45:14.502Z] Worker process started and initialized. [2021-06-26T19:45:19.338Z] Host lock lease acquired by instance ID '000000000000000000000000951CAE4E'. [2021-06-26T19:45:52.059Z] Executing 'Functions.text-to-timer' (Reason='This function was programmatically called via the host APIs.', Id=f68bfb90-30e4-47a5-99da-126b66218e81) [2021-06-26T19:45:53.577Z] Timer required for 147 seconds [2021-06-26T19:45:53.746Z] Executed 'Functions.text-to-timer' (Succeeded, Id=f68bfb90-30e4-47a5-99da-126b66218e81, Duration=1750ms)ការហៅចូល curl នឹងតបតាមខាងក្រោម៖
HTTP/1.1 200 OK Date: Tue, 29 Jun 2021 01:14:11 GMT Content-Type: text/plain; charset=utf-8 Server: Kestrel Transfer-Encoding: chunked {"seconds": 147}ចំនួនវិនាទីសម្រាប់ដៃម៉ាញនេះមាននៅក្នុងតម្លៃ
"seconds"។
💁 អ្នកអាចរកកូដនេះក្នុងថត code/functions។
ប៉ះប៉ង - ធ្វើឱ្យមុខងាររបស់អ្នកមានស្រាប់ដល់ឧបករណ៍ IoT របស់អ្នក
-
ដើម្បីឲ្យឧបករណ៍ IoT របស់អ្នកហៅចំណុចបញ្ចប់ REST នេះ វាត្រូវបានដឹង URL។ ពេលអ្នកធ្វើការចូលមុន សូមប្រើ
localhostដែលជាជំហានពង្រីកសម្រាប់ចូលចំណុចបញ្ចប់ REST នៅលើគ្រឿងបរិក្ខារដូចខ្លួន។ ដើម្បីឲ្យឧបករណ៍ IoT របស់អ្នកអាចចូលដំណើរការ ទាមទារអ្នកផ្សព្វផ្សាយទៅ cloud ឬទទួល IP address របស់អ្នកសម្រាប់ចូលដំណើរការនៅក្នុងស្រុក។⚠️ បើអ្នកកំពុងប្រើ Wio Terminal វាងាយស្រួលដំណើរការ functions app នៅក្នុងតំបន់ស្រុក ដោយសារតែមានការពឹងផ្អែកលើបណ្ណាល័យដែលបង្ខំឱ្យអ្នកមិនអាចដាក់ផ្ទុក functions app ដូចពេលមុនទៀតទេ។ ដំណើរការ functions app នៅក្នុងតំបន់ស្រុក ហើយចូលដំណើរការតាម IP address កុំព្យូទ័ររបស់អ្នក។ បើអ្នកចង់ដាក់ផ្ទុកទៅ cloud ខ្សែព័ត៌មាននឹងត្រូវបានផ្ដល់នៅក្នុងមេរៀនបន្តបន្ទាប់។
-
ផ្សាយកម្មវិធី Functions app - អនុវត្តតាមនីតិវិធីនៅក្នុងមេរៀនខាងមុនដើម្បីផ្សាយ functions app ទៅ cloud។ បន្ទាប់ពីផ្សាយកម្រិត URL នឹងមានរូបរាង
https://<APP_NAME>.azurewebsites.net/api/text-to-timerដែល<APP_NAME>ជាឈ្មោះ functions app របស់អ្នក។ សូមធ្វើឲ្យផ្សាយតម្រូវការកំណត់ក្នុងតំបន់ស្រុករបស់អ្នកដែរ។នៅពេលធ្វើការជាមួយ HTTP triggers វាត្រូវបានរក្សាសិទ្ធិដោយមូលដ្ឋានជាមួយសោមុខងារ។ ដើម្បីទទួលបានសោនេះ អ្នកត្រូវរត់ពាក្យបញ្ជាខាងក្រោម៖
az functionapp keys list --resource-group smart-timer \ --name <APP_NAME>ចម្លងតម្លៃចេញពីបញ្ចូល
defaultក្នុងផ្នែកfunctionKeys។{ "functionKeys": { "default": "sQO1LQaeK9N1qYD6SXeb/TctCmwQEkToLJU6Dw8TthNeUH8VA45hlA==" }, "masterKey": "RSKOAIlyvvQEQt9dfpabJT018scaLpQu9p1poHIMCxx5LYrIQZyQ/g==", "systemKeys": {} }សោនេះត្រូវបញ្ចូលជាពួរ តាមលំនាំURL ដូច្នេះ URL ចុងបញ្ចប់នឹងជា
https://<APP_NAME>.azurewebsites.net/api/text-to-timer?code=<FUNCTION_KEY>ដែល<APP_NAME>ជាឈ្មោះ functions app របស់អ្នក ហើយ<FUNCTION_KEY>ជាសោមុខងារមូលដ្ឋានរបស់អ្នក។💁 អ្នកអាចផ្លាស់ប្ដូរប្រភេទអនុភាពនៃ HTTP trigger ដោយប្រើការកំណត់
authlevelនៅក្នុងឯកសារfunction.json។ អ្នកអាចអានបន្ថែមអំពីរឿងនេះនៅ ផ្នែកកំណត់រចនាសម្ព័ន្ធរបស់ Azure Functions HTTP trigger នៅ Microsoft docs។ -
រត់ functions app នៅក្នុងតំបន់ស្រុក ហើយចូលប្រើតាម IP address - អ្នកអាចទទួល IP addressរបស់កុំព្យូទ័រ នៅលើបណ្តាញស្រុក ហើយប្រើវាដើម្បីបង្កើត URL។
ស្វែងរក IP address របស់អ្នក៖
- លើ Windows 10 សូមអនុវត្តតាម មេរៀនរក IP address របស់អ្នក
- លើ macOS សូមអនុវត្តតាម របៀបរក IP address លើ Mac
- លើ Linux សូមអនុវត្តតាមផ្នែករក IP address ឯកជននៅក្នុង របៀបរក IP address នៅ Linux
បន្ទាប់ពីមាន IP address អ្នកអាចចូលដំណើរការ function នៅ
http://<IP_ADDRESS>:7071/api/text-to-timerដែល<IP_ADDRESS>ជា IP address របស់អ្នក, ឧទាហរណ៍http://192.168.1.10:7071/api/text-to-timer។💁 មិនមែនថានេះប្រើច្រក ៧០៧១ ទេ ដូច្នេះបន្ទាប់ពីអាសយដ្ឋាន IP អ្នកនឹងត្រូវមាន
:7071។💁 នេះនឹងដំណើរការតែបើឧបករណ៍ IoT របស់អ្នកមាននៅលើបណ្ដាញដូចគ្នាជាមួយកុំព្យូទ័ររបស់អ្នក។
-
-
សាកល្បងចុងបញ្ចប់ដោយចូលប្រើវាតាមរយៈ curl។
🚀 챌린지
មានវិធីជាច្រើនក្នុងការស្នើសុំអ្វីមួយដូចជា ការកំណត់ម៉ោងសម្រាប់ធ្វើការងារ។ គិតពីវិធីផ្សេងៗដើម្បីធ្វើរឿងនេះ ហើយប្រើពួកវាជាគំរូនៅក្នុងកម្មវិធី LUIS របស់អ្នក។ សាកល្បងពួកវា ដើម្បីមើលថា ម៉ូឌែលរបស់អ្នកអាចធ្វើការប្រយុទ្ធបានយ៉ាងម៉េចជាមួយនឹងវិធីស្នើសុំម៉ោងជាច្រើន។
ការប្រឡងបន្ទាប់ពីមេរៀន
ពិនិត្យឡើងវិញ និង សិក្សាឯកោ
- អានបន្ថែមអំពី LUIS និងសមត្ថភាពរបស់វានៅលើ ទំព័រឯកសារយល់ដឹងភាសា (LUIS) នៅលើឯកសាររបស់ Microsoft
- អានបន្ថែមអំពីការយល់ដឹងភាសានៅលើ ទំព័រយល់ដឹងភាសាធម្មជាតិនៅលើវិគីភីឌា
- អានបន្ថែមអំពីកម្មវិធី HTTP triggers នៅក្នុង ឯកសារកម្មវិធី Azure Functions HTTP trigger លើឯកសាររបស់ Microsoft
កិច្ចការផ្ទះ
ការបដិសេធ៖
ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាកម្មបកប្រែ AI Co-op Translator។ ខណៈពេលដែលយើងខិតខំសំរាប់ការត្រឹមត្រូវ សូមយកចិត្តទុកដាក់ថាការបកប្រែដោយស្វ័យប្រវត្តិអាចមានកំហុស ឬការមិនត្រឹមត្រូវ។ ឯកសារដើមក្នុងភាសាម្ចាស់ដំបូងគួរត្រូវបានគេយោងជាដើមប្រភពដែលមានអំណាច។ សម្រាប់ព័ត៌មានសំខាន់ៗ គួរតែប្រើការបកប្រែដោយមនុស្សជំនៀងជាងនេះ។ យើងមិនមានជំនួសចំពោះការយល់ច្រឡំនា ឬការបកប្រែខុសចេញពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។



