Sakhanda Wire
NVDA — MSFT — GOOGL — META — AMZN —
← Към новините

Ръководство за разработчици за Laya: решения zero-shot и калибриране

В този урок работим с Laya — енджина с отворен код за вземане на решения от Convai Innovations, който стана едно от най-звездните хранилища за машинно обучение през септември 2026 г. Laya е неавторегресивен модел от тип System 1: вместо да генерира текст, енкодер с 421 милиона параметъра прочита текст и набор от типизирани въпроси — избор между етикети, оценка по скала или въпрос с отговор „да/не“ — и връща вероятност за всяка опция с един-единствен forward pass и нула изходни токена. Основното му предимство е скоростта и калибрираните вероятности — отвореният отговор на Jev на TypeSafe. Вместо да повтаряме примерите от README, ще приложим тези обещания върху реални етикетирани данни с известни отговори, банковия домейн от набора CLINC150 за намерения, и ще измерим какво действително получава един production router: zero-shot точност спрямо обучен класификатор, доколко формулировката и редът на опциите имат значение, доколко честни са предоставените вероятности, какво поправя и какво незабелязано нарушава напасването на температура върху валидационни данни, праг за въздържане, напаснат към бюджет за грешки, заявки извън обхвата, въпрос с отговор „да/не“, който температурата не може да поправи, и типизирани изходи от pydantic схема.

Копиране на кодаКопираноИзползвайте друг браузър

Инсталираме публикувания пакет laya 0.3.27 и зареждаме английската контролна точка. Два избора тук поддържат изпълнението възпроизводимо. По подразбиране laya.load следва основния клон на Hugging Face, затова фиксираме ревизията, прегледана от самите автори на библиотеката, която тя предоставя като laya.PINNED_REVISIONS. Освен това при CUDA Laya автоматично преобразува към половин точност, затова изключваме това, за да поддържаме всяко устройство във fp32 и да позволим на изпълнение върху GPU да възпроизведе показаните тук числа от CPU. Отпечатването на предоставените с контролната точка температури разкрива първата находка още преди каквато и да е прогноза: записът за въпроси с избор между единадесет или повече опции е 0.10, което е извън валидния диапазон, затова loader-ът го ограничава до 0.5 и издава предупреждение. Температура под единица изостря вероятностите, така че всеки отговор на въпрос с толкова опции ще изглежда два пъти по-сигурен, отколкото е суровият модел.

Копиране на кодаКопираноИзползвайте друг браузър

Едно извикване на predict отговаря на три типизирани въпроса за билет за поддръжка с един-единствен forward pass: отдела като избор, спешността като оценка от 0 до 2 и риска от напускане като въпрос с отговор „да/не“. Резултатът съдържа вероятност за всяка опция и две полета за увереност, които лесно могат да бъдат объркани. answer_confidence е вероятността на отчетения отговор и това е величината, която използват калибрирането, прагът за въздържане и всички метрики по-нататък в урока. confidence е единица минус нормализираната ентропия, чийто мащаб зависи от броя на опциите във въпроса. Блокът за използването показва нула изходни токена, защото Laya оценява подадените му опции и никога не генерира текст.

Копиране на кодаКопираноИзползвайте друг браузър

Преди да изграждаме върху Laya, измерваме цената на един forward pass върху едно съобщение. Всеки въпрос се превръща в собствен ред, съчетан със съобщението, така че шестнадесет въпроса с отговор „да/не“ отнемат около осем пъти повече време от един. Всички опции на въпрос с избор споделят един ред и бюджета на неговата head част, така че избор с четиридесет опции струва едва около два пъти повече от избор с три опции и една четвърт от времето на шестнадесет въпроса „да/не“ върху нашия CPU. Това дава правило за проектиране, което определя всичко след него: задавайте един въпрос с избор и много опции, вместо много въпроси с отговор „да/не“.

Копиране на кодаКопираноИзползвайте друг браузър

За реални етикетирани данни използваме CLINC150 — публичен бенчмарк за класификация на намерения с 150 намерения в десет домейна плюс набор от заявки извън обхвата, прочетен директно от Hugging Face Hub като parquet файл. Вземаме банковия му домейн с петнадесет намерения, по 100 обучаващи, 20 валидационни и 30 тестови заявки за всяко, и караме Laya да маршрутизира 450-те тестови заявки zero-shot, като му подаваме името на всяко намерение и едноредово описание от типа, който би написал разработчик. Той достига точност 0.804 без нито един етикетиран пример. За сравнение, класификатор с TF-IDF и логистична регресия достига 0.651 с по три етикетирани заявки на намерение, 0.848 с десет и 0.904 с тридесет.

Копиране на кодаКопираноИзползвайте друг браузър

