स्पैम टिप्पणी करने वाली मशीन लर्निंग का मॉडल बनाना

1. शुरू करने से पहले

इस कोडलैब में, आपको TensorFlow और TensorFlow Lite Model Maker का इस्तेमाल करके बनाए गए कोड की समीक्षा करनी होगी. इससे आपको टिप्पणी वाले स्पैम के हिसाब से डेटासेट का इस्तेमाल करके मॉडल बनाने में मदद मिलेगी. ओरिजनल डेटा Kaggle पर उपलब्ध है. इसे एक CSV फ़ाइल में इकट्ठा किया गया है और काम न करने वाले टेक्स्ट, मार्कअप, शब्दों को दोहराए गए शब्दों वगैरह को हटाकर खाली किया गया है. इससे टेक्स्ट के बजाय मॉडल पर फ़ोकस करना आसान हो जाएगा.

आपको जिस कोड की समीक्षा करनी है वह यहां दिया गया है. हालांकि, हमारा सुझाव है कि आप Google Colab में कोड का पालन करें.

ज़रूरी शर्तें

  • यह कोडलैब, हाल ही में मशीन लर्निंग का इस्तेमाल करने वाले अनुभवी डेवलपर के लिए बनाया गया है.
  • यह कोडलैब, मोबाइल पाथवे के लिए, 'टेक्स्ट क्लासिफ़िकेशन की सुविधा का इस्तेमाल शुरू करें' का हिस्सा है. अगर आपने अभी तक पिछली गतिविधियां पूरी नहीं की हैं, तो कृपया इसे अभी पूरा करें.

आप इन चीज़ों के बारे में जानेंगे

  • Google Colab का इस्तेमाल करके, TensorFlow Lite Model Maker इंस्टॉल करने का तरीका
  • क्लाउड सर्वर से डिवाइस पर डेटा डाउनलोड करने का तरीका
  • डेटा लोडर इस्तेमाल करने का तरीका
  • मॉडल बनाने का तरीका

आपको इनकी ज़रूरत होगी

2. TensorFlow Lite मॉडल मेकर इंस्टॉल करें

कोलैब खोलें. नोटबुक में मौजूद पहली सेल आपके लिए TensorFLow Lite मॉडल मेकर को इंस्टॉल करेगी:

!pip install -q tflite-model-maker

इसके पूरा हो जाने पर, अगले सेल पर जाएं.

3. कोड इंपोर्ट करें

अगले सेल में कई इंपोर्ट की जानकारी है, जिसका इस्तेमाल नोटबुक में मौजूद कोड को करना होगा:

import numpy as np
import os
from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker.text_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

इससे यह भी जांच की जाएगी कि क्या TensorFlow 2.x चलाया जा रहा है, जो कि Model Maker का इस्तेमाल करने के लिए ज़रूरी है.

4. डेटा डाउनलोड करें

इसके बाद, क्लाउड सर्वर से अपने डिवाइस पर डेटा डाउनलोड करें. साथ ही, data_file को लोकल फ़ाइल पर ले जाने के लिए सेट करें:

data_file = tf.keras.utils.get_file(fname='comment-spam.csv', 
  origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/lmblog_comments.csv', 
  extract=False)

मॉडल मेकर इसके जैसी सरल CSV फ़ाइलों से मॉडल को प्रशिक्षण दे सकता है. आपको सिर्फ़ यह बताना होगा कि कौनसे कॉलम में टेक्स्ट है और कौनसे लेबल हैं. यह तरीका बाद में कोडलैब में देखा जा सकेगा.

5. एम्बेड करने के बारे में पहले से जानकारी

आम तौर पर, Model Maker का इस्तेमाल करते समय, मॉडल शुरुआत से नहीं बनाए जाते. आपके पास उन मौजूदा मॉडल का इस्तेमाल करने का विकल्प होता है जिन्हें अपनी ज़रूरतों के हिसाब से बनाया जाता है.

