বাংলায় এনএলপি ০১ - ভূমিকা

বাংলায় এনএলপি ০১ - ভূমিকা

এই সিরিজের উদ্দেশ্য কি ?

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

এই সিরিজের মূল উদ্দেশ্য হচ্ছে ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং এর বিভিন্ন টপিক, সমস্যা এবং সেগুলোতে কীভাবে ডিপ লার্নিং ব্যবহৃত হয়, কিংবা আদৌ ডিপ লার্নিং ই লাগে কেন এসব বিষয় নিয়ে গেঁজানো।

সিরিজের পোস্ট ফ্রিকুয়েন্সি কেমন হবে ?

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

কাদের জন্য ?

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

আগেভাগে কিছু জানা লাগবে ?

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

লাইব্রেরিঃ PyTorch

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

যন্ত্রপাতি ?

হাতের সামনে যে কম্পিউটার আছে সেটা দিয়েই হবে। নতুন এনভিদিয়া জিপিউ (বেয়ার মিনিমাম ২০৮০টিআই) থাকলে ভালো, না থাকলে গুগলের কোলাবোরেটরিতে ডিপ লার্নিং এর জন্য মাগনা জিপিউ দেয়, ওটা ইউস করতে পারবা। এই এক সিরিজ ফলো করার জন্য এখন ব্যাংক খালি করে পিসি কিনতে যাইয়ো না । (সত্যি বলতে, একটা টিউটোরিয়াল সিরিজে GPT3+ স্কেলের কোন মডেল ট্রেইন করে দেখানো সম্ভব না)।

যদি নিজের পিসি হয়, একটা আলাদা ড্রাইভে কোন একটা লিনাক্স ডিস্ট্রিবিউশন (যেমন উবুন্টু বা লিনাক্স মিন্ট) সেটআপ দিয়ে নিতে পারো। যদি সে সুযোগ না থাকে, উইন্ডোজ সাবসিস্টেম ফর লিনাক্স (WSL) করে নাও। পাইথনের জন্য অ্যানাকোন্ডা (বেশি ড্রাইভ স্পেস থাকলে) নতুবা মিনিকোন্ডা ইন্সটল করে নিয়ো, নতুবা রেগুলার পাইথন ইন্সটলার (ওয়েবসাইটে যেটা আছে) দিয়েও চলবে । যদি NLP নিয়ে লম্বা দৌড়ে কিছু করতে চাও, লিনাক্স বিষয়ক অভিজ্ঞতা অনেক কাজে দিবে, আর কম্পিউটেশন রিলেটেড লাইব্রেরীগুলোর উইন্ডোজে অল্প বিস্তর কম্প্যাটিবিলিটি ইস্যু আছে। যেমন Jax অফিশিয়ালি উইন্ডোজ সাপোর্ট করে না, কমিউনিটি বিল্ড যেটা আছে, সেটা একটা ডেটা টাইপের জন্য অনেক ক্ষেত্রে কাজ করে না (সব কম্পিউট লাইব্রেরী ইন্টিজারকে ৩২ বিট হিসাবে ট্রিট করে। উইন্ডোজে ডিফল্ট ৬৪, যেটা এসব লাইব্রেরীর টার্মিনোলজিতে Long টাইপ)। এরপর বড় মডেল ফাইন টিউন করার অনেক লাইব্রেরী আছে যাদের অফিসিয়াল উইন্ডোজ রিলিজ নেই।

আরেকটা কেস হতে পারে তুমি উইন্ডোজ ইউজার না, তোমার ম্যাক আছে এবং ম্যাকে তুমি সব কাজ করতে চাও। সেক্ষেত্রে তুমি জিপিউর মায়া ত্যাগ করে সব সিপিউতে চালাতে পারো, কিংবা গুগল কোলাব ইউস করতে পারো। ব্যাতিক্রমঃ অ্যাপল সিলিকন (M1, M2, M3) ওয়ালা লোকজন। তোমরা চাইলে ম্যাকের জিপিউ ইউস করতে পারো কিন্তু অ্যাপলের নতুন আর্কিটেকচারের জন্য ডিপ লার্নিং লাইব্রেরীগুলোর সাপোর্ট এখনো ম্যাচিউর হয়নি। পাইটর্চ এর সাপোর্ট আছে অবশ্য কিন্তু আমি ব্যক্তিগতভাবে কখনো টেস্ট করে দেখিনি তাই বলতে পারছি না কেমন হবে। অ্যাপলের নিজের MLX নামে একটা লাইব্রেরী আছে। সিনট্যাক্স পাইটর্চের খুব কাছাকাছি ।

ডিফিকাল্টি কেমন হবে ? আমি পারবো ?

ডিফিকাল্টিঃ ডার্ক সোলস লেভেল। শুরুতে কষ্ট হতে পারে, আস্তে ধীরে সয়ে যাবে।

পারবা কিনাঃ এ প্রশ্নের উত্তর আমার কাছে নাই। আগ্রহ থাকলে শুধু একটা টিউটোরিয়ালকে সোর্স অফ ট্রুথ না ধরে একাধিক টেক্সট, টিউটোরিয়াল ঘেঁটে বুঝে নিতে পারবা। পৃথিবীর কেউ আজ অবধি সর্বজনঅনুধাবনযোগ্য কোন লেখা লেখে নাই। আমিও ব্যতিক্রম না।

কোড কি দিবেন ?

গিটহাবে। https://github.com/ShawonAshraf/bangla-nlp-tutorial

এক গুচ্ছ রিসোর্স লিংক

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

  1. Deep Learning - Goodfellow, Bengio, Courville

  2. Speech and Language Processing, Jurafsky and Martin, 3rd Edition Draft

  3. Neural Network Methods in Natural Language Processing, Yoav Goldberg (দূর্ভাগ্যবশত এই বইয়ের কোন অনলাইন ভার্শন আমার চোখে পরে নাই, নিজ দায়িত্বে খুঁজে নিয়ো)

  4. Probabilistic Machine Learning: An Introduction - Murphy

  5. Linear Algebra Done Right

  6. Mathematics for Deep Learning - Deisenroth, A. Aldo Faisal, and Cheng Soon Ong

  7. Linear Algebra - Khan Academy

শেষ করার আগে ...

meme star wars - palpatine telling young anakin that he will watch his career with great interest