TensorFlow.js: এজ কেসগুলি পরিচালনা করতে একটি মন্তব্য স্প্যাম সনাক্তকরণ মডেলকে পুনরায় প্রশিক্ষণ দিন

১. শুরু করার আগে

এই কোডল্যাবটি TensorFlow.js ব্যবহার করে কমেন্ট স্প্যাম শনাক্তকরণের জন্য এই সিরিজের পূর্ববর্তী কোডল্যাবের চূড়ান্ত ফলাফলের উপর ভিত্তি করে তৈরি করা হয়েছে।

গত কোডল্যাবে আপনি একটি কাল্পনিক ভিডিও ব্লগের জন্য একটি সম্পূর্ণ কার্যকরী ওয়েবপেজ তৈরি করেছিলেন। আপনি ব্রাউজারে TensorFlow.js দ্বারা চালিত একটি প্রি-ট্রেইনড কমেন্ট স্প্যাম ডিটেকশন মডেল ব্যবহার করে, কমেন্টগুলোকে সংরক্ষণের জন্য সার্ভারে বা অন্যান্য সংযুক্ত ক্লায়েন্টে পাঠানোর আগেই স্প্যামের জন্য ফিল্টার করতে সক্ষম হয়েছিলেন।

সেই কোডল্যাবটির চূড়ান্ত ফলাফল নিচে দেখানো হলো:

a4511e5d445706b1.gif

যদিও এটি খুব ভালোভাবে কাজ করেছে, তবুও এমন কিছু ব্যতিক্রমী পরিস্থিতি (edge ​​cases) রয়েছে যা এটি শনাক্ত করতে পারেনি এবং সেগুলো খতিয়ে দেখার প্রয়োজন আছে। যে পরিস্থিতিগুলো এটি সামলাতে পারেনি, সেগুলোর জন্য আপনি মডেলটিকে পুনরায় প্রশিক্ষণ দিতে পারেন।

এই কোডল্যাবটি ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং (কম্পিউটারের মাধ্যমে মানুষের ভাষা বোঝার কৌশল) ব্যবহারের উপর আলোকপাত করে এবং আপনাকে দেখায় কিভাবে আপনার তৈরি করা একটি বিদ্যমান ওয়েব অ্যাপকে পরিবর্তন করে কমেন্ট স্প্যামের মতো একটি বাস্তব সমস্যার সমাধান করা যায়। ( কোডল্যাবগুলো ক্রমানুসারে করার জন্য বিশেষভাবে পরামর্শ দেওয়া হচ্ছে)। আজকের দিনে বিদ্যমান ক্রমবর্ধমান জনপ্রিয় ওয়েব অ্যাপগুলোর কোনো একটিতে কাজ করার সময় অনেক ওয়েব ডেভেলপারই এই সমস্যার সম্মুখীন হবেন।

এই কোডল্যাবে আপনি আরও এক ধাপ এগিয়ে যাবেন এবং আপনার এমএল মডেলকে পুনরায় প্রশিক্ষণ দেবেন, যাতে এটি সময়ের সাথে সাথে স্প্যাম বার্তার বিষয়বস্তুতে হতে পারে এমন পরিবর্তনগুলোকেও বিবেচনায় নিতে পারে। বর্তমান প্রবণতা বা জনপ্রিয় আলোচনার বিষয়ের উপর ভিত্তি করে এটি আপনাকে মডেলটিকে হালনাগাদ রাখতে এবং এই ধরনের পরিবর্তনগুলোর সাথে মানিয়ে নিতে সাহায্য করবে।

পূর্বশর্ত

  • এই সিরিজের প্রথম কোডল্যাবটি সম্পন্ন করেছি।
  • এইচটিএমএল, সিএসএস এবং জাভাস্ক্রিপ্ট সহ ওয়েব প্রযুক্তি সম্পর্কে প্রাথমিক জ্ঞান।

আপনি যা তৈরি করবেন

আপনি পূর্বে নির্মিত ওয়েবসাইটটি একটি কাল্পনিক ভিডিও ব্লগের জন্য পুনরায় ব্যবহার করবেন, যেখানে একটি রিয়েল-টাইম কমেন্ট সেকশন থাকবে। এরপর TensorFlow.js ব্যবহার করে স্প্যাম ডিটেকশন মডেলের একটি কাস্টম প্রশিক্ষিত সংস্করণ লোড করার জন্য এটিকে আপগ্রেড করবেন, যাতে এটি এমন সব এজ কেসে (edge ​​cases) আরও ভালোভাবে কাজ করে যেখানে এটি আগে ব্যর্থ হতো। অবশ্যই, ওয়েব ডেভেলপার এবং ইঞ্জিনিয়ার হিসেবে আপনারা এই কাল্পনিক ইউএক্স (UX) পরিবর্তন করে আপনাদের দৈনন্দিন কাজের অংশ হিসেবে যেকোনো ওয়েবসাইটে পুনরায় ব্যবহার করতে পারেন এবং যেকোনো ক্লায়েন্টের ব্যবহারের ক্ষেত্র অনুযায়ী সমাধানটিকে মানিয়ে নিতে পারেন – হতে পারে সেটি একটি ব্লগ, ফোরাম, বা ড্রুপালের মতো কোনো সিএমএস (CMS)।

চলুন হ্যাকিং শুরু করা যাক...

আপনি যা শিখবেন

আপনি করবেন:

  • প্রি-ট্রেইনড মডেলটি যে এজ কেসগুলোতে ব্যর্থ হচ্ছিল, সেগুলো শনাক্ত করুন।
  • মডেল মেকার ব্যবহার করে তৈরি করা স্প্যাম ক্লাসিফিকেশন মডেলটিকে পুনরায় প্রশিক্ষণ দিন।
  • ব্রাউজারে ব্যবহারের জন্য এই পাইথন-ভিত্তিক মডেলটিকে TensorFlow.js ফরম্যাটে এক্সপোর্ট করুন।
  • নতুনভাবে প্রশিক্ষিত ডেটা দিয়ে হোস্টেড মডেল এবং এর ডিকশনারি আপডেট করুন এবং ফলাফল যাচাই করুন।

এই ল্যাবের জন্য HTML5, CSS, এবং JavaScript সম্পর্কে ধারণা থাকা আবশ্যক। এছাড়াও, Model Maker ব্যবহার করে তৈরি করা মডেলটিকে পুনরায় প্রশিক্ষণ দেওয়ার জন্য আপনাকে একটি "co lab" নোটবুকের মাধ্যমে কিছু Python কোড চালাতে হবে, কিন্তু এটি করার জন্য Python সম্পর্কে কোনো পূর্বপরিচিতির প্রয়োজন নেই।

