परिचय
इमोशन डिटेक्शन, जैसा कि नाम से पता चलता है, का अर्थ है किसी पाठ या भाषण के पीछे भावना की पहचान करना। नेचुरल लैंग्वेज प्रोसेसिंग में इमोशन डिटेक्शन एक जरूरी काम है।
- विभिन्न व्यावसायिक कार्यों में इमोशन डिटेक्शन पहले से ही लागू है। ट्विटर का उदाहरण लें जहां लाखों उपयोगकर्ता ट्वीट करते हैं और इसका एमएल मॉडल सभी पोस्ट पढ़ सकता है और ट्वीट्स के पीछे भावनाओं को वर्गीकृत कर सकता है।
- अमेज़ॅन का उदाहरण लें जहां भावना मॉडल समीक्षाओं को सकारात्मक, नकारात्मक और तटस्थ के रूप में वर्गीकृत करते हैं, जिसके आधार पर अमेज़ॅन को पता चलता है कि उत्पाद अच्छा है या नहीं।
इस लेख में, हम टेक्स्ट डेटा के इमोशन डिटेक्शन पर ध्यान देंगे।
इमोशन डिटेक्शन करने के कई तरीके हैं। इस लेख में, आप बेहतर परिणाम के लिए word2vec के साथ द्विदिश LSTM का उपयोग करेंगे।
यह लेख मानता है कि पाठक को सीएनएन और आरएनएन के बारे में बुनियादी जानकारी है।
आरएनएन (पुनरावर्ती तंत्रिका नेटवर्क) एक प्रकार का तंत्रिका नेटवर्क है जो आमतौर पर भाषण और पाठ से संबंधित मॉडल जैसे भाषण मान्यता और प्राकृतिक भाषा प्रसंस्करण मॉडल विकसित करने के लिए उपयोग किया जाता है। आवर्तक तंत्रिका नेटवर्क डेटा के अनुक्रम (क्रम) को याद रखते हैं और पूर्वानुमान देने के लिए इन डेटा पैटर्न का उपयोग करते हैं।
द्वि-LSTM नेटवर्क
बिडायरेक्शनल लॉन्ग-शॉर्ट टर्म मेमोरी (Bi-LSTM) एक न्यूरल नेटवर्क आर्किटेक्चर है जहां दोनों दिशाओं में सूचना का उपयोग आगे (अतीत से भविष्य) या पिछड़े (भविष्य से अतीत) में किया जाता है।
जैसा कि आप छवि में पिछली और आगे की परतों से सूचना के प्रवाह को देखते हैं। द्विदिश LSTM का उपयोग किया जाता है जहां अनुक्रम से अनुक्रम कार्यों की आवश्यकता होती है। इस तरह के नेटवर्क का उपयोग टेक्स्ट वर्गीकरण, वाक् पहचान और पूर्वानुमान मॉडल में किया जाता है। अधिक जानकारी के लिए पढ़ें यहाँ उत्पन्न करें.
इस लेख में, हम मुख्य रूप से सैद्धांतिक के बजाय कार्यान्वयन भाग पर ध्यान केंद्रित करेंगे।
आवश्यकता: जीपीयू समर्थित पायथन पर्यावरण
इमोशन डिटेक्शन के लिए डेटा लोड हो रहा है
इस आलेख में प्रयुक्त डेटासेट से डाउनलोड किया जा सकता है यहाँ उत्पन्न करें. डेटासेट में 3 फाइलें, ट्रेन फाइल, टेस्ट फाइल, वैल फाइल होती है।
आइए अपने पाठ्य डेटा को डेटा फ्रेम में लोड करना शुरू करें, आप निम्न कोड का उपयोग करके ऐसा कर सकते हैं।
पांडा को पीडी के रूप में आयात करें # डेटासेट आयात करना 'भावना'], एन्कोडिंग = 'utf-8') df_test = pd.read_csv ('../input/emotions-dataset-for-nlp/test.txt', हेडर = कोई नहीं, sep =';', नाम = ['इनपुट', 'सेंटीमेंट'], एन्कोडिंग = 'यूटीएफ-8') df_val = pd.read_csv('../input/emotions-dataset-for-nlp/val.txt',header=None,sep=' ;', नाम = ['इनपुट', 'भावना'], एन्कोडिंग = 'utf-8') df_train.head ()
df_train 16000 पंक्तियाँ और 2 स्तंभ हैं, df_test & df_val 2000 पंक्तियाँ और 2 स्तंभ हैं। अब आइए डेटा के श्रेणीवार वितरण की जांच करें।
एसएनएस.काउंटप्लॉट (df_train.Sentiment) plt.show ()
श्रेणी अचरज कम से कम डेटा नमूना है, तो आप सभी श्रेणियों को संतुलित करके या तो अधिक-नमूनाकरण या कम-नमूनाकरण करके डेटा को संतुलित कर सकते हैं।
इमोशन डिटेक्शन डेटा प्रीप्रोसेसिंग
अपने टेक्स्ट डेटा को साफ-सुथरा बनाने के लिए हमें कुछ टेक्स्ट प्रीप्रोसेसिंग करने की जरूरत है।
- विराम चिह्नों को हटाना (यह भावना पहचान में योगदान नहीं करता है)।
- स्टॉपवर्ड्स को हटाना (यानी जैसे शब्द हैं, हैं, आदि जो कार्य में योगदान नहीं देते हैं)।
- ईमेल, HTML टैग, वेबसाइट और अनावश्यक लिंक हटाना।
- शब्दों के संकुचन को दूर करना (I'm -> I am)।
- सामान्यीकरण या शब्द (खाना -> खाना, खेलना -> खेलना)।
टेक्स्ट-प्रीप्रोसेसिंग को आसान बनाने के लिए मैंने नाम की एक लाइब्रेरी लिखी है text_hammer. आइए देखें कि यह कैसे काम करता है।
text_hammer को स्थापित और आयात करना:
!पाइप इंस्टॉल text_hammer टेक्स्ट_हैमर को वें के रूप में इंस्टॉल करें
अब आयात कर रहा हूँ tqdm प्रगति बार और एक ऐसा फ़ंक्शन बनाना जो प्रीप्रोसेसिंग करने के लिए डेटा-फ़्रेम लेता है और प्रीप्रोसेस्ड डेटा-फ़्रेम लौटाता है।
Tqdm._tqdm_notebook से %%समय आयात tqdm_notebook tqdm_notebook.pandas()
def text_preprocessing (df, col_name): कॉलम = col_name df [स्तंभ] = df [स्तंभ]। th.cont_exp(x))
#तुम -> तुम हो; मैं हूँ -> मैं हूँ
df [स्तंभ] = df [स्तंभ] . [स्तंभ] .progress_apply (लैम्ब्डा x: th.remove_special_chars (x)) df [स्तंभ] = df [स्तंभ]। लैम्ब्डा एक्स: वें.मेक_बेस (एक्स)) #ran -> भागो, वापसी (डीएफ)
विधि प्रगति_लागू ()
इसका उपयोग तब किया जाता है जब हम विधि से संबंधित प्रगति बार बनाते हैं लागू().
लैम्ब्डा
फ़ंक्शन एक वाक्य लेता है और इसे text_preprocessing विधियों में पास करता है।
वें.मेक_बेस () एक वाक्य लेता है और सामान्यीकृत वाक्य देता है।
वें.remove_accented_chars () उच्चारण चिह्नों को हटाता है।
टेक्स्ट-प्रीप्रोसेसिंग फ़ंक्शन बनाने के बाद हमें इसे अपने डेटाफ्रेम पर कॉल करने की आवश्यकता है। केवल प्रशिक्षण डेटा को साफ़ करने की आवश्यकता है, परीक्षण और सत्यापन डेटा नहीं
"इनपुट" हमारे टेक्स्ट डेटा वाला कॉलम है।
बुलाडेटा आकार के आधार पर tEmotionffffext_preprocessing में समय लग सकता है।
df_cleaned_train = text_preprocessing (df_train, 'इनपुट')
लेबल एनकोडिंग
मॉडल में पास होने के लिए हमारे डेटा फ्रेम में भावना श्रेणी को कुछ संख्याओं में परिवर्तित करने की आवश्यकता है।
एक शब्दकोश का उपयोग करके हम अपनी भावना श्रेणियों को कूटबद्ध कर रहे हैं {‘joy’:0,’anger’:1,’love’:2,’sadness’:3,’fear’:4,’surprise’:5}.
df_cleaned_train['Sentiment'] = df_cleaned_train.Sentiment.replace({'joy':0,'anger':1,'love':2,'sadness':3,'fear':4,'surprise':5}) df_test['Sentiment'] = df_test.Sentiment.replace({'joy':0,'anger':1,'love':2,'sadness':3,'fear':4,'surprise':5}) df_val['Sentiment'] = df_val.Sentiment.replace({'joy':0,'anger':1,'love':2,'sadness':3,
हमने उन्हें संख्याएँ निर्दिष्ट करके हमारी श्रेणी को एन्कोड किया है, अब श्रेणियों को श्रेणीबद्ध डेटा में बदलने का समय है।
keras.utils आयात से_श्रेणीबद्ध y_train = to_categorical(df_cleaned_train.Sentiment.values) y_test = to_categorical(df_test.Sentiment.values) y_val = to_categorical(df_val.Sentiment.values)
वाई_वैल, वाई_टेस्ट, वाई_ट्रेन अब एक बाइनरी मैट्रिक्स है जो हमारे मॉडल में पारित किया जाएगा।
tokenization
जैसा कि आप देखते हैं कि हमने अपने सेंटीमेंट लेबल को कुछ नंबरों में और फिर एक बाइनरी मैट्रिक्स में बदल दिया है, लेकिन हमारे टेक्स्ट डेटा के बारे में क्या? हम टेक्स्ट को सीधे अपने मॉडल में पास नहीं कर सकते हैं।
तो यह हमारे टेक्स्ट कॉर्पस को कुछ पूर्णांक संख्याओं में बदलने का समय है।
Tokenizer वर्ग एक वाक्य को उनकी आवृत्ति के आधार पर संख्याओं को निर्दिष्ट करके संख्याओं की एक सरणी में परिवर्तित करता है।
keras.preprocessing.text से Tokenizernum_words = 10000 आयात करें # इसका मतलब है कि 10000 अद्वितीय शब्द लिए जा सकते हैं tokenizer=Tokenizer(num_words,lower=True) df_total = pd.concat([df_cleaned_train['Input'], df_test.Input], Axis = 0) tokenizer.fit_on_texts(df_total)
केवल शीर्ष "num_words” यानी सबसे अधिक बार आने वाले शब्दों को ध्यान में रखा जाएगा। टोकननाइज़र द्वारा ज्ञात शब्दों को ही ध्यान में रखा जाएगा इसलिए हमने टोकन के लिए शब्दावली बढ़ाने के लिए हमारी ट्रेन और टेस्ट डेटा को जोड़ दिया है।
विधि Fit_on_texts () टेक्स्ट डेटा को टोकननाइज़र में फिट करता है। यह वाक्यों की एक सूची लेता है।
keras.preprocessing.sequence से Pad_sequences आयात करें
X_train=tokenizer.texts_to_sequences(df_cleaned_train['Input']) # यह टेक्स्ट को कुछ न्यूमेरिक सीक्वेंस में कनवर्ट करता है X_train_pad=pad_sequences(X_train,maxlen=300,padding='post') # यह सभी न्यूमेरिक सीक्वेंस की लंबाई को बराबर बनाता है X_test = tokenizer .texts_to_sequences (df_test.Input) X_test_pad = Pad_sequences (X_test, maxlen = 300, पैडिंग = 'पोस्ट') X_val = tokenizer.texts_to_sequences (df_val.Input) X_val_pad = Pad_sequences (X_val, maxlen = 300, पैडिंग = 'पोस्ट')
texts_to_sequence () वाक्यों की एक सूची लेता है और उन्हें संख्याओं के अनुक्रम में परिवर्तित करता है।
चूंकि हमारे डेटा में अलग-अलग वाक्यों की लंबाई अलग-अलग होती है, इसका मतलब संख्या अनुक्रम द्वारा किया जाता है texts_to_sequence अलग-अलग लंबाई भी होगी। उन्हें अपने मॉडल में पास करने के लिए, हमें उन सभी को समान लंबाई का बनाना होगा।
Pad_sequences यह सुनिश्चित करने के लिए प्रयोग किया जाता है कि सूची में सभी अनुक्रमों की लंबाई समान है। डिफ़ॉल्ट रूप से, यह शुरुआत/अंत में पैडिंग 0 द्वारा किया जाता है (पूर्व,
पद) प्रत्येक अनुक्रम की जब तक कि प्रत्येक अनुक्रम की लंबाई सबसे लंबे अनुक्रम के समान न हो। यदि मामले में अनुक्रम की लंबाई से अधिक है अधिकतम, यह अंत से भी ट्रिम करता है।
x_train_pad.आकार अभी (16000,300) है।
x_test_pad.shape अभी (2000,300) है।
x_val_pad.आकार अभी (2000,300) है।
अब हमारे पास सूचियाँ हैं जिनमें समान लंबाई के हमारे अनुक्रम हैं।
वर्ड2पुराना
अगले चरण पर जाने से पहले, आपको पिछले चरण पर वापस देखने की आवश्यकता है, हमारे दृष्टिकोण में एक समस्या है।
मान लीजिए कि हमारे पास शब्द हैं ('प्यार', 'स्नेह', 'जैसे') इन शब्दों में है
वही अर्थ लेकिन हमारे टोकननाइज़र के अनुसार इन शब्दों का इलाज किया जाता है
अलग ढंग से। हमें उन सभी शब्दों के बीच संबंध बनाने की जरूरत है
जो आपस में जुड़े हुए हैं।
अधिक समझ के लिए यहां शब्द एम्बेडिंग चलन में है यहाँ पढ़ें.
हम उपयोग करने जा रहे हैं ग्लव-विकी-गीगावर्ड-100
जिसे विकिपीडिया डेटा पर प्रशिक्षित किया गया है और एक शब्द को 100 लंबाई की सरणी में मैप करता है। हमारे पास भी है ग्लव-विकी-गीगावर्ड-300 जो बेहतर परिणाम देता है लेकिन उच्च आयाम के कारण यह कम्प्यूटेशनल रूप से भारी है।
संबंधित दस्ताने वेक्टर का उपयोग कर लोड हो रहा है gensim पुस्तकालय।
#pip install gensim import gensim.downloader as api glove_gensim = api.load('glove-wiki-gigaword-100') #100 आयाम
अधिक आयाम का अर्थ है शब्दों का अधिक गहरा अर्थ लेकिन इसे डाउनलोड होने में अधिक समय लग सकता है।
अब टोकननाइज़र द्वारा सीखी गई शब्दावली को मैप करें और एक वेट मैट्रिक्स बनाएं।
वेक्टर_साइज़ = 100 gensim_weight_matrix = np.zeros ((num_words ,vector_size)) gensim_weight_matrix.shape
शब्द के लिए, tokenizer.word_index.items में सूचकांक (): अगर सूचकांक <num_words: # चूंकि सूचकांक शून्य से शुरू होता है अगर शब्द glove_gensim.wv.vocab में है: gensim_weight_matrix [अनुक्रमणिका] = glove_gensim [शब्द] और: gensim_weight_matrix [अनुक्रमणिका] = एनपी शून्य (100)
tokenizer.word_index.items () मूल्य के रूप में कुंजी और आवृत्ति के रूप में अद्वितीय शब्दों का एक शब्दकोश लौटाता है।
- अनूठे शब्दों की पुनरावृति करना और उनमें संबंधित शब्द खोजना glove_gensim.wv.vocab
- glove_gensim ['डॉग'] 'DOG' के लिए वेक्टर शब्द लौटाता है।
- यदि दस्ताना शब्दावली में कोई शब्द मिलता है तो संबंधित वेक्टर वापस करें और इसे इसमें जोड़ें gensim_weight_matrix.
- gensim_weight_matrix का आकार होना चाहिए (अद्वितीय शब्दों की संख्या, glove_dimension)।
इमोशन डिटेक्शन मॉडल बिल्डिंग
अब तक हमने अपने डेटा को प्रीप्रोसेस किया है, अपने y_label को श्रेणीबद्ध डेटा में परिवर्तित किया है, word2vec का उपयोग करके अपनी शब्दावली को वेक्टर में मैप किया है।
यह हमारे द्वि-एलएसटीएम मॉडल को डिजाइन करने का समय है।
पुस्तकालयों को आयात करने की जरूरत है।
Tensorflow.keras.models से Tensorflow.keras.layers से अनुक्रमिक आयात Dense, LSTM, एंबेडिंग, द्विदिश आयात Tensorflow.compat.v1.keras.layers से Tensorflow.keras.layers आयात CuDNNLSTM से Tensorflow.keras.layers आयात ड्रॉपआउट से
एम्बेडिंग परत: हमने पहले ही एक शब्द-एम्बेडिंग मैट्रिक्स बना लिया है। हमारे प्रशिक्षण में हमारे word_embedding मैट्रिक्स को फीड करने के लिए हम एक एम्बेडिंग लेयर का उपयोग करेंगे।
एम्बेडिंग परतों में 3 पैरामीटर हैं।
- इनपुट_डिम : शब्दावली का आकार (प्रशिक्षण के लिए अद्वितीय शब्दों की संख्या)
- आउटपुट_डिम
- इनपुट_लम्बाई : अनुक्रम की अधिकतम लंबाई
- प्रशिक्षण योग्य : यह झूठा है, जिसका अर्थ है कि यह केवल दिए गए भार मैट्रिक्स का उपयोग करेगा,
EMBEDDING_DIM = 100 वर्ग_संख्या = 6 मॉडल = अनुक्रमिक () मॉडल जोड़ें (1)) मॉडल.ऐड (द्विदिश (CuDNNLSTM (0.2, रिटर्न_सीक्वेंस = ट्रू))) मॉडल.ऐड (ड्रॉपआउट (100)) मॉडल.एड (बिडायरेक्शनल (CuDNNLSTM (0.2, रिटर्न_सीक्वेंस = ट्रू))) मॉडल। (200)) मॉडल.एड (द्विदिश (CuDNNLSTM (0.2, रिटर्न_अनुक्रम = गलत))) मॉडल.एड (घना (वर्ग_संख्या, सक्रियण = 'सॉफ्टमैक्स')) मॉडल.कंपाइल (हानि = 'श्रेणीबद्ध_क्रॉसेंट्रॉपी', ऑप्टिमाइज़र = 'एडम' , मेट्रिक्स = 'सटीकता')
- एम्बेडिंग_डीआईएम = 100 इसका मतलब है कि एम्बेडिंग परत 100 आयामों में एक वेक्टर बनाएगी।
- RNN को स्टैक करते समय, पूर्व RNN लेयर्स को सेट किया जाना चाहिए वापसी_अनुक्रम सही करने के लिए ताकि निम्न आरएनएन परत परतों में इनपुट के रूप में पूर्ण अनुक्रम हो सके।
- वर्ग_संख्या = 6 चूंकि हमारे पास वर्गीकृत करने के लिए 6 श्रेणियां हैं।
कॉलबैक को परिभाषित करना
प्रभावी ढंग से प्रशिक्षित करने के लिए, हमने कुछ कॉलबैक परिभाषित किए।
#EarlyStopping और ModelCheckpoint keras.callbacks से अर्लीस्टॉपिंग आयात करते हैं, ModelCheckpoint es = अर्लीस्टॉपिंग (मॉनिटर = 'वैल_लॉस', मोड = 'न्यूनतम', वर्बोज़ = 1, धैर्य = 5) mc = ModelCheckpoint ('./model.h5', मॉनिटर = 'val_accuracy', मोड = 'अधिकतम', वर्बोज़ = 1, save_best_only = True)
- जल्दी रोकना कुछ धैर्य के बाद प्रशिक्षण बंद कर देता है यदि कोई और सुधार नहीं देखा जाता है या यदि प्रशिक्षण हानि कम हो जाती है और एक निश्चित बिंदु के बाद सत्यापन हानि बढ़ जाती है।
- मॉडलचेकपॉइंट मॉडल चेकपॉइंट बचाता है।
प्रशिक्षण मॉडल
अब हम अपने डिज़ाइन किए गए मॉडल को प्रशिक्षित करने के लिए तैयार हैं।
history_embedding = model.fit(X_train_pad, y_train, epochs = 25, बैच_साइज़ = 120, Validation_data=(X_val_pad, y_val), वर्बोज़ = 1, कॉलबैक = [es, mc])
history_embeding मॉडल प्रशिक्षण का इतिहास रखता है।
इतिहास को प्लॉट करना
मॉडल के प्रदर्शन का विश्लेषण करते हुए प्रशिक्षण इतिहास का उपयोग करना।
plt.plot(history_embedding.history['सटीकता'],c='b',लेबल='ट्रेन सटीकता') plt.plot(history_embedding.history['val_accuracy'],c='r',label='सत्यापन सटीकता ') plt.legend (लोक = 'निचले दाएं') plt.show ()
इमोशन डिटेक्शन मॉडल का परीक्षण करें
हमने तैयार किया है X_test_pad परीक्षण उद्देश्यों के लिए, अब इसका परीक्षण करने का समय है।
np.argmax
अधिकतम संभावना का सूचकांक लौटाता है।
y_pred = np.argmax(model.predict(X_test_pad), अक्ष = 1) y_true = np.argmax(y_test, अक्ष = 1) sklearn आयात मेट्रिक्स प्रिंट से (metrics.classification_report(y_pred, y_true))
बहुत खूब! इसने वास्तव में अच्छा प्रदर्शन किया, जैसा कि आप देखते हैं कि यह वह परिणाम है जो हमने अपने परीक्षण डेटा का उपयोग करके प्राप्त किया।
निष्कर्ष
यह है कि आप एक इमोशन डिटेक्शन मॉडल कैसे बना सकते हैं, आइए पूरी पाइपलाइन को फिर से देखें:
- इनपुट टेक्स्ट लें।
- टोकननाइज़र का उपयोग पूर्णांक अनुक्रम में परिवर्तित होता है।
- उपयोग Pad_sequence प्रशिक्षण के लिए उपयोग की जाने वाली लंबाई के बराबर अनुक्रम लंबाई बनाने के लिए।
- अब पैडेड_सीक्वेंस को मॉडल और कॉल प्रेडिक्ट मेथड में पास करें, यह आपको क्लास इंडेक्स देगा।
- हमारे द्वारा पहले परिभाषित शब्दकोश का उपयोग करते हुए क्लास इंडेक्स को क्लास लेबल में बदलें।
आप BERT स्टेट ऑफ़ द आर्ट मॉडल का उपयोग करके परिणामों में और सुधार कर सकते हैं और उच्च आयामों यानी 300 के शब्द एम्बेडिंग का उपयोग करके आप और सुधार कर सकते हैं।
इस आलेख में उपयोग किए गए कोड को इससे डाउनलोड किया जा सकता है संपर्क.
लेख पढ़ने के लिए धन्यवाद, अगर आपको यह लेख पसंद आया हो तो कृपया इसे साझा करें।
- '
- "
- &
- 100
- लेखा
- सब
- वीरांगना
- विश्लेषिकी
- गुस्सा
- एपीआई
- स्थापत्य
- कला
- लेख
- इमारत
- व्यापार
- कॉल
- परिवर्तन
- वर्गीकरण
- सीएनएन
- कोड
- स्तंभ
- बनाना
- तिथि
- डिज़ाइन
- खोज
- विकसित करना
- आयाम
- खाने
- आदि
- प्रवाह
- फोकस
- आगे
- पूर्ण
- समारोह
- भविष्य
- GitHub
- अच्छा
- GPU
- सिर
- इतिहास
- कैसे
- HTTPS
- की छवि
- का आयात
- बढ़ना
- अनुक्रमणिका
- करें-
- IT
- keras
- कुंजी
- ज्ञान
- लेबल
- भाषा
- सीखा
- पुस्तकालय
- सूची
- सूचियाँ
- मोहब्बत
- नक्शा
- मैप्स
- मैट्रिक्स
- मीडिया
- मेट्रिक्स
- ML
- आदर्श
- नामों
- प्राकृतिक भाषा
- प्राकृतिक भाषा संसाधन
- नेटवर्क
- नेटवर्क
- तंत्रिका
- तंत्रिका नेटवर्क
- तंत्रिका जाल
- संख्या
- आदेश
- प्रदर्शन
- पोस्ट
- भविष्यवाणियों
- एस्ट्रो मॉल
- अजगर
- RE
- पाठक
- पढ़ना
- परिणाम
- रिटर्न
- समीक्षा
- रन
- भावुकता
- सेट
- Share
- आकार
- So
- वाक् पहचान
- प्रारंभ
- राज्य
- समर्थित
- आश्चर्य
- tensorflow
- परीक्षण
- परीक्षण
- पहर
- ऊपर का
- प्रशिक्षण
- कलरव
- उपयोगकर्ताओं
- मूल्य
- वेबसाइट
- विकिपीडिया
- शब्द
- कार्य
- X
- शून्य