এম্বেডিং

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

মেশিন লার্নিং মডেলের ট্রেনিংয়ের জন্য আপনি ৫,০০০ জনপ্রিয় খাবারের ডেটাসেট তৈরি করলেন, যাতে বিরিয়ানি, এগ রোল, স্যালাড, পিৎজা এবং শোয়ার্মা সহ বিভিন্ন আইটেম রয়েছে।

ছবি ১. পাঁচটি খাবারের ছবি। উপরের বাঁদিক থেকে
       ঘড়ির কাঁটার দিকে: বিরিয়ানি, এগ রোল, স্যালাড, পিৎজা, শোয়ার্মা।
ছবি ১. খাবারের ডেটাসেটে অন্তর্ভুক্ত আইটেমের স্যাম্পেল।

আপনি এমন একটি meal ফিচার তৈরি করলেন যাতে ডেটাসেটের প্রত্যেকটি আইটেমের ওয়ান-হট এনকোডিং করা আছে। এনকোডিং হল এমন একটি প্রসেস, যার মাধ্যমে মেশিন লার্নিং মডেলের ট্রেনিংয়ের জন্য ডেটার সাথে প্রাথমিকভাবে সংখ্যা অ্যাসাইন করা হয়।

ছবি ২. উপরে: বিরিয়ানির ওয়ান-হট এনকোডিংয়ের ছবি।
       ছটি বক্সের উপরে ভেক্টর [1, 0, 0, 0, ..., 0] দেখা যাচ্ছে,
       প্রত্যেকটি বক্স বাঁদিক থেকে ডানদিকে
       একেকটি ভেক্টর নম্বরের সাথে অ্যালাইন করা আছে। বাঁদিক থেকে ডানদিকে বক্সগুলিতে
       এইসব ছবি আছে: বিরিয়ানি, এগ রোল, স্যালাড, পিৎজা, [empty],
       শোয়ার্মা। মাঝখানে: এগ রোলের ওয়ান-হট এনকোডিংয়ের ছবি।
       ছটি বক্সের উপরে ভেক্টর [0, 1, 0, 0, ..., 0] দেখা যাচ্ছে,
       প্রত্যেকটি বক্স বাঁদিক থেকে ডানদিকে একেকটি ভেক্টর নম্বরের সাথে অ্যালাইন করা আছে। উপরে বিরিয়ানির যে ছবিগুলি আছে,
        বক্সগুলিতে ঠিক সেই ছবিগুলিই
       বাঁদিক থেকে ডানদিকে সাজানো আছে। নিচে: শোয়ার্মার ওয়ান-হট এনকোডিংয়ের ছবি। ছটি বক্সের উপরে
       ভেক্টর [0, 1, 0, 0, ..., 0] দেখা যাচ্ছে,
       প্রত্যেকটি বক্স বাঁদিক থেকে ডানদিকে একেকটি ভেক্টর নম্বরের সাথে অ্যালাইন করা আছে। উপরে বিরিয়ানি ও এগ রোলের যে ছবিগুলি আছে,
        বক্সগুলিতে ঠিক সেই ছবিগুলিই
       বাঁদিক থেকে ডানদিকে সাজানো আছে।
ছবি ২. বিরিয়ানি, এগ রোল ও শোয়ার্মার ওয়ান-হট এনকোডিং। প্রতিটি ওয়ান-হট এনকোডিং ভেক্টরের দৈর্ঘ্য ৫,০০০ (ডেটাসেটের প্রতিটি আইটেমের জন্য একটি করে এন্ট্রি)। ছবিতে তিনটি ডটের মাধ্যমে সেই ৪,৯৯৫টি আইটেম বোঝানো হচ্ছে, যেগুলি দেখানো হয়নি।

স্পার্স ডেটার (অর্থাৎ অল্প পরিমাণে বিক্ষিপ্ত ডেটা) ব্যবহার সংক্রান্ত সমস্যা

এইসব ওয়ান-হট এনকোডিং পর্যালোচনা করে আপনি দেখতে পেলেন যে ডেটা এইভাবে রিপ্রেজেন্ট করার ফলে একাধিক সমস্যা হয়েছে।

  • ওয়েটের সংখ্যা। ইনপুট ভেক্টর বড় হলে, কোনও নিউরাল নেটওয়ার্কের ওয়েটের সংখ্যাও খুব বেশি হবে। ওয়ান-হট এনকোডিংয়ে M সংখ্যক এন্ট্রি এবং ইনপুটের পরে নেটওয়ার্কের প্রথম লেয়ারে N সংখ্যক নোড থাকলে, সেই লেয়ারের জন্য মেশিন লার্নিং মডেলকে MxN সংখ্যক ওয়েটকে ট্রেন করতে হবে।
  • ডেটাপয়েন্টের সংখ্যা। মডেলে ওয়েটের সংখ্যা যত বেশি হবে, সঠিক ট্রেনিংয়ের জন্য তত বেশি ডেটার প্রয়োজন হবে।
  • কম্পিউটেশনের পরিমাণ। ওয়েটের সংখ্যা যত বেশি হবে, মডেলের ট্রেনিং ও ব্যবহারের জন্য তত বেশি কম্পিউটেশনের প্রয়োজন হবে। কম্পিউটেশনের পরিমাণ খুব সহজেই হার্ডওয়্যারের কর্মক্ষমতার থেকে বেশি হয়ে যেতে পারে।
  • মেমরির পরিমাণ। মডেলে ওয়েটের সংখ্যা যত বেশি হবে, ট্রেনিং ও পরিষেবার জন্য অ্যাক্সিলারেটরে তত বেশি মেমরির প্রয়োজন হবে। কার্যক্ষমতা বজায় রেখে মেমরির পরিমাণ বাড়িয়ে তোলা খুব কঠিন।
  • অন-ডিভাইস মেশিন লার্নিংয়ের (ODML) উপযুক্ত ডিভাইস সংক্রান্ত সমস্যা। মেশিন লার্নিং মডেল সার্ভ করার বদলে লোকাল ডিভাইসে রান করতে চাইলে মডেলের সাইজ ছোট করতে হবে এবং ওয়েটের সংখ্যাও কমাতে হবে।

এইসব সমস্যার সমাধানের জন্য এম্বেডিং তৈরি করা এবং কম ডাইমেনশনের সাহায্যে স্পার্স ডেটার রিপ্রেজেন্টেশন তৈরি করার পদ্ধতি এই মডিউলে শিখতে পারবেন।