২. কোড করার জন্য প্রস্তুত হন

ওয়েব অ্যাপ্লিকেশনটি হোস্ট এবং পরিবর্তন করার জন্য আপনি আবারও Glitch.com ব্যবহার করবেন। আপনি যদি পূর্বশর্ত কোডল্যাবটি আগে থেকে সম্পন্ন না করে থাকেন, তবে শুরু করার জন্য এখান থেকে চূড়ান্ত ফলাফলটি ক্লোন করতে পারেন। কোডটি কীভাবে কাজ করে সে সম্পর্কে আপনার কোনো প্রশ্ন থাকলে, সামনে এগোনোর আগে পূর্ববর্তী কোডল্যাবটি সম্পন্ন করার জন্য দৃঢ়ভাবে উৎসাহিত করা হচ্ছে, যেখানে এই কার্যকরী ওয়েব অ্যাপটি কীভাবে তৈরি করতে হয় তা ধাপে ধাপে দেখানো হয়েছে।

গ্লিচ-এ, এটিকে ফোর্ক করতে এবং সম্পাদনাযোগ্য নতুন ফাইল সেট তৈরি করতে কেবল 'রিমিক্স দিস' বোতামে ক্লিক করুন।

৩. পূর্ববর্তী সমাধানে প্রান্তিক পরিস্থিতিগুলো (edge ​​cases) শনাক্ত করুন।

আপনি এইমাত্র ক্লোন করা সম্পূর্ণ ওয়েবসাইটটি খুললে এবং কিছু মন্তব্য টাইপ করার চেষ্টা করলে দেখবেন যে, বেশিরভাগ সময়ই এটি উদ্দেশ্য অনুযায়ী কাজ করছে; প্রত্যাশামতো স্প্যামের মতো মন্তব্যগুলো ব্লক করছে এবং বৈধ উত্তরগুলোকে অনুমোদন দিচ্ছে।

তবে, আপনি যদি একটু চালাক হন এবং মডেলটিকে ভাঙার জন্য কথা বলার ভঙ্গি পরিবর্তন করার চেষ্টা করেন, তাহলে সম্ভবত কোনো এক পর্যায়ে আপনি সফল হবেন। কিছুটা পরীক্ষা-নিরীক্ষার মাধ্যমে আপনি নিচের দেখানো উদাহরণগুলোর মতো উদাহরণ নিজে হাতে তৈরি করতে পারেন। এগুলো বিদ্যমান ওয়েব অ্যাপে পেস্ট করে দেখুন, কনসোলটি পরীক্ষা করুন এবং মন্তব্যটি স্প্যাম কিনা তার সম্ভাব্যতাগুলো দেখুন:

কোনো সমস্যা ছাড়াই পোস্ট করা বৈধ মন্তব্য (প্রকৃত নেতিবাচক):

  1. বাহ, ভিডিওটা আমার খুব ভালো লেগেছে, অসাধারণ কাজ। স্প্যাম হওয়ার সম্ভাবনা: ৪৭.৯১৮৫৪%
  2. এই ডেমোগুলো দারুণ লেগেছে! এ বিষয়ে আর কোনো বিস্তারিত তথ্য আছে? স্প্যামের সম্ভাবনা: ৪৭.১৫৮৯৮%
  3. আরও জানতে আমি কোন ওয়েবসাইটে যেতে পারি? স্প্যাম হওয়ার সম্ভাবনা: ১৫.৩২৪৯৫%

এটা চমৎকার, উপরের সবগুলোর সম্ভাবনা বেশ কম এবং ব্যবস্থা নেওয়ার আগে তা সফলভাবে ডিফল্ট SPAM_THRESHOLD এর সর্বনিম্ন ৭৫% সম্ভাবনার সীমাটি অতিক্রম করে (যা পূর্ববর্তী কোডল্যাবের script.js কোডে সংজ্ঞায়িত)।

এবার চলুন আরও কিছু বিতর্কিত মন্তব্য লেখার চেষ্টা করি যেগুলো স্প্যাম না হওয়া সত্ত্বেও স্প্যাম হিসেবে চিহ্নিত হবে...

বৈধ মন্তব্য যা স্প্যাম হিসেবে চিহ্নিত করা হয়েছে (ভুল শনাক্তকরণ):

  1. কেউ কি তার পরা মাস্কটির ওয়েবসাইটের লিঙ্ক দিতে পারবেন? স্প্যাম হওয়ার সম্ভাবনা: ৯৮.৪৬৪৬৬%
  2. "আমি কি এই গানটা স্পটিফাই-এ কিনতে পারি? কেউ দয়া করে আমাকে জানান!" স্প্যাম হওয়ার সম্ভাবনা: ৯৪.৪০৯৫৩%
  3. TensorFlow.js কীভাবে ডাউনলোড করতে হয়, সে বিষয়ে বিস্তারিত তথ্য দিয়ে কেউ কি আমার সাথে যোগাযোগ করতে পারবেন? স্প্যাম হওয়ার সম্ভাবনা: ৮৩.২০০৮৪%

ওহ না! মনে হচ্ছে এই বৈধ মন্তব্যগুলোকে স্প্যাম হিসেবে চিহ্নিত করা হচ্ছে, অথচ এগুলো অনুমোদিত হওয়া উচিত। আপনি এটা কীভাবে ঠিক করতে পারেন?

একটি সহজ উপায় হলো SPAM_THRESHOLD ৯৮.৫% আত্মবিশ্বাসের উপরে নিয়ে যাওয়া। সেক্ষেত্রে এই ভুলভাবে শ্রেণীবদ্ধ করা মন্তব্যগুলো পোস্ট করা হবে। এই বিষয়টি মাথায় রেখে, চলুন নিচে অন্যান্য সম্ভাব্য ফলাফলগুলো নিয়ে আলোচনা করা যাক...

স্প্যাম হিসেবে চিহ্নিত স্প্যাম মন্তব্য (প্রকৃতপক্ষে):

  1. এটা দারুণ, কিন্তু আমার ওয়েবসাইটে আরও ভালো ডাউনলোড লিঙ্কগুলো দেখুন! স্প্যাম হওয়ার সম্ভাবনা: ৯৯.৭৭৮৭৩%
  2. আমি এমন কিছু লোককে চিনি যারা আপনাকে কিছু ওষুধের ব্যবস্থা করে দিতে পারবে, বিস্তারিত জানতে আমার প্রোফাইল দেখুন। স্প্যাম হওয়ার সম্ভাবনা: ৯৮.৪৬৯৫৫%
  3. আরও চমৎকার ও উন্নত ভিডিও ডাউনলোড করতে আমার প্রোফাইল দেখুন! http://example.com স্প্যাম হওয়ার সম্ভাবনা: ৯৬.২৬৩৮৩%

