আপনার প্রম্পট যতই নিখুঁত হোক বা উত্তর যতই তথ্যবহুল হোক না কেন, একটি বড় ভাষা মডেল (LLM) আসলে কখনো সরাসরি শব্দ বা বাক্য “পড়ে” না। এটি কাজ করে টোকেন নামক ছোট ছোট টেক্সট ইউনিটের ওপর। এই টোকেনগুলোর গঠন, সংখ্যা ও ব্যবস্থাপনা বুঝতে পারলে আপনি LLM-এর সঙ্গে আরও দক্ষ, দ্রুত ও খরচ-সাশ্রয়ীভাবে কাজ করতে পারবেন। এই টিউটোরিয়ালে আমরা টোকেন কী, টোকেনাইজেশন কীভাবে হয়, টোকেন ব্যবহারিক দিক থেকে কেন গুরুত্বপূর্ণ এবং API বা চ্যাটবট ব্যবহারের সময় টোকেন ব্যবস্থাপনায় কী কী ভালো চর্চা অনুসরণ করা উচিত, তা বিস্তারিতভাবে জানব।
টোকেন কী?
একটি টোকেন হল সেই ক্ষুদ্রতম একক যা ভাষার মডেল প্রসেস করতে পারে। LLM কখনো কোনো সম্পূর্ণ বাক্য বা পুরো শব্দকে একসঙ্গে ইনপুট হিসেবে নেয় না; বরং পুরো টেক্সটকে ছোট ছোট টুকরায় ভেঙে ফেলে। এই টুকরাগুলো শব্দ হতে পারে, শব্দের অংশ (সাবওয়ার্ড) হতে পারে, এমনকি একটি মাত্র অক্ষর বা বিরামচিহ্নও হতে পারে।
বাংলা বাক্য “আমি বাংলায় গান গাই”-কে যদি আমরা GPT-স্টাইলের টোকেনাইজারের মাধ্যমে বিশ্লেষণ করি, তাহলে খুব সম্ভবত নিচের মতো কিছু টোকেন পাবো:
- “আমি” (একটি টোকেন)
- “বাংলা” + “য়” (দুটি টোকেন, সাবওয়ার্ড)
- “গান” (একটি টোকেন)
- “গাই” (একটি টোকেন)
অর্থাৎ বাংলা ভাষায় সংযুক্ত অক্ষর ও বিভক্তির কারণে একটি আপাতদৃষ্টিতে ছোট শব্দও একাধিক টোকেনে বিভক্ত হতে পারে। নিচের কোড স্নিপেট দেখায় কিভাবে একটি টোকেনাইজার ব্যবহার করে টোকেন সংখ্যা বের করা যায়:
import tiktoken
enc = tiktoken.get_encoding("cl100k_base") # GPT-4 মডেলের এনকোডিং
text = "আমি বাংলায় গান গাই"
tokens = enc.encode(text)
print(f"টোকেনের সংখ্যা: {len(tokens)}") # আউটপুট: 7-8 এর মধ্যে হতে পারে
এই স্নিপেটে tiktoken লাইব্রেরি ব্যবহার করে আমরা একটি বাংলা বাক্যের টোকেন তালিকা ও সংখ্যা বের করেছি। খেয়াল রাখতে হবে, একই শব্দের টোকেন সংখ্যা মডেলের টোকেনাইজেশন অ্যালগরিদমের ওপর নির্ভর করে পরিবর্তিত হতে পারে।
টোকেনাইজেশন প্রক্রিয়া
টোকেনাইজেশন হল কাঁচা টেক্সটকে টোকেনে রূপান্তরের প্রক্রিয়া। আধুনিক LLM-গুলো সাধারণত সাবওয়ার্ড টোকেনাইজেশন ব্যবহার করে, যাতে অজানা শব্দের সমস্যা এড়ানো যায় এবং শব্দভাণ্ডার খুব বড় না হয়। বহুল ব্যবহৃত দুটি পদ্ধতি হল Byte-Pair Encoding (BPE) এবং WordPiece।
BPE পদ্ধতির সরলীকৃত ধাপগুলো নিচে তুলে ধরা হলো:
- পুরো ট্রেনিং ডেটাকে ক্যারেক্টারে ভাঙা হয়।
- সবচেয়ে বেশি সহাবস্থানকারী জোড়া চিহ্নিত করে নতুন টোকেন হিসেবে যোগ করা হয়।
- নির্দিষ্ট সংখ্যক টোকেন পূর্ণ না হওয়া পর্যন্ত এই যুক্তকরণ চলতে থাকে।
ফলস্বরূপ একটি টোকেনাইজার শিখে ফেলে কোন বর্ণগুচ্ছগুলো প্রায়ই একসঙ্গে আসে। বাংলার ক্ষেত্রে “ক্ষ”, “জ্ঞ”, “ঞ্চ” এর মতো যুক্তবর্ণ কিংবা “তে”, “কে” বিভক্তি প্রায়ই একক বা বহু টোকেনে পরিণত হয়। যেমন “খাওয়া” শব্দটি BPE টোকেনাইজারে প্রথমে “খা” এবং “ওয়া” — এই দুই ভাগে বিভক্ত হতে পারে, কিন্তু যদি “খাওয়া” শব্দটি ঘনঘন আসে তবে পুরো শব্দই একটি টোকেনে পরিণত হতে পারে।
এই সাবওয়ার্ড পদ্ধতি মডেলকে এমন শব্দের অর্থ বুঝতে সাহায্য করে যা আগে কখনো দেখেনি। কারণ নতুন একটি শব্দ আগে থেকেই পরিচিত সাবওয়ার্ড টোকেনের সমন্বয়ে বিশ্লেষণ করা যায়, মডেল আংশিক পরিচিতি থেকে অর্থের আভাস পেতে পারে।
টোকেন কেন গুরুত্বপূর্ণ?
টোকেন LLM-ভিত্তিক অ্যাপ্লিকেশনের প্রায় প্রতিটি গুরুত্বপূর্ণ মেট্রিকের সঙ্গে সরাসরি জড়িত — মডেল কতটুকু কনটেক্সট ধরে রাখতে পারে, API কত দ্রুত সাড়া দেয় এবং প্রতিটি রিকোয়েস্টে কত খরচ হয়, সবই নির্ধারিত হয় টোকেন সংখ্যার ওপর।
মডেলগুলোর একটি নির্দিষ্ট কনটেক্সট উইন্ডো থাকে (যেমন ৪,০৯৬, ৮,১৯২ বা ৩২,৭৬৮ টোকেন)। আপনার ইনপুট প্রম্পট ও মডেল যে আউটপুট তৈরি করবে, সব মিলিয়ে টোকেন সংখ্যা এই সীমার মধ্যে থাকতে হবে। পাশাপাশি, অধিকাংশ LLM API (যেমন OpenAI GPT-4) প্রতি টোকেন ভিত্তিক মূল্য নির্ধারণ করে — প্রম্পট টোকেন ও জেনারেটেড টোকেনের জন্য আলাদা রেট প্রযোজ্য হতে পারে। তাই টোকেন সংখ্যা কমানোর অর্থ সরাসরি খরচ ও ল্যাটেন্সি কমানো।
বাংলা টেক্সটের ক্ষেত্রে বিশেষভাবে গুরুত্বপূর্ণ বিষয় হলো, ইংরেজির তুলনায় একই অর্থ প্রকাশ করতে বাংলায় প্রায়ই বেশি টোকেন লাগে। কারণ দেবনাগরী/বাংলা লিপির প্রতিটি অক্ষর ইউনিকোডে একাধিক বাইট দখল করে এবং ভাষার রূপমূলতাত্ত্বিক জটিলতার জন্য শব্দগুলো ভেঙে বেশি সাবওয়ার্ড টোকেনে পড়ে। ফলে বাজেট ও পারফরমেন্স দুইয়ের জন্যই সচেতন টোকেন ব্যবস্থাপনা অপরিহার্য।
টোকেন ব্যবহারের সেরা চর্চা
বাস্তব প্রজেক্টে টোকেন ব্যবস্থাপনাকে কার্যকর করতে নিচের অনুশীলনগুলো অনুসরণ করুন:
- প্রম্পট ছোট ও লক্ষ্যভিত্তিক রাখুন: অপ্রয়োজনীয় বিশেষণ, পুনরাবৃত্তি এবং অতিরিক্ত ভণিতা বর্জন করুন। বাক্যের পরিবর্তে বুলেট বা কী-ভ্যালু ফরম্যাট ব্যবহার করলে টোকেন সাশ্রয় হয়।
- টোকেন গণনা আগেই করুন: কোনো API কল করার আগে প্রম্পটের টোকেন সংখ্যা নিশ্চিত করুন। OpenAI-এর
tiktokenবা অন্য টোকেনাইজার লাইব্রেরি দিয়ে নিচের মতো করেই এটি সম্ভব:
এই স্নিপেট প্রম্পটের টোকেন গণনা করে তাৎক্ষণিক ধারণা দেয়, যার ভিত্তিতে আপনি সিদ্ধান্ত নিতে পারবেন প্রম্পট আরও ছাঁটতে হবে কি না।import tiktoken enc = tiktoken.encoding_for_model("gpt-4") prompt = "তুমি একজন সহায়ক সহকারী। নিচের প্রশ্নের উত্তর দাও..." token_count = len(enc.encode(prompt)) print(f"প্রম্পট টোকেন: {token_count}") - মডেলের কনটেক্সট সীমার খেয়াল রাখুন: প্রম্পট টোকেনের পাশাপাশি আশা করা আউটপুট টোকেনের জন্যও জায়গা রাখতে হবে। সাধারণত
max_tokensপ্যারামিটার দিয়ে আউটপুট সীমিত করা যায়, কিন্তু প্রম্পট নিজেও অনেক বড় হয়ে গেলে মডেল পুরনো তথ্য মনে রাখতে পারে না। - বাংলার জন্য কার্যকরী টোকেন ব্যবহার: বাংলা টেক্সটকে যতটা সম্ভব সংক্ষিপ্ত ও অপ্রয়োজনীয় যুক্তাক্ষর বিন্যাস এড়িয়ে লিখুন। যেমন “করিতে” না লিখে “করতে” লিখলে অনেক সময় একটি টোকেন কম লাগতে পারে। একেবারে ইংরেজি মিশ্রিত না করাই ভালো, কারণ স্ক্রিপ্ট মিশ্রণ টোকেন সংখ্যা আরও বাড়ায়।
- টোকেন বাজেট ভিজুয়ালাইজ করুন: বড় ডকুমেন্ট বা দীর্ঘ ইতিহাস যুক্ত চ্যাটের ক্ষেত্রে একটি কাউন্টার রাখুন যা জানান দেয় বর্তমানে কত টোকেন ব্যবহৃত হয়েছে এবং সীমার কতটুকু অবশিষ্ট আছে। এভাবে ওভারফ্লো এড়ানো সহজ হয়।
উপরোক্ত চর্চাগুলো মেনে চললে আপনি LLM-ভিত্তিক সিস্টেমে একই মানের আউটপুট পেয়েও খরচ ও সময় উল্লেখযোগ্যভাবে হ্রাস করতে পারবেন।
সারসংক্ষেপ
টোকেন বুঝতে পারা শুধু একটি প্রযুক্তিগত কৌতূহল নয়, বরং যেকোনো LLM অ্যাপ্লিকেশন তৈরির ক্ষেত্রে এটি একটি আবশ্যিক দক্ষতা। আমরা জেনেছি টোকেন কীভাবে ভাষাকে সংখ্যায় রূপান্তর করে, টোকেনাইজেশন অ্যালগরিদম কীভাবে কাজ করে, কেন টোকেন সংখ্যা API খরচ ও গতি নির্ধারণ করে এবং কীভাবে দৈনন্দিন কাজে টোকেন ব্যবস্থাপনা অপটিমাইজ করা যায়। বিশেষ করে বাংলার মতো জটিল লিপির ভাষায় টোকেনের ভূমিকা ও সীমাবদ্ধতা বোঝা আপনাকে আরও শক্তিশালী ও খরচ-সচেতন প্রম্পট ইঞ্জিনিয়ার হতে সাহায্য করবে। টোকেন গণনা, কনটেক্সট পরিকল্পনা ও সংক্ষিপ্ত প্রম্পট লেখার অভ্যাস গড়ে তুলুন — এগুলোই আগামী প্রজেক্টে আপনার সেরা বিনিয়োগ।