इस तरह के भाषा मॉडल के लिए, इसमें पहले से सीखी गई एम्बेडिंग का इस्तेमाल करना शामिल है. एम्बेड करने के पीछे का मकसद यह है कि शब्दों को संख्या में बदल दिया जाता है और आपके सभी संग्रह में मौजूद हर शब्द को एक संख्या दी जाती है. एम्बेड करने की सुविधा एक वेक्टर है जिसका इस्तेमाल उस शब्द के भाव को पहचानने के लिए किया जाता है. इसके लिए, "निर्देश" को शामिल किया जाता है का इस्तेमाल करें. उदाहरण के लिए, स्पैम मैसेज में अक्सर इस्तेमाल किए जाने वाले वेक्टर का वेक्टर एक ही दिशा में हो जाता है. वहीं, जो शब्द एक-दूसरे से उलटे दिशा में नहीं दिखते.

पहले से सीखी हुई एम्बेडिंग का इस्तेमाल करके, आप शब्दों के एक संग्रह या संग्रह से शुरुआत कर सकते हैं. इनमें वे शब्द शामिल होते हैं जो बहुत बड़े लेख से सीखे गए हैं. इस तरह, शून्य से शुरू करने की तुलना में आपको ज़्यादा तेज़ी से समाधान मिलेगा.

Model Maker पहले से सीखी गई कई एम्बेडिंग उपलब्ध कराता है, जिनका आप इस्तेमाल कर सकते हैं, लेकिन सबसे आसान और सबसे जल्दी शुरू करना average_word_vec है.

कोड यहाँ है:

spec = model_spec.get('average_word_vec')
spec.num_words = 2000
spec.seq_len = 20
spec.wordvec_dim = 7

num_words पैरामीटर

आपको यह भी तय करना होगा कि मॉडल को कितने शब्दों का इस्तेमाल करना है.

आपको लग सकता है कि "जितना बेहतर होगा," लेकिन आम तौर पर, हर शब्द की फ़्रीक्वेंसी के आधार पर एक सही संख्या होती है. अगर आपके पूरे संग्रह में हर शब्द का इस्तेमाल किया जाता है, तो हो सकता है कि मॉडल, उन शब्दों को सीखने और उनकी दिशा तय करने की कोशिश करे जिन्हें सिर्फ़ एक बार इस्तेमाल किया गया है. आपको किसी भी टेक्स्ट कॉर्पस में मिलेगा कि कई शब्दों का इस्तेमाल सिर्फ़ एक या दो बार किया जाता है. साथ ही, आम तौर पर इनका इस्तेमाल अपने मॉडल में नहीं करना चाहिए, क्योंकि इससे लोगों पर थोड़ा असर पड़ता है. num_words पैरामीटर का इस्तेमाल करके, अपने मॉडल को अपने हिसाब से शब्दों की संख्या के हिसाब से बदला जा सकता है.

यहां छोटी संख्या से छोटा और तेज़ मॉडल दिख सकता है. हालांकि, यह कम शब्दों को पहचान सकता है, इसलिए यह कम सटीक हो सकता है. यहां बड़ी संख्या का मॉडल बड़ा और धीमा होगा. सबसे सही जगह ढूंढना सबसे ज़रूरी है!

Wordvec_dim पैरामीटर

wordved_dim पैरामीटर उन डाइमेंशन की संख्या है जिनका इस्तेमाल आपको हर शब्द के लिए वेक्टर के लिए करना है. शोध से तय किया गया नियम है कि यह शब्दों की संख्या का चौथा मूल है. उदाहरण के लिए, अगर 2,000 शब्दों का इस्तेमाल किया जा रहा है, तो शुरुआत के लिए अच्छा पॉइंट 7 है. अगर शब्दों की संख्या बदली जाती है, तो यह सेटिंग भी बदली जा सकती है.

seq_ Len पैरामीटर

आम तौर पर, इनपुट वैल्यू के मामले में मॉडल बहुत सख्त होते हैं. लैंग्वेज मॉडल के लिए, इसका मतलब है कि लैंग्वेज मॉडल, किसी खास, स्थिर, और लंबे वाक्य के वाक्यों की कैटगरी तय कर सकता है. इसे seq_len पैरामीटर या क्रम की लंबाई से तय किया जाता है.

जब शब्दों को संख्याओं (या टोकन) में बदला जाता है, तो कोई वाक्य इन टोकन का क्रम बन जाता है. इस तरह, आपके मॉडल को (इस मामले में) ऐसे वाक्यों की कैटगरी तय करने और पहचानने की ट्रेनिंग दी जाएगी जिनमें 20 टोकन हैं. अगर वाक्य इससे लंबा है, तो उसमें काट-छांट की जाएगी. अगर यह छोटा है, तो इसमें पैड लगा दिए जाते हैं. आपको कॉर्पस में एक खास <PAD> टोकन दिखेगा, जिसका इस्तेमाल इसके लिए किया जाएगा.