আচ্ছা, তাহলে আমাদের আসল ৭৫% থ্রেশহোল্ড অনুযায়ী এটা প্রত্যাশা মতোই কাজ করছে, কিন্তু যেহেতু আগের ধাপে আপনি SPAM_THRESHOLD পরিবর্তন করে ৯৮.৫% কনফিডেন্টের বেশি করে দিয়েছেন, তার মানে এখানকার ২টি উদাহরণ পার পেয়ে যাবে, তাই হয়তো থ্রেশহোল্ডটা একটু বেশি হয়ে যাচ্ছে। হয়তো ৯৬% হলে ভালো হবে? কিন্তু আপনি যদি তা করেন, তাহলে আগের সেকশনের একটি কমেন্ট (ফলস পজিটিভ) স্প্যাম হিসেবে চিহ্নিত হয়ে যাবে, যদিও সেটি বৈধ ছিল কারণ সেটির রেটিং ছিল ৯৮.৪৬৪৬৬%।

এক্ষেত্রে সম্ভবত সবচেয়ে ভালো উপায় হলো এই সমস্ত আসল স্প্যাম মন্তব্যগুলো শনাক্ত করা এবং উপরের ব্যর্থতাগুলোর জন্য পুনরায় প্রশিক্ষণ দেওয়া। থ্রেশহোল্ড ৯৬%-এ সেট করার মাধ্যমে সমস্ত ট্রু পজিটিভ শনাক্ত হয় এবং আপনি উপরের ২টি ফলস পজিটিভও বাদ দিয়ে দেন। শুধুমাত্র একটি সংখ্যা পরিবর্তনের জন্য এটা মন্দ নয়।

চলুন এগিয়ে যাই...

স্প্যাম মন্তব্য যা পোস্ট করার অনুমতি দেওয়া হয়েছিল (ফলস নেগেটিভ):

  1. আরও চমৎকার ও উন্নত ভিডিও ডাউনলোড করতে আমার প্রোফাইল দেখুন! স্প্যাম হওয়ার সম্ভাবনা: ৭.৫৪৯২৬%
  2. আমাদের জিম ট্রেনিং ক্লাসে ছাড় পান, প্রোফাইল দেখুন! স্প্যাম হওয়ার সম্ভাবনা: ১৭.৪৯৮৪৯%
  3. ওহ মাই গড, GOOG স্টকের দাম তো হঠাৎ করেই বেড়ে গেল! দেরি হওয়ার আগেই কিনে ফেলুন! স্প্যামের সম্ভাবনা: ২০.৪২৮৯৪%

এই মন্তব্যগুলোর ক্ষেত্রে শুধু SPAM_THRESHOLD মান আরও পরিবর্তন করে আপনি কিছুই করতে পারবেন না। স্প্যামের থ্রেশহোল্ড ৯৬% থেকে কমিয়ে প্রায় ৯% করলে আসল মন্তব্যও স্প্যাম হিসেবে চিহ্নিত হবে — এর মধ্যে একটি বৈধ হওয়া সত্ত্বেও সেটির রেটিং ৫৮%। এই ধরনের মন্তব্যগুলো মোকাবেলা করার একমাত্র উপায় হলো, ট্রেনিং ডেটাতে এই ধরনের এজ কেসগুলো অন্তর্ভুক্ত করে মডেলটিকে পুনরায় প্রশিক্ষণ দেওয়া, যাতে এটি কোনটি স্প্যাম আর কোনটি নয়, সে সম্পর্কে নিজের দৃষ্টিভঙ্গি পরিবর্তন করতে শেখে।

যদিও এই মুহূর্তে মডেলটিকে পুনরায় প্রশিক্ষণ দেওয়াই একমাত্র উপায়, আপনি এটাও দেখেছেন যে কখন কোনো কিছুকে স্প্যাম হিসেবে চিহ্নিত করার থ্রেশহোল্ডকে পরিমার্জন করে পারফরম্যান্সও উন্নত করা যায়। একজন মানুষ হিসেবে, ৭৫% বেশ আত্মবিশ্বাসী মনে হতে পারে, কিন্তু এই মডেলটির ক্ষেত্রে উদাহরণ ইনপুটগুলোর সাথে আরও কার্যকর হতে আপনাকে এটিকে বাড়িয়ে প্রায় ৮১.৫%-এ নিয়ে যেতে হতো।

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

এমন কিছু পরিস্থিতি থাকতে পারে যেখানে একটি ভুল পজিটিভ (বা নেগেটিভ) ফলাফলের গুরুতর পরিণতি হতে পারে (যেমন চিকিৎসা ক্ষেত্রে), তাই আপনি আপনার থ্রেশহোল্ড অনেক উঁচুতে সেট করতে পারেন এবং যারা সেই থ্রেশহোল্ড পূরণ করে না, তাদের জন্য আরও ম্যানুয়াল পর্যালোচনার অনুরোধ করতে পারেন। একজন ডেভেলপার হিসেবে এটি আপনার সিদ্ধান্ত এবং এর জন্য কিছু পরীক্ষা-নিরীক্ষার প্রয়োজন।

৪. মন্তব্য স্প্যাম সনাক্তকরণ মডেলটিকে পুনরায় প্রশিক্ষণ দিন

পূর্ববর্তী অংশে আপনি এমন বেশ কিছু এজ কেস (edge ​​cases) চিহ্নিত করেছেন যেগুলোর কারণে মডেলটি কাজ করছিল না এবং এই পরিস্থিতিগুলো সামাল দেওয়ার জন্য মডেলটিকে পুনরায় প্রশিক্ষণ দেওয়া ছাড়া আর কোনো উপায় ছিল না। একটি প্রোডাকশন সিস্টেমে সময়ের সাথে সাথে আপনি এই ধরনের পরিস্থিতি দেখতে পারেন, যেমন—যখন ব্যবহারকারীরা ম্যানুয়ালি কোনো মন্তব্যকে স্প্যাম হিসেবে চিহ্নিত করে কিন্তু তা গৃহীত হয়, অথবা মডারেটররা চিহ্নিত করা মন্তব্যগুলো পর্যালোচনা করে বুঝতে পারেন যে সেগুলোর মধ্যে কয়েকটি আসলে স্প্যাম নয় এবং তারা সেই মন্তব্যগুলোকে পুনরায় প্রশিক্ষণের জন্য চিহ্নিত করতে পারেন। ধরে নিচ্ছি যে আপনি এই এজ কেসগুলোর জন্য প্রচুর নতুন ডেটা সংগ্রহ করেছেন (সর্বোত্তম ফলাফলের জন্য সম্ভব হলে আপনার কাছে এই নতুন বাক্যগুলোর কিছু ভিন্ন রূপ থাকা উচিত), এখন আমরা আপনাকে দেখাবো কিভাবে সেই এজ কেসগুলোকে মাথায় রেখে মডেলটিকে পুনরায় প্রশিক্ষণ দিতে হয়।

