اگر برای طبقهبندی متون در پروژههای خود به GPUهای گرانقیمت یا APIهای ابری وابسته هستید، احتمالاً هزینههای استنتاج و تأخیر در پاسخدهی گلوگاه شماست. ابزار Jeffy که در ۳ اکتبر ۲۰۲۶ منتشر شد، این وابستگی را میشکند و اجازه میدهد ۱۳ مدل پیشآموز را بهطور کامل روی CPU اجرا و بازآموزی کنید. این ابزار با جداسازی بردارسازیهای سنگین از سرهای طبقهبندی سبک، نیاز به سختافزارهای قدرتمند را از بین میبرد.
بسیاری از سیستمهای مدرن برای تشخیص اسپم یا تحلیل احساسات به مدل زبانی بزرگ (LLM) — مثل کتابخانهداری که میلیاردها صفحه را خوانده و حالا با همان لحن جواب میدهد — متکی هستند که حافظه VRAM زیادی میطلبد. این موضوع برای توسعهدهندگانی که به پردازش محلی، خصوصی، کمهزینه یا با تأخیر بسیار پایین نیاز دارند، یک مانع بزرگ ایجاد میکند. طبق مستندات این پروژه، Jeffy با استفاده از یک رمزگذار مشترک به نام bge-large-en-v1.5 و تبدیل عملیات طبقهبندی به محاسبات ریاضی ساده روی بردارها، این مانع را حذف کرده است.
همانطور که در تحلیلهای قبلی ما دربارهی بهینهسازی مدلهای محلی اشاره کردیم، کاهش وابستگی به سختافزارهای خاص، کلید مقیاسپذیری در لبه است. Jeffy در واقع بردار معنایی (Embedding) — که شبیه کارت معرفی عددی برای هر واژه است و همسایگی کلمات را مشخص میکند — را از لایههای تصمیمگیرنده جدا کرده است.
معماری و عملکرد فنی
به نقل از مستندات گیتهاب، کارایی این سیستم از طراحی ترکیبی آن میآید. در اولین اجرا، یک رمزگذار حدود ۱.۲ گیگابایتی دانلود میشود که بین تمام طبقهبندهای فعال مشترک است. خودِ طبقهبندها مدلهای کامل نیستند، بلکه ضرایب رگرسیون لجستیک هستند که در قالب فایلهای قابل حمل .npz (numpy) ذخیره شدهاند. این وزنها در واقع پارامترهای مشتق شده از مدل هستند و کپیهایی از دادههای آموزشی اصلی نیستند. برای درک عمیقتر این سازه، میتوان به بررسی ارکان تبدیل ریاضیات به هوش مصنوعی اشاره کرد که نقش وزنها و توکنسازها را در این فرآیند تبیین میکند.
بر اساس بررسیهای فنی، این رویکرد تأخیر را به شدت کاهش میدهد. در یک CPU لینوکسی (aarch64)، مرحله تولید بردار (Embedding stage) ۵۰ تا ۸۰ میلیثانیه و مرحله واقعی طبقهبندی کمتر از ۱ میلیثانیه زمان میبرد. در نتیجه، کل فرآیند پایان-به-پایان (End-to-end) برای هر نمونه زیر ۸۰ میلیثانیه است. سیستم تنها به حدود ۲ گیگابایت حافظه رم در زمان اجرا نیاز دارد، زیرا رمزگذار تنها یک بار بارگذاری شده و بین تمام سرهای طبقهبندی به اشتراک گذاشته میشود.
قابلیتهای پیشآموز
این بسته شامل ۱۳ لایه تخصصی است که در برخی حوزهها به نتایج خیرهکنندهای رسیدهاند. عملکرد این مدلها بسته به نوع تسک متفاوت است:
- sms_spam: صحت ۹۹.۱٪ و امتیاز F1 برابر با ۹۸.۰٪ برای تشخیص پیامهای اسپم.
- dbpedia: صحت ۹۶.۰٪ و امتیاز F1 برابر با ۹۵.۹٪ برای دستهبندی ویکیپدیا در ۱۴ کلاس مختلف.
- imdb: صحت ۹۴.۸٪ و امتیاز F1 برابر با ۹۴.۸٪ برای تحلیل احساسات در نقدهای طولانی فیلم.
- banking77: صحت ۹۴.۳٪ و امتیاز F1 برابر با ۹۴.۳٪ برای تشخیص قصد مشتریان بانکی در ۷۷ کلاس.
- ag_news: صحت ۹۰.۵٪ و امتیاز F1 برابر با ۹۰.۵٪ برای دستهبندی موضوعات خبری (جهان، ورزش، کسبوکار، تکنولوژی).
- sst2: صحت ۹۰.۱٪ برای تحلیل احساسات نقدهای فیلم.
- clinc_oos: صحت ۸۸.۴٪ برای دستورات دستیار صوتی، شامل تشخیص موارد خارج از محدوده (Out-of-scope) در ۱۵۱ کلاس.
- massive_intent: صحت ۸۸.۱٪ برای دستورات صوتی خانه هوشمند در ۶۰ کلاس.
- tweet_eval_offensive: صحت ۸۱.۰٪ برای تشخیص زبان توهینآمیز.
- tweet_eval_emotion: صحت ۷۸.۱٪ برای تشخیص احساسات توییتر در ۴ کلاس.
- emotion: صحت ۷۵.۵٪ برای احساسات متنی در ۶ کلاس.
- tweet_eval_sentiment: صحت ۶۶.۲٪ برای تحلیل سه-گانه احساسات توییتر.
- snli: صحت ۶۵.۶٪ برای استنتاج زبان طبیعی (NLI) در ۳ کلاس.
با این حال، طبق گزارش توسعهدهندگان، این ابزار نقاط ضعفی دارد. تسکهای SNLI و tweet_eval_sentiment امتیازات پایینتری کسب کردهاند و به سطحی کمتر از مدلهای یادگیری عمیق تخصصی رسیدهاند. همچنین اشاره شده که سرِ Emotion پوشش کلاسهای محدودی دارد و تمام احتمالات ارائه شده توسط سیستم، کالیبره نشدهاند.

