چطور یه مدل تصمیمگیری مثل Jev بسازیم
خلاصهٔ کاملتر
نویسنده اول یادآوری میکنه که هر فراخوانی LLM دو مرحله داره: prefill (یعنی خوندن موازی کل پرامپت) و decode (یعنی تولید توکنهای خروجی یکییکی که کُنده). به گفتهٔ اون، کارهایی مثل route کردن تیکت پشتیبانی یا امتیاز ۱ تا ۵ دادن فقط یه احتمال روی چند گزینه میخوان. اگه برای اینها از /v1/chat/completions استفاده کنی، هزینهٔ decode رو میدی، باید امیدوار باشی JSON خروجی درست parse بشه و آخرش هم احتمال قابلاعتمادی نداری.
Jev از TypeSafe با endpoint POST /v1/systemone این مشکل رو حل میکنه. یه state (مثلاً متن تیکت) و چند سؤال میفرستی که سه نوع دارن: choice برای انتخاب از بین حداکثر ۲۵۵ گزینه، noul برای احتمال بله/نه، و score برای رتبهبندی ۲ تا ۱۰ سطحی. مدل فقط یه بار prefill میکنه، صفر توکن خروجی میده و برای هر گزینه احتمال برمیگردونه. Hugging Face هم این endpoint رو به transformers serve اضافه کرده، پس بیش از ۲۵۰ معماری LLM و VLM باز مستقیم اینطوری کار میکنن.
بهطور پیشفرض transformers serve گزینهها رو به حروف A تا Z و سؤالهای بله/نه رو به Yes و No وصل میکنه و روی logitهاشون softmax میگیره. نویسنده میگه این روش سه ایراد داره: ظرفیتش ۲۶ گزینهست، پیشزمینهای که مدل از قبل دربارهٔ حرف A داره تو احتمالها نشت میکنه، و مدل به جایگاه گزینهها سوگیری داره. مثلاً تو JevBench با برعکس کردن ترتیب yes و no، دقت یه مدل 4B از ۷۲٪ به ۲۱٪ افتاد. راهحل، توکنهای رزروشده مثل تا و یه توکن آخر دنبالهست.
به گفتهٔ نویسنده جای این توکنها مهمه: باید بعد از توضیح هر گزینه بیاد، چون causal mask (یعنی هر توکن فقط توکنهای قبل از خودش رو میبینه) باعث میشه توکنی که اول خط باشه توضیح گزینه رو نبینه. بهتره embedding این توکنها رو از حروف A، B و C کپی کنی و ترتیب گزینهها رو تو هر مرحلهٔ آموزش بههم بریزی. برای score هم کنار cross-entropy از جریمهٔ RPS استفاده میشه تا اشتباهِ نزدیک کمتر از اشتباهِ دور جریمه بشه.
قدم بعد کالیبراسیونـه، یعنی احتمال ۰.۹۰ واقعاً ۹۰٪ مواقع درست باشه. با temperature scaling (یعنی تقسیم logitها بر یه عدد T قبل از softmax) برای هر نوع سؤال یه T جدا تنظیم میکنی. نویسنده میگه T رو با تابع هزینهٔ واقعی production تنظیم کن و برای جوابهای ذاتاً نامطمئن با soft target آموزش بده. Jev 1.13 تو سؤال تیلهها ۰.۹۹ قرمز داد، ولی Jev 1.14 با soft target به ۰.۵۲ رسید. کوانتیزه کردن به int8 هم احتمال رو تا ۰.۳۸ جابهجا کرد.
برای سرعت، نویسنده tree batching رو توضیح میده: به جای اینکه هر سؤال یه دنبالهٔ جدا با state تکراری باشه، state یه بار میاد و همهٔ سؤالها پشتش. یه attention mask کاری میکنه که هر شاخه فقط state و خودش رو ببینه، و position IDهای هر شاخه از بعد از state شروع میشه. یعنی همهٔ سؤالها با یه forward pass جواب میگیرن. تو بخش آخر هم با تستهای black-box نشون میده Jev به احتمال زیاد روی Qwen3.5-35B-A3B ساخته شده و vocabularyش با GPT-4o ترکیب شده.
نکات کلیدی:
- Jev سه نوع سؤال داره: choice تا ۲۵۵ گزینه، noul برای بله/نه، و score با ۲ تا ۱۰ سطح.
- حالت پیشفرض transformers serve سؤال choice رو به ۲۶ گزینه (حروف A تا Z) محدود میکنه.
- تو JevBench مدل باز SemIf بر پایهٔ Qwen3.5-4B امتیاز ۷۳.۱ گرفته، نزدیک Jev 1.13.0 با ۷۴.۴، با حدود نصف هزینه.
- Jev سقف ۳۲ هزار توکن برای هر سؤال و ۶۴ هزار توکن برای هر درخواست داره.
- vocabulary مدل Jev ۱۴۵,۰۷۲ توکن داره و متن تایلندی رو با حدود ۴ برابر توکن بیشتر حساب میکنه.