পূর্ব-নির্মিত মডেলের সংক্ষিপ্ত বিবরণ

আপনি যে পূর্ব-নির্মিত মডেলটি ব্যবহার করেছেন, সেটি মডেল মেকারের মাধ্যমে কোনো তৃতীয় পক্ষ তৈরি করেছে এবং এটি কাজ করার জন্য একটি 'অ্যাভারেজ ওয়ার্ড এমবেডিং' মডেল ব্যবহার করে।

যেহেতু মডেলটি মডেল মেকার দিয়ে তৈরি করা হয়েছে, তাই মডেলটিকে রিট্রেইন করার জন্য আপনাকে অল্প সময়ের জন্য পাইথনে যেতে হবে এবং তারপর তৈরি করা মডেলটিকে TensorFlow.js ফরম্যাটে এক্সপোর্ট করতে হবে, যাতে আপনি এটি ব্রাউজারে ব্যবহার করতে পারেন। সৌভাগ্যবশত, মডেল মেকার তাদের মডেলগুলো ব্যবহার করা অত্যন্ত সহজ করে দিয়েছে, তাই এই প্রক্রিয়াটি অনুসরণ করা বেশ সহজ হবে এবং আমরা আপনাকে পুরো প্রক্রিয়া জুড়ে পথ দেখাব, সুতরাং আপনি যদি আগে কখনো পাইথন ব্যবহার না করেও থাকেন, তবে চিন্তার কোনো কারণ নেই!

কোলাবস

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

সরাসরি colab.research.google.com- এ যান এবং আপনার সামনে দেখানো ছবির মতো একটি স্বাগত স্ক্রিন আসবে:

6b82258445885c50.png

এখন পপ-আপ উইন্ডোর নিচের ডানদিকে থাকা 'New Notebook' বাটনটিতে ক্লিক করুন এবং আপনি এরকম একটি খালি কোলাব দেখতে পাবেন:

2d52c8f7afa88564.png

চমৎকার! পরবর্তী ধাপ হলো ফ্রন্টএন্ড কোলাবকে কোনো ব্যাকএন্ড সার্ভারের সাথে সংযুক্ত করা, যাতে আপনি আপনার লেখা পাইথন কোড চালাতে পারেন। এটি করার জন্য উপরের ডানদিকে থাকা 'Connect'- এ ক্লিক করে 'Connect to hosted runtime' নির্বাচন করুন।

fa5f578a1a3d352b.png

সংযোগ করার পরে আপনি এর জায়গায় র‍্যাম এবং ডিস্ক আইকন দেখতে পাবেন, ঠিক এইভাবে:

541c9894fb39d4cb.png

খুব ভালো! আপনি এখন মডেল মেকার মডেলটিকে পুনরায় প্রশিক্ষণ দেওয়ার জন্য পাইথনে কোডিং শুরু করতে পারেন। শুধু নিচের ধাপগুলো অনুসরণ করুন।

ধাপ ১

বর্তমানে খালি থাকা প্রথম সেলটিতে নিচের কোডটি কপি করুন। এটি পাইথনের "pip" নামক প্যাকেজ ম্যানেজার ব্যবহার করে আপনার জন্য TensorFlow Lite Model Maker ইনস্টল করে দেবে (এটি npm-এর মতো, যার সাথে এই কোড ল্যাবের অধিকাংশ পাঠক JS ইকোসিস্টেম থেকে বেশি পরিচিত হতে পারেন):

!apt-get install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0
!pip install -q tflite-model-maker

তবে সেলে কোড পেস্ট করলে তা কার্যকর হবে না। এরপর, আপনি যে ধূসর সেলটিতে উপরের কোডটি পেস্ট করেছেন, সেটির উপর আপনার মাউস নিয়ে যান, এবং সেলটির বাম দিকে একটি ছোট 'প্লে' আইকন দেখা যাবে, যেমনটি নীচে হাইলাইট করা হয়েছে:

7ac5e3516bed6335.png সেলে এইমাত্র টাইপ করা কোডটি কার্যকর করতে প্লে বাটনে ক্লিক করুন।

এখন আপনি মডেল মেকার ইনস্টল হতে দেখবেন:

651f21b04fb648cc.png

দেখানো অনুযায়ী এই সেলটির কার্য সম্পাদন সম্পন্ন হলে, নিচের পরবর্তী ধাপে যান।

ধাপ ২

এরপরে, দেখানো অনুযায়ী একটি নতুন কোড সেল যোগ করুন, যাতে আপনি প্রথম সেলের পরে আরও কিছু কোড পেস্ট করে তা আলাদাভাবে এক্সিকিউট করতে পারেন:

869904a9d774c455.png

পরবর্তী যে সেলটি এক্সিকিউট করা হবে, তাতে এমন কিছু ইম্পোর্ট থাকবে যা নোটবুকের বাকি কোডগুলোতে ব্যবহার করার প্রয়োজন হবে। তৈরি হওয়া নতুন সেলটিতে নিচের কোডটি কপি করে পেস্ট করুন:

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) ব্যবহার করছেন কিনা, যা মডেল মেকার ব্যবহারের জন্য একটি পূর্বশর্ত।

অবশেষে, আগের মতোই, সেলটির উপর মাউস নিয়ে গেলে 'প্লে' আইকনটি চেপে সেলটি এক্সিকিউট করুন এবং তারপর পরবর্তী ধাপের জন্য একটি নতুন কোড সেল যোগ করুন।

ধাপ ৩

এরপর আপনি একটি রিমোট সার্ভার থেকে আপনার ডিভাইসে ডেটা ডাউনলোড করবেন এবং ডাউনলোড করা স্থানীয় ফাইলটির পাথটি training_data ভেরিয়েবলে সেট করবেন:

