একটি মন্তব্য স্প্যাম মেশিন লার্নিং মডেল তৈরি করুন

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

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

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

পূর্বশর্ত

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

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

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

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

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

কোল্যাব খুলুন। নোটবুকের প্রথম সেলটি আপনার জন্য টেনসরফ্লো লাইট মডেল মেকার ইনস্টল করবে:

!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. ডেটা ডাউনলোড করুন

এরপরে আপনি ক্লাউড সার্ভার থেকে আপনার ডিভাইসে ডেটা ডাউনলোড করবেন এবং স্থানীয় ফাইলে পয়েন্ট করার জন্য 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 প্যারামিটার হল প্রতিটি শব্দের ভেক্টরের জন্য আপনি যে মাত্রাগুলি ব্যবহার করতে চান তার সংখ্যা। গবেষণা থেকে নির্ধারিত অঙ্গুষ্ঠের নিয়ম হল এটি শব্দের সংখ্যার চতুর্থ মূল। উদাহরণস্বরূপ, আপনি যদি 2000 শব্দ ব্যবহার করেন, একটি ভাল শুরুর বিন্দু হল 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)

এটি মডেল মেকারের সাথে একটি টেক্সট ক্লাসিফায়ার মডেল তৈরি করে, এবং আপনি যে প্রশিক্ষণ ডেটা ব্যবহার করতে চান তা নির্দিষ্ট করুন (ধাপে 4 এ সেট আপ করা হয়েছে), মডেল স্পেসিফিকেশন (ধাপ 4 এ সেট করা হয়েছে) এবং এই ক্ষেত্রে বেশ কয়েকটি যুগ 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 ফাইল দেখতে পাবেন। এটি ডাউনলোড করুন। আপনার পরবর্তী কোডল্যাবে এটির প্রয়োজন হবে, যেখানে আপনি এটি আপনার অ্যান্ড্রয়েড অ্যাপে যোগ করবেন!

iOS বিবেচনা

আপনি যে .tflite মডেলটি রপ্তানি করেছেন তা Android এর জন্য ভাল কাজ করে, কারণ মডেল সম্পর্কে মেটাডেটা এটির মধ্যে এমবেড করা আছে এবং Android স্টুডিও সেই মেটাডেটা পড়তে পারে৷

এই মেটাডেটা খুবই গুরুত্বপূর্ণ কারণ এতে টোকেন শব্দের একটি অভিধান রয়েছে যা মডেলটি শনাক্ত করে। মনে রাখবেন আগে যখন আপনি শিখেছিলেন যে শব্দগুলি টোকেন হয়ে যায়, এবং এই টোকেনগুলিকে তাদের অনুভূতির জন্য ভেক্টর দেওয়া হয়? আপনার মোবাইল অ্যাপকে এই টোকেনগুলি জানতে হবে। উদাহরণস্বরূপ, যদি "কুকুর" টোকেনাইজ করা হয় 42, এবং আপনার ব্যবহারকারীরা একটি বাক্যে "dog" টাইপ করেন, তাহলে মডেলটি বুঝতে পারে তার জন্য আপনার অ্যাপটিকে "dog" কে 42-এ রূপান্তর করতে হবে। একজন অ্যান্ড্রয়েড বিকাশকারী হিসাবে, আপনার কাছে একটি 'টেনসরফ্লো লাইট টাস্ক লাইব্রেরি' থাকবে যা এটি ব্যবহার করা সহজ করে তোলে, তবে iOS-এ আপনাকে শব্দভান্ডার প্রক্রিয়া করতে হবে, তাই আপনার এটি উপলব্ধ থাকতে হবে। export_format প্যারামিটার নির্দিষ্ট করে মডেল মেকার আপনার জন্য এটি রপ্তানি করতে পারে। সুতরাং, আপনার মডেলের জন্য লেবেল এবং ভোকাব পেতে, আপনি এটি ব্যবহার করতে পারেন:

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

9. অভিনন্দন

এই কোডল্যাবটি আপনার মডেল তৈরি এবং রপ্তানি করার জন্য পাইথন কোডের মাধ্যমে আপনাকে নিয়ে গেছে। আপনার কাছে এটির শেষে একটি .tflite ফাইল থাকবে।

পরবর্তী কোডল্যাবে আপনি এই মডেলটি ব্যবহার করার জন্য কীভাবে আপনার Android অ্যাপ সম্পাদনা করবেন তা দেখতে পাবেন যাতে আপনি স্প্যাম মন্তব্যগুলিকে শ্রেণীবদ্ধ করা শুরু করতে পারেন৷