آموزش سفارشی و استقرار
توسعهدهندگان محدود به مجموعه پیشآموز نیستند. Jeffy اجازه آموزش سفارشی را با استفاده از فایلهای .csv ، .tsv یا .jsonl میدهد. کاربران میتوانند یک طبقهبند جدید را از طریق دستور jeffy-train یا مستقیماً از طریق API پایتون با استفاده از تابع train_classifier آموزش دهند.
فرآیند آموزش بهگونهای طراحی شده که محافظهکارانه باشد. سیستم از چندین پارامتر تنظیم برای بهینهسازی نتایج استفاده میکند:
- C (پیشفرض ۰.۰۱): کنترل میکند که مدل با چه شدتی با دادهها برازش شود. مقدار پایین (مثلاً ۰.۰۰۱) محافظهکارانه است و پیشبینیها را به حالت «مطمئن نیستم» نزدیکتر میکند. مقدار بالا (مثلاً ۱.۰) بیشتر به نمونههای آموزشی تکیه میکند. کاهش C در صورتی که مدل دچار بیشبرازش (Overfitting) شود — یعنی روی دادههای آموزشی عالی اما روی دادههای جدید ضعیف باشد — کمککننده است.
- test_size (پیش Frankfurt ۰.۲): کسری از دادهها که برای تست کنار گذاشته میشود. برای ۱۰۰ نمونه، روی ۸۰ مورد آموزش دیده و روی ۲۰ مورد تست میشود. این مقدار را میتوان برای آموزش روی تمام دادهها برابر با ۰ قرار داد.
- cv_folds (پیشفرض ۳): اجرای اعتبارسنجی متقابل (Cross-validation) با تقسیم دادههای آموزشی به سه بخش، چرخش آنها و میانگینگیری از امتیازات برای تخمین قابلاعتمادتر صحت مدل.
برای مجموعهدادههایی که کمتر از ۵۰ نمونه در هر کلاس دارند، ابزار هشدار میدهد که تخمینهای صحت ممکن است نویز داشته باشند.
امنیت و یکپارچهسازی
یکپارچهسازی از طریق یک API ساده HTTP یا SDK پایتون انجام میشود. کلاس Engine به توسعهدهندگان اجازه میدهد قابلیتها را بارگذاری کرده و برچسبها را با یک فراخوانی متد پیشبینی کنند. برای مثال، یک درخواست POST به مسیر /v1/predict برای تسک banking77 با متن «دو بار برای یک تراکنش از من پول کسر شد»، برچسب transaction_charged_twice را با اطمینان ۰.۹۹۹ برمیگرداند.
برای امنیت، Jeffy بهجای فرمت pickle پایتون که میتواند خطرناک باشد، از فایلهای .npz numpy استفاده میکند. اگرچه مدلهای سفارشی یک نسخه پشتیبان joblib pickle ذخیره میکنند، اما به کاربران توصیه میشود فایلهای pickle سفارشی را فقط از منابع مورد اعتماد بارگذاری کنند. هر آرتیفکت شامل یک فایل manifest.json است که حاوی نام برچسبها، مجموعه داده منبع، مسیر HuggingFace، هویت رمزگذار و هشهای یکپارچگی است که هنگام بارگذاری برای جلوگیری از اجرای کدهای مخرب تأیید میشوند.
مجوزها و منشأ دادهها
کد Jeffy تحت مجوز MIT است، اما دادههای آموزشی مجوزهای متفاوتی دارند. رمزگذار (bge-large-en-v1.5) نیز تحت مجوز MIT است. مجوزهای مجموعهدادهها عبارتند از:
- CC BY 4.0: برای banking77، massive_intent و sms_spam.
- CC BY 3.0: برای clinc_oos.
- CC BY-SA 3.0: برای dbpedia.
- CC BY-SA 4.0: برای snli.
- آکادمیک/غیرتجاری: برای ag_news، imdb، sst2 (مجوز آکادمیک استنفورد) و emotion.
- Twitter TOS/Academic: برای سری tweet_eval_*.
این تغییر به سمت معماری «بردار + سر»، به این معناست که توسعهدهندگان دیگر مجبور نیستند بین یک LLM کند اما دقیق و یک جستوجوی کلیدواژهای سریع اما بیدقت انتخاب کنند. این رویکرد در واقع تکامل یافتهی ایدههایی است که در راهکار Jevlike برای کاهش تأخیر مطرح شد، جایی که امتیازدهی جایگزین تولید کلمه گشت. با منجمد کردن رمزگذار و آموزش تنها لایه سر، Jeffy راهی میانی ارائه میدهد که در ۲ گیگابایت حافظه رم جای میگیرد. لازم به ذکر است که Jeffy شامل طبقهبندی Zero-shot، جایگزینهای LLM یا مسیریابی خودکار تسکها نیست و کاربر باید صراحتاً طبقهبند مورد نظر را مشخص کند. در این راستا، مدلهای Jeff پیشتر توانستهاند سرعت طبقهبندی صفر-شات را به ۲۲ میلیثانیه برسانند که مکمل قابلیتهای فعلی این ابزار است.
گام بعدی شما
- اگر سیستم تریاژ محلی یا طبقهبند قصد (Intent Classifier) خصوصی میسازید، ابزار را از طریق
uvxنصب کنید. - ابتدا لایههای
banking77یاsms_spamرا برای تست سرعت روی CPU خود امتحان کنید. - برای دادههای اختصاصی خود، پارامتر C را تغییر دهید تا تعادل بین دقت و تعمیمپذیری را پیدا کنید.
اما تأثیر این رویکرد بر کاهش هزینههای زیرساختی در مقیاس سازمانی حتی چشمگیرتر است — به تحلیل ما دربارهی استراتژیهای استنتاج کمهزینه مراجعه کنید.




گفتگو