লোকাল LLM বেঞ্চমার্কিংয়ে এনকোডিং ত্রুটি সমাধান করা
আমি লোকাল LLM মডেলগুলো পরিবর্তন এবং বেঞ্চমার্ক করার জন্য একটি টুল তৈরি করতে চেয়েছিলাম। সেগুলোকে আরও ভালোভাবে পরীক্ষা করার জন্য আমি অনেক কোরিয়ান বেঞ্চমার্ক প্রশ্নও যোগ করেছি।
বেঞ্চমার্ক চালানোর আগ পর্যন্ত সবকিছু ঠিকঠাক কাজ করছিল। কিন্তু এরপর আমি বারবার এই ত্রুটিটি দেখতে পাচ্ছিলাম:
UnicodeEncodeError: 'cp949' codec can't encode characters.
আমি ভেবেছিলাম সমস্যাটি আমার Python কোডে। আমি আমার এনকোডিং সেটিংস পরিবর্তন করে utf-8 করার চেষ্টা করেছি। আমি ম্যানুয়ালি স্ট্রিংগুলো ডিকোড করার চেষ্টাও করেছি। ঘণ্টার পর ঘণ্টা চেষ্টা করেও কোনো কাজ হয়নি।
আসল সমস্যাটি আমার স্ক্রিপ্টে ছিল না। লোকাল LLM ওয়ার্কারটি সিস্টেমের ডিফল্ট এনকোডিং ব্যবহার করে মডেলের রেসপন্সগুলো সেভ করার চেষ্টা করছিল। Windows-এ এটি প্রায়শই CP949 হয়। যখন ওয়ার্কারটি CP949 ব্যবহার করে কোরিয়ান অক্ষরগুলো সেভ করার চেষ্টা করছিল, তখন সেটি ব্যর্থ হয়।
সমাধানটি ছিল সহজ। আমি ফাইল সেভ করার সময় ওয়ার্কারটিকে স্পষ্টভাবে utf-8 ব্যবহার করতে বলে পরিবর্তন করে দিয়েছি।
আমি এই প্রক্রিয়াটি পরিচালনা করার জন্য একটি স্বয়ংক্রিয় সিস্টেমও তৈরি করেছি। এটি নিচের ধাপগুলো অনুসরণ করে:
- ক্যান্ডিডেট মডেলগুলো ডাউনলোড করে।
- বর্তমান সেরা মডেলের ওপর বেঞ্চমার্ক চালায়।
- সমস্ত নতুন ক্যান্ডিডেট মডেল পরীক্ষা করে।
- স্কোরের ভিত্তিতে সেরা মডেলটি নির্বাচন এবং সুপারিশ করে।
এই অটোমেশনের মাধ্যমে আমি দেখতে পেয়েছি যে, কোরিয়ান ভাষার কাজের জন্য Gemma2:2b মডেলটি EXAONE মডেলের চেয়ে অনেক ভালো পারফর্ম করে। এটি একই গতিতে আরও স্বাভাবিক উত্তর এবং উন্নত সৃজনশীল ফলাফল প্রদান করে।
যা শিখলাম:
- কখনোই সিস্টেমের ডিফল্ট এনকোডিংয়ের ওপর নির্ভর করবেন না। ফাইল I/O-এর জন্য সর্বদা utf-8 ব্যবহার করুন।
- কোরিয়ান টেক্সট সহ
json.dumpব্যবহার করার সময়,ensure_ascii=Falseব্যবহার করুন এবং utf-8 নির্দিষ্ট করে দিন। - যদি এনকোডিং ত্রুটি দেখেন, তবে শুধুমাত্র আপনার কোড নয়, বরং পুরো সিস্টেম এবং ফাইল সেভ করার লজিকটি পরীক্ষা করুন।
- আপনার নির্দিষ্ট প্রয়োজনের জন্য সেরা মডেলগুলো খুঁজে পেতে অটোমেশন ব্যবহার করুন।
ঐচ্ছিক লার্নিং কমিউনিটি: https://t.me/GyaanSetuAi