TensorFlow Lite मॉडल मेकर की मदद से, स्पैम टिप्पणी की पहचान करने वाले मॉडल को ट्रेनिंग देना

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

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

आप जिस कोड की समीक्षा करते हैं, वह यहां दिया गया है, लेकिन हमारा सुझाव है कि आप Colaboratory में कोड के साथ फ़ॉलो करें.

ज़रूरी बातें

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

  • Colab के साथ TensorFlow Lite मॉडल मेकर को इंस्टॉल करने का तरीका.
  • Colab सर्वर से अपने डिवाइस में डेटा डाउनलोड करने का तरीका.
  • डेटा लोडर को इस्तेमाल करने का तरीका.
  • मॉडल बनाने का तरीका.

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

  • Colab का ऐक्सेस

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

  • Colab खोलें. नोटबुक का पहला सेल आपके लिए TensorFlow Lite मॉडल मेकर इंस्टॉल करेगा:
!pip install -q tflite-model-maker

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

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

अगले सेल में कई इंपोर्ट हैं जिन्हें notebook के कोड को इस्तेमाल करना होगा:

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 चलाया है, जो मॉडल मेकर का इस्तेमाल करने के लिए ज़रूरी है.

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

इसके बाद, आप अपने डिवाइस पर Colab सर्वर से डेटा डाउनलोड करेंगे और 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. पहले से सीखे हुए एम्बेडिंग

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

इस तरह के भाषा मॉडल में, पहले से सीखे गए एम्बेड करना का इस्तेमाल करना शामिल है. एम्बेड करने के पीछे का आइडिया यह है कि शब्दों को आपके पूरे संग्रह में मौजूद हर शब्द के साथ संख्याओं में बदल दिया जाए. एम्बेड करना एक वेक्टर है जिसका इस्तेमाल करके किसी शब्द के लिए & जिसमें कोटेशन और निर्देश शामिल किए जाते हैं. इससे आपके शब्द की भावना तय होती है. उदाहरण के लिए, टिप्पणी-स्पैम संदेशों में अक्सर उपयोग किए जाने वाले शब्दों के वेक्टर एक समान दिशा में इंगित करते हैं और वे शब्द जो #39;t में होते हैं उनके वेक्टर की उल्टी दिशा होती है.

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

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

इसका कोड यहां दिया गया है:

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

num_words पैरामीटर

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

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

आप num_words पैरामीटर का इस्तेमाल करके, अपने मॉडल को मनमुताबिक शब्दों के हिसाब से ट्यून कर सकते हैं. छोटी संख्या से छोटा और तेज़ मॉडल मिल सकता है, लेकिन यह कम सटीक हो सकता है, क्योंकि यह कम शब्द पहचानती है. वहीं दूसरी ओर, बड़ी संख्या से बड़ा और धीमा मॉडल मिल सकता है. यह #39;

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)

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

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

c42755151d511ce.png

इसके बाद, यह Google Ads के ट्रेनिंग के नतीजों को मापेगा. साथ ही, अनुमान को बेहतर बनाने के लिए, ऑप्टिमाइज़ेशन कोड को चलाएगा और फिर से कोशिश करेगा. यह epoch है. इसलिए, epochs=50 तय करने से, यह '50 बार' और /&p जैसी शर्तों को पूरा करेगा.

7d0ee06a5246b58d.png

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

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

f063ff6e1d2d67.png

8. मॉडल को एक्सपोर्ट करना

  1. निर्देशिका तय करने और मॉडल एक्सपोर्ट करने के लिए यह सेल चलाएं:
model.export(export_dire='/mm_spam_savedmodel', export_format=[ExportFormat.LABEL, ExportFormat.VOCAB, ExportFormat.SAVED_MODEL])
  1. /mm_spam_savedmodel के पूरे फ़ोल्डर को कंप्रेस करें और जनरेट की गई mm_spam_savedmodel.zip फ़ाइल को नीचे छोड़ें, जिसकी आपको अगले कोडलैब में ज़रूरत है.
# Rename the SavedModel subfolder to a version number
!mv /mm_spam_savedmodel/saved_model /mm_spam_savedmodel/123
!zip -r mm_spam_savedmodel.zip /mm_spam_savedmodel/

9. बधाई हो

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

ज़्यादा जानें