6. डेटा लोड करने वाले टूल का इस्तेमाल करना

इससे पहले आपने CSV फ़ाइल डाउनलोड की थी. अब इसे ट्रेनिंग डेटा में बदलने के लिए, डेटा लोड करने वाले टूल का इस्तेमाल करें. मॉडल इस डेटा की पहचान कर सकता है:

data = DataLoader.from_csv(
    filename=data_file,
    text_column='commenttext',
    label_column='spam',
    model_spec=spec,
    delimiter=',',
    shuffle=True,
    is_training=True)

train_data, test_data = data.split(0.9)

CSV फ़ाइल को एडिटर में खोलने पर, आपको दिखेगा कि हर लाइन में दो वैल्यू हैं. इनके बारे में, फ़ाइल की पहली लाइन में टेक्स्ट से बताया गया है. आम तौर पर, हर एंट्री को एक कॉलम माना जाता है.

आप देखेंगे कि पहले कॉलम का डिस्क्रिप्टर commenttext है और हर लाइन में पहली एंट्री, टिप्पणी का टेक्स्ट है. इसी तरह, दूसरे कॉलम का डिस्क्रिप्टर spam है. इसके अलावा, आपको दिखेगा कि हर लाइन की दूसरी एंट्री True या False, है. इससे पता चलता है कि टेक्स्ट को स्पैम टिप्पणी माना जाता है या नहीं. अन्य प्रॉपर्टी, डीलिमिटर वर्ण के साथ आपके पहले बनाए गए model_spec को सेट करती हैं. इस मामले में, कॉमा है, क्योंकि फ़ाइल को कॉमा लगाकर अलग किया गया है. इस डेटा का इस्तेमाल, मॉडल की ट्रेनिंग के लिए किया जाएगा. इसलिए, is_Training को True पर सेट किया गया है.

मॉडल की जांच करने के लिए, आपको डेटा का कुछ हिस्सा होल्ड करके रखना होगा. डेटा को अलग-अलग हिस्सों में बांटें. इसका 90% हिस्सा ट्रेनिंग के लिए और बाकी 10% हिस्सा टेस्टिंग या आकलन के लिए होगा. ऐसा करने की वजह से, हम यह पक्का करना चाहते हैं कि टेस्टिंग डेटा बिना किसी क्रम के चुना गया हो और वह ‘सबसे नीचे’ के तौर पर न हो डेटासेट का 10% हिस्सा है, इसलिए डेटा लोड करते समय उसे किसी भी क्रम में बदलने के लिए shuffle=True का इस्तेमाल किया जा सकता है.

7. मॉडल बनाएं

अगली सेल में सिर्फ़ मॉडल बनाना है और इसमें सिर्फ़ एक लाइन का कोड है:

# Build the model
model = text_classifier.create(train_data, model_spec=spec, epochs=50, 
                               validation_data=test_data)

इससे, Model Maker में टेक्स्ट क्लासिफ़ायर का मॉडल बन जाता है, और आपको इस्तेमाल किया जाने वाला ट्रेनिंग डेटा (जैसा कि चौथे चरण में सेट अप किया गया है), मॉडल की खास बातें (जैसा कि चौथे चरण में सेट अप किया गया था), और epoch की संख्या (इस मामले में 50) बताई जाती है.

मशीन लर्निंग का बुनियादी सिद्धांत है कि यह पैटर्न मैचिंग का एक तरीका है. शुरुआत में, यह शब्दों के लिए पहले से ट्रेन किए गए वेट लोड करेगा और इस अनुमान के साथ उन्हें एक साथ ग्रुप करने की कोशिश करेगा कि कौनसे शब्दों को एक साथ ग्रुप करने पर स्पैम का संकेत मिलता है और कौनसे नहीं. पहली बार, यह 50:50 के आस-पास हो सकता है, क्योंकि मॉडल अभी शुरू ही हो रहा है.

b94b00f0b155db3d.png

