১. শুরু করার আগে
এই কোডল্যাবে, আপনি TensorFlow এবং TensorFlow Lite Model Maker ব্যবহার করে তৈরি করা কোড পর্যালোচনা করবেন যাতে মন্তব্য স্প্যামের উপর ভিত্তি করে একটি ডেটাসেট ব্যবহার করে একটি মডেল তৈরি করা যায়। মূল ডেটা kaggle-এ পাওয়া যায়। এটি একটি একক CSV-তে সংগ্রহ করা হয়েছে এবং ভাঙা টেক্সট, মার্কআপ, পুনরাবৃত্তিমূলক শব্দ এবং আরও অনেক কিছু সরিয়ে পরিষ্কার করা হয়েছে। এটি টেক্সটের পরিবর্তে মডেলের উপর ফোকাস করা সহজ করবে।
আপনি যে কোডটি পর্যালোচনা করবেন তা এখানে সরবরাহ করা হয়েছে, তবে গুগল কোল্যাবে কোডটি অনুসরণ করার জন্য আপনাকে অত্যন্ত পরামর্শ দেওয়া হচ্ছে।
পূর্বশর্ত
- এই কোডল্যাবটি অভিজ্ঞ ডেভেলপারদের জন্য লেখা হয়েছে যারা মেশিন লার্নিংয়ে নতুন।
- এই কোডল্যাবটি মোবাইলের জন্য টেক্সট ক্লাসিফিকেশন দিয়ে শুরু করুন পথের অংশ। যদি আপনি এখনও পূর্ববর্তী কার্যক্রমগুলি সম্পন্ন না করে থাকেন, তাহলে দয়া করে থামুন এবং এখনই তা করুন।
তুমি কি শিখবে
- গুগল কোল্যাব ব্যবহার করে টেনসরফ্লো লাইট মডেল মেকার কীভাবে ইনস্টল করবেন
- ক্লাউড সার্ভার থেকে আপনার ডিভাইসে ডেটা কীভাবে ডাউনলোড করবেন
- ডেটা লোডার কীভাবে ব্যবহার করবেন
- মডেলটি কীভাবে তৈরি করবেন
তোমার যা লাগবে
- গুগল কোল্যাবে অ্যাক্সেস
2. TensorFlow Lite মডেল মেকার ইনস্টল করুন
কোল্যাবটি খুলুন। নোটবুকের প্রথম সেলটি আপনার জন্য TensorFLow Lite Model Maker ইনস্টল করবে:
!pip install -q tflite-model-maker
এটি সম্পন্ন হয়ে গেলে, পরবর্তী কক্ষে যান।
৩. কোডটি আমদানি করুন
পরবর্তী কক্ষে বেশ কয়েকটি আমদানি রয়েছে যা নোটবুকের কোডটি ব্যবহার করতে হবে:
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 ব্যবহার করছে কিনা তাও পরীক্ষা করবে, যা মডেল মেকার ব্যবহারের জন্য একটি প্রয়োজনীয়তা।
৪. ডেটা ডাউনলোড করুন
এরপর আপনি ক্লাউড সার্ভার থেকে আপনার ডিভাইসে ডেটা ডাউনলোড করবেন এবং 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 ফাইল থেকে মডেলগুলিকে প্রশিক্ষণ দিতে পারে। আপনাকে কেবল নির্দিষ্ট করতে হবে কোন কলামে টেক্সট থাকবে এবং কোনটিতে লেবেল থাকবে। আপনি কোডল্যাবে পরে এটি কীভাবে করবেন তা দেখতে পাবেন।
৫. প্রাক-শিখানো এম্বেডিং
সাধারণত, মডেল মেকার ব্যবহার করার সময়, আপনি একেবারে শুরু থেকে মডেল তৈরি করেন না। আপনি আপনার প্রয়োজন অনুসারে কাস্টমাইজ করা বিদ্যমান মডেলগুলি ব্যবহার করেন।
এই ধরণের ভাষা মডেলের ক্ষেত্রে, পূর্বে শেখা এম্বেডিং ব্যবহার করা হয়। এম্বেডিংয়ের পিছনে ধারণা হল শব্দগুলিকে সংখ্যায় রূপান্তরিত করা হয়, আপনার সামগ্রিক কর্পাসের প্রতিটি শব্দকে একটি সংখ্যা দেওয়া হয়। এম্বেডিং হল একটি ভেক্টর যা শব্দের জন্য একটি "দিকনির্দেশ" স্থাপন করে সেই শব্দের অনুভূতি নির্ধারণ করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, মন্তব্য স্প্যাম বার্তাগুলিতে ঘন ঘন ব্যবহৃত শব্দগুলির ভেক্টরগুলি একই দিকে নির্দেশ করবে এবং যে শব্দগুলি তা করবে না সেগুলি বিপরীত দিকে নির্দেশ করবে।
পূর্বে শেখা এম্বেডিং ব্যবহার করে, আপনি এমন শব্দের একটি সংগ্রহ বা সংগ্রহ দিয়ে শুরু করতে পারবেন যা ইতিমধ্যেই একটি বৃহৎ পাঠ্যাংশ থেকে অনুভূতি শিখেছে। এটি আপনাকে শূন্য থেকে শুরু করার চেয়ে অনেক দ্রুত সমাধানে নিয়ে যাবে।
মডেল মেকার বেশ কিছু প্রাক-শিখানো এম্বেডিং প্রদান করে যা আপনি ব্যবহার করতে পারেন, তবে শুরু করার জন্য সবচেয়ে সহজ এবং দ্রুততম হল 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 প্যারামিটার বা সিকোয়েন্স দৈর্ঘ্য দ্বারা নির্ধারিত হয়।
যখন আপনি শব্দগুলিকে সংখ্যায় (অথবা টোকেন) রূপান্তর করেন, তখন একটি বাক্য এই টোকেনগুলির একটি ক্রম হয়ে ওঠে। সুতরাং আপনার মডেলটি (এই ক্ষেত্রে) ২০ টি টোকেন বিশিষ্ট বাক্যগুলিকে শ্রেণীবদ্ধ করতে এবং সনাক্ত করতে প্রশিক্ষিত হবে। যদি বাক্যটি এর চেয়ে দীর্ঘ হয়, তবে এটি ছোট করা হবে। যদি এটি ছোট হয়, তবে এটি প্যাড করা হবে। আপনি কর্পাসে একটি ডেডিকেটেড <PAD> টোকেন দেখতে পাবেন যা এর জন্য ব্যবহৃত হবে।
৬. একটি ডেটা লোডার ব্যবহার করুন
আগে আপনি 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 ব্যবহার করেন।
৭. মডেল তৈরি করুন
পরবর্তী সেলটি কেবল মডেলটি তৈরি করার জন্য, এবং এটি কোডের একটি একক লাইন:
# Build the model
model = text_classifier.create(train_data, model_spec=spec, epochs=50,
validation_data=test_data)
এটি মডেল মেকারের সাহায্যে একটি টেক্সট ক্লাসিফায়ার মডেল তৈরি করে এবং আপনি যে প্রশিক্ষণ ডেটা ব্যবহার করতে চান (ধাপ ৪-এ সেট আপ করা হয়েছে), মডেল স্পেসিফিকেশন (ধাপ ৪-এ সেট আপ করা হয়েছে), এবং বেশ কয়েকটি যুগ, এই ক্ষেত্রে ৫০, নির্দিষ্ট করে।
মেশিন লার্নিংয়ের মূলনীতি হল এটি প্যাটার্ন ম্যাচিংয়ের একটি রূপ। প্রাথমিকভাবে, এটি শব্দগুলির জন্য পূর্ব-প্রশিক্ষিত ওজন লোড করবে এবং তাদের একসাথে গ্রুপ করার চেষ্টা করবে, কোনটি, যখন একসাথে গ্রুপ করা হবে, স্প্যাম নির্দেশ করবে এবং কোনটি নয় তার পূর্বাভাস দিয়ে। প্রথমবারের মতো, এটি সম্ভবত ৫০:৫০ এর কাছাকাছি হবে, কারণ মডেলটি কেবল শুরু হচ্ছে।

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

