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/ur/6-consumer/lessons/2-language-understanding/README.md

44 KiB

زبان کو سمجھنا

اس سبق کا خاکہ

خاکہ نیتیا نرسمہن کی طرف سے۔ بڑی تصویر دیکھنے کے لیے تصویر پر کلک کریں۔

لیکچر سے پہلے کا کوئز

لیکچر سے پہلے کا کوئز

تعارف

پچھلے سبق میں آپ نے تقریر کو متن میں تبدیل کیا تھا۔ اگر آپ اس کو ایک سمارٹ ٹائمر پروگرام کرنے کے لیے استعمال کرنا چاہتے ہیں، تو آپ کے کوڈ کو یہ سمجھنا ہوگا کہ کیا کہا گیا ہے۔ آپ فرض کر سکتے ہیں کہ صارف ایک مقررہ جملہ بولے گا، جیسے "3 منٹ کا ٹائمر سیٹ کریں"، اور اس جملے کو تجزیہ کرکے معلوم کریں گے کہ ٹائمر کتنی دیر کے لیے ہونا چاہیے۔ لیکن یہ طریقہ صارف کے لیے زیادہ آسان نہیں ہے۔ اگر کوئی صارف کہے "3 منٹ کے لیے ٹائمر سیٹ کریں"، تو آپ یا میں سمجھ جائیں گے کہ اس کا مطلب کیا ہے، لیکن آپ کا کوڈ نہیں سمجھے گا کیونکہ وہ ایک مقررہ جملے کی توقع کر رہا ہوگا۔

یہاں زبان کو سمجھنے کی ضرورت پیش آتی ہے، جہاں AI ماڈلز متن کو سمجھ کر مطلوبہ تفصیلات فراہم کرتے ہیں۔ مثال کے طور پر، "3 منٹ کا ٹائمر سیٹ کریں" اور "3 منٹ کے لیے ٹائمر سیٹ کریں" دونوں کو سمجھنا کہ 3 منٹ کا ٹائمر درکار ہے۔

اس سبق میں آپ زبان کو سمجھنے والے ماڈلز کے بارے میں سیکھیں گے، انہیں کیسے بنانا، تربیت دینا، اور اپنے کوڈ میں استعمال کرنا۔

اس سبق میں ہم درج ذیل موضوعات کا احاطہ کریں گے:

زبان کو سمجھنا

انسان ہزاروں سالوں سے زبان کے ذریعے بات چیت کر رہے ہیں۔ ہم الفاظ، آوازوں، یا حرکات کے ذریعے بات چیت کرتے ہیں اور نہ صرف ان کے معنی بلکہ ان کے سیاق و سباق کو بھی سمجھتے ہیں۔ ہم خلوص اور طنز کو سمجھتے ہیں، جس سے ایک ہی الفاظ مختلف معنی دے سکتے ہیں، ہماری آواز کے لہجے پر منحصر۔

حالیہ گفتگو کے بارے میں سوچیں جو آپ نے کی ہیں۔ ان میں سے کتنی گفتگو کمپیوٹر کے لیے سمجھنا مشکل ہوگی کیونکہ انہیں سیاق و سباق کی ضرورت ہے؟

زبان کو سمجھنا، جسے قدرتی زبان کو سمجھنا بھی کہا جاتا ہے، مصنوعی ذہانت کے ایک شعبے کا حصہ ہے جسے قدرتی زبان کی پروسیسنگ (NLP) کہا جاتا ہے۔ یہ پڑھنے کی سمجھ بوجھ سے متعلق ہے، یعنی الفاظ یا جملوں کی تفصیلات کو سمجھنا۔ اگر آپ نے Alexa یا Siri جیسے وائس اسسٹنٹ کا استعمال کیا ہے، تو آپ نے زبان کو سمجھنے والی خدمات استعمال کی ہیں۔ یہ وہ AI خدمات ہیں جو "Alexa، Taylor Swift کا تازہ ترین البم چلائیں" کو میری بیٹی کے پسندیدہ گانوں پر ناچنے میں تبدیل کرتی ہیں۔

💁 کمپیوٹر، اپنی تمام ترقی کے باوجود، متن کو واقعی سمجھنے میں ابھی بہت پیچھے ہیں۔ جب ہم کمپیوٹر کے ساتھ زبان کو سمجھنے کی بات کرتے ہیں، تو ہمارا مطلب انسانی بات چیت جیسا کچھ بھی نہیں ہوتا، بلکہ صرف کچھ الفاظ لے کر کلیدی تفصیلات نکالنا ہوتا ہے۔