След това променяме единствено формулировката на опциите. Подаването на Laya на петнадесетте чисти имена на намеренията без нашите описания повишава точността от 0.804 до 0.878 и намалява наполовина времето, тъй като опциите заемат по-малко от половината токени. Описанията размазаха разликите между намеренията, които имената запазват: account_blocked беше насочвано към freeze_account десет пъти, а въпросите за лихвен процент — към balance. Обръщането на реда на чистите имена променя 4.2 процента от отделните отговори, въпреки че общата точност почти не се изменя — признак за позиционен приоритет. Затова редът на опциите, който внедрявате, трябва да бъде редът, който сте тествали. Само етикетираните данни можеха да ни покажат и двете неща; оттук нататък маршрутизираме по чистите имена.

Копиране на кодаКопираноИзползвайте друг браузър

След това питаме доколко честни са вероятностите. Въпрос с петнадесет опции попада в температурния сегмент choice:11+ на контролната точка — този, който е ограничен до 0.5. Таблицата за надеждност върху 450-те тестови заявки показва резултата: 92 процента от отговорите заявяват увереност поне 0.9, но 91.1 процента от тях са правилни, а средната увереност 0.974 е значително над точността 0.878, при очаквана грешка в калибрирането 0.102. Целта на обучението на Laya използва правилни scoring правила, което има предвид model card-ът под „калибриран“. Калибрирането обаче е свойство на даден въпрос върху дадено разпределение и трябва да го измерите върху собствените си етикети.

Копиране на кодаКопираноИзползвайте друг браузър

Модулът за калибриране на Laya превръща етикетираните примери в записи със сурови логити и цели и напасва температура към тях. Създаваме 300 записа от валидационния дял и извикваме agent.fit_temperatures, което напасва температура на избор 1.258 и я инсталира, след което отпечатва пълната температурна таблица до предоставената първоначално. Напасването заменя цялата карта: всеки запис по брой опции изчезва, защото един сегмент се нуждае от 2000 записа, за да запази собствена температура, а температурите за score и yes/no се нулират до 1.0, тъй като за тези типове няма записи. Едно напасване върху въпроси с избор тихомълком променя начина, по който се калибрира всеки yes/no въпрос в агента. Затова възстановяваме предоставените стойности и инсталираме само сегмента, който сме измерили. В тестовия набор грешката в калибрирането спада от 0.102 до 0.059, а точността остава непроменена, тъй като температурата никога не променя коя опция печели. save_calibration записва резултата в JSON файл, който laya.load може да прочете отново.

Копиране на кодаКопираноИзползвайте друг браузър

laya.fit_abstention_thresholds използва същите валидационни записи и за всеки сегмент според броя опции връща най-свободния праг на увереност, който поддържа грешката в рамките на зададена цел. При цел от 5 процента той избира 0.602, което запазва 95.7 процента от валидационните заявки при 4.5 процента грешка, а Laya прилага същия праг самостоятелно, когато бъде подаден на predict_batch като min_confidence, отбелязвайки 35 от 450-те тестови отговора като въздържани. В тестовия набор обаче този праг запазва 92.2 процента от заявките при 9.2 процента грешка — почти два пъти повече от бюджета — а целта от 2 процента реализира 5.3 процента. Данните обясняват защо: Laya е прав в 92.7 процента от валидационните заявки, но само в 87.8 процента от тестовите, така че бюджет за грешки, напаснат върху една извадка, важи само за трафик, който прилича на нея. Самото подреждане е надеждно: най-уверената половина от тестовите отговори е правилна в 97.8 процента от случаите. Но целта за грешки изисква запас и периодично повторно напасване върху реален трафик. Праговете остават отделни за всеки сегмент според броя опции, защото една стойност не може да се пренася между въпрос с две и въпрос с петнадесет опции.

Копиране на кодаКопираноИзползвайте друг браузър

Производственият трафик включва заявки, за които router-ът никога не е бил създаван, затова добавяме 150 заявки извън обхвата от CLINC и 150 заявки от други домейни на CLINC. Калибрираната увереност ги разграничава ясно: банковите заявки имат средна стойност 0.912, останалите — около 0.25, а прагът от 5 процента спира 89.3 процента от заявките от други домейни и 93.3 процента от заявките извън обхвата, като се въздържа при 7.8 процента от банковите заявки. Алтернативата не изисква етикетирани данни: шестнадесета опция — „не е банкова заявка“ — улавя съответно 80.0 и 90.0 процента от тях, но цената е маршрутизиране на 2.0 процента от банковите заявки встрани и спад на банковата точност от 0.878 до 0.864, защото новата опция променя въпроса, спрямо който се оценява всяко намерение.

Копиране на кодаКопираноИзползвайте друг браузър

