মানুষের এবং ভাষাগত সিকোয়েন্সের ধারণা
‘সনাতন নিউরাল নেটওয়ার্ক’ এবং ‘ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং’
মেশিন ট্রান্সলেশন করার সময় কখনোই একেকটা শব্দ ধরে অর্থাৎ ‘ওয়ার্ড বাই ওয়ার্ড’ বাক্যের ট্রান্সলেশন করা যায় না। আর, সেই ধরনের গুগল ট্রান্সলেশন দেখেছি মেশিন লার্নিং এর আগের জমানায়। যেমন, ‘I eat rice’ এর মানে করেছে ‘আমি খাওয়া-দাওয়া ভাত’। গুগল ট্রানসলেশন হয়তোবা এভাবে করেনি তবে, বেশিভাগ ট্রান্সলেশন নিয়ে আমরা হেসেছি এখনও হাসছি। আপনি এর মধ্যে বুঝে গেছেন মেশিন ট্রান্সলেশন বাক্যের মধ্যে শব্দগুলোর ‘প্লেসমেন্ট’ এবং ‘সিকোয়েন্স’ খুবই জরুরি ব্যাপার।
সাধারণ নিউরাল নেটওয়ার্ক যেভাবে প্রতিটা আইটেম ধরে ধরে কাজ করতে পারে, তবে এখানে বিশেষ করে, ভাষার ক্ষেত্রে একটা বাক্যে শব্দের সিকোয়েন্স এবং শব্দটা কোথায় বসছে সেই ব্যাপারটাকে ঠিকমতো কাজ করানোর জন্য একটু ভিন্ন ধরনের নিউরাল নেটওয়ার্ক ব্যবহার করতে হয়। আপনি হয়তো বা খেয়াল করবেন - আমি ইচ্ছে করেই ‘টাইম সিরিজ’ নিয়ে আলাপ করিনি গত বইটাতে, তবে ‘ন্যাচারাল ল্যাংগুয়েজ প্রসেসিং’ অতিমাত্রায় আগের ইনপুটের উপর নির্ভরশীল।
একটার আউটপুট, আরেকটার ইনপুট
মোবাইলের ‘কিবোর্ড’ ব্যবহার করে টাইপ করতে গেলে প্রথম শব্দটা লেখার পর পরই ‘কিবোর্ড’ নিজে থেকেই বেশ কয়েকটা প্রেডিকশন অর্থাৎ পরের শব্দগুলো কি হতে পারে সেটা বলে দেয়। এর অর্থ হচ্ছে, তার প্রেডিকশন শব্দের ইনপুট হিসেবে আপনার লেখা শব্দটি ছিল। এবং বেশিরভাগ সময়ই আমরা সেই প্রেডিকশন আউটপুটকেই ‘সিলেক্ট’ করে নেই। সেই আউটপুটই তখন ইনপুট হিসেবে নিয়ে আরো নতুন কিছু শব্দ ‘প্রেডিকশন’ হিসেবে বের করে দেয়। ‘ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং’য়ে কিছুক্ষণ আগের ‘ইনপুট’ থেকে ‘আউটপুট’ এলে, সেই ‘আউটপুট’ পরের সিকোয়েন্সে ‘ইনপুট’ হিসেবে কাজ করে।
মানুষের আচরণ, ভাষাগত সিকোয়েন্সের ধারণা
ভাষার ব্যাপারে মানুষের আচরণগত কিছু ব্যাপার নিয়ে আলাপ করা যায়। মানুষ সাধারণত: কথার উত্তরে আরেকটা বাক্য বলেন। এর অর্থ হচ্ছে একজনের কথার ইনপুট নিয়ে আরেকজনের কথা ‘আউটপুট’ যেটা পরবর্তীতে আরেকজনের কথার ইনপুট এবং সেটা যখন আউটপুট হয়ে বের হচ্ছে তখন সেটা আরেকজনের জন্য ইনপুট হবে। এটা শুধুমাত্র কথাবার্তার জন্য নয়, বরং একটা সভা-সমাবেশে প্রথম মানুষটা মুখ খোলার আগে তার আশেপাশের পরিবেশ থেকে ‘ইনপুট’ নিয়ে উনি মুখ খোলেন। এর অর্থ হচ্ছে, একটা ইনপুট থেকে যে ‘আউটপুট’ বের হবে সেই আউটপুট আর একটা সিকোয়েন্সের জন্য ইনপুট। আর একারণে ‘ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং’য়ে সনাতন নিউরাল নেটওয়ার্ক অচল।
আপনি যখন এই বইটা পড়ছেন - তখন এই বাক্যের প্রতিটা শব্দ আপনি বুঝতে পারছেন, যেহেতু আপনি এর আগের বাক্যগুলোর শব্দগুলো পড়েছেন। যেকোনো বিষয়ে আমাদের ‘আন্ডারস্ট্যান্ডিং’ এর জন্য সেটার জন্য পূর্ব অভিজ্ঞতা তার জন্য ‘ইনপুট’। এর অর্থ হচ্ছে, আপনাকে তার আগের অভিজ্ঞতাকে একটা পর্যায়ে ছোট করে হলেও ‘মেমোরি’তে রাখতে হচ্ছে। আগেই বলেছি, সনাতন নিউরাল নেটওয়ার্ক, ‘কম্পিউটার ভিশন’ থেকে শুরু করে অন্যান্য অসাধারণ কাজ করতে পারলেও এই ব্যাপারটায় বিশেষ করে মানুষের ভাষার ব্যাপারে একদম পটু নয়। একারণে নতুন এক ধরনের নিউরাল নেটওয়ার্ককে তৈরি করা হয়েছে যার এ ধরনের মেমোরি আছে তার লেয়ারে।
‘রিকারেন্ট নিউরাল নেটওয়ার্কস’ এবং লং শর্ট টার্ম মেমরি (এলএসটিএম)
নেটওয়ার্কের এই ‘বিল্ট-ইন’ লেয়ারগুলোতে এক ধরনের ‘মেমোরি’ থাকছে যা শুধুমাত্র বর্তমান ডাটা থেকে ‘ইনফার’ করছে না বরং অতীত ইভেন্টগুলো থেকে ‘ইনফার’ করার দক্ষতা রয়েছে। আর, এটা সে করতে পারে যখন লেয়ারগুলোর ভিতর এই ‘ইন্টার্নাল মেমোরি’ রেখে তাকে ‘মডিফাই’ করতে পারে প্রযোজ্য ক্ষেত্রে। এখানে ‘ইনফার’ কথাটা এসেছে ‘ইনফারেন্স’ থেকে - যার প্রায়োগিক অর্থ হচ্ছে ‘অনুমিতি’ অর্থাৎ ডাটা থেকে অনুমান অর্থাৎ প্রেডিকশন করা। একে বলা হচ্ছে ‘রিকারেন্ট নিউরাল নেটওয়ার্কস’ যার মধ্যে একটা লুপ তৈরি করা হয়েছে যাতে আউটপুট ঘুরে অল্প মেমোরিতে থেকে আবার ইনপুট এ আসতে পারে। এখানে একটা ছবি দেয়া যেতে পারে। তবে, এই ছবিটা অর্থাৎ ‘রিকারেন্ট নিউরাল নেটওয়ার্কস’ (আরএনএন) বুঝবো আমরা সামনের চ্যাপ্টারে। 'এলএসটিএম' হচ্ছে ‘রিকারেন্ট নিউরাল নেটওয়ার্কস’এর পরিবারের সদস্য যার কাজ হচ্ছে সনাতন "আরএনএন" এর সমস্যাগুলোকে ঠিক করে ফেলা। তৈরি তো আপনারা?
এনকোডার ডিকোডার ‘রিকারেন্ট নিউরাল নেটওয়ার্কস’ মেশিন ট্রান্সলেশনে
এই আর্কিটেকচারটা বেশ নতুন, এবং বাজারে এসেছে ২০১৪ সালে। এই 'কোর' প্রযুক্তিটি ব্যবহার হচ্ছে গুগলের ট্রান্সলেশন সার্ভিসের পেছনে। এর পেছনের 'আরএনএন' নিয়ে বড় আলাপ আছে সামনে। এধরনের 'রিকারেন্ট নিউরাল নেটওয়ার্কসের তিন ধরনের অংশ থাকে। প্রথম অংশ, 'এনকোডার', এর ভেতরে থাকছে মধ্যবর্তী ভেক্টর এবং শেষে আউটপুটে কাজ করছে ডিকোডার।
এনকোডারের কাজ হচ্ছে ইনপুট সিকোয়েন্স থেকে প্রতিটা এলিমেন্টগুলোকে আলাদা আলাদা করে বুঝে সেটাকে প্রসেস করে। প্রসেসের পর প্রতিটা এলিমেন্ট থেকে ডাটা নিয়ে সেটাকে পরের ধাপের ভেক্টরে পাঠিয়ে দেয়। এনকোডার অংশ থেকে প্রতিটা অংশ বুঝে (সিকোয়েন্স টু সিকোয়েন্স) সেটার পুরো ইনপুট সিকোয়েন্সগুলোকে আলাদা হিসেবে ধরে পরবর্তী প্রেডিকশনের জন্য তৈরি করে দেয় মধ্যবর্তী ভেক্টরগুলো।
ডিকোডার পুরো বাক্যকে হাতে পেলেও এর আউটপুটের জন্য প্রতিটা শব্দকে আলাদা আলাদাভাবে প্রেডিক্ট করে আউটপুটে পাঠিয়ে দেয়।
তবে, এখনই ভাববার দরকার নেই, সামনের গল্পে বুঝে যাবো আমরা।
© রকিবুল হাসান