انسان کے طور پر، ہم زبان کو بغیر سوچے سمجھے سمجھتے ہیں۔ اگر میں کسی دوسرے انسان سے کہوں "Taylor Swift کا تازہ ترین البم چلائیں"، تو وہ فوراً سمجھ جائے گا کہ میرا مطلب کیا ہے۔ کمپیوٹر کے لیے یہ مشکل ہے۔ اسے الفاظ کو، تقریر سے متن میں تبدیل کرکے، درج ذیل معلومات نکالنی ہوں گی:

  • موسیقی چلانی ہے
  • موسیقی Taylor Swift کی ہے
  • مخصوص موسیقی ایک پورا البم ہے جس میں کئی ٹریک ہیں
  • Taylor Swift کے کئی البم ہیں، لہذا انہیں ترتیب دینا ہوگا اور سب سے حالیہ شائع شدہ البم درکار ہے

ان جملوں کے بارے میں سوچیں جو آپ نے درخواست کرتے وقت بولے ہیں، جیسے کافی کا آرڈر دینا یا کسی خاندان کے فرد سے کچھ پاس کرنے کو کہنا۔ ان جملوں کو ان معلومات میں تقسیم کرنے کی کوشش کریں جو کمپیوٹر کو جملہ سمجھنے کے لیے نکالنی ہوں گی۔

زبان کو سمجھنے والے ماڈلز AI ماڈلز ہیں جو زبان سے مخصوص تفصیلات نکالنے کے لیے تربیت یافتہ ہوتے ہیں، اور پھر مخصوص کاموں کے لیے تربیت دیے جاتے ہیں، جیسے آپ نے Custom Vision ماڈل کو تصاویر کے ایک چھوٹے سیٹ کے ساتھ تربیت دی تھی۔ آپ ایک ماڈل لے سکتے ہیں، پھر اسے اس متن کے ساتھ تربیت دے سکتے ہیں جسے آپ سمجھنا چاہتے ہیں۔

زبان کو سمجھنے والا ماڈل بنائیں

LUIS کا لوگو

آپ LUIS کا استعمال کرتے ہوئے زبان کو سمجھنے والے ماڈلز بنا سکتے ہیں، جو Microsoft کی Cognitive Services کا حصہ ہے۔

کام - ایک مصنف کا وسیلہ بنائیں

LUIS استعمال کرنے کے لیے، آپ کو ایک مصنف کا وسیلہ بنانا ہوگا۔

  1. اپنے 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 مصنف کا وسیلہ بنائے گا۔

کام - ایک زبان کو سمجھنے والی ایپ بنائیں

  1. اپنے براؤزر میں luis.ai پورٹل کھولیں، اور اسی اکاؤنٹ سے سائن ان کریں جو آپ Azure کے لیے استعمال کر رہے ہیں۔

  2. ڈائیلاگ پر دی گئی ہدایات پر عمل کریں تاکہ اپنی Azure سبسکرپشن منتخب کریں، پھر وہ smart-timer-luis-authoring وسیلہ منتخب کریں جو آپ نے ابھی بنایا ہے۔

  3. Conversation apps کی فہرست سے، New app بٹن منتخب کریں تاکہ ایک نئی ایپلیکیشن بنائی جا سکے۔ نئی ایپ کا نام smart-timer رکھیں، اور Culture کو اپنی زبان پر سیٹ کریں۔

    💁 پیش گوئی کے وسیلے کے لیے ایک فیلڈ ہے۔ آپ پیش گوئی کے لیے ایک الگ وسیلہ بنا سکتے ہیں، لیکن مفت مصنف کا وسیلہ ایک مہینے میں 1,000 پیش گوئیاں فراہم کرتا ہے جو ترقی کے لیے کافی ہونی چاہیے، لہذا آپ اسے خالی چھوڑ سکتے ہیں۔

  4. ایپ بنانے کے بعد ظاہر ہونے والے گائیڈ کو پڑھیں تاکہ زبان کو سمجھنے والے ماڈل کو تربیت دینے کے مراحل کو سمجھ سکیں۔ جب آپ گائیڈ پڑھ لیں تو اسے بند کر دیں۔

ارادے اور ادارے

زبان کو سمجھنا ارادوں اور اداروں کے گرد گھومتا ہے۔ ارادے الفاظ کے مقصد کو ظاہر کرتے ہیں، جیسے موسیقی چلانا، ٹائمر سیٹ کرنا، یا کھانے کا آرڈر دینا۔ ادارے وہ چیزیں ہیں جن کا ارادہ حوالہ دیتا ہے، جیسے البم، ٹائمر کی مدت، یا کھانے کی قسم۔ ماڈل کے ذریعے تشریح کیے گئے ہر جملے میں کم از کم ایک ارادہ اور اختیاری طور پر ایک یا زیادہ ادارے ہونے چاہئیں۔