data_file = tf.keras.utils.get_file(fname='comment-spam-extras.csv', origin='https://storage.googleapis.com/jmstore/TensorFlowJS/EdX/code/6.5/jm_blog_comments_extras.csv', extract=False)

মডেল মেকার ডাউনলোড করা ফাইলের মতো সাধারণ CSV ফাইল থেকেও মডেল প্রশিক্ষণ দিতে পারে। আপনাকে শুধু নির্দিষ্ট করে দিতে হবে কোন কলামে টেক্সট এবং কোন কলামে লেবেল থাকবে। ধাপ ৫-এ আপনি দেখতে পাবেন কীভাবে তা করতে হয়। আপনি চাইলে, ফাইলটিতে কী আছে তা দেখার জন্য সরাসরি CSV ফাইলটি নিজেই ডাউনলোড করতে পারেন।

আপনাদের মধ্যে যারা তীক্ষ্ণ দৃষ্টিসম্পন্ন _extras তারা লক্ষ্য করবেন যে এই ফাইলটির নাম jm_blog_comments .csv এই ফাইলটি হলো মূলত প্রথম কমেন্ট স্প্যাম মডেলটি তৈরি করতে ব্যবহৃত মূল ট্রেনিং ডেটার সাথে আপনার আবিষ্কৃত নতুন এজ কেস ডেটা একত্রিত করে একটি ফাইলে রাখা হয়েছে। যে নতুন বাক্যগুলো থেকে আপনি শিখতে চান, সেগুলোর পাশাপাশি মডেলটিকে ট্রেইন করতে ব্যবহৃত মূল ট্রেনিং ডেটাও আপনার প্রয়োজন হবে।

ঐচ্ছিক: আপনি যদি এই 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

প্যারামিটার

wordvec_dim প্যারামিটারটি হলো প্রতিটি শব্দের ভেক্টরের জন্য আপনি যে সংখ্যক ডাইমেনশন ব্যবহার করতে চান, তা নির্দেশ করে। এই ডাইমেনশনগুলো মূলত বিভিন্ন বৈশিষ্ট্য (যা মেশিন লার্নিং অ্যালগরিদম প্রশিক্ষণের সময় তৈরি করে), যার মাধ্যমে যেকোনো একটি শব্দকে পরিমাপ করা যায়। প্রোগ্রামটি এই বৈশিষ্ট্যগুলো ব্যবহার করে কোনো অর্থপূর্ণ উপায়ে সাদৃশ্যপূর্ণ শব্দগুলোকে সর্বোত্তমভাবে সংযুক্ত করার চেষ্টা করে।

উদাহরণস্বরূপ, যদি কোনো শব্দ কতটা 'চিকিৎসাগত' তার জন্য একটি মাপকাঠি থাকতো, তাহলে 'পিলস'-এর মতো একটি শব্দ এই মাপকাঠিতে উচ্চ স্কোর করতে পারতো এবং 'এক্সরে'-র মতো অন্যান্য উচ্চ স্কোর করা শব্দের সাথে যুক্ত হতে পারতো, কিন্তু 'ক্যাট' এই মাপকাঠিতে কম স্কোর করতো। এমনও হতে পারে যে, স্প্যাম শনাক্ত করার জন্য একটি 'চিকিৎসাগত মাপকাঠি' অন্যান্য গুরুত্বপূর্ণ মাপকাঠিগুলোর সাথে একত্রিত করলে তা বেশ কার্যকর হয়।

যেসব শব্দ 'চিকিৎসাগত মাত্রায়' উচ্চ স্কোর করে, সেগুলোর ক্ষেত্রে এমন একটি দ্বিতীয় মাত্রা সহায়ক হতে পারে যা শব্দগুলোকে মানবদেহের সাথে সম্পর্কিত করে। 'পা', 'হাত', 'ঘাড়'-এর মতো শব্দগুলো এখানে উচ্চ স্কোর করতে পারে এবং চিকিৎসাগত মাত্রাতেও বেশ উচ্চ স্কোর করতে পারে।

এই মাত্রাগুলো ব্যবহার করে মডেলটি এমন শব্দ শনাক্ত করতে পারে, যেগুলো স্প্যামের সাথে সম্পর্কিত হওয়ার সম্ভাবনা বেশি। হতে পারে, স্প্যাম ইমেইলে চিকিৎসা সংক্রান্ত এবং মানবদেহের অঙ্গপ্রত্যঙ্গ সম্পর্কিত শব্দ থাকার সম্ভাবনা বেশি।

গবেষণা থেকে নির্ধারিত সাধারণ নিয়মটি হলো, এই প্যারামিটারের জন্য শব্দসংখ্যার চতুর্থ মূল ভালোভাবে কাজ করে। তাই যদি আমি ২০০০ শব্দ ব্যবহার করি, তবে এর জন্য ৭টি ডাইমেনশন একটি ভালো সূচনা হতে পারে। ব্যবহৃত শব্দসংখ্যা পরিবর্তন করলে, আপনি এটিও পরিবর্তন করতে পারবেন।

বোঝা

seq_len

প্যারামিটার

ইনপুট মানের ক্ষেত্রে মডেলগুলো সাধারণত খুবই অনমনীয় হয়। একটি ল্যাঙ্গুয়েজ মডেলের জন্য এর অর্থ হলো, মডেলটি একটি নির্দিষ্ট, স্থির দৈর্ঘ্যের বাক্যকে শ্রেণিবদ্ধ করতে পারে। এটি seq_len প্যারামিটার দ্বারা নির্ধারিত হয়, যেখানে 'সিকোয়েন্স লেংথ' বা 'অনুক্রমের দৈর্ঘ্য' বোঝায়। যখন আপনি শব্দগুলোকে সংখ্যায় (বা টোকেনে) রূপান্তর করেন, তখন একটি বাক্য এই টোকেনগুলোর একটি অনুক্রমে পরিণত হয়। সুতরাং আপনার মডেলটিকে (এই ক্ষেত্রে) ২০টি টোকেনযুক্ত বাক্য শ্রেণিবদ্ধ ও শনাক্ত করার জন্য প্রশিক্ষণ দেওয়া হবে। বাক্যটি এর চেয়ে দীর্ঘ হলে, তা ছেঁটে ফেলা হবে। আর যদি এটি ছোট হয়, তবে এর সাথে অতিরিক্ত অংশ যোগ করা হবে – ঠিক যেমনটি এই সিরিজের প্রথম কোডল্যাবে করা হয়েছিল

ধাপ ৫ - প্রশিক্ষণ ডেটা লোড করুন

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

