TensorFlow Lite Model Maker-এর মাধ্যমে একটি মন্তব্য-স্প্যাম শনাক্তকরণ মডেলকে প্রশিক্ষণ দিন

1. আপনি শুরু করার আগে

এই কোডল্যাবে, আপনি মন্তব্য স্প্যামের উপর ভিত্তি করে একটি ডেটাসেট সহ একটি মডেল তৈরি করতে TensorFlow এবং TensorFlow Lite Model Maker-এর সাথে তৈরি কোড পর্যালোচনা করুন৷ মূল তথ্য Kaggle পাওয়া যায়. এটি একটি একক CSV ফাইলে জড়ো করা হয়েছে, এবং ভাঙা পাঠ, মার্কআপ, বারবার শব্দ এবং আরও অনেক কিছু সরিয়ে দিয়ে পরিষ্কার করা হয়েছে৷ এটি পাঠ্যের পরিবর্তে মডেলটিতে ফোকাস করা সহজ করে তুলবে।

আপনি যে কোডটি পর্যালোচনা করেছেন সেটি এখানে সরবরাহ করা হয়েছে, তবে Colaboratory- তে কোডটি অনুসরণ করার জন্য অত্যন্ত সুপারিশ করা হচ্ছে।

পূর্বশর্ত

  • এই কোডল্যাবটি অভিজ্ঞ ডেভেলপারদের জন্য লেখা হয়েছে যারা মেশিন লার্নিংয়ে নতুন।
  • এই কোডল্যাবটি Flutter অ্যাপস পাথওয়েতে পাঠ্য শ্রেণিবিন্যাস দিয়ে শুরু করুন এর অংশ। আপনি যদি পূর্বের কার্যক্রমগুলি এখনও সম্পন্ন না করে থাকেন, তাহলে অনুগ্রহ করে থামুন এবং এখনই করুন৷

আপনি কি শিখবেন

  • Colab-এর মাধ্যমে TensorFlow Lite Model Maker কীভাবে ইনস্টল করবেন।
  • Colab সার্ভার থেকে আপনার ডিভাইসে ডেটা কীভাবে ডাউনলোড করবেন।
  • কিভাবে একটি ডেটা লোডার ব্যবহার করবেন।
  • কিভাবে মডেল তৈরি করতে হয়।

আপনি কি প্রয়োজন হবে

  • Colab- এ অ্যাক্সেস

2. টেনসরফ্লো লাইট মডেল মেকার ইনস্টল করুন

  • Colab খুলুন। নোটবুকের প্রথম সেলটি আপনার জন্য টেনসরফ্লো লাইট মডেল মেকার ইনস্টল করবে:
!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 চালাচ্ছেন কিনা তাও এটি পরীক্ষা করবে, যা মডেল মেকার ব্যবহার করার জন্য প্রয়োজনীয়।

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. পূর্ব-শিক্ষিত এম্বেডিং

সাধারণত, আপনি যখন মডেল মেকার ব্যবহার করেন, আপনি স্ক্র্যাচ থেকে মডেল তৈরি করেন না। আপনি বিদ্যমান মডেলগুলি ব্যবহার করেন যা আপনি আপনার প্রয়োজন অনুসারে কাস্টমাইজ করেন।

ভাষার মডেলগুলি, এইরকম, পূর্ব-শিক্ষিত এম্বেডিংয়ের ব্যবহার জড়িত। একটি এমবেডিংয়ের পিছনে ধারণাটি হল যে আপনার সামগ্রিক কর্পাসে একটি সংখ্যা দেওয়া প্রতিটি শব্দের সাথে শব্দগুলি সংখ্যায় রূপান্তরিত হয়। একটি এমবেডিং একটি ভেক্টর যা শব্দের জন্য একটি "দিকনির্দেশ" স্থাপন করে সেই শব্দের অনুভূতি নির্ধারণ করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, মন্তব্য-স্প্যাম বার্তাগুলিতে ঘন ঘন ব্যবহৃত শব্দগুলির ভেক্টরগুলি একই দিকে নির্দেশ করে এবং যে শব্দগুলি বিন্দু নয় তাদের ভেক্টরগুলি বিপরীত দিকে নির্দেশ করে৷