کچھ مثالیں:

جملہ ارادہ ادارے
"Taylor Swift کا تازہ ترین البم چلائیں" موسیقی چلائیں Taylor Swift کا تازہ ترین البم
"3 منٹ کا ٹائمر سیٹ کریں" ٹائمر سیٹ کریں 3 منٹ
"میرا ٹائمر منسوخ کریں" ٹائمر منسوخ کریں کوئی نہیں
"3 بڑے انناس کے پیزا اور ایک سیزر سلاد آرڈر کریں" کھانے کا آرڈر دیں 3 بڑے انناس کے پیزا, سیزر سلاد

ان جملوں کے بارے میں سوچیں جو آپ نے پہلے سوچے تھے۔ ان جملوں میں ارادہ اور ادارے کیا ہوں گے؟

LUIS کو تربیت دینے کے لیے، پہلے آپ ادارے سیٹ کرتے ہیں۔ یہ مقررہ اصطلاحات کی فہرست ہو سکتی ہیں، یا متن سے سیکھے جا سکتے ہیں۔ مثال کے طور پر، آپ اپنے مینو سے دستیاب کھانے کی ایک مقررہ فہرست فراہم کر سکتے ہیں، ہر لفظ کے مختلف ورژن (یا مترادفات) کے ساتھ، جیسے egg plant اور aubergine کو aubergine کے مترادفات کے طور پر۔

ٹائمر سیٹ کرنے کے لیے، آپ کے پاس وقت کے لیے ایک ادارہ ہو سکتا ہے جو پہلے سے موجود نمبر ادارے استعمال کرتا ہے، اور دوسرا یونٹس کے لیے، جیسے منٹ اور سیکنڈ۔ ہر یونٹ کے لیے متعدد ورژن ہوں گے تاکہ واحد اور جمع شکلوں کا احاطہ کیا جا سکے - جیسے منٹ اور منٹس۔

جب ادارے کی وضاحت ہو جائے، تو آپ ارادے بناتے ہیں۔ یہ ماڈل کے ذریعے فراہم کردہ مثال جملوں (جنہیں utterances کہا جاتا ہے) کی بنیاد پر سیکھے جاتے ہیں۔ مثال کے طور پر، ٹائمر سیٹ کریں ارادے کے لیے، آپ درج ذیل جملے فراہم کر سکتے ہیں:

  • 1 سیکنڈ کا ٹائمر سیٹ کریں
  • 1 منٹ اور 12 سیکنڈ کے لیے ٹائمر سیٹ کریں
  • 3 منٹ کے لیے ٹائمر سیٹ کریں
  • 9 منٹ 30 سیکنڈ کا ٹائمر سیٹ کریں

پھر آپ LUIS کو بتاتے ہیں کہ ان جملوں کے کون سے حصے اداروں سے متعلق ہیں:

جملہ "1 منٹ اور 12 سیکنڈ کے لیے ٹائمر سیٹ کریں" اداروں میں تقسیم

جملہ 1 منٹ اور 12 سیکنڈ کے لیے ٹائمر سیٹ کریں کا ارادہ ٹائمر سیٹ کریں ہے۔ اس میں 2 ادارے ہیں جن کے 2 اقدار ہیں:

وقت یونٹ
1 منٹ 1 منٹ
12 سیکنڈ 12 سیکنڈ

ایک اچھا ماڈل تربیت دینے کے لیے، آپ کو مختلف مثال جملوں کی ضرورت ہوتی ہے تاکہ کسی چیز کے لیے مختلف طریقوں سے درخواست کرنے کے تمام ممکنہ طریقے شامل ہوں۔

💁 کسی بھی AI ماڈل کی طرح، جتنا زیادہ اور جتنا درست ڈیٹا آپ تربیت کے لیے استعمال کریں گے، ماڈل اتنا ہی بہتر ہوگا۔

ان مختلف طریقوں کے بارے میں سوچیں جن سے آپ ایک ہی چیز کی درخواست کر سکتے ہیں اور توقع کریں گے کہ انسان اسے سمجھ لے۔

کام - زبان کو سمجھنے والے ماڈلز میں ادارے شامل کریں

ٹائمر کے لیے، آپ کو 2 ادارے شامل کرنے کی ضرورت ہے - ایک وقت کی اکائی (منٹ یا سیکنڈ) کے لیے، اور دوسرا منٹ یا سیکنڈ کی تعداد کے لیے۔