এরপর আপনি data.split() ব্যবহার করে ডেটাটিকে ট্রেনিং এবং টেস্ট ডেটাতে ভাগ করবেন। .9 সংখ্যাটি নির্দেশ করে যে ডেটাসেটের ৯০% ট্রেনিংয়ের জন্য এবং বাকি অংশ টেস্টিংয়ের জন্য ব্যবহৃত হবে।

ধাপ ৬ - মডেলটি তৈরি করুন

আরেকটি সেল যোগ করুন যেখানে আমরা মডেলটি তৈরি করার জন্য কোড লিখব:

model = text_classifier.create(train_data, model_spec=spec, epochs=50)

এটি মডেল মেকার ব্যবহার করে একটি টেক্সট ক্লাসিফায়ার মডেল তৈরি করে, এবং এতে আপনি যে ট্রেনিং ডেটা ব্যবহার করতে চান (যা ধাপ ৪-এ নির্ধারণ করা হয়েছিল), মডেল স্পেসিফিকেশন (যা ধাপ ৪-এ সেট আপ করা হয়েছিল), এবং এপোকের সংখ্যা, এই ক্ষেত্রে ৫০, নির্দিষ্ট করে দেন।

মেশিন লার্নিং-এর মূল নীতি হলো এটি এক ধরনের প্যাটার্ন মেলানোর প্রক্রিয়া। প্রাথমিকভাবে, এটি শব্দগুলোর জন্য আগে থেকে প্রশিক্ষিত ওয়েটগুলো লোড করে এবং সেগুলোকে একসাথে দলবদ্ধ করার চেষ্টা করে। এর সাথে একটি 'পূর্বাভাস'ও থাকে যে, দলবদ্ধ অবস্থায় কোন শব্দগুলো স্প্যাম নির্দেশ করে এবং কোনগুলো করে না। প্রথমবার এই অনুপাতটি প্রায় ৫০:৫০ হওয়ার সম্ভাবনা থাকে, কারণ মডেলটি তখন সবেমাত্র কাজ শুরু করে, যেমনটা নিচে দেখানো হয়েছে:

bbe4b896d8060bc4.png

এরপর এটি এর ফলাফল পরিমাপ করবে, এবং এর পূর্বাভাসকে আরও নিখুঁত করার জন্য মডেলের ওয়েটগুলো পরিবর্তন করে আবার চেষ্টা করবে। এটাই একটি ইপক। সুতরাং, epochs=50 উল্লেখ করলে, এটি দেখানো অনুযায়ী সেই 'লুপ'টি ৫০ বার চালাবে:

4ed286d114960ca.png

সুতরাং, যখন আপনি ৫০তম ইপকে পৌঁছাবেন, মডেলটি আরও অনেক উচ্চ স্তরের নির্ভুলতা দেখাবে। এক্ষেত্রে এটি ৯৯.১% দেখাচ্ছে!

ধাপ ৭ - মডেলটি রপ্তানি করুন

আপনার প্রশিক্ষণ সম্পন্ন হয়ে গেলে, আপনি মডেলটি এক্সপোর্ট করতে পারবেন। TensorFlow তার নিজস্ব ফরম্যাটে একটি মডেলকে প্রশিক্ষণ দেয়, এবং একটি ওয়েব পেজে ব্যবহারের জন্য এটিকে TensorFlow.js ফরম্যাটে রূপান্তর করতে হয়। শুধু নিচের কোডটি একটি নতুন সেলে পেস্ট করে এক্সিকিউট করুন:

model.export(export_dir="/js_export/", export_format=[ExportFormat.TFJS, ExportFormat.LABEL, ExportFormat.VOCAB])
!zip -r /js_export/ModelFiles.zip /js_export/

এই কোডটি এক্সিকিউট করার পর, আপনি যদি কোলাবের বাম দিকের ছোট ফোল্ডার আইকনটিতে ক্লিক করেন, তাহলে আপনি উপরে এক্সপোর্ট করা ফোল্ডারটিতে (রুট ডিরেক্টরিতে - প্রয়োজনে আপনাকে এক লেভেল উপরে যেতে হতে পারে) যেতে পারবেন এবং ModelFiles.zip ফাইলের মধ্যে থাকা এক্সপোর্ট করা ফাইলগুলোর জিপ বান্ডেলটি খুঁজে পাবেন।

এই জিপ ফাইলটি এখনই আপনার কম্পিউটারে ডাউনলোড করুন, কারণ আপনি প্রথম কোডল্যাবের মতোই এই ফাইলগুলি ব্যবহার করবেন:

cda3c681ebf144b4.png

দারুণ! পাইথন পর্ব শেষ, এবার আপনি আপনার চেনা ও পছন্দের জাভাস্ক্রিপ্ট জগতে ফিরে যেতে পারেন। যাক বাবা!

৫. নতুন মেশিন লার্নিং মডেলটি পরিবেশন করা

আপনি এখন মডেলটি লোড করার জন্য প্রায় প্রস্তুত। তবে, তা করার আগে আপনাকে অবশ্যই কোডল্যাব থেকে আগে ডাউনলোড করা নতুন মডেল ফাইলগুলো আপলোড করতে হবে, যাতে এটি আপনার কোডে হোস্ট এবং ব্যবহারযোগ্য হয়।

প্রথমে, যদি আপনি ইতিমধ্যে তা না করে থাকেন, তাহলে এইমাত্র চালানো Model Maker Colab নোটবুক থেকে ডাউনলোড করা মডেলটির ফাইলগুলো আনজিপ করুন। এর বিভিন্ন ফোল্ডারের মধ্যে আপনি নিম্নলিখিত ফাইলগুলো দেখতে পাবেন:

3ace87c57b98cfbc.png

আপনার কাছে এখানে কী আছে?

  • model.json - এটি সেই ফাইলগুলোর মধ্যে একটি যা দিয়ে প্রশিক্ষিত TensorFlow.js মডেলটি তৈরি হয়। আপনি JS কোডে এই নির্দিষ্ট ফাইলটির উল্লেখ করবেন।
  • group1-shard1of1.bin - এটি একটি বাইনারি ফাইল, যাতে এক্সপোর্ট করা TensorFlow.js মডেলের বেশিরভাগ সংরক্ষিত ডেটা রয়েছে এবং ডাউনলোডের জন্য এটিকে আপনার সার্ভারে উপরের model.json মতো একই ডিরেক্টরিতে হোস্ট করতে হবে।
  • vocab - এক্সটেনশনবিহীন এই অদ্ভুত ফাইলটি মডেল মেকারের একটি অংশ, যা আমাদের দেখায় কীভাবে বাক্যের শব্দগুলোকে এনকোড করতে হয়, যাতে মডেল বুঝতে পারে সেগুলো কীভাবে ব্যবহার করতে হয়। পরবর্তী বিভাগে আপনি এই বিষয়ে আরও বিস্তারিত জানবেন।
  • labels.txt - এতে কেবল সেই ক্লাসনেমগুলো থাকে যা মডেলটি প্রেডিক্ট করবে। এই মডেলটির ক্ষেত্রে, আপনি যদি ফাইলটি আপনার টেক্সট এডিটরে খোলেন, তাহলে এতে কেবল 'false' এবং 'true' লেখা দেখতে পাবেন, যা এর প্রেডিকশন আউটপুট হিসেবে যথাক্রমে 'স্প্যাম নয়' বা 'স্প্যাম' নির্দেশ করে।

