इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी
1. परिचय
पिछली बार अपडेट किया गया: 08-04-2024
टेक्स्ट एम्बेड करना
टेक्स्ट एम्बेड करने का मतलब है, टेक्स्ट वाले डेटा को संख्याओं में बदलने की प्रोसेस. ये संख्याएं, अक्सर वैक्टर होती हैं. ये किसी टेक्स्ट में शब्दों के बीच के संबंधों और उनके अर्थ को कैप्चर करती हैं. इसे इस तरह से देखें:
टेक्स्ट एक ऐसी जटिल भाषा है जिसमें बारीकियां और अस्पष्टताएं होती हैं.
टेक्स्ट एम्बेड करने की सुविधा, उस भाषा को आसान और गणितीय फ़ॉर्मैट में बदल देती है, जिसे कंप्यूटर समझ सकते हैं और उसमें बदलाव कर सकते हैं.
टेक्स्ट एम्बेड करने के फ़ायदे
- बेहतर तरीके से प्रोसेस करने में मदद मिलती है: कंप्यूटर के लिए, रॉ टेक्स्ट की तुलना में संख्याओं को प्रोसेस करना ज़्यादा आसान होता है. यह सर्च इंजन, सुझाव देने वाले सिस्टम, और मशीन से अनुवाद करने जैसी गतिविधियों के लिए ज़रूरी है.
- शब्दों के सही मतलब को कैप्चर करता है: एम्बेडिंग, शब्दों के सिर्फ़ शाब्दिक मतलब से आगे जाता है. ये शब्दों के बीच के कॉन्टेक्स्ट और संबंधों को कैप्चर करते हैं. इससे, ज़्यादा बारीकी से विश्लेषण किया जा सकता है.
- मशीन लर्निंग की परफ़ॉर्मेंस को बेहतर बनाता है: टेक्स्ट एम्बेडमेंट का इस्तेमाल, मशीन लर्निंग मॉडल में सुविधाओं के तौर पर किया जा सकता है. इससे सेंटीमेंट विश्लेषण, टेक्स्ट का क्लासिफ़िकेशन, और विषय मॉडलिंग जैसे टास्क में बेहतर परफ़ॉर्मेंस मिलती है.
टेक्स्ट एम्बेड करने के उदाहरण
टेक्स्ट एम्बेडमेंट, टेक्स्ट को संख्याओं में बदलकर, नेचुरल लैंग्वेज प्रोसेसिंग (एनएलपी) में कई तरह के ऐप्लिकेशन को अनलॉक करता है. यहां इनके इस्तेमाल के कुछ उदाहरण दिए गए हैं:
1. सर्च इंजन और जानकारी वापस पाने से जुड़ा प्रोटोकॉल:
टेक्स्ट एम्बेड करने की सुविधा की मदद से, सर्च इंजन क्वेरी के सेमैनटिक मतलब को समझ सकते हैं. साथ ही, उन्हें काम के दस्तावेज़ों से मैच कर सकते हैं. भले ही, एग्ज़ैक्ट कीवर्ड मौजूद न हों.
सर्च क्वेरी के एम्बेड की तुलना दस्तावेज़ के एम्बेड से करके, सर्च इंजन उन दस्तावेज़ों की पहचान कर सकते हैं जिनमें मिलते-जुलते विषय या कॉन्सेप्ट शामिल हैं.
2. सुझाव देने वाले सिस्टम:
सुझाव देने वाले सिस्टम, टेक्स्ट एम्बेडमेंट का इस्तेमाल करके, उपयोगकर्ता के व्यवहार और प्राथमिकताओं का विश्लेषण करते हैं. ये प्राथमिकताएं, समीक्षाओं, रेटिंग या ब्राउज़िंग इतिहास से पता चलती हैं.
इसके बाद, सिस्टम उन प्रॉडक्ट, लेखों या अन्य कॉन्टेंट की तुलना करके, मिलते-जुलते आइटम का सुझाव दे सकता है जिनसे उपयोगकर्ता ने इंटरैक्ट किया है.
3. कॉन्टेंट में नकल का पता लगाने की सुविधा:
दो टेक्स्ट के एम्बेड की तुलना करके, उनके सेमैनटिक स्ट्रक्चर में मौजूद अहम समानताओं का पता लगाया जा सकता है. इससे, कॉपीराइट का उल्लंघन होने की संभावना का पता चलता है.
ये सिर्फ़ कुछ उदाहरण हैं. टेक्स्ट एम्बेड करने की तकनीकों के बेहतर होने के साथ-साथ, इनकी संभावनाएं भी बढ़ती रहेंगी. एम्बेडिंग की मदद से, कंप्यूटर भाषा को बेहतर तरीके से समझ पाते हैं. इसलिए, आने वाले समय में हम ज़्यादा इनोवेटिव ऐप्लिकेशन की उम्मीद कर सकते हैं.
textembedding-gecko@003
Textembedding-gecko@003, पहले से ट्रेन किए गए टेक्स्ट एम्बेडिंग मॉडल का एक खास वर्शन है. इसे Google Cloud Platform (GCP), Vertex AI, और एआई टूल और सेवाओं के सुइट के ज़रिए उपलब्ध कराता है.
आपको क्या बनाना है
इस कोडलैब में, आपको Python स्क्रिप्ट बनानी है. यह स्क्रिप्ट:
- textembedding-gecko@003 को कॉल करने और टेक्स्ट को टेक्स्ट एम्बेड (वेक्टर) में बदलने के लिए, Vertex API का इस्तेमाल करें.
- टेक्स्ट और उनके वैक्टर से बना सिम्युलेटेड डेटाबेस बनाना
- वेक्टर की तुलना करके, हमारे सिम्युलेट किए गए वेक्टर डेटाबेस में क्वेरी करें और सबसे सही जवाब पाएं.
आपको इनके बारे में जानकारी मिलेगी
- GCP में टेक्स्ट एम्बेड करने की सुविधा इस्तेमाल करने का तरीका
- textembedding-gecko@003 को कॉल करने का तरीका
- इसे Workbench में चलाने का तरीका
- स्क्रिप्ट को लागू करने के लिए, Vertex AI - Workbench का इस्तेमाल करने का तरीका
आपको इन चीज़ों की ज़रूरत होगी
- Chrome का नया वर्शन
- Python के बारे में जानकारी
- Google Cloud प्रोजेक्ट
- Vertex AI - Workbench का ऐक्सेस
2. सेट अप करना
Vertex AI Workbench इंस्टेंस बनाना
- Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर, कोई Google Cloud प्रोजेक्ट चुनें या बनाएं.
- प्रोजेक्ट चुनने वाले टूल पर जाएं
- पक्का करें कि आपके Google Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू हो.
- Notebooks API को चालू करें.
Google Cloud Console, gcloud CLI या Terraform का इस्तेमाल करके, Vertex AI Workbench का इंस्टेंस बनाया जा सकता है. इस ट्यूटोरियल के लिए, हम Google Cloud Console का इस्तेमाल करके इसे बनाएंगे. अन्य तरीकों के बारे में ज़्यादा जानकारी यहां मिल सकती है.
- Google Cloud Console में, इंस्टेंस पेज पर जाएं. इसे Vertex AI मेन्यू, नोटबुक सेक्शन में जाकर ऐक्सेस किया जा सकता है. इसके बाद, Workbench पर क्लिक करें.
- 'इंस्टेंस' पर जाएं.
- नया बनाएं पर क्लिक करें.
- 'इंस्टेंस बनाएं' डायलॉग बॉक्स में, 'जानकारी' सेक्शन में अपने नए इंस्टेंस के लिए यह जानकारी दें:
नाम: अपने नए इंस्टेंस के लिए कोई नाम दें. नाम की शुरुआत किसी अक्षर से होनी चाहिए. इसके बाद, अंग्रेज़ी के छोटे अक्षर, संख्याएं या हाइफ़न (-) इस्तेमाल किए जा सकते हैं. नाम में इनमें से ज़्यादा से ज़्यादा 62 वर्ण हो सकते हैं. नाम का आखिरी वर्ण हाइफ़न नहीं होना चाहिए.
इलाका और ज़ोन: नए इंस्टेंस के लिए कोई इलाका और ज़ोन चुनें. नेटवर्क की बेहतर परफ़ॉर्मेंस के लिए, अपने देश/इलाके के हिसाब से कोई क्षेत्र चुनें.
जीपीयू इंस्टॉल करने की ज़रूरत नहीं है
नेटवर्किंग सेक्शन में, यह जानकारी दें:
नेटवर्किंग: अपने मौजूदा प्रोजेक्ट में किसी नेटवर्क का इस्तेमाल करने के लिए, नेटवर्क के विकल्पों में बदलाव करें. इसके अलावा, अगर होस्ट प्रोजेक्ट में शेयर किया गया कोई VPC नेटवर्क कॉन्फ़िगर किया गया है, तो उसका इस्तेमाल करें. अगर होस्ट प्रोजेक्ट में शेयर किए गए VPC का इस्तेमाल किया जा रहा है, तो आपको सेवा प्रोजेक्ट से Notebooks के सर्विस एजेंट को, Compute नेटवर्क उपयोगकर्ता की भूमिका (roles/compute.networkUser) भी देनी होगी.
नेटवर्क फ़ील्ड में: अपनी पसंद का नेटवर्क चुनें. VPC नेटवर्क को तब तक चुना जा सकता है, जब तक नेटवर्क पर निजी Google ऐक्सेस चालू हो या इंटरनेट को ऐक्सेस किया जा सकता हो
सबनेटवर्क फ़ील्ड में: अपनी पसंद का सबनेटवर्क चुनें. आपके पास डिफ़ॉल्ट विकल्प चुनने का विकल्प होता है.
इंस्टेंस प्रॉपर्टी में, डिफ़ॉल्ट प्रॉपर्टी को छोड़ा जा सकता है. यह e2-standard-4 है.
- 'बनाएं' पर क्लिक करें.
Vertex AI Workbench, इंस्टेंस बनाता है और उसे अपने-आप शुरू करता है. जब इंस्टेंस इस्तेमाल के लिए तैयार हो जाता है, तो Vertex AI Workbench, Open JupyterLab लिंक को चालू करता है. उस पर क्लिक करें.
Python 3 नोटबुक बनाना
- Jupyterlab में, लॉन्चर से नोटबुक सेक्शन में जाकर, Python के लोगो वाले आइकॉन पर क्लिक करें. इस आइकॉन पर Python3 लिखा होता है.
- बिना टाइटल वाला एक Jupyter notebook बनाया गया है. इसका एक्सटेंशन ipynb है.
- बाईं ओर मौजूद फ़ाइल ब्राउज़र सेक्शन का इस्तेमाल करके, इसका नाम बदला जा सकता है या इसे पहले जैसा ही रखा जा सकता है.
अब, हम नोटबुक में अपना कोड डालना शुरू कर सकते हैं.
3. ज़रूरी लाइब्रेरी इंपोर्ट करना
इंस्टेंस बनाने और Jupyterlab खोलने के बाद, हमें अपने कोडलैब के लिए ज़रूरी सभी लाइब्रेरी इंस्टॉल करनी होंगी.
इसके लिए, हमें इनकी ज़रूरत होगी:
- numpy
- पांडा
- vertexai.language_models से TextEmbeddingInput, TextEmbeddingModel
नीचे दिए गए कोड को कॉपी करके किसी सेल में चिपकाएं:
from vertexai.language_models import TextEmbeddingInput, TextEmbeddingModel
import numpy as np
import pandas as pd
यह कुछ ऐसा दिखाई देगा:
4. सिम्युलेट किया गया वेक्टर डेटाबेस बनाना
अपने कोड की जांच करने के लिए, हम टेक्स्ट और उनके वेक्टर से बना एक डेटाबेस बनाएंगे. इस डेटाबेस को gecko@003 टेक्स्ट एम्बेडिंग मॉडल का इस्तेमाल करके ट्रांसलेट किया जाएगा.
इसका मकसद, उपयोगकर्ताओं को कोई टेक्स्ट खोजने, उसे वेक्टर में बदलने, हमारे डेटाबेस में खोजने, और सबसे सटीक नतीजा दिखाने में मदद करना है.
हमारे वेक्टर डेटाबेस में तीन रिकॉर्ड होंगे. हम इसे इस तरह बनाएंगे:
नीचे दिए गए कोड को कॉपी करके, किसी नई सेल में चिपकाएं.
DOCUMENT1 = {
"title": "Operating the Climate Control System",
"content": "Your Googlecar has a climate control system that allows you to adjust the temperature and airflow in the car. To operate the climate control system, use the buttons and knobs located on the center console. Temperature: The temperature knob controls the temperature inside the car. Turn the knob clockwise to increase the temperature or counterclockwise to decrease the temperature. Airflow: The airflow knob controls the amount of airflow inside the car. Turn the knob clockwise to increase the airflow or counterclockwise to decrease the airflow. Fan speed: The fan speed knob controls the speed of the fan. Turn the knob clockwise to increase the fan speed or counterclockwise to decrease the fan speed. Mode: The mode button allows you to select the desired mode. The available modes are: Auto: The car will automatically adjust the temperature and airflow to maintain a comfortable level. Cool: The car will blow cool air into the car. Heat: The car will blow warm air into the car. Defrost: The car will blow warm air onto the windshield to defrost it."}
DOCUMENT2 = {
"title": "Touchscreen",
"content": "Your Googlecar has a large touchscreen display that provides access to a variety of features, including navigation, entertainment, and climate control. To use the touchscreen display, simply touch the desired icon. For example, you can touch the \"Navigation\" icon to get directions to your destination or touch the \"Music\" icon to play your favorite songs."}
DOCUMENT3 = {
"title": "Shifting Gears",
"content": "Your Googlecar has an automatic transmission. To shift gears, simply move the shift lever to the desired position. Park: This position is used when you are parked. The wheels are locked and the car cannot move. Reverse: This position is used to back up. Neutral: This position is used when you are stopped at a light or in traffic. The car is not in gear and will not move unless you press the gas pedal. Drive: This position is used to drive forward. Low: This position is used for driving in snow or other slippery conditions."}
documents = [DOCUMENT1, DOCUMENT2, DOCUMENT3]
df_initial_db = pd.DataFrame(documents)
df_initial_db.columns = ['Title', 'Text']
df_initial_db
यह इस तरह दिखेगा:
चलिए, कोड का विश्लेषण करते हैं
DOCUMENT1, DOCUMENT2, और DOCUMENT3 वैरिएबल में, हम एक डिक्शनरी सेव कर रहे हैं. यह डिक्शनरी, दस्तावेज़ों के टाइटल और कॉन्टेंट को एमुलेट करेगी. ये "दस्तावेज़", Google की बनाई गई कार के सिम्युलेटेड मैन्युअल का रेफ़रंस दे रहे हैं.
अगली लाइन में, हम उन तीन दस्तावेज़ों (डिक्शनरी) की सूची बनाते हैं.
documents = [DOCUMENT1, DOCUMENT2, DOCUMENT3]
आखिर में, pandas का इस्तेमाल करके, हम उस सूची से एक डेटाफ़्रेम बनाते हैं जिसे df_initial_db कहा जाएगा.
df_initial_db = pd.DataFrame(documents)
df_initial_db.columns = ['Title', 'Text']
df_initial_db
5. टेक्स्ट एम्बेड करना
अब हमें दस्तावेज़ों के सिम्युलेट किए गए डेटाबेस में मौजूद हर रिकॉर्ड के लिए, gecko@003 मॉडल का इस्तेमाल करके टेक्स्ट एम्बेडिंग मिलेगी.
नीचे दिए गए कोड को कॉपी करके, किसी नई सेल में चिपकाएं:
def embed_fn(df_input):
list_embedded_values = []
for index, row in df_input.iterrows():
model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")
embeddings = model.get_embeddings([(row['Text'])])
list_embedded_values.append(embeddings[0].values)
df_input['Embedded text'] = list_embedded_values
return df_input
df_embedded_values_db = embed_fn(df_initial_db)
df_embedded_values_db
यह इस तरह दिखेगा:
चलिए, कोड का विश्लेषण करते हैं
हमने embed_fn नाम का एक फ़ंक्शन तय किया है. इसमें इनपुट के तौर पर, pandas डेटाफ़्रेम मिलेगा. इसमें एम्बेड करने के लिए टेक्स्ट शामिल होगा. इसके बाद, फ़ंक्शन वेक्टर के तौर पर कोड में बदले गए टेक्स्ट को दिखाता है.
def embed_fn(df_input):
list_embedded_values = []
for index, row in df_input.iterrows():
model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")
embeddings = model.get_embeddings([(row['Text'])])
list_embedded_values.append(embeddings[0].values)
df_input['Embedded text'] = list_embedded_values
return df_input
list_embedded_values नाम की सूची में, हम हर पंक्ति के कोड में बदले गए टेक्स्ट को सेव और जोड़ेंगे.
pandas के iterrows तरीके का इस्तेमाल करके, डेटाफ़्रेम की हर लाइन को दोहराया जा सकता है. इससे, कॉलम टेक्स्ट से वैल्यू मिलती हैं. इस कॉलम में, हमारे सिम्युलेट किए गए डेटाबेस की मैन्युअल जानकारी होती है.
gecko@003 मॉडल का इस्तेमाल करके, सामान्य टेक्स्ट भेजने और उसका वेक्टर दिखाने के लिए, हम वैरिएबल मॉडल को शुरू करते हैं. इसके बाद, TextEmbeddingModel.from_pretrained फ़ंक्शन को कॉल करके, मॉडल को इस्तेमाल करने के लिए सेट करते हैं.
model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")
embeddings = model.get_embeddings([(row['Text'])])
इसके बाद, वैरिएबल एम्बेड में, हम model.get_embeddings फ़ंक्शन के ज़रिए भेजे गए टेक्स्ट का वेक्टर कैप्चर करते हैं.
फ़ंक्शन के आखिर में, हम डेटाफ़्रेम में 'एम्बेड किया गया टेक्स्ट' नाम का एक नया कॉलम बनाते हैं. इसमें gecko@003 मॉडल के आधार पर बनाए गए वैक्टर की सूची होगी.
df_input['Embedded text'] = list_embedded_values
return df_input
आखिर में, df_embedded_values_db वैरिएबल में, हम सिम्युलेट किए गए डेटाबेस से अपना ओरिजनल डेटा और हर पंक्ति के लिए वैक्टर की सूची वाला नया कॉलम शामिल करते हैं.
df_embedded_values_db = embed_fn(df_initial_db)
df_embedded_values_db
6. वेक्टर डेटाबेस से सवाल पूछना
अब हमारे डेटाबेस में टेक्स्ट और उनके वैक्टर मौजूद हैं. इसलिए, हम सवाल पूछकर जवाब पाने के लिए, अपने डेटाबेस में क्वेरी कर सकते हैं.
इसके लिए, नीचे दिए गए कोड को कॉपी करके किसी नई सेल में चिपकाएं:
question='How do you shift gears in the Google car?'
model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")
embeddings = model.get_embeddings([(question)])
text_to_search=embeddings[0].values
len(text_to_search)
नतीजा कुछ ऐसा दिखेगा:
चलिए, कोड का विश्लेषण करते हैं
पिछले चरण के फ़ंक्शन की तरह ही, हम पहले सवाल के वैरिएबल को शुरू करते हैं. इसमें हम अपने डेटाबेस से पूछने के लिए सवाल डालते हैं.
question='How do you shift gears in the Google car?'
इसके बाद, हम मॉडल वैरिएबल में वह मॉडल सेट करते हैं जिसका इस्तेमाल हमें TextEmbeddingModel.from_pretrained फ़ंक्शन के ज़रिए करना है. इस मामले में, यह gecko@003 मॉडल है.
model = TextEmbeddingModel.from_pretrained("textembedding-gecko@003")
embeddings वैरिएबल में, हम model.get_embeddings फ़ंक्शन को कॉल करते हैं और टेक्स्ट को वेक्टर में बदलने के लिए पास करते हैं. इस मामले में, हम पूछे जाने वाले सवाल को पास करते हैं.
embeddings = model.get_embeddings([(question)])
आखिर में, text_to_search वैरिएबल में सवाल से अनुवाद किए गए वेक्टर की सूची होती है.
हम वेक्टर की लंबाई को सिर्फ़ रेफ़रंस के तौर पर प्रिंट करते हैं.
text_to_search=embeddings[0].values
len(text_to_search)
7. वेक्टर की तुलना करना
अब हमारे सिम्युलेट किए गए डेटाबेस में वैक्टर की सूची है और सवाल को वैक्टर में बदल दिया गया है. इसका मतलब है कि अब हम सवाल के वेक्टर की तुलना, अपने डेटाबेस में मौजूद सभी वेक्टर से कर सकते हैं. इससे यह पता चलता है कि हमारे सवाल का सबसे सटीक जवाब कौनसा है.
ऐसा करने के लिए, हम सवाल के वेक्टर और डेटाबेस के हर वेक्टर के बीच की दूरी को मेज़र करेंगे. वैक्टर के बीच की दूरी को मेज़र करने के कई तरीके हैं. इस कोडलैब में, हम यूक्लिडियन दूरी या L2 नॉर्म का इस्तेमाल करेंगे.
Python में, ऐसा करने के लिए numpy फ़ंक्शन का इस्तेमाल किया जा सकता है.
नीचे दिए गए कोड को कॉपी करके, किसी नई सेल में चिपकाएं:
list_embedded_text_from_db = df_embedded_values_db['Embedded text']
shortest_distance=1
for position, embedded_value in enumerate(list_embedded_text_from_db):
distance=np.linalg.norm((np.array(embedded_value) - np.array(text_to_search)), ord = 2)
print(distance)
if distance<shortest_distance:
shortest_distance=distance
shortest_position=position
print(f'The shortest distance is {shortest_distance} and the position of that value is {shortest_position}')
नतीजा कुछ ऐसा दिखेगा:
चलिए, कोड का विश्लेषण करते हैं
हम एम्बेड किए गए टेक्स्ट या डेटाबेस के वैक्टर वाले कॉलम को सूची में बदलकर, list_embedded_text_from_db में सेव करते हैं.
हमने shortest_distance वैरिएबल को 1 पर भी शुरू किया, ताकि इसे तब तक अपडेट किया जा सके, जब तक हमें सबसे कम दूरी का पता न चल जाए.
list_embedded_text_from_db = df_embedded_values_db['Embedded text']
shortest_distance=1
इसके बाद, हम 'for' लूप का इस्तेमाल करके, सवाल के वेक्टर और डेटाबेस के हर वेक्टर के बीच की दूरी का पता लगाते हैं.
numpy linalg.norm फ़ंक्शन का इस्तेमाल करके, हम इनके बीच की दूरी का हिसाब लगाते हैं.
अगर कैलकुलेट की गई दूरी, shortest_distance वैरिएबल में दी गई दूरी से कम है, तो कैलकुलेट की गई दूरी को इस वैरिएबल पर सेट कर दिया जाएगा
इसके बाद, हम सबसे कम दूरी के साथ-साथ सूची में उस जगह की स्थिति भी कैप्चर करते हैं जहां वह जगह मिली थी. shortest_distance और shortest_position वैरिएबल में.
for position, embedded_value in enumerate(list_embedded_text_from_db):
distance=np.linalg.norm((np.array(embedded_value) - np.array(text_to_search)), ord = 2)
print(distance)
if distance<shortest_distance:
shortest_distance=distance
shortest_position=position
8. नतीजे
सवाल और डेटाबेस के बीच सबसे कम दूरी वाले वेक्टर की सूची में मौजूद पोज़िशन का पता लगाकर, हम नतीजे प्रिंट कर सकते हैं.
नीचे दिए गए कोड को कॉपी करके, किसी नई सेल में चिपकाएं:
print("Your question was:\n "+question+ " \nAnd our answer is:\n "+
df_embedded_values_db.at[shortest_position, 'Title']+": "+
df_embedded_values_db.at[shortest_position, 'Text'])
इसे लागू करने के बाद, आपको कुछ ऐसा दिखेगा:
9. बधाई हो
बधाई हो, आपने रीयल यूज़ केस में textembedding-gecko@003 मॉडल का इस्तेमाल करके, अपना पहला ऐप्लिकेशन बना लिया है!
आपने टेक्स्ट एम्बेडिंग के बारे में बुनियादी बातें और GCP Workbench पर gecko003 मॉडल का इस्तेमाल करने का तरीका जाना है.
अब आपको पता है कि इस्तेमाल के ज़्यादा उदाहरणों में अपने ज्ञान को लागू करने के लिए, कौनसे मुख्य चरण पूरे करने होंगे.
आगे क्या करना है?
इनमें से कुछ कोडलैब देखें...