যখন আপনি ৫০তম যুগে পৌঁছাবেন, তখন মডেলটি অনেক বেশি নির্ভুলতার রিপোর্ট করবে। এই ক্ষেত্রে ৯৯% দেখাচ্ছে!
ডানদিকে, আপনি যাচাইকরণের নির্ভুলতার পরিসংখ্যান দেখতে পাবেন। এগুলি সাধারণত প্রশিক্ষণের নির্ভুলতার চেয়ে কিছুটা কম হবে, কারণ এগুলি মডেলটি কীভাবে এমন ডেটা শ্রেণীবদ্ধ করে যা সে আগে 'দেখেনি'। এটি 10% পরীক্ষার ডেটা ব্যবহার করে যা আমরা আগে আলাদা করে রেখেছিলাম।

৮. মডেলটি রপ্তানি করুন
আপনার প্রশিক্ষণ শেষ হয়ে গেলে, আপনি মডেলটি রপ্তানি করতে পারবেন।
TensorFlow একটি মডেলকে তার নিজস্ব ফর্ম্যাটে প্রশিক্ষণ দেয় এবং এটিকে একটি মোবাইল অ্যাপের মধ্যে ব্যবহার করার জন্য TFLITE ফর্ম্যাটে রূপান্তর করতে হবে। মডেল মেকার আপনার জন্য এই জটিলতাটি পরিচালনা করে।
কেবল একটি ডিরেক্টরি নির্দিষ্ট করে মডেলটি রপ্তানি করুন:
model.export(export_dir='/mm_spam')
সেই ডিরেক্টরির মধ্যে, আপনি একটি model.tflite ফাইল দেখতে পাবেন। এটি ডাউনলোড করুন। আপনার পরবর্তী কোডল্যাবে এটির প্রয়োজন হবে, যেখানে আপনি এটি আপনার অ্যান্ড্রয়েড অ্যাপে যুক্ত করবেন!
iOS বিবেচ্য বিষয়গুলি
আপনি যে .tflite মডেলটি রপ্তানি করেছেন তা অ্যান্ড্রয়েডের জন্য ভালো কাজ করে, কারণ মডেলটির মেটাডেটা এর মধ্যেই এমবেড করা থাকে এবং অ্যান্ড্রয়েড স্টুডিও সেই মেটাডেটা পড়তে পারে।
এই মেটাডেটা খুবই গুরুত্বপূর্ণ কারণ এতে টোকেনের একটি অভিধান রয়েছে যা মডেলের শনাক্তকরণের সাথে সাথে শব্দগুলিকে প্রতিনিধিত্ব করে। মনে আছে আগে যখন আপনি জেনেছিলেন যে শব্দগুলি টোকেন হয়ে যায় এবং এই টোকেনগুলিকে তাদের অনুভূতির জন্য ভেক্টর দেওয়া হয়? আপনার মোবাইল অ্যাপটিকে এই টোকেনগুলি জানতে হবে। উদাহরণস্বরূপ, যদি "dog" 42 তে টোকেনাইজ করা হয় এবং আপনার ব্যবহারকারীরা একটি বাক্যে "dog" টাইপ করেন, তাহলে মডেলটি এটি বুঝতে আপনার অ্যাপটিকে "dog" কে 42 তে রূপান্তর করতে হবে। একজন অ্যান্ড্রয়েড ডেভেলপার হিসেবে, আপনার একটি 'TensorFlow Lite Task Library' থাকবে যা এটি ব্যবহার করা সহজ করে তোলে, কিন্তু iOS-এ আপনাকে শব্দভান্ডার প্রক্রিয়া করতে হবে, তাই আপনার এটি উপলব্ধ থাকতে হবে। মডেল মেকার export_format প্যারামিটার নির্দিষ্ট করে আপনার জন্য এটি রপ্তানি করতে পারে। সুতরাং, আপনার মডেলের জন্য লেবেল এবং শব্দভাণ্ডার পেতে, আপনি এটি ব্যবহার করতে পারেন:
model.export(export_dir='/mm_spam/',
export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])
৯. অভিনন্দন
এই কোডল্যাবটি আপনাকে মডেল তৈরি এবং রপ্তানি করার জন্য পাইথন কোডের মাধ্যমে নিয়ে গেছে। এর শেষে আপনার একটি .tflite ফাইল থাকবে।
পরবর্তী কোডল্যাবে আপনি দেখতে পাবেন কিভাবে এই মডেলটি ব্যবহার করার জন্য আপনার অ্যান্ড্রয়েড অ্যাপটি সম্পাদনা করবেন যাতে আপনি স্প্যাম মন্তব্যগুলিকে শ্রেণীবদ্ধ করতে শুরু করতে পারেন।