LUIS پورٹل استعمال کرنے کے لیے ہدایات Microsoft Docs پر Quickstart: Build your app in LUIS portal documentation میں مل سکتی ہیں۔

  1. LUIS پورٹل سے، Entities ٹیب منتخب کریں اور Add prebuilt entity بٹن منتخب کرکے number پہلے سے موجود ادارہ شامل کریں۔

  2. وقت کی اکائی کے لیے ایک نیا ادارہ Create بٹن کے ذریعے بنائیں۔ ادارے کا نام time unit رکھیں اور قسم کو List پر سیٹ کریں۔ Normalized values فہرست میں minute اور second کے لیے اقدار شامل کریں، اور synonyms فہرست میں واحد اور جمع شکلیں شامل کریں۔ ہر مترادف شامل کرنے کے بعد return دبائیں تاکہ اسے فہرست میں شامل کیا جا سکے۔

    معمول کی قدر مترادفات
    منٹ منٹ، منٹس
    سیکنڈ سیکنڈ، سیکنڈز

کام - زبان کو سمجھنے والے ماڈلز میں ارادے شامل کریں

  1. Intents ٹیب سے، Create بٹن منتخب کریں تاکہ ایک نیا ارادہ بنایا جا سکے۔ اس ارادے کا نام set timer رکھیں۔

  2. مثالوں میں، مختلف طریقوں سے ٹائمر سیٹ کرنے کے جملے درج کریں، جن میں منٹ، سیکنڈ، اور منٹ اور سیکنڈ دونوں شامل ہوں۔ مثالیں ہو سکتی ہیں:

    • 1 سیکنڈ کا ٹائمر سیٹ کریں
    • 4 منٹ کا ٹائمر سیٹ کریں
    • چار منٹ چھ سیکنڈ کا ٹائمر سیٹ کریں
    • 9 منٹ 30 سیکنڈ کا ٹائمر سیٹ کریں
    • 1 منٹ اور 12 سیکنڈ کے لیے ٹائمر سیٹ کریں
    • 3 منٹ کے لیے ٹائمر سیٹ کریں
    • 3 منٹ اور 1 سیکنڈ کے لیے ٹائمر سیٹ کریں
    • تین منٹ اور ایک سیکنڈ کے لیے ٹائمر سیٹ کریں
    • 1 منٹ اور 1 سیکنڈ کے لیے ٹائمر سیٹ کریں
    • 30 سیکنڈ کے لیے ٹائمر سیٹ کریں
    • 1 سیکنڈ کے لیے ٹائمر سیٹ کریں

    الفاظ اور عددی شکلوں کو مکس کریں تاکہ ماڈل دونوں کو سنبھالنا سیکھے۔

  3. جب آپ ہر مثال درج کریں، تو LUIS اداروں کا پتہ لگانا شروع کرے گا، اور کسی بھی ادارے کو انڈر لائن اور لیبل کرے گا۔

    LUIS کے ذریعے مثالوں میں نمبر اور وقت کی اکائیوں کو انڈر لائن کیا گیا

کام - ماڈل کو تربیت دیں اور جانچ کریں

  1. جب ادارے اور ارادے ترتیب دیے جائیں، تو Train بٹن منتخب کرکے ماڈل کو تربیت دیں۔ یہ بٹن چند سیکنڈ میں ماڈل کو تربیت دے گا۔ تربیت کے دوران بٹن غیر فعال ہوگا، اور تربیت مکمل ہونے کے بعد دوبارہ فعال ہو جائے گا۔

  2. Test بٹن منتخب کریں تاکہ زبان کو سمجھنے والے ماڈل کی جانچ کی جا سکے۔ متن درج کریں جیسے 5 منٹ اور 4 سیکنڈ کے لیے ٹائمر سیٹ کریں اور return دبائیں۔ جملہ اس ٹیکسٹ باکس کے نیچے ظاہر ہوگا جس میں آپ نے متن درج کیا تھا، اور اس کے نیچے top intent ہوگا، یا وہ ارادہ جو سب سے زیادہ امکان کے ساتھ پہچانا گیا۔ یہ set timer ہونا چاہیے۔ ارادے کے نام کے ساتھ اس کے درست ہونے کے امکان کی فیصد ہوگی۔

  3. Inspect آپشن منتخب کریں تاکہ نتائج کا تجزیہ کیا جا سکے۔ آپ کو سب سے زیادہ اسکور کرنے والے ارادے کے ساتھ اس کی فیصد امکان، اور پہچانے گئے اداروں کی فہرستیں نظر آئیں گی۔

  4. Test پین بند کریں جب آپ جانچ مکمل کر لیں۔

کام - ماڈل کو شائع کریں

