رفع خطاهای انکودینگ (Encoding) در بنچمارکگیری مدلهای محلی LLM
قصد داشتم ابزاری برای جابهجایی و بنچمارکگیری مدلهای محلی LLM بسازم. همچنین برای تست بهتر آنها، سوالات بنچمارک کرهای زیادی را اضافه کردم.
همه چیز خوب کار میکرد تا اینکه بنچمارکها را اجرا کردم. مدام با این خطا مواجه میشدم:
UnicodeEncodeError: 'cp949' codec can't encode characters.
فکر کردم مشکل از کد پایتون من است. سعی کردم تنظیمات انکودینگ را به utf-8 تغییر دهم. سعی کردم رشتهها را به صورت دستی دیکود کنم. ساعتها تلاش کردم اما هیچکدام جواب نداد.
مشکل اصلی اسکریپت من نبود. ورکر (worker) مدل محلی سعی میکرد پاسخهای مدل را با استفاده از انکودینگ پیشفرض سیستم ذخیره کند. در ویندوز، این انکودینگ اغلب CP949 است. وقتی ورکر سعی میکرد کاراکترهای کرهای را با استفاده از CP949 ذخیره کند، با شکست مواجه میشد.
راه حل ساده بود. ورکر را طوری تغییر دادم که هنگام ذخیره فایلها، صراحتاً از utf-8 استفاده کند.
همچنین یک سیستم خودکار برای مدیریت این فرآیند ساختم. این سیستم مراحل زیر را دنبال میکند:
- دانلود مدلهای کاندید.
- اجرای بنچمارک روی بهترین مدل فعلی.
- تست تمام مدلهای کاندید جدید.
- انتخاب و پیشنهاد بهترین مدل بر اساس امتیازات.
از طریق این اتوماسیون، متوجه شدم که Gemma2:2b در انجام وظایف مربوط به زبان کرهای بسیار بهتر از مدل EXAONE عمل میکند. این مدل در سرعت مشابه، پاسخهای طبیعیتر و نتایج خلاقانهتری ارائه میدهد.
درسهای آموخته شده:
- هرگز به انکودینگ پیشفرض سیستم تکیه نکنید. همیشه برای عملیات ورودی/خروجی فایل (file I/O) از
utf-8استفاده کنید. - هنگام استفاده از
json.dumpبا متن کرهای، ازensure_ascii=Falseاستفاده کرده وutf-8را مشخص کنید. - اگر با خطاهای انکودینگ مواجه شدید، کل سیستم و منطق ذخیرهسازی فایل را بررسی کنید، نه فقط کد بلافاصله در اختیار خودتان را.
- از اتوماسیون برای یافتن بهترین مدلها متناسب با نیازهای خاص خود استفاده کنید.
Optional learning community: https://t.me/GyaanSetuAi