আপনি যখন পূর্ব-শিক্ষিত এম্বেডিংগুলি ব্যবহার করেন, তখন আপনি শব্দগুলির একটি কর্পাস বা সংগ্রহ দিয়ে শুরু করতে পারেন যা ইতিমধ্যেই পাঠ্যের একটি বৃহৎ অংশ থেকে অনুভূতি শিখেছে, তাই আপনি শূন্য থেকে শুরু করার চেয়ে অনেক দ্রুত সমাধান পেতে পারেন৷

মডেল মেকার বেশ কিছু প্রাক-শিক্ষিত এমবেডিং প্রদান করে যা আপনি ব্যবহার করতে পারেন, তবে সবচেয়ে সহজ এবং দ্রুততমটি হল 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)

এই কোডটি মডেল মেকারের সাথে একটি টেক্সট-ক্ল্যাসিফায়ার মডেল তৈরি করে এবং আপনি যে প্রশিক্ষণ ডেটা ব্যবহার করতে চান তা চতুর্থ ধাপে সেট আপ করে, চতুর্থ ধাপে সেট আপ করা মডেল স্পেসিফিকেশন এবং বেশ কয়েকটি যুগ, যা 50 এক্ষেত্রে.

ML এর মূল নীতি হল এটি প্যাটার্ন ম্যাচিং এর একটি ফর্ম। প্রাথমিকভাবে, এটি শব্দগুলির জন্য প্রাক-প্রশিক্ষিত ওজনগুলি লোড করে এবং কোনটি একসাথে গোষ্ঠীভুক্ত হলে, স্প্যাম নির্দেশ করে এবং কোনটি নয় তার একটি ভবিষ্যদ্বাণী সহ তাদের একত্রিত করার চেষ্টা করে৷ প্রথমবার, এটি সমানভাবে বিভক্ত হওয়ার সম্ভাবনা রয়েছে কারণ মডেলটি কেবল শুরু হচ্ছে।

c42755151d511ce.png

এটি তখন প্রশিক্ষণের এই যুগের ফলাফল পরিমাপ করবে এবং এর ভবিষ্যদ্বাণী পরিবর্তন করতে অপ্টিমাইজেশান কোড চালাবে, তারপর আবার চেষ্টা করবে। এটি একটি যুগ। সুতরাং, epochs=50 নির্দিষ্ট করে, এটি সেই "লুপ" এর মধ্য দিয়ে 50 বার যাবে।

7d0ee06a5246b58d.png

আপনি 50 তম যুগে পৌঁছানোর সময়, মডেলটি অনেক উচ্চ স্তরের নির্ভুলতার প্রতিবেদন করে। এই ক্ষেত্রে, এটি 99% দেখায়!

যাচাইকরণের নির্ভুলতার পরিসংখ্যান সাধারণত প্রশিক্ষণের নির্ভুলতার চেয়ে কিছুটা কম হয় কারণ তারা মডেলটি কীভাবে এমন ডেটা শ্রেণীবদ্ধ করে তার ইঙ্গিত যা এটি আগে দেখেনি। এটি 10% পরীক্ষার ডেটা ব্যবহার করে যা আপনি আগে আলাদা করে রেখেছিলেন।

f063ff6e1d2add67.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. অভিনন্দন

এই কোডল্যাব আপনার মডেল তৈরি এবং রপ্তানি করতে পাইথন কোডের মাধ্যমে নিয়ে গেছে। এখন আপনার কাছে একটি SavedModel এবং এর শেষে লেবেল এবং শব্দভাণ্ডার রয়েছে৷ পরবর্তী কোডল্যাবে, আপনি এই মডেলটি কীভাবে ব্যবহার করবেন তা দেখতে পাবেন যাতে আপনি স্প্যাম মন্তব্যগুলিকে শ্রেণীবদ্ধ করতে শুরু করতে পারেন৷

আরও জানুন