اس ماڈل کو کوڈ سے استعمال کرنے کے لیے، آپ کو اسے شائع کرنا ہوگا۔ LUIS سے شائع کرتے وقت، آپ اسے یا تو جانچ کے لیے ایک اسٹیجنگ ماحول میں شائع کر سکتے ہیں، یا مکمل ریلیز کے لیے ایک پروڈکٹ ماحول میں۔ اس سبق میں، اسٹیجنگ ماحول کافی ہے۔

  1. LUIS پورٹل سے، Publish بٹن منتخب کریں۔

  2. یقینی بنائیں کہ Staging slot منتخب ہے، پھر Done منتخب کریں۔ آپ کو ایک اطلاع نظر آئے گی جب ایپ شائع ہو جائے۔

  3. آپ اسے curl کے ذریعے جانچ سکتے ہیں۔ curl کمانڈ بنانے کے لیے، آپ کو تین اقدار کی ضرورت ہوگی - endpoint، application ID (App ID) اور API key۔ یہ MANAGE ٹیب سے حاصل کیے جا سکتے ہیں جو اوپر کے مینو سے منتخب کیا جا سکتا ہے۔

    1. Settings سیکشن سے App ID کاپی کریں
  4. Azure Resources کے سیکشن سے Authoring Resource منتخب کریں، اور Primary Key اور Endpoint URL کو کاپی کریں۔

  5. اپنے کمانڈ پرامپٹ یا ٹرمینل میں درج ذیل curl کمانڈ چلائیں:

    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> کو اس جملے سے تبدیل کریں جسے آپ ٹیسٹ کرنا چاہتے ہیں۔

  6. اس کال کا نتیجہ ایک JSON دستاویز ہوگا جو کوئری، سب سے اوپر کی نیت، اور مختلف اقسام کے لحاظ سے تقسیم شدہ entities کی فہرست کو تفصیل سے بیان کرے گا۔

    {
        "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% تھی۔
    • دو number entities کا پتہ چلا، 45 اور 12۔
    • دو time-unit entities کا پتہ چلا، minute اور second۔

زبان کو سمجھنے والے ماڈل کا استعمال کریں

جب LUIS ماڈل شائع ہو جائے، تو اسے کوڈ سے کال کیا جا سکتا ہے۔ پچھلے اسباق میں، آپ نے IoT Hub استعمال کیا تھا تاکہ کلاؤڈ سروسز کے ساتھ مواصلات کو سنبھالا جا سکے، ٹیلیمیٹری بھیجنے اور کمانڈز سننے کے لیے۔ یہ بہت غیر متزامن ہے - ایک بار ٹیلیمیٹری بھیجنے کے بعد آپ کا کوڈ جواب کا انتظار نہیں کرتا، اور اگر کلاؤڈ سروس بند ہو جائے، تو آپ کو معلوم نہیں ہوگا۔

ایک سمارٹ ٹائمر کے لیے، ہم فوری جواب چاہتے ہیں تاکہ ہم صارف کو بتا سکیں کہ ٹائمر سیٹ ہو گیا ہے، یا انہیں خبردار کر سکیں کہ کلاؤڈ سروسز دستیاب نہیں ہیں۔ ایسا کرنے کے لیے، ہمارا IoT ڈیوائس براہ راست ویب endpoint کو کال کرے گا، IoT Hub پر انحصار کرنے کے بجائے۔

LUIS کو IoT ڈیوائس سے کال کرنے کے بجائے، آپ سرور لیس کوڈ استعمال کر سکتے ہیں جس میں ایک مختلف قسم کا trigger ہو - ایک HTTP trigger۔ یہ آپ کی function app کو REST درخواستوں کے لیے سننے اور ان کا جواب دینے کی اجازت دیتا ہے۔ یہ فنکشن ایک REST endpoint ہوگا جسے آپ کا ڈیوائس کال کر سکتا ہے۔

💁 اگرچہ آپ LUIS کو براہ راست اپنے IoT ڈیوائس سے کال کر سکتے ہیں، لیکن سرور لیس کوڈ جیسا کچھ استعمال کرنا بہتر ہے۔ اس طرح جب آپ اس LUIS ایپ کو تبدیل کرنا چاہیں جسے آپ کال کر رہے ہیں، مثال کے طور پر جب آپ ایک بہتر ماڈل ٹرین کریں یا کسی مختلف زبان میں ماڈل ٹرین کریں، تو آپ کو صرف اپنے کلاؤڈ کوڈ کو اپ ڈیٹ کرنا ہوگا، نہ کہ ہزاروں یا لاکھوں IoT ڈیوائسز پر کوڈ کو دوبارہ تعینات کرنا۔

کام - ایک سرور لیس فنکشنز ایپ بنائیں

  1. ایک Azure Functions ایپ بنائیں جس کا نام smart-timer-trigger ہو، اور اسے VS Code میں کھولیں۔

  2. اس ایپ میں ایک HTTP trigger شامل کریں جس کا نام speech-trigger ہو، درج ذیل کمانڈ کو VS Code ٹرمینل کے اندر سے چلائیں:

    func new --name text-to-timer --template "HTTP trigger"
    

    یہ ایک HTTP trigger بنائے گا جس کا نام text-to-timer ہوگا۔

  3. HTTP trigger کو فنکشنز ایپ چلا کر ٹیسٹ کریں۔ جب یہ چلے گا تو آپ کو آؤٹ پٹ میں endpoint نظر آئے گا:

    Functions:
    
            text-to-timer: [GET,POST] http://localhost:7071/api/text-to-timer
    

    اسے اپنے براؤزر میں http://localhost:7071/api/text-to-timer URL لوڈ کر کے ٹیسٹ کریں۔

    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 فائل میں درج ذیل لائن شامل کریں تاکہ اس پیکج پر انحصار شامل کیا جا سکے:

    azure-cognitiveservices-language-luis
    
  2. یقینی بنائیں کہ VS Code ٹرمینل میں ورچوئل ماحول فعال ہے، اور درج ذیل کمانڈ چلائیں تاکہ Pip پیکجز انسٹال کیے جا سکیں:

    pip install -r requirements.txt
    

    💁 اگر آپ کو غلطیاں ملیں، تو آپ کو درج ذیل کمانڈ کے ذریعے pip کو اپ گریڈ کرنے کی ضرورت ہو سکتی ہے:

    pip install --upgrade pip
    
  3. local.settings.json فائل میں اپنے LUIS API Key، Endpoint URL، اور App ID کے لیے نئے اندراجات شامل کریں جو LUIS پورٹل کے MANAGE ٹیب سے حاصل کیے گئے ہیں:

    "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 سے تبدیل کریں۔

  4. __init__.py فائل میں درج ذیل درآمدات شامل کریں:

    import json
    import os
    from azure.cognitiveservices.language.luis.runtime import LUISRuntimeClient
    from msrest.authentication import CognitiveServicesCredentials
    

    یہ کچھ سسٹم لائبریریوں کے ساتھ ساتھ LUIS کے ساتھ تعامل کرنے کے لیے لائبریریوں کو درآمد کرتا ہے۔

  5. 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)
    

    یہ آپ کے LUIS ایپ کے لیے local.settings.json فائل میں شامل کردہ اقدار کو لوڈ کرتا ہے، آپ کے API key کے ساتھ ایک credentials object بناتا ہے، پھر آپ کے LUIS ایپ کے ساتھ تعامل کرنے کے لیے ایک LUIS client object بناتا ہے۔

  6. یہ HTTP trigger JSON کے طور پر سمجھنے کے لیے متن پاس کرتے ہوئے کال کیا جائے گا، جس میں متن text پراپرٹی میں ہوگا۔ درج ذیل کوڈ HTTP درخواست کے باڈی سے قدر نکالتا ہے، اور اسے کنسول میں لاگ کرتا ہے۔ یہ کوڈ main فنکشن میں شامل کریں:

    req_body = req.get_json()
    text = req_body['text']
    logging.info(f'Request - {text}')
    
  7. LUIS سے پیش گوئی کی درخواستیں بھیج کر پیش گوئی کی جاتی ہیں - ایک JSON دستاویز جس میں پیش گوئی کرنے کے لیے متن شامل ہوتا ہے۔ درج ذیل کوڈ کے ساتھ یہ بنائیں:

    prediction_request = { 'query' : text }
    
  8. یہ درخواست LUIS کو بھیجی جا سکتی ہے، اس staging slot کا استعمال کرتے ہوئے جس پر آپ کی ایپ شائع ہوئی تھی:

    prediction_response = client.prediction.get_slot_prediction(app_id, 'Staging', prediction_request)
    
  9. پیش گوئی کے جواب میں سب سے اوپر کی نیت شامل ہوتی ہے - سب سے زیادہ پیش گوئی سکور کے ساتھ نیت، اور entities۔ اگر سب سے اوپر کی نیت set timer ہے، تو entities کو پڑھا جا سکتا ہے تاکہ ٹائمر کے لیے مطلوبہ وقت حاصل کیا جا سکے:

    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 arrays کی arrays ہوں گی جن میں ہر وقت کی اکائی ایک array کے اندر ہوگی۔ مثال کے طور پر، اگر آپ نے کہا "Set a four minute 17 second timer."، تو time unit array میں 2 arrays ہوں گے جن میں ہر ایک میں ایک قدر ہوگی - ['minute'] اور ['second']۔

    "Set a four minute 17 second timer." کے لیے ان entities کا JSON ورژن:

    {
        "number": [4, 17],
        "time unit": [
            ["minute"],
            ["second"]
        ]
    }
    

    یہ کوڈ ٹائمر کے لیے کل وقت سیکنڈز میں شمار کرنے کے لیے ایک count بھی بیان کرتا ہے۔ یہ entities کی اقدار سے بھرا جائے گا۔

  10. entities آپس میں جڑے ہوئے نہیں ہیں، لیکن ہم ان کے بارے میں کچھ مفروضے بنا سکتے ہیں۔ یہ بولے گئے ترتیب میں ہوں گے، لہذا array میں پوزیشن کا استعمال کیا جا سکتا ہے تاکہ یہ معلوم کیا جا سکے کہ کون سا نمبر کس وقت کی اکائی سے میل کھاتا ہے۔ مثال کے طور پر:

    • "Set a 30 second timer" - اس میں ایک نمبر ہوگا، 30, اور ایک وقت کی اکائی، second، لہذا واحد نمبر واحد وقت کی اکائی سے میل کھائے گا۔
    • "Set a 2 minute and 30 second timer" - اس میں دو نمبر ہوں گے، 2 اور 30, اور دو وقت کی اکائیاں، minute اور second, لہذا پہلا نمبر پہلی وقت کی اکائی کے لیے ہوگا (2 منٹ)، اور دوسرا نمبر دوسری وقت کی اکائی کے لیے ہوگا (30 سیکنڈ)۔

    درج ذیل کوڈ number entities میں اشیاء کی تعداد حاصل کرتا ہے، اور اس کا استعمال کرتے ہوئے ہر array سے پہلے آئٹم کو نکالتا ہے، پھر دوسرا اور اسی طرح۔ اسے if بلاک کے اندر شامل کریں۔

    for i in range(0, len(numbers)):
        number = numbers[i]
        time_unit = time_units[i][0]
    

    "Set a four minute 17 second timer." کے لیے، یہ دو بار loop کرے گا، درج ذیل اقدار دے گا:

    loop count number time_unit
    0 4 minute
    1 17 second
  11. اس loop کے اندر، نمبر اور وقت کی اکائی کا استعمال کرتے ہوئے ٹائمر کے لیے کل وقت کا حساب لگائیں، ہر منٹ کے لیے 60 سیکنڈز شامل کریں، اور کسی بھی سیکنڈز کے لیے نمبر شامل کریں۔

    if time_unit == 'minute':
        total_seconds += number * 60
    else:
        total_seconds += number
    
  12. entities کے ذریعے loop کے باہر، ٹائمر کے لیے کل وقت کو لاگ کریں:

    logging.info(f'Timer required for {total_seconds} seconds')
    
  13. سیکنڈز کی تعداد کو HTTP جواب کے طور پر فنکشن سے واپس کرنے کی ضرورت ہے۔ if بلاک کے آخر میں درج ذیل شامل کریں:

    payload = {
        'seconds': total_seconds
    }
    return func.HttpResponse(json.dumps(payload), status_code=200)
    

    یہ کوڈ ایک payload بناتا ہے جس میں ٹائمر کے لیے کل سیکنڈز کی تعداد شامل ہوتی ہے، اسے JSON string میں تبدیل کرتا ہے اور اسے HTTP نتیجے کے طور پر واپس کرتا ہے جس کا status code 200 ہوتا ہے، جو کامیاب کال کو ظاہر کرتا ہے۔

  14. آخر میں، if بلاک کے باہر، اگر نیت کو پہچانا نہ گیا ہو تو ایک error code واپس کریں:

    return func.HttpResponse(status_code=404)
    

    404 not found کے لیے status code ہے۔

  15. فنکشن ایپ چلائیں اور اسے 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:
    
            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 ڈیوائس کے لیے دستیاب بنائیں

  1. آپ کے IoT ڈیوائس کو آپ کے REST endpoint کو کال کرنے کے لیے URL جاننے کی ضرورت ہوگی۔ جب آپ نے اسے پہلے رسائی حاصل کی، تو آپ نے localhost استعمال کیا، جو آپ کے مقامی کمپیوٹر پر REST endpoints تک رسائی حاصل کرنے کے لیے ایک شارٹ کٹ ہے۔ اپنے IoT ڈیوائس کو رسائی حاصل کرنے کی اجازت دینے کے لیے، آپ کو یا تو کلاؤڈ پر شائع کرنا ہوگا، یا اپنے IP ایڈریس کو مقامی طور پر رسائی حاصل کرنے کے لیے حاصل کرنا ہوگا۔

    ⚠️ اگر آپ Wio Terminal استعمال کر رہے ہیں، تو فنکشن ایپ کو مقامی طور پر چلانا آسان ہے، کیونکہ لائبریریوں پر انحصار ہوگا جو آپ کو فنکشن ایپ کو اسی طرح تعینات کرنے کی اجازت نہیں دے گا جیسا کہ آپ نے پہلے کیا تھا۔ فنکشن ایپ کو مقامی طور پر چلائیں اور اپنے کمپیوٹر کے IP ایڈریس کے ذریعے رسائی حاصل کریں۔ اگر آپ کلاؤڈ پر تعینات کرنا چاہتے ہیں، تو بعد کے سبق میں اس کے طریقے کے بارے میں معلومات فراہم کی جائیں گی۔

    • فنکشنز ایپ شائع کریں - اپنی فنکشنز ایپ کو کلاؤڈ پر شائع کرنے کے لیے پہلے کے اسباق میں دی گئی ہدایات پر عمل کریں۔ ایک بار شائع ہونے کے بعد، URL https://<APP_NAME>.azurewebsites.net/api/text-to-timer ہوگا، جہاں <APP_NAME> آپ کی فنکشنز ایپ کا نام ہوگا۔ یقینی بنائیں کہ اپنی مقامی ترتیبات بھی شائع کریں۔

      HTTP triggers کے ساتھ کام کرتے وقت، وہ ڈیفالٹ طور پر ایک فنکشن ایپ key کے ساتھ محفوظ ہوتے ہیں۔ اس key کو حاصل کرنے کے لیے درج ذیل کمانڈ چلائیں:

      az functionapp keys list --resource-group smart-timer \
                               --name <APP_NAME>                               
      

      functionKeys سیکشن سے default اندراج کی قدر کو کاپی کریں۔

      {
        "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> آپ کی فنکشنز ایپ کا نام ہوگا، اور <FUNCTION_KEY> آپ کا ڈیفالٹ فنکشن key ہوگا۔

      💁 آپ HTTP trigger کی authorization کی قسم کو authlevel سیٹنگ کے ذریعے function.json فائل میں تبدیل کر سکتے ہیں۔ آپ اس کے بارے میں مزید پڑھ سکتے ہیں Azure Functions HTTP trigger documentation on Microsoft docs کے configuration سیکشن میں۔

    • فنکشنز ایپ کو مقامی طور پر چلائیں، اور IP ایڈریس کا استعمال کرتے ہوئے رسائی حاصل کریں - آپ اپنے کمپیوٹر کے IP ایڈریس کو اپنے مقامی نیٹ ورک پر حاصل کر سکتے ہیں، اور اس کا استعمال کرتے ہوئے URL بنا سکتے ہیں۔

      اپنا IP ایڈریس تلاش کریں:

      ایک بار جب آپ کے پاس آپ کا IP ایڈریس ہو، تو آپ فنکشن کو http:// کے ذریعے رسائی حاصل کر سکیں گے۔ <آئی_پی_ایڈریس> :7071/api/text-to-timer, جہاں <IP_ADDRESS>آپ کا IP ایڈریس ہوگا، مثال کے طور پرhttp://192.168.1.10:7071/api/text-to-timer`.

      💁 یاد رکھیں کہ یہ پورٹ 7071 استعمال کرتا ہے، لہذا IP ایڈریس کے بعد آپ کو :7071 شامل کرنا ہوگا۔

      💁 یہ صرف اس وقت کام کرے گا جب آپ کا IoT ڈیوائس آپ کے کمپیوٹر کے ساتھ ایک ہی نیٹ ورک پر ہو۔

  2. curl استعمال کرتے ہوئے endpoint کو ٹیسٹ کریں۔


🚀 چیلنج

ایک ہی چیز کی درخواست کرنے کے کئی طریقے ہیں، جیسے کہ ٹائمر سیٹ کرنا۔ مختلف طریقوں کے بارے میں سوچیں اور انہیں اپنے LUIS ایپ میں مثالوں کے طور پر استعمال کریں۔ ان کو ٹیسٹ کریں تاکہ یہ دیکھ سکیں کہ آپ کا ماڈل مختلف طریقوں سے ٹائمر کی درخواست کو کس حد تک سمجھ سکتا ہے۔

لیکچر کے بعد کا کوئز

لیکچر کے بعد کا کوئز

جائزہ اور خود مطالعہ

اسائنمنٹ

ٹائمر منسوخ کریں


ڈسکلیمر:
یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