|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "6f4ba69d77f16c4a5110623a96a215c3",
|
|
|
"translation_date": "2025-08-27T13:39:31+00:00",
|
|
|
"source_file": "6-consumer/lessons/2-language-understanding/README.md",
|
|
|
"language_code": "ne"
|
|
|
}
|
|
|
-->
|
|
|
# भाषा बुझ्ने
|
|
|
|
|
|

|
|
|
|
|
|
> स्केच नोट [नित्या नरसिम्हन](https://github.com/nitya) द्वारा। ठूलो संस्करण हेर्नका लागि तस्बिरमा क्लिक गर्नुहोस्।
|
|
|
|
|
|
## पाठ अघि क्विज
|
|
|
|
|
|
[पाठ अघि क्विज](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/43)
|
|
|
|
|
|
## परिचय
|
|
|
|
|
|
अघिल्लो पाठमा तपाईंले आवाजलाई पाठमा रूपान्तरण गर्नुभयो। स्मार्ट टाइमर प्रोग्राम गर्नका लागि, तपाईंको कोडले के भनिएको थियो भन्ने कुरा बुझ्न आवश्यक छ। तपाईंले प्रयोगकर्ताले "३ मिनेटको टाइमर सेट गर्नुहोस्" जस्तो निश्चित वाक्यांश बोल्नेछ भनेर मान्न सक्नुहुन्छ, र त्यस अभिव्यक्तिलाई विश्लेषण गरेर टाइमर कति समयको लागि सेट गर्नुपर्ने हो भन्ने जानकारी निकाल्न सक्नुहुन्छ। तर, यो प्रयोगकर्तामैत्री हुँदैन। यदि प्रयोगकर्ताले "३ मिनेटको लागि टाइमर सेट गर्नुहोस्" भने भने, तपाईं वा मैले यसको अर्थ बुझ्न सक्छौं, तर तपाईंको कोडले बुझ्दैन, किनभने यो निश्चित वाक्यांशको अपेक्षा गरिरहेको हुन्छ।
|
|
|
|
|
|
यही ठाउँमा भाषा बुझ्ने क्षमताको आवश्यकता पर्छ। एआई मोडेलहरूको प्रयोग गरेर पाठलाई व्याख्या गर्न र आवश्यक विवरणहरू फिर्ता गर्न सकिन्छ। उदाहरणका लागि, "३ मिनेटको टाइमर सेट गर्नुहोस्" र "टाइमर ३ मिनेटको लागि सेट गर्नुहोस्" दुबैलाई बुझेर टाइमर ३ मिनेटको लागि चाहिएको छ भन्ने कुरा निकाल्न सकिन्छ।
|
|
|
|
|
|
यस पाठमा तपाईं भाषा बुझ्ने मोडेलहरू, तिनीहरू कसरी बनाउने, प्रशिक्षण दिने, र कोडबाट कसरी प्रयोग गर्ने भन्ने कुरा सिक्नुहुनेछ।
|
|
|
|
|
|
यस पाठमा हामी निम्न विषयहरू समेट्नेछौं:
|
|
|
|
|
|
* [भाषा बुझ्ने](../../../../../6-consumer/lessons/2-language-understanding)
|
|
|
* [भाषा बुझ्ने मोडेल बनाउने](../../../../../6-consumer/lessons/2-language-understanding)
|
|
|
* [इरादा र इकाइहरू](../../../../../6-consumer/lessons/2-language-understanding)
|
|
|
* [भाषा बुझ्ने मोडेल प्रयोग गर्ने](../../../../../6-consumer/lessons/2-language-understanding)
|
|
|
|
|
|
## भाषा बुझ्ने
|
|
|
|
|
|
मानिसहरूले हजारौं वर्षदेखि भाषा प्रयोग गरेर संवाद गर्दै आएका छन्। हामी शब्द, ध्वनि, वा क्रियाहरू प्रयोग गरेर संवाद गर्छौं र के भनिएको छ भन्ने कुरा बुझ्छौं। यसमा शब्द, ध्वनि वा क्रियाको अर्थ मात्र होइन, तिनको सन्दर्भ पनि बुझिन्छ। हामी इमानदारी र व्यंग्य बुझ्छौं, जसले गर्दा एउटै शब्दले हाम्रो स्वरको लयअनुसार फरक अर्थ दिन सक्छ।
|
|
|
|
|
|
✅ हालै तपाईंले गरेका केही संवादहरूको बारेमा सोच्नुहोस्। ती संवादको कति हिस्सा कम्प्युटरका लागि बुझ्न गाह्रो हुन सक्छ किनभने त्यसले सन्दर्भ आवश्यक पर्छ?
|
|
|
|
|
|
भाषा बुझ्ने, जसलाई प्राकृतिक-भाषा बुझ्ने पनि भनिन्छ, कृत्रिम बुद्धिमत्ताको एउटा क्षेत्र हो जसलाई प्राकृतिक-भाषा प्रशोधन (NLP) भनिन्छ। यसले पढ्ने क्षमतासँग सम्बन्धित छ, जसले शब्द वा वाक्यको विवरण बुझ्न प्रयास गर्दछ। यदि तपाईंले एलेक्सा वा सिरी जस्ता आवाज सहायक प्रयोग गर्नुभएको छ भने, तपाईंले भाषा बुझ्ने सेवाहरू प्रयोग गर्नुभएको छ। यी सेवाहरू "एलेक्सा, टेलर स्विफ्टको नयाँ एल्बम बजाउनुहोस्" लाई मेरो छोरीलाई उनको मनपर्ने गीतमा नाच्न लगाउने सेवामा रूपान्तरण गर्छन्।
|
|
|
|
|
|
> 💁 कम्प्युटरहरूले धेरै प्रगति गरे पनि, पाठलाई वास्तवमै बुझ्न अझै धेरै टाढा छन्। जब हामी कम्प्युटरसँग भाषा बुझ्ने कुरा गर्छौं, हामी मानव संवाद जत्तिकै उन्नत कुरा बुझाउँदैनौं। यसको सट्टा, हामी केही शब्दहरू लिने र मुख्य विवरणहरू निकाल्ने कुरा बुझाउँछौं।
|
|
|
|
|
|
मानिसका रूपमा, हामी भाषा बिना सोच्ने स्वाभाविक रूपमा बुझ्छौं। यदि मैले अर्को मानिसलाई "टेलर स्विफ्टको नयाँ एल्बम बजाउनुहोस्" भने भने, उनीहरूले मेरो मतलब तुरुन्तै बुझ्नेछन्। तर कम्प्युटरका लागि यो कठिन हुन्छ। यसले शब्दहरूलाई आवाजबाट पाठमा रूपान्तरण गर्नुपर्नेछ र निम्न जानकारीहरू निकाल्नुपर्नेछ:
|
|
|
|
|
|
* संगीत बजाउनुपर्नेछ
|
|
|
* संगीत कलाकार टेलर स्विफ्टको हो
|
|
|
* संगीत एउटा एल्बम हो, जसमा धेरै ट्र्याकहरू छन्
|
|
|
* टेलर स्विफ्टका धेरै एल्बमहरू छन्, त्यसैले तिनीहरूलाई कालानुक्रमिक रूपमा क्रमबद्ध गर्नुपर्नेछ र सबैभन्दा नयाँ प्रकाशित एल्बम चाहिएको हो
|
|
|
|
|
|
✅ तपाईंले अनुरोध गर्दा बोलेका केही वाक्यहरूको बारेमा सोच्नुहोस्, जस्तै कफी अर्डर गर्नु वा परिवारका सदस्यलाई केही दिन भन्नु। ती वाक्यलाई कम्प्युटरले बुझ्न आवश्यक पर्ने जानकारीका टुक्राहरूमा विभाजन गर्न प्रयास गर्नुहोस्।
|
|
|
|
|
|
भाषा बुझ्ने मोडेलहरू एआई मोडेलहरू हुन् जसलाई भाषाबाट निश्चित विवरणहरू निकाल्न प्रशिक्षण दिइन्छ। यी मोडेलहरूलाई स्थानान्तरण शिक्षाको प्रयोग गरेर विशिष्ट कार्यहरूको लागि प्रशिक्षण दिइन्छ, ठीक त्यस्तै जसरी तपाईंले कस्टम भिजन मोडेललाई सानो छविहरूको सेट प्रयोग गरेर प्रशिक्षण दिनुभएको थियो। तपाईंले एउटा मोडेल लिन सक्नुहुन्छ, त्यसपछि तपाईंले बुझ्न चाहेको पाठ प्रयोग गरेर यसलाई प्रशिक्षण दिन सक्नुहुन्छ।
|
|
|
|
|
|
## भाषा बुझ्ने मोडेल बनाउने
|
|
|
|
|
|

|
|
|
|
|
|
तपाईं LUIS (भाषा बुझ्ने सेवा) प्रयोग गरेर भाषा बुझ्ने मोडेलहरू बनाउन सक्नुहुन्छ। यो माइक्रोसफ्टको कग्निटिभ सेवाहरूको हिस्सा हो।
|
|
|
|
|
|
### कार्य - लेखन स्रोत बनाउनुहोस्
|
|
|
|
|
|
LUIS प्रयोग गर्नका लागि, तपाईंले लेखन स्रोत बनाउनु आवश्यक छ।
|
|
|
|
|
|
1. आफ्नो `smart-timer` स्रोत समूहमा लेखन स्रोत बनाउन निम्न आदेश प्रयोग गर्नुहोस्:
|
|
|
|
|
|
```python
|
|
|
az cognitiveservices account create --name smart-timer-luis-authoring \
|
|
|
--resource-group smart-timer \
|
|
|
--kind LUIS.Authoring \
|
|
|
--sku F0 \
|
|
|
--yes \
|
|
|
--location <location>
|
|
|
```
|
|
|
|
|
|
`<location>` लाई स्रोत समूह बनाउँदा प्रयोग गरिएको स्थानले प्रतिस्थापन गर्नुहोस्।
|
|
|
|
|
|
> ⚠️ LUIS सबै क्षेत्रहरूमा उपलब्ध छैन, त्यसैले यदि तपाईंले निम्न त्रुटि पाउनुभयो भने:
|
|
|
>
|
|
|
> ```output
|
|
|
> InvalidApiSetId: The account type 'LUIS.Authoring' is either invalid or unavailable in given region.
|
|
|
> ```
|
|
|
>
|
|
|
> अर्को क्षेत्र छनोट गर्नुहोस्।
|
|
|
|
|
|
यसले निःशुल्क-स्तरको LUIS लेखन स्रोत बनाउनेछ।
|
|
|
|
|
|
### कार्य - भाषा बुझ्ने एप बनाउनुहोस्
|
|
|
|
|
|
1. आफ्नो ब्राउजरमा [luis.ai](https://luis.ai?WT.mc_id=academic-17441-jabenn) पोर्टल खोल्नुहोस् र Azure प्रयोग गर्नुभएको खाताबाट साइन इन गर्नुहोस्।
|
|
|
|
|
|
1. संवादमा दिइएका निर्देशनहरू पालना गरेर आफ्नो Azure सदस्यता चयन गर्नुहोस्, त्यसपछि तपाईंले भर्खरै बनाएको `smart-timer-luis-authoring` स्रोत चयन गर्नुहोस्।
|
|
|
|
|
|
1. *Conversation apps* सूचीबाट, नयाँ एप बनाउन **New app** बटन चयन गर्नुहोस्। नयाँ एपलाई `smart-timer` नाम दिनुहोस् र *Culture* आफ्नो भाषामा सेट गर्नुहोस्।
|
|
|
|
|
|
> 💁 भविष्यवाणी स्रोतको लागि एउटा फिल्ड छ। तपाईं भविष्यवाणीका लागि छुट्टै स्रोत बनाउन सक्नुहुन्छ, तर निःशुल्क लेखन स्रोतले महिनामा १,००० भविष्यवाणीहरू अनुमति दिन्छ, जुन विकासका लागि पर्याप्त हुनुपर्छ, त्यसैले यसलाई खाली छोड्न सक्नुहुन्छ।
|
|
|
|
|
|
1. एप बनाइसकेपछि देखिने गाइड पढ्नुहोस् जसले भाषा बुझ्ने मोडेललाई प्रशिक्षण दिनका लागि आवश्यक चरणहरूको बारेमा जानकारी दिन्छ। गाइड पढिसकेपछि यसलाई बन्द गर्नुहोस्।
|
|
|
|
|
|
## इरादा र इकाइहरू
|
|
|
|
|
|
भाषा बुझ्ने इरादा (*intents*) र इकाइहरू (*entities*) वरिपरि आधारित छ। इरादा भनेको शब्दहरूको उद्देश्य हो, जस्तै संगीत बजाउनु, टाइमर सेट गर्नु, वा खाना अर्डर गर्नु। इकाइहरू भनेको इरादाले केलाई जनाउँछ भन्ने हो, जस्तै एल्बम, टाइमरको अवधि, वा खानाको प्रकार। मोडेलले व्याख्या गर्ने प्रत्येक वाक्यमा कम्तिमा एउटा इरादा र वैकल्पिक रूपमा एक वा बढी इकाइहरू हुनुपर्छ।
|
|
|
|
|
|
केही उदाहरणहरू:
|
|
|
|
|
|
| वाक्य | इरादा | इकाइहरू |
|
|
|
| ------------------------------------------------ | --------------- | ----------------------------------------- |
|
|
|
| "टेलर स्विफ्टको नयाँ एल्बम बजाउनुहोस्" | *संगीत बजाउनु* | *टेलर स्विफ्टको नयाँ एल्बम* |
|
|
|
| "३ मिनेटको टाइमर सेट गर्नुहोस्" | *टाइमर सेट गर्नु*| *३ मिनेट* |
|
|
|
| "मेरो टाइमर रद्द गर्नुहोस्" | *टाइमर रद्द गर्नु*| कुनै पनि छैन |
|
|
|
| "३ ठूला अनानास पिज्जा र एउटा क्यesar सलाद अर्डर गर्नुहोस्" | *खाना अर्डर गर्नु* | *३ ठूला अनानास पिज्जा*, *क्यesar सलाद* |
|
|
|
|
|
|
✅ तपाईंले पहिले सोचेका वाक्यहरूको बारेमा सोच्नुहोस्। ती वाक्यमा इरादा र कुनै इकाइहरू के हुनेछन्?
|
|
|
|
|
|
LUIS प्रशिक्षण गर्नका लागि, पहिले तपाईंले इकाइहरू सेट गर्नुहुन्छ। यी निश्चित शब्दहरूको सूची हुन सक्छ, वा पाठबाट सिक्न सकिन्छ। उदाहरणका लागि, तपाईं आफ्नो मेनुबाट उपलब्ध खानाको निश्चित सूची प्रदान गर्न सक्नुहुन्छ, प्रत्येक शब्दका भिन्नताहरू (वा पर्यायवाचीहरू) सहित, जस्तै *बैंगन* र *अउबर्जिन*।
|
|
|
|
|
|
टाइमर सेट गर्नका लागि, तपाईंले समयको इकाइ (मिनेट वा सेकेन्ड) र समयको संख्या (जस्तै ३ मिनेट) का लागि दुई इकाइहरू थप्न सक्नुहुन्छ।
|
|
|
|
|
|
### कार्य - भाषा बुझ्ने मोडेलमा इकाइहरू थप्नुहोस्
|
|
|
|
|
|
LUIS पोर्टलमा इकाइहरू थप्नका लागि, [Microsoft Docs मा Quickstart: Build your app in LUIS portal](https://docs.microsoft.com/azure/cognitive-services/luis/luis-get-started-create-app?WT.mc_id=academic-17441-jabenn) बाट निर्देशनहरू पालना गर्नुहोस्।
|
|
|
|
|
|
...
|
|
|
1. *Azure Resources* सेक्सनबाट *Authoring Resource* चयन गर्नुहोस्, र *Primary Key* र *Endpoint URL* प्रतिलिपि गर्नुहोस्।
|
|
|
|
|
|
1. आफ्नो कमाण्ड प्रम्प्ट वा टर्मिनलमा निम्न curl कमाण्ड चलाउनुहोस्:
|
|
|
|
|
|
```sh
|
|
|
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>` लाई *Azure Resources* सेक्सनबाट प्राप्त Endpoint URL सँग बदल्नुहोस्।
|
|
|
|
|
|
`<app id>` लाई *Settings* सेक्सनबाट प्राप्त App ID सँग बदल्नुहोस्।
|
|
|
|
|
|
`<primary key>` लाई *Azure Resources* सेक्सनबाट प्राप्त Primary Key सँग बदल्नुहोस्।
|
|
|
|
|
|
`<sentence>` लाई तपाईँले परीक्षण गर्न चाहेको वाक्य सँग बदल्नुहोस्।
|
|
|
|
|
|
1. यो कलको आउटपुट JSON डकुमेन्ट हुनेछ जसले क्वेरी, शीर्ष intent, र प्रकार अनुसार टुक्रिएको entities को सूची विवरण दिन्छ।
|
|
|
|
|
|
```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` शीर्ष intent थियो जसको सम्भाव्यता 97% थियो।
|
|
|
* दुई *number* entities पत्ता लागे, `45` र `12`।
|
|
|
* दुई *time-unit* entities पत्ता लागे, `minute` र `second`।
|
|
|
|
|
|
## भाषा बुझ्ने मोडेल प्रयोग गर्नुहोस्
|
|
|
|
|
|
एकपटक प्रकाशित भएपछि, LUIS मोडेललाई कोडबाट कल गर्न सकिन्छ। अघिल्लो पाठहरूमा, तपाईंले IoT Hub प्रयोग गरेर क्लाउड सेवाहरू सँग संचार गर्न, टेलिमेट्री पठाउन र कमाण्डहरू सुन्न प्रयोग गर्नुभएको थियो। यो धेरै असिंक्रोनस हुन्छ - एकपटक टेलिमेट्री पठाएपछि तपाईंको कोडले प्रतिक्रिया कुर्दैन, र यदि क्लाउड सेवा डाउन छ भने, तपाईंलाई थाहा हुँदैन।
|
|
|
|
|
|
स्मार्ट टाइमरको लागि, हामी तुरुन्त प्रतिक्रिया चाहन्छौं ताकि हामी प्रयोगकर्तालाई टाइमर सेट भएको जानकारी दिन सकौं, वा क्लाउड सेवाहरू उपलब्ध नभएको चेतावनी दिन सकौं। यसका लागि, हाम्रो IoT उपकरणले IoT Hub मा निर्भर नगरी वेब Endpoint सिधै कल गर्नेछ।
|
|
|
|
|
|
IoT उपकरणबाट LUIS कल गर्ने सट्टा, तपाईंले HTTP ट्रिगर जस्तो फरक प्रकारको ट्रिगरको साथ serverless कोड प्रयोग गर्न सक्नुहुन्छ। यसले तपाईंको function app लाई REST अनुरोधहरू सुन्न र तिनीहरूलाई प्रतिक्रिया दिन अनुमति दिन्छ। यो function तपाईंको उपकरणले कल गर्न सक्ने REST Endpoint हुनेछ।
|
|
|
|
|
|
> 💁 यद्यपि तपाईंले IoT उपकरणबाट सिधै LUIS कल गर्न सक्नुहुन्छ, serverless कोड जस्तो केही प्रयोग गर्नु राम्रो हुन्छ। यसरी जब तपाईंले कल गर्ने LUIS एप परिवर्तन गर्न चाहनुहुन्छ, उदाहरणका लागि जब तपाईंले राम्रो मोडेल प्रशिक्षण गर्नुहुन्छ वा फरक भाषामा मोडेल प्रशिक्षण गर्नुहुन्छ, तपाईंले केवल आफ्नो क्लाउड कोड अपडेट गर्नुपर्छ, हजारौं वा लाखौं IoT उपकरणहरूमा कोड पुनः-डिप्लोय गर्न आवश्यक पर्दैन।
|
|
|
|
|
|
### कार्य - serverless functions app सिर्जना गर्नुहोस्
|
|
|
|
|
|
1. `smart-timer-trigger` नामको Azure Functions app सिर्जना गर्नुहोस्, र यसलाई VS Code मा खोल्नुहोस्।
|
|
|
|
|
|
1. यस एपमा `speech-trigger` नामको HTTP ट्रिगर थप्नुहोस्, निम्न कमाण्ड प्रयोग गरेर VS Code टर्मिनल भित्र:
|
|
|
|
|
|
```sh
|
|
|
func new --name text-to-timer --template "HTTP trigger"
|
|
|
```
|
|
|
|
|
|
यसले `text-to-timer` नामको HTTP ट्रिगर सिर्जना गर्नेछ।
|
|
|
|
|
|
1. Functions app चलाएर HTTP ट्रिगर परीक्षण गर्नुहोस्। जब यो चल्छ, तपाईं आउटपुटमा Endpoint सूची देख्नुहुनेछ:
|
|
|
|
|
|
```output
|
|
|
Functions:
|
|
|
|
|
|
text-to-timer: [GET,POST] http://localhost:7071/api/text-to-timer
|
|
|
```
|
|
|
|
|
|
यसलाई [http://localhost:7071/api/text-to-timer](http://localhost:7071/api/text-to-timer) URL आफ्नो ब्राउजरमा लोड गरेर परीक्षण गर्नुहोस्।
|
|
|
|
|
|
```output
|
|
|
This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.
|
|
|
```
|
|
|
|
|
|
### कार्य - भाषा बुझ्ने मोडेल प्रयोग गर्नुहोस्
|
|
|
|
|
|
1. LUIS को लागि SDK Pip प्याकेज मार्फत उपलब्ध छ। `requirements.txt` फाइलमा निम्न लाइन थप्नुहोस् ताकि यस प्याकेजमा निर्भरता थप्न सकियोस्:
|
|
|
|
|
|
```sh
|
|
|
azure-cognitiveservices-language-luis
|
|
|
```
|
|
|
|
|
|
1. सुनिश्चित गर्नुहोस् कि VS Code टर्मिनलमा भर्चुअल वातावरण सक्रिय छ, र Pip प्याकेजहरू स्थापना गर्न निम्न कमाण्ड चलाउनुहोस्:
|
|
|
|
|
|
```sh
|
|
|
pip install -r requirements.txt
|
|
|
```
|
|
|
|
|
|
> 💁 यदि त्रुटिहरू आउँछ भने, तपाईंले निम्न कमाण्ड प्रयोग गरेर pip अपग्रेड गर्न आवश्यक हुन सक्छ:
|
|
|
>
|
|
|
> ```sh
|
|
|
> pip install --upgrade pip
|
|
|
> ```
|
|
|
|
|
|
1. **MANAGE** ट्याबको LUIS पोर्टलबाट आफ्नो LUIS API Key, Endpoint URL, र App ID को लागि `local.settings.json` फाइलमा नयाँ प्रविष्टिहरू थप्नुहोस्:
|
|
|
|
|
|
```JSON
|
|
|
"LUIS_KEY": "<primary key>",
|
|
|
"LUIS_ENDPOINT_URL": "<endpoint url>",
|
|
|
"LUIS_APP_ID": "<app id>"
|
|
|
```
|
|
|
|
|
|
`<endpoint url>` लाई **MANAGE** ट्याबको *Azure Resources* सेक्सनबाट प्राप्त Endpoint URL सँग बदल्नुहोस्। यो `https://<location>.api.cognitive.microsoft.com/` हुनेछ।
|
|
|
|
|
|
`<app id>` लाई **MANAGE** ट्याबको *Settings* सेक्सनबाट प्राप्त App ID सँग बदल्नुहोस्।
|
|
|
|
|
|
`<primary key>` लाई **MANAGE** ट्याबको *Azure Resources* सेक्सनबाट प्राप्त Primary Key सँग बदल्नुहोस्।
|
|
|
|
|
|
1. `__init__.py` फाइलमा निम्न imports थप्नुहोस्:
|
|
|
|
|
|
```python
|
|
|
import json
|
|
|
import os
|
|
|
from azure.cognitiveservices.language.luis.runtime import LUISRuntimeClient
|
|
|
from msrest.authentication import CognitiveServicesCredentials
|
|
|
```
|
|
|
|
|
|
यसले केही सिस्टम लाइब्रेरीहरू, साथै LUIS सँग अन्तरक्रिया गर्न लाइब्रेरीहरू आयात गर्दछ।
|
|
|
|
|
|
1. `main` मेथडको सामग्री हटाउनुहोस्, र निम्न कोड थप्नुहोस्:
|
|
|
|
|
|
```python
|
|
|
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` फाइलमा थप्नुभएको मानहरू लोड गर्दछ, तपाईंको API key सँग credentials object सिर्जना गर्दछ, त्यसपछि LUIS app सँग अन्तरक्रिया गर्न LUIS client object सिर्जना गर्दछ।
|
|
|
|
|
|
1. यो HTTP ट्रिगर JSON को रूपमा बुझ्नको लागि पाठ पास गरेर कल गरिनेछ, पाठ `text` नामको प्रोपर्टीमा हुनेछ। HTTP अनुरोधको body बाट मान निकाल्न र कन्सोलमा लग गर्न निम्न कोड `main` फंक्शनमा थप्नुहोस्:
|
|
|
|
|
|
```python
|
|
|
req_body = req.get_json()
|
|
|
text = req_body['text']
|
|
|
logging.info(f'Request - {text}')
|
|
|
```
|
|
|
|
|
|
1. LUIS मा भविष्यवाणी अनुरोध पठाएर भविष्यवाणीहरू माग गरिन्छ - भविष्यवाणी गर्न पाठ समावेश भएको JSON डकुमेन्ट। निम्न कोड प्रयोग गरेर यो सिर्जना गर्नुहोस्:
|
|
|
|
|
|
```python
|
|
|
prediction_request = { 'query' : text }
|
|
|
```
|
|
|
|
|
|
1. यो अनुरोध LUIS मा पठाउन सकिन्छ, तपाईंको एप प्रकाशित गरिएको staging slot प्रयोग गरेर:
|
|
|
|
|
|
```python
|
|
|
prediction_response = client.prediction.get_slot_prediction(app_id, 'Staging', prediction_request)
|
|
|
```
|
|
|
|
|
|
1. भविष्यवाणी प्रतिक्रिया शीर्ष intent समावेश गर्दछ - सबैभन्दा उच्च भविष्यवाणी स्कोर भएको intent, साथै entities। यदि शीर्ष intent `set timer` हो भने, entities बाट टाइमरको लागि आवश्यक समय पढ्न सकिन्छ:
|
|
|
|
|
|
```python
|
|
|
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` entities संख्याहरूको array हुनेछ। उदाहरणका लागि, यदि तपाईंले *"Set a four minute 17 second timer."* भने, भने `number` array मा 2 integers - 4 र 17 हुनेछ।
|
|
|
|
|
|
`time unit` entities string को array को array हुनेछ, प्रत्येक समय इकाई array भित्र string को array को रूपमा। उदाहरणका लागि, यदि तपाईंले *"Set a four minute 17 second timer."* भने, भने `time unit` array मा 2 array हुनेछ जसमा प्रत्येकमा एकल मान हुनेछ - `['minute']` र `['second']`।
|
|
|
|
|
|
*"Set a four minute 17 second timer."* को लागि यी entities को JSON संस्करण:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"number": [4, 17],
|
|
|
"time unit": [
|
|
|
["minute"],
|
|
|
["second"]
|
|
|
]
|
|
|
}
|
|
|
```
|
|
|
|
|
|
यस कोडले टाइमरको कुल समय सेकेन्डमा परिभाषित गर्दछ। यो entities बाट मानहरूद्वारा भरिनेछ।
|
|
|
|
|
|
1. Entities लिंक गरिएको छैनन्, तर हामी तिनीहरूबारे केही अनुमान गर्न सक्छौं। तिनीहरू बोलेको क्रममा हुनेछन्, त्यसैले array मा स्थिति प्रयोग गरेर कुन संख्या कुन समय इकाईसँग मेल खान्छ निर्धारण गर्न सकिन्छ। उदाहरणका लागि:
|
|
|
|
|
|
* *"Set a 30 second timer"* - यसमा एक संख्या, `30`, र एक समय इकाई, `second` हुनेछ, त्यसैले एकल संख्या एकल समय इकाईसँग मेल खानेछ।
|
|
|
* *"Set a 2 minute and 30 second timer"* - यसमा दुई संख्या, `2` र `30`, र दुई समय इकाई, `minute` र `second` हुनेछ, त्यसैले पहिलो संख्या पहिलो समय इकाईको लागि हुनेछ (2 minutes), र दोस्रो संख्या दोस्रो समय इकाईको लागि (30 seconds)।
|
|
|
|
|
|
निम्न कोडले संख्या entities मा वस्तुहरूको गणना प्राप्त गर्दछ, र array को पहिलो वस्तु निकाल्न प्रयोग गर्दछ, त्यसपछि दोस्रो र यस्तै। यो `if` ब्लक भित्र थप्नुहोस्।
|
|
|
|
|
|
```python
|
|
|
for i in range(0, len(numbers)):
|
|
|
number = numbers[i]
|
|
|
time_unit = time_units[i][0]
|
|
|
```
|
|
|
|
|
|
*"Set a four minute 17 second timer."* को लागि, यो दुई पटक लूप हुनेछ, निम्न मानहरू दिनेछ:
|
|
|
|
|
|
| लूप गणना | `number` | `time_unit` |
|
|
|
| ---------: | -------: | ----------- |
|
|
|
| 0 | 4 | minute |
|
|
|
| 1 | 17 | second |
|
|
|
|
|
|
1. यस लूप भित्र, संख्या र समय इकाई प्रयोग गरेर टाइमरको कुल समय गणना गर्नुहोस्, प्रत्येक मिनेटको लागि 60 सेकेन्ड थप्दै, र कुनै पनि सेकेन्डको लागि सेकेन्डको संख्या।
|
|
|
|
|
|
```python
|
|
|
if time_unit == 'minute':
|
|
|
total_seconds += number * 60
|
|
|
else:
|
|
|
total_seconds += number
|
|
|
```
|
|
|
|
|
|
1. Entities को लूप बाहिर, टाइमरको कुल समय लग गर्नुहोस्:
|
|
|
|
|
|
```python
|
|
|
logging.info(f'Timer required for {total_seconds} seconds')
|
|
|
```
|
|
|
|
|
|
1. सेकेन्डको संख्या HTTP प्रतिक्रिया रूपमा फंक्शनबाट फर्काउन आवश्यक छ। `if` ब्लकको अन्त्यमा निम्न थप्नुहोस्:
|
|
|
|
|
|
```python
|
|
|
payload = {
|
|
|
'seconds': total_seconds
|
|
|
}
|
|
|
return func.HttpResponse(json.dumps(payload), status_code=200)
|
|
|
```
|
|
|
|
|
|
यस कोडले टाइमरको कुल सेकेन्डको संख्या समावेश भएको payload सिर्जना गर्दछ, यसलाई JSON string मा रूपान्तरण गर्दछ र HTTP परिणामको रूपमा 200 स्थिति कोडको साथ फर्काउँछ, जसको अर्थ कल सफल भयो।
|
|
|
|
|
|
1. अन्ततः, `if` ब्लक बाहिर, intent चिन्हित नभएको अवस्थामा त्रुटि कोड फर्काएर ह्यान्डल गर्नुहोस्:
|
|
|
|
|
|
```python
|
|
|
return func.HttpResponse(status_code=404)
|
|
|
```
|
|
|
|
|
|
404 *not found* को स्थिति कोड हो।
|
|
|
|
|
|
1. Functions app चलाउनुहोस् र curl प्रयोग गरेर परीक्षण गर्नुहोस्।
|
|
|
|
|
|
```sh
|
|
|
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 बाट निम्न आउटपुट देख्नुहुनेछ:
|
|
|
|
|
|
```output
|
|
|
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 को कलले निम्न फर्काउनेछ:
|
|
|
|
|
|
```output
|
|
|
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](../../../../../6-consumer/lessons/2-language-understanding/code/functions) फोल्डरमा पाउन सक्नुहुन्छ।
|
|
|
|
|
|
### कार्य - आफ्नो फंक्शनलाई IoT उपकरणमा उपलब्ध गराउनुहोस्
|
|
|
|
|
|
1. तपाईंको IoT उपकरणले तपाईंको REST Endpoint कल गर्न, यसलाई URL थाहा हुन आवश्यक छ। जब तपाईंले यसलाई पहिले पहुँच गर्नुभयो, तपाईंले `localhost` प्रयोग गर्नुभयो, जुन तपाईंको स्थानीय मेसिनमा REST Endpoint पहुँच गर्न शोर्टकट हो। तपाईंको IoT उपकरणलाई पहुँच दिन, तपाईंले क्लाउडमा प्रकाशित गर्नुपर्छ, वा स्थानीय रूपमा पहुँच गर्न आफ्नो IP ठेगाना प्राप्त गर्नुपर्छ।
|
|
|
|
|
|
> ⚠️ यदि तपाईं Wio Terminal प्रयोग गर्दै हुनुहुन्छ भने, functions app स्थानीय रूपमा चलाउनु सजिलो हुन्छ, किनकि त्यहाँ लाइब्रेरीहरूमा निर्भरता हुनेछ जसले तपाईंले पहिले जस्तै functions app डिप्लोय गर्न सक्नुहुन्न। functions app स्थानीय रूपमा चलाउनुहोस् र आफ्नो कम्प्युटरको IP ठेगाना प्रयोग गरेर पहुँच गर्नुहोस्। यदि तपाईं क्लाउडमा डिप्लोय गर्न चाहनुहुन्छ भने, यसलाई कसरी गर्ने जानकारी पछि पाठमा प्रदान गरिनेछ।
|
|
|
|
|
|
* Functions app प्रकाशित गर्नुहोस् - आफ्नो functions app क्लाउडमा प्रकाशित गर्न अघिल्लो पाठहरूमा निर्देशनहरू पालना गर्नुहोस्। एकपटक प्रकाशित भएपछि, URL `https://<APP_NAME>.azurewebsites.net/api/text-to-timer` हुनेछ, जहाँ `<APP_NAME>` तपाईंको functions app को नाम हुनेछ। सुनिश्चित गर्नुहोस् कि तपाईंले आफ्नो स्थानीय सेटिङहरू पनि प्रकाशित गर्नुभएको छ।
|
|
|
|
|
|
HTTP ट्रिगरको साथ काम गर्दा, तिनीहरू डिफल्ट रूपमा function app key द्वारा सुरक्षित हुन्छन्। यो key प्राप्त गर्न निम्न कमाण्ड चलाउनुहोस्:
|
|
|
|
|
|
```sh
|
|
|
az functionapp keys list --resource-group smart-timer \
|
|
|
--name <APP_NAME>
|
|
|
```
|
|
|
|
|
|
`functionKeys` सेक्सनबाट `default` प्रविष्टिको मान प्रतिलिपि गर्नुहोस्।
|
|
|
|
|
|
```output
|
|
|
{
|
|
|
"functionKeys": {
|
|
|
"default": "sQO1LQaeK9N1qYD6SXeb/TctCmwQEkToLJU6Dw8TthNeUH8VA45hlA=="
|
|
|
},
|
|
|
"masterKey": "RSKOAIlyvvQEQt9dfpabJT018scaLpQu9p1poHIMCxx5LYrIQZyQ/g==",
|
|
|
"systemKeys": {}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
यो key URL मा query parameter को रूपमा थप्न आवश्यक हुनेछ, त्यसैले अन्तिम URL `https://<APP_NAME>.azurewebsites.net/api/text-to-timer?code=<FUNCTION_KEY>` हुनेछ, जहाँ `<APP_NAME>` तपाईंको functions app को नाम हुनेछ, र `<FUNCTION_KEY>` तपाईंको डिफल्ट function key हुनेछ।
|
|
|
|
|
|
> 💁 तपाईं HTTP ट्रिगरको authorization प्रकार `function.json` फाइलको `authlevel` सेटिङ प्रयोग गरेर परिवर्तन गर्न सक्नुहुन्छ। तपाईं यसबारे थप जानकारी [Microsoft docs मा Azure Functions HTTP trigger को कन्फिगरेसन सेक्सन](https://docs.microsoft.com/azure/azure-functions/functions-bindings-http-webhook-trigger?WT.mc_id=academic-17441-jabenn&tabs=python#configuration) मा पढ्न सक्नुहुन्छ।
|
|
|
|
|
|
* Functions app स्थानीय रूपमा चलाउनुहोस्, र IP ठेगाना प्रयोग गरेर पहुँच गर्नुहोस् - तपाईं आफ्नो कम्प्युटरको स्थानीय नेटवर्कमा IP ठेगाना प्राप्त गर्न सक्नुहुन्छ, र त्यसलाई URL निर्माण गर्न प्रयोग गर्न सक्नुहुन्छ।
|
|
|
|
|
|
आफ्नो IP ठेगाना पत्ता लगाउनुहोस्:
|
|
|
|
|
|
* Windows 10 मा, [find your IP address guide](https://support.microsoft.com/windows/find-your-ip-address-f21a9bbc-c582-55cd-35e0-73431160a1b9?WT.mc_id=academic-17441-jabenn) पालना गर्नुहोस्।
|
|
|
* macOS मा, [how to find your IP address on a Mac guide](https://www.hellotech.com/guide/for/how-to-find-ip-address-on-mac) पालना गर्नुहोस्।
|
|
|
* Linux मा, [how to find your IP address in Linux guide](https://opensource.com/article/18/5/how-find-ip-address-linux) को निजी IP ठेगाना पत्ता लगाउने सेक्सन पालना गर्नुहोस्।
|
|
|
|
|
|
एकपटक तपाईंले आफ्नो IP ठेगाना प्राप्त गर्नुभयो भने, तपाईं functions लाई `http://` मा पहुँच गर्न सक्नुहुन्छ।
|
|
|
|
|
|
:7071/api/text-to-timer`, जहाँ `<IP_ADDRESS>` तपाईंको IP ठेगाना हुनेछ, उदाहरणका लागि `http://192.168.1.10:7071/api/text-to-timer`।
|
|
|
|
|
|
> 💁 ध्यान दिनुहोस् कि यसले पोर्ट 7071 प्रयोग गर्दछ, त्यसैले IP ठेगानापछि `:7071` राख्न आवश्यक छ।
|
|
|
|
|
|
> 💁 यो केवल तब काम गर्नेछ जब तपाईंको IoT उपकरण तपाईंको कम्प्युटरको समान नेटवर्कमा हो।
|
|
|
|
|
|
1. curl प्रयोग गरेर endpoint परीक्षण गर्नुहोस्।
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🚀 चुनौती
|
|
|
|
|
|
एउटा कुरा अनुरोध गर्न धेरै तरिकाहरू छन्, जस्तै टाइमर सेट गर्नु। यसलाई अनुरोध गर्ने विभिन्न तरिकाहरू सोच्नुहोस्, र तिनीहरूलाई तपाईंको LUIS एपमा उदाहरणको रूपमा प्रयोग गर्नुहोस्। यी तरिकाहरू परीक्षण गर्नुहोस्, हेर्नको लागि कि तपाईंको मोडेलले टाइमर अनुरोध गर्ने विभिन्न तरिकाहरूलाई कत्तिको राम्रोसँग सम्हाल्न सक्छ।
|
|
|
|
|
|
## व्याख्यानपछिको प्रश्नोत्तर
|
|
|
|
|
|
[व्याख्यानपछिको प्रश्नोत्तर](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/44)
|
|
|
|
|
|
## समीक्षा र आत्म अध्ययन
|
|
|
|
|
|
* LUIS र यसको क्षमता बारे थप जानकारी [Microsoft docs मा रहेको Language Understanding (LUIS) को दस्तावेज पृष्ठ](https://docs.microsoft.com/azure/cognitive-services/luis/?WT.mc_id=academic-17441-jabenn) मा पढ्नुहोस्।
|
|
|
* भाषा बुझाइको बारेमा थप जानकारी [Wikipedia मा रहेको प्राकृतिक-भाषा बुझाइको पृष्ठ](https://wikipedia.org/wiki/Natural-language_understanding) मा पढ्नुहोस्।
|
|
|
* HTTP ट्रिगरको बारेमा थप जानकारी [Microsoft docs मा रहेको Azure Functions HTTP ट्रिगर दस्तावेज](https://docs.microsoft.com/azure/azure-functions/functions-bindings-http-webhook-trigger?WT.mc_id=academic-17441-jabenn&tabs=python) मा पढ्नुहोस्।
|
|
|
|
|
|
## असाइनमेन्ट
|
|
|
|
|
|
[टाइमर रद्द गर्नुहोस्](assignment.md)
|
|
|
|
|
|
---
|
|
|
|
|
|
**अस्वीकरण**:
|
|
|
यो दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) प्रयोग गरेर अनुवाद गरिएको छ। हामी यथार्थताको लागि प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वचालित अनुवादहरूमा त्रुटि वा अशुद्धता हुन सक्छ। यसको मूल भाषा मा रहेको मूल दस्तावेज़लाई आधिकारिक स्रोत मानिनुपर्छ। महत्वपूर्ण जानकारीको लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा गलत व्याख्याको लागि हामी जिम्मेवार हुने छैनौं। |