TensorFlow.js মডেল ফাইলগুলি হোস্ট করুন

প্রথমে তৈরি হওয়া model.json এবং *.bin ফাইলগুলো একটি ওয়েব সার্ভারে রাখুন, যাতে আপনি আপনার ওয়েব পেজ থেকে সেগুলোতে প্রবেশ করতে পারেন।

বিদ্যমান মডেল ফাইলগুলি মুছে ফেলুন

যেহেতু আপনি এই সিরিজের প্রথম কোডল্যাবের চূড়ান্ত ফলাফলের উপর ভিত্তি করে কাজ করছেন, তাই আপনাকে প্রথমে আপলোড করা বিদ্যমান মডেল ফাইলগুলো মুছে ফেলতে হবে। আপনি যদি Glitch.com ব্যবহার করেন, তাহলে বাম দিকের ফাইল প্যানেলে model.json এবং group1-shard1of1.bin ফাইলগুলো খুঁজুন, প্রতিটি ফাইলের জন্য ৩ ডট মেনু ড্রপডাউনে ক্লিক করুন এবং দেখানো অনুযায়ী ডিলিট নির্বাচন করুন:

c72bfdc5a0db4d0d.png

গ্লিচে নতুন ফাইল আপলোড করা হচ্ছে

দারুণ! এবার নতুনগুলো আপলোড করুন:

  1. আপনার গ্লিচ প্রজেক্টের বাম দিকের প্যানেলে থাকা অ্যাসেটস ফোল্ডারটি খুলুন এবং পুরোনো আপলোড করা কোনো অ্যাসেটস থাকলে সেগুলো মুছে ফেলুন।
  2. 'আপলোড অ্যান অ্যাসেট'-এ ক্লিক করুন এবং এই ফোল্ডারে আপলোড করার জন্য group1-shard1of1.bin ফাইলটি নির্বাচন করুন। আপলোড হয়ে গেলে এটি দেখতে এইরকম হবে:

c6739dd30e6df977.png

  1. দারুণ! এবার model.json ফাইলটির জন্যও একই কাজ করুন, যাতে আপনার assets ফোল্ডারে এইরকম দুটি ফাইল থাকে:

b7858eb08bea9ac3.png

  1. আপনি এইমাত্র আপলোড করা group1-shard1of1.bin ফাইলটিতে ক্লিক করলে এর অবস্থানের URL-টি কপি করতে পারবেন। এখন দেখানো অনুযায়ী এই পাথটি কপি করুন:

19999f6644f61153.png

  1. এখন স্ক্রিনের নিচের বাম দিকে, টুলস > টার্মিনাল-এ ক্লিক করুন। টার্মিনাল উইন্ডোটি লোড হওয়া পর্যন্ত অপেক্ষা করুন।
  2. লোড হয়ে গেলে নিম্নলিখিতটি টাইপ করুন এবং তারপরে ডিরেক্টরি পরিবর্তন করে www ফোল্ডারে যাওয়ার জন্য এন্টার চাপুন:

টার্মিনাল:

cd www
  1. এরপরে, wget ব্যবহার করে সদ্য আপলোড করা দুটি ফাইল ডাউনলোড করুন। এর জন্য, নিচের URL-গুলো Glitch-এর অ্যাসেটস ফোল্ডারে থাকা ফাইলগুলোর জন্য আপনার তৈরি করা URL দিয়ে প্রতিস্থাপন করুন (প্রতিটি ফাইলের নিজস্ব URL-এর জন্য অ্যাসেটস ফোল্ডারটি দেখুন)।

দুটি URL-এর মধ্যে থাকা ফাঁকা স্থানটি লক্ষ্য করুন এবং খেয়াল করুন যে আপনাকে যে URL-গুলো ব্যবহার করতে হবে সেগুলো দেখানো URL-গুলো থেকে ভিন্ন হবে, কিন্তু দেখতে একই রকম হবে:

টার্মিনাল

wget https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fmodel.json?v=1616111344958 https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fgroup1-shard1of1.bin?v=1616017964562

চমৎকার! আপনি এখন www ফোল্ডারে আপলোড করা ফাইলগুলোর একটি কপি তৈরি করে ফেলেছেন।

তবে, এই মুহূর্তে এগুলো অদ্ভুত নামে ডাউনলোড হবে। আপনি টার্মিনালে ls টাইপ করে এন্টার চাপলে এইরকম কিছু দেখতে পাবেন:

6c417fdfc64762f1.png

  1. mv কমান্ড ব্যবহার করে ফাইলগুলোর নাম পরিবর্তন করুন। কনসোলে নিম্নলিখিতটি টাইপ করুন এবং প্রতিটি লাইনের পরে এন্টার চাপুন:

টার্মিনাল:

mv *group1-shard1of1.bin* group1-shard1of1.bin
mv *model.json* model.json
  1. অবশেষে, টার্মিনালে refresh টাইপ করে এন্টার চাপুন এবং গ্লিচ প্রজেক্টটি রিফ্রেশ করুন:

টার্মিনাল:

refresh

রিফ্রেশ করার পর আপনি ইউজার ইন্টারফেসের www ফোল্ডারে model.json এবং group1-shard1of1.bin দুটি দেখতে পাবেন।

530bb651f4dbac64.png

চমৎকার! শেষ ধাপটি হলো dictionary.js ফাইলটি আপডেট করা।

  1. আপনার নতুন ডাউনলোড করা শব্দভান্ডার ফাইলটিকে সঠিক JS ফরম্যাটে রূপান্তর করুন, হয় নিজে হাতে আপনার টেক্সট এডিটরের মাধ্যমে অথবা এই টুলটি ব্যবহার করে , এবং ফলাফলস্বরূপ প্রাপ্ত আউটপুটটি আপনার www ফোল্ডারের মধ্যে dictionary.js নামে সংরক্ষণ করুন। যদি আপনার কাছে আগে থেকেই একটি dictionary.js ফাইল থাকে, তবে আপনি কেবল নতুন বিষয়বস্তুগুলো সেটির উপর কপি-পেস্ট করে ফাইলটি সংরক্ষণ করতে পারেন।