इसके बाद, यह नतीजों को मेज़र करेगा और अपने अनुमान में बदलाव करने के लिए, ऑप्टिमाइज़ेशन कोड चलाएगा और फिर से कोशिश करेगा. यह एक युग है. इसलिए, epochs=50 तय करने पर, यह उस "लूप" से होकर गुज़र जाएगा 50 बार.

85f1d21c0b64d654.png

जब आप 50वें युग तक पहुंच जाएंगे, तब यह मॉडल ज़्यादा सटीक होने के स्तर की रिपोर्ट देगा. इस मामले में 99%!

दाईं ओर, आपको पुष्टि करने के सटीक होने के आंकड़े दिखेंगे. आम तौर पर, ये तरीके ट्रेनिंग के सटीक तरीके से थोड़े कम होंगे. इससे यह पता चलता है कि मॉडल, डेटा को अलग-अलग कैटगरी में कैसे बांटता है. यह उस 10% टेस्ट डेटा का इस्तेमाल करता है जिसे हमने पहले तय किया था.

5be7967ec70e4302.png

8. मॉडल एक्सपोर्ट करें

ट्रेनिंग पूरी होने के बाद, मॉडल को एक्सपोर्ट किया जा सकता है.

TensorFlow, मॉडल को उसके फ़ॉर्मैट में ट्रेनिंग देता है. इसे मोबाइल ऐप्लिकेशन में इस्तेमाल करने के लिए, मॉडल को TFLITE फ़ॉर्मैट में बदलना होगा. मॉडल मेकर आपके लिए इस जटिलता को संभालता है.

डायरेक्ट्री तय करते हुए, मॉडल को एक्सपोर्ट करें:

model.export(export_dir='/mm_spam')

उस डायरेक्ट्री में आपको एक model.tflite फ़ाइल दिखेगी. डाउनलोड करें. आपको अगले कोडलैब में इसकी ज़रूरत पड़ेगी, जहां इसे अपने Android ऐप्लिकेशन में जोड़ा जा सकता है!

iOS के लिए ज़रूरी बातें

आपने अभी-अभी जिस .tflite मॉडल को एक्सपोर्ट किया है वह Android के लिए सही तरीके से काम करता है. ऐसा इसलिए है, क्योंकि इसमें मॉडल का मेटाडेटा एम्बेड होता है और Android Studio उस मेटाडेटा को पढ़ सकता है.

यह मेटाडेटा बहुत ज़रूरी है, क्योंकि इसमें टोकन का एक डिक्शनरी मौजूद होता है. इसमें शब्दों की पहचान की जाती है, क्योंकि मॉडल उन शब्दों की पहचान करता है. क्या आपको पहले याद है कि जब आपने सीखा था कि शब्द टोकन बन जाते हैं और फिर इन टोकन को उनकी भावनाओं को दिखाने वाला वेक्टर दिया जाता है? आपके मोबाइल ऐप्लिकेशन को इन टोकन की जानकारी होनी चाहिए. उदाहरण के लिए, यदि "कुत्ता" को 42 का टोकन दिया गया था और आपके उपयोगकर्ता "कुत्ते" टाइप करते हैं किसी वाक्य में बदलने के बाद, आपके ऐप्लिकेशन को "कुत्ते" को बदलना होगा ताकि मॉडल उसे समझ सके. Android डेवलपर के तौर पर, आपके पास ‘TensorFlow Lite टास्क लाइब्रेरी' होगी जो इसे आसान बनाता है, लेकिन iOS पर आपको शब्दावली को प्रोसेस करना होगा, इसलिए आपको इसे उपलब्ध कराना होगा. मॉडल मेकर export_format पैरामीटर तय करके आपके लिए इसे एक्सपोर्ट कर सकता है. इसलिए, अपने मॉडल के लिए लेबल और शब्दावली पाने के लिए, इसका इस्तेमाल किया जा सकता है:

model.export(export_dir='/mm_spam/', 
             export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])

9. बधाई हो

यह कोडलैब आपको मॉडल बनाने और एक्सपोर्ट करने के लिए, Python कोड पर ले गया. इसके आखिर में .tflite फ़ाइल होगी.

अगले कोडलैब में, आपको Android ऐप्लिकेशन में बदलाव करने का तरीका बताया जाएगा, ताकि आप इस मॉडल का इस्तेमाल करके स्पैम वाली टिप्पणियों की कैटगरी तय कर सकें.