You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/mr/6-consumer/lessons/2-language-understanding/README.md

569 lines
53 KiB

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "6f4ba69d77f16c4a5110623a96a215c3",
"translation_date": "2025-08-27T13:36:32+00:00",
"source_file": "6-consumer/lessons/2-language-understanding/README.md",
"language_code": "mr"
}
-->
# भाषा समजून घेणे
![या धड्याचा स्केच नोट](../../../../../translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.mr.jpg)
> स्केच नोट [नित्या नरसिंहन](https://github.com/nitya) यांनी तयार केले आहे. मोठ्या आवृत्तीसाठी प्रतिमेवर क्लिक करा.
## व्याख्यानपूर्व प्रश्नमंजुषा
[व्याख्यानपूर्व प्रश्नमंजुषा](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/43)
## परिचय
मागील धड्यात तुम्ही भाषणाचे मजकुरात रूपांतर केले. स्मार्ट टाइमर प्रोग्राम करण्यासाठी, तुमच्या कोडला काय बोलले गेले आहे हे समजून घेण्याची गरज आहे. तुम्ही गृहीत धरू शकता की वापरकर्ता "3 मिनिटांचा टाइमर सेट करा" सारखा ठराविक वाक्यांश बोलेल आणि त्या वाक्यांशाचे विश्लेषण करून टाइमर किती वेळेसाठी असावा हे समजून घ्याल. पण हे फारसे वापरकर्त्यास अनुकूल नाही. जर वापरकर्ता "3 मिनिटांसाठी टाइमर सेट करा" असे म्हणाला, तर तुम्हाला किंवा मला त्याचा अर्थ समजेल, पण तुमच्या कोडला समजणार नाही, कारण तो ठराविक वाक्यांशाची अपेक्षा करत असेल.
याच ठिकाणी भाषा समजून घेण्याची गरज भासते. AI मॉडेल्सचा वापर करून मजकुराचा अर्थ लावणे आणि आवश्यक तपशील परत मिळवणे, जसे की "3 मिनिटांचा टाइमर सेट करा" आणि "3 मिनिटांसाठी टाइमर सेट करा" या दोन्ही वाक्यांमधून 3 मिनिटांसाठी टाइमर आवश्यक आहे हे समजणे.
या धड्यात तुम्ही भाषा समजून घेण्याच्या मॉडेल्सबद्दल शिकाल, ती कशी तयार करायची, प्रशिक्षण द्यायचे आणि कोडमधून कशी वापरायची हे शिकाल.
या धड्यात आपण शिकणार आहोत:
* [भाषा समजून घेणे](../../../../../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) या क्षेत्राचा भाग आहे. यामध्ये वाचन समज, शब्द किंवा वाक्यांचे तपशील समजून घेण्याचा प्रयत्न केला जातो. जर तुम्ही अलेक्सा किंवा सिरीसारख्या व्हॉइस असिस्टंटचा वापर केला असेल, तर तुम्ही भाषा समजून घेण्याच्या सेवांचा वापर केला आहे. या सेवा "अलेक्सा, टेलर स्विफ्टचा नवीनतम अल्बम वाजवा" यासारख्या आज्ञा घेऊन त्या कृतीत रूपांतरित करतात.
> 💁 संगणक, प्रगत तंत्रज्ञान असूनही, मजकुराचा खरा अर्थ समजून घेण्यात अजूनही खूप मागे आहे. संगणकाच्या संदर्भात भाषा समजून घेणे म्हणजे मानवी संवादाइतके प्रगत काहीही नाही, तर फक्त काही शब्द घेऊन त्यातील महत्त्वाचे तपशील काढणे एवढेच आहे.
मानव म्हणून आपण भाषा विचार न करता समजतो. जर मी दुसऱ्या व्यक्तीला "टेलर स्विफ्टचा नवीनतम अल्बम वाजवा" असे सांगितले, तर त्यांना सहज समजेल की मी काय म्हणतोय. संगणकासाठी हे कठीण आहे. त्याला शब्द, भाषणातून मजकुरात रूपांतरित करून, खालील माहिती समजून घ्यावी लागेल:
* संगीत वाजवायचे आहे
* संगीत टेलर स्विफ्ट या कलाकाराचे आहे
* विशिष्ट संगीत म्हणजे अनेक ट्रॅक असलेला एक संपूर्ण अल्बम आहे
* टेलर स्विफ्टचे अनेक अल्बम आहेत, त्यामुळे त्यांना कालानुक्रमे क्रमवारी लावून सर्वात अलीकडील अल्बम निवडावा लागेल
✅ तुम्ही मागे केलेल्या विनंत्या, जसे की कॉफी ऑर्डर करणे किंवा कुटुंबातील सदस्याला काहीतरी देण्यास सांगणे, याबद्दल विचार करा. त्या वाक्यांमधून संगणकाला समजण्यासाठी कोणते तपशील काढावे लागतील?
भाषा समजून घेण्याची मॉडेल्स ही AI मॉडेल्स आहेत जी भाषेतून विशिष्ट तपशील काढण्यासाठी प्रशिक्षित केली जातात आणि नंतर विशिष्ट कार्यांसाठी ट्रान्सफर लर्निंगचा वापर करून प्रशिक्षित केली जातात, जसे तुम्ही कस्टम व्हिजन मॉडेलला प्रतिमांच्या छोट्या संचाचा वापर करून प्रशिक्षित केले होते. तुम्ही एक मॉडेल घेऊ शकता आणि तुम्हाला समजून घ्यायच्या मजकुराचा वापर करून त्याला प्रशिक्षित करू शकता.
## भाषा समजून घेण्याचे मॉडेल तयार करणे
![LUIS लोगो](../../../../../translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.mr.png)
तुम्ही LUIS (Language Understanding Intelligent Service) चा वापर करून भाषा समजून घेण्याची मॉडेल्स तयार करू शकता. LUIS हा मायक्रोसॉफ्टचा एक भाषा समजून घेण्याचा सेवा आहे, जो Cognitive Services चा भाग आहे.
### कार्य - ऑथरिंग रिसोर्स तयार करणे
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,000 प्रेडिक्शन्सपर्यंत परवानगी देतो, जे विकासासाठी पुरेसे आहे, त्यामुळे तुम्ही हे रिकामे ठेवू शकता.
1. अॅप तयार केल्यानंतर दिसणाऱ्या मार्गदर्शकाचे वाचन करा, ज्यामुळे तुम्हाला भाषा समजून घेण्याचे मॉडेल प्रशिक्षण देण्यासाठी घ्यावयाच्या पायऱ्यांची समज मिळेल. वाचन पूर्ण झाल्यावर मार्गदर्शक बंद करा.
## उद्दिष्टे आणि घटक
भाषा समजून घेणे *उद्दिष्टे* आणि *घटकां*वर आधारित असते. उद्दिष्टे म्हणजे शब्दांचा हेतू काय आहे, जसे की संगीत वाजवणे, टाइमर सेट करणे किंवा अन्न ऑर्डर करणे. घटक म्हणजे उद्दिष्ट कशाशी संबंधित आहे, जसे की अल्बम, टाइमरची लांबी किंवा अन्नाचा प्रकार. मॉडेलने विश्लेषण केलेल्या प्रत्येक वाक्याला किमान एक उद्दिष्ट आणि पर्यायी एक किंवा अधिक घटक असावेत.
काही उदाहरणे:
| वाक्य | उद्दिष्ट | घटक |
| --------------------------------------------------- | ------------------ | ---------------------------------------- |
| "टेलर स्विफ्टचा नवीनतम अल्बम वाजवा" | *संगीत वाजवा* | *टेलर स्विफ्टचा नवीनतम अल्बम* |
| "3 मिनिटांचा टाइमर सेट करा" | *टाइमर सेट करा* | *3 मिनिटे* |
| "माझा टाइमर रद्द करा" | *टाइमर रद्द करा* | काहीही नाही |
| "3 मोठ्या पायनॅपल पिझ्झा आणि एक सीझर सॅलड ऑर्डर करा" | *अन्न ऑर्डर करा* | *3 मोठ्या पायनॅपल पिझ्झा*, *सीझर सॅलड* |
✅ तुम्ही विचार केलेल्या वाक्यांमध्ये, त्या वाक्याचे उद्दिष्ट आणि घटक काय असतील?
LUIS ला प्रशिक्षण देण्यासाठी, प्रथम तुम्ही घटक सेट करता. हे निश्चित शब्दांच्या यादीसारखे असू शकतात किंवा मजकुरातून शिकले जाऊ शकतात. उदाहरणार्थ, तुम्ही तुमच्या मेनूमधील अन्नासाठी निश्चित शब्दांची यादी देऊ शकता, ज्यामध्ये प्रत्येक शब्दाचे पर्याय (किंवा समानार्थी शब्द) असतील, जसे की *egg plant* आणि *aubergine* हे *aubergine* चे पर्याय आहेत. LUIS मध्ये आधीपासून तयार घटक देखील आहेत, जसे की संख्या आणि स्थान.
टाइमर सेट करण्यासाठी, तुम्ही वेळेसाठी (मिनिटे किंवा सेकंद) प्री-बिल्ट नंबर घटक आणि युनिटसाठी (मिनिटे आणि सेकंद) दुसरा घटक जोडू शकता. प्रत्येक युनिटमध्ये एकवचनी आणि अनेकवचनी रूपे कव्हर करण्यासाठी अनेक पर्याय असतील - जसे की minute आणि minutes.
घटक परिभाषित केल्यानंतर, तुम्ही उद्दिष्टे तयार करता. ही मॉडेलला दिलेल्या उदाहरण वाक्यांवर आधारित शिकवली जातात (ज्यांना utterances म्हणतात). उदाहरणार्थ, *set timer* उद्दिष्टासाठी, तुम्ही खालील वाक्ये देऊ शकता:
* `set a 1 second timer`
* `set a timer for 1 minute and 12 seconds`
* `set a timer for 3 minutes`
* `set a 9 minute 30 second timer`
त्यानंतर तुम्ही LUIS ला या वाक्यांमधील घटक कोणत्या भागाशी संबंधित आहेत ते सांगता:
![1 मिनिट आणि 12 सेकंदांसाठी टाइमर सेट करा वाक्य घटकांमध्ये विभागलेले](../../../../../translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.mr.png)
`set a timer for 1 minute and 12 seconds` या वाक्याचा उद्देश `set timer` आहे. त्यात 2 घटक आहेत, प्रत्येकाचे 2 मूल्ये:
| | वेळ | युनिट |
| ---------- | ---: | ------- |
| 1 मिनिट | 1 | मिनिट |
| 12 सेकंद | 12 | सेकंद |
चांगले मॉडेल तयार करण्यासाठी, तुम्हाला वेगवेगळ्या प्रकारच्या उदाहरण वाक्यांची आवश्यकता आहे, जेणेकरून एखाद्याने एकाच गोष्टीसाठी वेगवेगळ्या प्रकारे विचारले तरी मॉडेलला समजेल.
> 💁 कोणत्याही AI मॉडेलप्रमाणे, जितके अधिक आणि अचूक डेटा तुम्ही प्रशिक्षणासाठी वापराल, तितके मॉडेल चांगले होईल.
✅ तुम्ही एखाद्या गोष्टीसाठी विचारण्याचे वेगवेगळे मार्ग विचार करा, जेणेकरून मानवाला ते समजेल.
### कार्य - भाषा समजून घेण्याच्या मॉडेल्समध्ये घटक जोडा
टाइमरसाठी, तुम्हाला 2 घटक जोडावे लागतील - एक वेळेच्या युनिटसाठी (मिनिटे किंवा सेकंद) आणि दुसरा मिनिटे किंवा सेकंद यासाठी.
LUIS पोर्टल वापरण्याच्या सूचनांसाठी [Quickstart: Build your app in LUIS portal documentation on Microsoft docs](https://docs.microsoft.com/azure/cognitive-services/luis/luis-get-started-create-app?WT.mc_id=academic-17441-jabenn) वाचा.
1. LUIS पोर्टलमधून, *Entities* टॅब निवडा आणि **Add prebuilt entity** बटण निवडून *number* प्रीबिल्ट घटक जोडा.
1. **Create** बटण वापरून वेळेच्या युनिटसाठी नवीन घटक तयार करा. घटकाचे नाव `time unit` ठेवा आणि प्रकार *List* निवडा. *Normalized values* यादीत `minute` आणि `second` मूल्ये जोडा, आणि *synonyms* यादीत त्यांची एकवचनी आणि अनेकवचनी रूपे जोडा. प्रत्येक समानार्थी शब्द जोडल्यावर `return` दाबा.
| Normalized value | Synonyms |
| ---------------- | --------------- |
| minute | minute, minutes |
| second | second, seconds |
### कार्य - भाषा समजून घेण्याच्या मॉडेल्समध्ये उद्दिष्टे जोडा
1. *Intents* टॅबमधून, **Create** बटण निवडून नवीन उद्दिष्ट तयार करा. या उद्दिष्टाचे नाव `set timer` ठेवा.
1. उदाहरणांमध्ये, मिनिटे, सेकंद आणि एकत्रित मिनिटे व सेकंद वापरून टाइमर सेट करण्याचे वेगवेगळे मार्ग लिहा. उदाहरणे:
* `set a 1 second timer`
* `set a 4 minute timer`
* `set a four minute six second timer`
* `set a 9 minute 30 second timer`
* `set a timer for 1 minute and 12 seconds`
* `set a timer for 3 minutes`
* `set a timer for 3 minutes and 1 second`
* `set a timer for three minutes and one second`
* `set a timer for 1 minute and 1 second`
* `set a timer for 30 seconds`
* `set a timer for 1 second`
शब्द आणि अंक यांचे मिश्रण करा, जेणेकरून मॉडेल दोन्ही प्रकार हाताळू शकेल.
1. प्रत्येक उदाहरण लिहिताना, LUIS घटक शोधण्यास सुरुवात करेल आणि सापडलेल्या घटकांना अधोरेखित करून लेबल लावेल.
![उदाहरणांमध्ये LUIS ने अधोरेखित केलेले संख्या आणि वेळेचे युनिट](../../../../../translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.mr.png)
### कार्य - मॉडेलला प्रशिक्षण द्या आणि चाचणी करा
1. घटक आणि उद्दिष्टे कॉन्फिगर केल्यानंतर, शीर्ष मेनूमधील **Train** बटण वापरून मॉडेलला प्रशिक्षण द्या. हे बटण निवडा, आणि मॉडेल काही सेकंदांत प्रशिक्षण पूर्ण करेल. प्रशिक्षणादरम्यान बटण ग्रे होईल आणि पूर्ण झाल्यावर पुन्हा सक्रिय होईल.
1. शीर्ष मेनूमधील **Test** बटण निवडून भाषा समजून घेण्याचे मॉडेल चाचणी करा. `set a timer for 5 minutes and 4 seconds` असे मजकूर टाइप करा आणि रिटर्न दाबा. तुम्ही टाइप केलेला मजकूर खाली एका बॉक्समध्ये दिसेल, आणि त्याखाली *top intent* किंवा सर्वाधिक संभाव्यतेने ओळखलेले उद्दिष्ट दिसेल. हे `set timer` असावे. उद्दिष्टाच्या नावाच्या मागे त्या उद्दिष्टाची योग्यतेची संभाव्यता टक्केवारीने दिसेल.
1. **Inspect** पर्याय निवडून निकालांचा तपशील पाहा. तुम्हाला सर्वाधिक स्कोअरिंग उद्दिष्ट त्याच्या संभाव्यतेसह दिसेल, तसेच ओळखलेले घटकांची यादी दिसेल.
1. चाचणी पूर्ण झाल्यावर *Test* पॅन बंद करा.
### कार्य - मॉडेल प्रकाशित करा
कोडमधून हे मॉडेल वापरण्यासाठी, तुम्हाला ते प्रकाशित करावे लागेल. LUIS मधून प्रकाशित करताना, तुम्ही चाचणीसाठी स्टेजिंग वातावरण किंवा पूर्ण प्रकाशनासाठी उत्पादन वातावरण निवडू शकता. या धड्यासाठी, स्टेजिंग वातावरण पुरेसे आहे.
1. LUIS पोर्टलमधून, शीर्ष मेनूमधील **Publish** बटण निवडा.
1. *Staging slot* निवडले आहे याची खात्री करा, नंतर **Done** निवडा. अॅप प्रकाशित झाल्यावर तुम्हाला सूचना दिसेल.
1. तुम्ही हे curl वापरून चाचणी करू शकता. curl कमांड तयार करण्यासाठी तुम्हाला तीन मूल्ये लागतील - एंडपॉइंट, अॅप्लिकेशन ID (App ID) आणि API की. ही माहिती शीर्ष मेनूमधील **MANAGE** टॅबमधून मिळवता येईल.
1. *Settings* विभागातून App ID कॉपी
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 दस्तऐवज असेल, ज्यामध्ये क्वेरी, टॉप इंटेंट, आणि प्रकारानुसार विभागलेली 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` हा टॉप इंटेंट होता, ज्याची probability 97% होती.
* दोन *number* entities ओळखल्या गेल्या, `45` आणि `12`.
* दोन *time-unit* entities ओळखल्या गेल्या, `minute` आणि `second`.
## भाषा समजून घेण्याचा मॉडेल वापरा
एकदा प्रकाशित झाल्यावर, LUIS मॉडेल कोडमधून कॉल केला जाऊ शकतो. मागील धड्यांमध्ये, तुम्ही IoT Hub वापरून क्लाउड सेवांशी संवाद साधला होता, टेलिमेट्री पाठवणे आणि कमांडसाठी ऐकणे. हे खूप असिंक्रोनस आहे - एकदा टेलिमेट्री पाठवली की तुमचा कोड प्रतिसादाची वाट पाहत नाही, आणि जर क्लाउड सेवा बंद असेल तर तुम्हाला कळणार नाही.
स्मार्ट टाइमरसाठी, आम्हाला त्वरित प्रतिसाद हवा आहे, जेणेकरून आम्ही वापरकर्त्याला सांगू शकू की टाइमर सेट केला आहे किंवा क्लाउड सेवा अनुपलब्ध असल्याचे सूचित करू शकू. हे करण्यासाठी, आमचे IoT डिव्हाइस IoT Hub वर अवलंबून न राहता थेट वेब Endpoint कॉल करेल.
LUIS ला IoT डिव्हाइसवरून कॉल करण्याऐवजी, तुम्ही HTTP ट्रिगरसह सर्व्हरलेस कोड वापरू शकता. यामुळे तुमचे फंक्शन अॅप REST विनंत्यांसाठी ऐकू शकते आणि त्यांना प्रतिसाद देऊ शकते. हे फंक्शन तुमच्या डिव्हाइससाठी REST Endpoint असेल.
> 💁 तुम्ही LUIS ला थेट तुमच्या IoT डिव्हाइसवरून कॉल करू शकता, परंतु सर्व्हरलेस कोडसारख्या गोष्टींचा वापर करणे चांगले आहे. यामुळे तुम्हाला LUIS अॅप बदलायचे असल्यास, उदाहरणार्थ, तुम्ही चांगले मॉडेल ट्रेन करता किंवा वेगळ्या भाषेत मॉडेल ट्रेन करता, तुम्हाला फक्त तुमचा क्लाउड कोड अपडेट करावा लागेल, हजारो किंवा लाखो IoT डिव्हाइसवर कोड पुन्हा तैनात करावा लागणार नाही.
### कार्य - सर्व्हरलेस फंक्शन्स अॅप तयार करा
1. `smart-timer-trigger` नावाचे Azure Functions अॅप तयार करा आणि ते VS Code मध्ये उघडा.
1. या अॅपमध्ये `speech-trigger` नावाचा HTTP ट्रिगर खालील कमांड वापरून VS Code टर्मिनलमधून जोडा:
```sh
func new --name text-to-timer --template "HTTP trigger"
```
यामुळे `text-to-timer` नावाचा HTTP ट्रिगर तयार होईल.
1. फंक्शन्स अॅप चालवून 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. तुमच्या LUIS API Key, Endpoint URL, आणि App ID साठी **MANAGE** टॅबमधून `local.settings.json` फाइलमध्ये नवीन नोंदी जोडा:
```JSON
"LUIS_KEY": "<primary key>",
"LUIS_ENDPOINT_URL": "<endpoint url>",
"LUIS_APP_ID": "<app id>"
```
`<endpoint url>` ला *Azure Resources* विभागातील Endpoint URL ने बदला. हे `https://<location>.api.cognitive.microsoft.com/` असेल.
`<app id>` ला *Settings* विभागातील App ID ने बदला.
`<primary key>` ला *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)
```
हे तुमच्या LUIS अॅपसाठी `local.settings.json` फाइलमध्ये जोडलेल्या मूल्ये लोड करते, तुमच्या API Key सह credentials ऑब्जेक्ट तयार करते, आणि तुमच्या LUIS अॅपशी संवाद साधण्यासाठी LUIS क्लायंट ऑब्जेक्ट तयार करते.
1. JSON मध्ये `text` प्रॉपर्टी म्हणून पाठवलेला मजकूर HTTP विनंतीच्या बॉडीमधून काढण्यासाठी खालील कोड जोडा:
```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 ला पाठवा, तुमच्या अॅपच्या प्रकाशित स्टेजिंग स्लॉटचा वापर करून:
```python
prediction_response = client.prediction.get_slot_prediction(app_id, 'Staging', prediction_request)
```
1. प्रेडिक्शन प्रतिसादामध्ये टॉप इंटेंट आणि entities असतात. जर टॉप इंटेंट `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 एक array of arrays of strings असेल, प्रत्येक वेळ युनिटसाठी एक array. उदाहरणार्थ, तुम्ही *"Set a four minute 17 second timer."* म्हटले तर `time unit` array मध्ये 2 arrays असतील - `['minute']` आणि `['second']`.
*"Set a four minute 17 second timer."* साठी entities चे JSON:
```json
{
"number": [4, 17],
"time unit": [
["minute"],
["second"]
]
}
```
हा कोड entities मधून टाइमरसाठी एकूण वेळ सेकंदांमध्ये परिभाषित करतो.
1. entities लिंक केलेले नसतात, परंतु त्यांना क्रमाने वापरून जोडले जाऊ शकते. खालील कोड entities मधून क्रमाने डेटा काढतो:
```python
for i in range(0, len(numbers)):
number = numbers[i]
time_unit = time_units[i][0]
```
*"Set a four minute 17 second timer."* साठी:
| loop count | `number` | `time_unit` |
| ---------: | -------: | ----------- |
| 0 | 4 | minute |
| 1 | 17 | second |
1. या लूपमध्ये, सेकंदांमध्ये एकूण वेळ मोजण्यासाठी खालील कोड वापरा:
```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 प्रतिसाद म्हणून परत करा:
```python
payload = {
'seconds': total_seconds
}
return func.HttpResponse(json.dumps(payload), status_code=200)
```
हे कोड सेकंदांची संख्या JSON स्ट्रिंगमध्ये रूपांतरित करते आणि 200 स्टेटस कोडसह परत करते.
1. जर इंटेंट ओळखला गेला नाही तर त्रुटी कोड परत करा:
```python
return func.HttpResponse(status_code=404)
```
404 म्हणजे *not found*.
1. फंक्शन्स अॅप चालवा आणि 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`.
तुम्हाला फंक्शन्स अॅपमधून खालील आउटपुट दिसेल:
```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 वापरत असाल, तर फंक्शन्स अॅप स्थानिक पातळीवर चालवणे सोपे आहे, कारण काही लायब्ररीवरील अवलंबित्वामुळे तुम्ही फंक्शन्स अॅप पूर्वीप्रमाणे तैनात करू शकणार नाही. फंक्शन्स अॅप स्थानिक पातळीवर चालवा आणि तुमच्या संगणकाच्या IP ऍड्रेसद्वारे ऍक्सेस करा. जर तुम्हाला क्लाउडवर तैनात करायचे असेल, तर पुढील धड्यात याबद्दल माहिती दिली जाईल.
* फंक्शन्स अॅप प्रकाशित करा - तुमचे फंक्शन्स अॅप क्लाउडवर प्रकाशित करण्यासाठी पूर्वीच्या धड्यांमधील सूचना अनुसरा. एकदा प्रकाशित झाल्यावर, URL असेल `https://<APP_NAME>.azurewebsites.net/api/text-to-timer`, जिथे `<APP_NAME>` तुमच्या फंक्शन्स अॅपचे नाव असेल. तुमची स्थानिक सेटिंग्ज देखील प्रकाशित करा.
HTTP ट्रिगर्ससह काम करताना, ते डिफॉल्टनुसार फंक्शन्स अॅप कीने सुरक्षित केले जातात. ही की मिळवण्यासाठी खालील कमांड चालवा:
```sh
az functionapp keys list --resource-group smart-timer \
--name <APP_NAME>
```
`functionKeys` विभागातील `default` एंट्रीचे मूल्य कॉपी करा.
```output
{
"functionKeys": {
"default": "sQO1LQaeK9N1qYD6SXeb/TctCmwQEkToLJU6Dw8TthNeUH8VA45hlA=="
},
"masterKey": "RSKOAIlyvvQEQt9dfpabJT018scaLpQu9p1poHIMCxx5LYrIQZyQ/g==",
"systemKeys": {}
}
```
ही की URL मध्ये क्वेरी पॅरामीटर म्हणून जोडावी लागेल, त्यामुळे अंतिम URL असेल `https://<APP_NAME>.azurewebsites.net/api/text-to-timer?code=<FUNCTION_KEY>`, जिथे `<APP_NAME>` तुमच्या फंक्शन्स अॅपचे नाव असेल आणि `<FUNCTION_KEY>` तुमची डिफॉल्ट फंक्शन्स की असेल.
> 💁 तुम्ही `function.json` फाइलमधील `authlevel` सेटिंग वापरून 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#configuration) वाचा.
* फंक्शन्स अॅप स्थानिक पातळीवर चालवा आणि IP ऍड्रेस वापरून ऍक्सेस करा - तुम्ही तुमच्या संगणकाचा IP ऍड्रेस स्थानिक नेटवर्कवर मिळवू शकता आणि URL तयार करण्यासाठी वापरू शकता.
तुमचा IP ऍड्रेस शोधा:
* Windows 10 वर, [IP ऍड्रेस शोधण्याचे मार्गदर्शन](https://support.microsoft.com/windows/find-your-ip-address-f21a9bbc-c582-55cd-35e0-73431160a1b9?WT.mc_id=academic-17441-jabenn) अनुसरा.
* macOS वर, [Mac वर IP ऍड्रेस शोधण्याचे मार्गदर्शन](https://www.hellotech.com/guide/for/how-to-find-ip-address-on-mac) अनुसरा.
* Linux वर, [Linux मध्ये तुमचा IP ऍड्रेस शोधण्याचे मार्गदर्शन](https://opensource.com/article/18/5/how-find-ip-address-linux) मधील खाजगी IP ऍड्रेस शोधण्याचा विभाग अनुसरा.
एकदा तुमचा IP ऍड्रेस मिळाल्यावर, तुम्ही फंक्शनला `http://` URL वापरून ऍक्सेस करू शकता.
: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 वरील natural-language understanding पृष्ठावर](https://wikipedia.org/wiki/Natural-language_understanding)
* HTTP ट्रिगर्सबद्दल अधिक वाचा [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)
## असाइनमेंट
[टाइमर रद्द करा](assignment.md)
---
**अस्वीकरण**:
हा दस्तऐवज AI भाषांतर सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) वापरून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी कृपया लक्षात ठेवा की स्वयंचलित भाषांतरे त्रुटी किंवा अचूकतेच्या अभावाने युक्त असू शकतात. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून उद्भवलेल्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.