বাহ! আপনি সফলভাবে সমস্ত পরিবর্তিত ফাইল আপডেট করেছেন এবং এখন যদি আপনি ওয়েবসাইটটি ব্যবহার করার চেষ্টা করেন, তাহলে আপনি লক্ষ্য করবেন যে পুনরায় প্রশিক্ষিত মডেলটি কীভাবে আবিষ্কৃত এবং শেখা প্রান্তিক পরিস্থিতিগুলো (edge ​​cases) সামাল দিতে সক্ষম হবে, যেমনটি দেখানো হয়েছে:

64e5cf6f6e158d6c.gif

যেমনটা দেখতে পাচ্ছেন, প্রথম ৬টি এখন সঠিকভাবে স্প্যাম নয় হিসেবে চিহ্নিত হয়েছে, এবং দ্বিতীয় ব্যাচের সবগুলোই স্প্যাম হিসেবে শনাক্ত হয়েছে। চমৎকার!

চলুন কিছু ভিন্নতাও চেষ্টা করে দেখি এটি ভালোভাবে সাধারণীকরণ করা যায় কিনা। মূলত একটি ত্রুটিপূর্ণ বাক্য ছিল যেমন:

ওহ মাই গড, GOOG-এর স্টকের দাম এইমাত্র আকাশ ছুঁয়েছে! দেরি হওয়ার আগেই কিনে ফেলুন!

এটিকে এখন সঠিকভাবে স্প্যাম হিসেবে চিহ্নিত করা হয়েছে, কিন্তু আপনি যদি এটিকে পরিবর্তন করে দেন তাহলে কী হবে:

XYZ স্টকের মূল্য এইমাত্র বেড়ে গেল! দেরি হওয়ার আগেই কিছু কিনে ফেলুন!

এখানে আপনি ৯৮% স্প্যাম হওয়ার সম্ভাবনার একটি পূর্বাভাস পাচ্ছেন, যা সঠিক, যদিও আপনি স্টক সিম্বল এবং শব্দচয়ন সামান্য পরিবর্তন করেছেন।

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

৬. অভিনন্দন!

অভিনন্দন, আপনি একটি বিদ্যমান মেশিন লার্নিং মডেলকে আপনার খুঁজে পাওয়া এজ কেসগুলোর জন্য নিজেকে আপডেট করতে পুনঃপ্রশিক্ষণ দিতে এবং একটি বাস্তব-জগতের অ্যাপ্লিকেশনের জন্য TensorFlow.js ব্যবহার করে ব্রাউজারে সেই পরিবর্তনগুলো প্রয়োগ করতে সক্ষম হয়েছেন।

পুনরালোচনা

এই কোডল্যাবে আপনি:

  1. পূর্ব-নির্মিত মন্তব্য স্প্যাম মডেলটি ব্যবহার করার সময় যে প্রান্তিক পরিস্থিতিগুলো (edge ​​cases) কাজ করছিল না, সেগুলো শনাক্ত করা হয়েছে।
  2. আপনার আবিষ্কৃত প্রান্তিক পরিস্থিতিগুলো বিবেচনায় নিতে মডেল মেকার মডেলটিকে পুনরায় প্রশিক্ষণ দেওয়া হয়েছে।
  3. নতুন প্রশিক্ষিত মডেলটি TensorFlow.js ফরম্যাটে রপ্তানি করা হয়েছে।
  4. নতুন ফাইলগুলো ব্যবহার করার জন্য আপনার ওয়েব অ্যাপ আপডেট করা হয়েছে।

এরপর কী?

সুতরাং এই আপডেটটি দারুণ কাজ করছে, কিন্তু যেকোনো ওয়েব অ্যাপের মতোই, সময়ের সাথে সাথে পরিবর্তন আসবে। প্রতিবার আমাদের ম্যানুয়ালি এটি করার পরিবর্তে, অ্যাপটি যদি সময়ের সাথে সাথে ক্রমাগত নিজেকে উন্নত করত, তবে অনেক ভালো হতো। আপনি কি ভাবতে পারেন, উদাহরণস্বরূপ, ১০০টি নতুন মন্তব্যকে ভুলভাবে শ্রেণীবদ্ধ করার পর একটি মডেলকে স্বয়ংক্রিয়ভাবে পুনরায় প্রশিক্ষণ দেওয়ার জন্য আপনি কীভাবে এই ধাপগুলোকে স্বয়ংক্রিয় করতে পারতেন? আপনার নিয়মিত ওয়েব ইঞ্জিনিয়ারিংয়ের দৃষ্টিকোণ থেকে দেখলে, আপনি সম্ভবত এটি স্বয়ংক্রিয়ভাবে করার জন্য একটি পাইপলাইন তৈরি করার উপায় বের করতে পারবেন। যদি না পারেন, চিন্তা নেই, এই সিরিজের পরবর্তী কোডল্যাবের জন্য অপেক্ষা করুন, যেখানে আপনাকে দেখানো হবে কীভাবে এটি করতে হয়।

আপনি যা তৈরি করেন তা আমাদের সাথে শেয়ার করুন

আপনি আজ যা তৈরি করেছেন তা সহজেই অন্যান্য সৃজনশীল কাজেও ব্যবহার করতে পারেন এবং আমরা আপনাকে গতানুগতিক চিন্তাধারার বাইরে ভাবতে ও নতুন কিছু উদ্ভাবন চালিয়ে যেতে উৎসাহিত করি।

আপনার প্রজেক্টটি টেনসরফ্লো ব্লগে বা ভবিষ্যতের কোনো অনুষ্ঠানে প্রদর্শিত হওয়ার সুযোগ পেতে, সোশ্যাল মিডিয়ায় #MadeWithTFJS হ্যাশট্যাগ ব্যবহার করে আমাদের ট্যাগ করতে ভুলবেন না। আপনি কী তৈরি করেন তা দেখার জন্য আমরা অধীর আগ্রহে অপেক্ষা করছি।

আরও গভীরে যাওয়ার জন্য TensorFlow.js-এর আরও কোডল্যাব রয়েছে।

যাচাই করার জন্য ওয়েবসাইটগুলি