Специален въпрос с отговор „да/не“ изглежда като естествена проверка дали заявката е в обхвата, затова питаме дали всяко съобщение е свързано с банковата сметка, сметките или плащанията на потребителя. Той подрежда добре заявките, с AUROC 0.945, но е предубеден към „не“: банковите заявки имат средна вероятност едва 0.361, така че при стандартния праг 0.5 разпознава само 28.9 процента от тях. Напасването на температура върху 550 валидационни отговора достига горната граница 5.0 и не променя нищо при този праг, защото деленето на два логита на каквато и да е температура никога не променя кой е по-голям. Температурното мащабиране поправя мащаба, но не и отместването. Това, което работи, е вероятността да се третира като резултат и прагът ѝ да се избере върху етикетирани данни: праг 0.09, избран върху валидационния дял, дава 92.0 процента recall и 83.0 процента специфичност върху тестовия набор.

Копиране на кодаКопираноИзползвайте друг браузър

Накрая свързваме това с приложния код чрез pydantic схема. laya.decide_batch превръща поле Literal във въпрос с избор между чистите имена, което стъпка 5 показа като по-добрата формулировка тук, а bool — във въпрос с отговор „да/не“, след което проектира отговорите обратно във валидиран екземпляр на модела. Подаването на прага от стъпка 8 като min_confidence превръща несигурното намерение в None, което полето Optional приема, така че None се превръща в явен сигнал „попитай човек“; двете заявки извън обхвата се връщат като intent=None. Булевото поле обаче се отрязва при фиксирания праг 0.5 вътре в decide, затова сигнал за измама е отбелязан като in_scope=False при вероятност 0.29. Прочитането на вероятността от подробностите на резултата и прилагането на прага от стъпка 10 дава правилния отговор.

Копиране на кодаКопираноИзползвайте друг браузър

Обобщението отпечатва едноредовия резултат от всяка стъпка и навиците, които си струва да запазим: фиксирайте контролната точка и прочетете предоставените с нея температури, тествайте формулировката на критериите и реда на опциите върху етикетирани данни, напасвайте температури върху отделени данни и инсталирайте само измерения сегмент, използвайте праг за въздържане според броя опции с необходимия запас и избирайте прага за yes/no върху етикетирани данни. Завършва с насоките за следващи стъпки: дообучаване, което се намира в laya.train в основния клон на хранилището, но все още не е в пакета 0.3.27, многоезичната контролна точка зад laya.Router и обслужването.

В заключение Laya изпълнява по-голямата част от обещанията си: един forward pass отговаря на няколко типизирани въпроса без генерирани токени, router-ът с чисти имена достига 0.878 върху петнадесет реални банкови намерения без обучаващи данни — резултат, който TF-IDF класификаторът трябва да достигне с между десет и тридесет етикетирани примера на намерение — а калибрираната му увереност разграничава достатъчно добре заявките в и извън обхвата, за да спре повече от девет от всеки десет заявки извън обхвата. Стойността на вероятностите обаче зависи от работата, която библиотеката оставя на вас, а няколко от настройките ѝ по подразбиране сочат в грешната посока. Предоставената температура за въпроси с единадесет или повече опции изостря, вместо да омекотява вероятностите; еднократното извикване за калибриране изтрива температурите за типовете въпроси, които не е видяло; бюджет за грешки, напаснат върху валидационни данни, е валиден само за трафик, който прилича на тях; а yes/no въпрос може да подрежда добре, но да се намира от грешната страна на 0.5 — нещо, което никоя температура не може да поправи и което проекцията на схемата след това задава твърдо. За всяко от тези неща по-горе е показана поправка с няколко реда код, а без нея всяко би преминало незабелязано. Практическият извод е същият, който посочва и model card-ът на библиотеката, но настройките ѝ лесно ни карат да забравим: калибриран модел за вземане на решения е модел, който сте калибрирали върху собствените си етикети за собствените си въпроси.


Разгледайте ПЪЛНИТЕ КОДОВЕ тук. Всички заслуги са за изследователя на този проект. Също така можете да ни последвате в Twitter и не забравяйте да се присъедините към нашия ML SubReddit с над 150 хил. членове и да се абонирате за нашия бюлетин. Чакайте! В Telegram ли сте? Вече можете да се присъедините към нас и в Telegram.

[Спонсорирано] Уебът е единственият API, който липсва на повечето агенти. Базите данни, календарите и хранилищата имат API. Отвореният уеб в по-голямата си част няма. MCP сървърът TinyFish предоставя на всеки MCP клиент четири инструмента: TinySearch, TinyFetch (цели страници като markdown, включително JavaScript), TinyBrowser за входове и формуляри и TinyAgent за многостъпкови задачи. Search и Fetch са безплатни.

Преведено автоматично от английски. Оригиналната статия е на връзката по-долу.

Първоначално публикувано от MarkTechPost на

Прочетете оригинала в MarkTechPost ↗

Текстът и изображенията са собственост на MarkTechPost и са възпроизведени тук с посочване на авторството и връзка към оригиналната публикация.

← Към новините

Още новини

Всички последни новини