Преди седмица публикувахме праговете, по които автоматично свързваме времето със задачи: резултат 0,45, преднина 0,15 и шейсет секунди съвпадение. Изглеждаше ни правилно да ги покажем открито. После измерихме как се държат тези числа в истински работни пространства и разбрахме, че праг, избран веднъж в нашия офис, не може да е подходящ за вашия списък със задачи.
Оттогава преработихме съпоставянето, като за всяко число в него питахме: откъде знаем това? Повечето фиксирани числа отпаднаха. Летвата за запис се изчислява от собствените ви проекти на всеки няколко минути, и то на вашия компютър. Тук разказваме за измерването: какво броим, какво се промени и кое правило оцеля при всички преработки.
Какво значи „точност“, преди да я измерим
Думата „точност“ не казва нищо, докато не уточните коя грешка броите. Автоматичният отчет на времето може да сгреши по два начина, а цената на двете грешки е съвсем различна. Може да пропусне работа, която е трябвало да разпознае. Това се забелязва веднага, защото редът е празен. Или може да запише времето към задача, която няма нищо общо с тази работа. Такъв ред изглежда досущ като верен и изобщо няма да го забележите.
Грешният запис излиза по-скъпо от липсващия, защото не го виждате.
Затова измерваме втората грешка. Тестът подава на съпоставянето работа от проект, който работното пространство няма, и брои колко пъти въпреки това се стига до запис. Всеки запис в този тест е грешен по определение, така че за оценката не е нужна ничия преценка.
Вторият тест прави обратното и е също толкова важен: всяко от 481-те заглавия се подава на работно пространство, което съдържа съответния проект. Тук мълчанието е провал. Съпоставяне, което изобщо не се обажда, не би сгрешило нито веднъж в първия тест, затова двата теста имат смисъл само заедно. В днешната версия при втория тест съпоставянето разпознава 453 от 481 заглавия, при 28 мълчи и нито веднъж не посочва грешен проект. Ако тази нула някога се промени, тестовете ще се провалят.
Числото и как спадна
Две трети от грешните записи изчезнаха. При първата стъпка не се изгуби нито един верен отговор, а след втората съпоставянето все още разпознава 98,7% от работата, която разпознаваше преди. Фигура 3 показва разбивката на последния тест. Обърнете внимание на средния сегмент: прозорците, за които приложението е достатъчно сигурно, за да попита, но не и за да запише час.
Ето трите промени. Първите две са стъпките от фигура 2: v1.6.8 и v1.8.0. Третата излезе между тях, с v1.7.4, и подобри разпознаването на истинска работа.
1. Без запис, ако задачата не обяснява прозореца
Старата проверка питаше дали задачата има достатъчно висок резултат. Не питаше обратното: обяснява ли тази задача прозореца? При страница с девет думи задача, която съвпада с две от тях, можеше да мине всички прагове само благодарение на тези две. Другите седем, които всъщност казваха за какво е страницата, изобщо не се проверяваха.
Сега за запис са нужни две условия. Задачата трябва да разпознава поне половината смислени думи на екрана, а поне 30% от собствените ѝ думи трябва да присъстват в прозореца. Ако някое от тях не е изпълнено, запис няма. Задачата обаче не се изхвърля, а се появява като предложение с едно натискане. От премахнатите грешни записи повечето изчезнаха напълно, а няколко се върнаха като въпроси.
2. Всяко работно пространство определя своята летва
Заради тази промяна предишната статия вече е остаряла. Прагът 0,45 всъщност е предположение за това колко лесно се бъркат вашите проекти, а ние нямаме откъде да знаем това. Представете си две агенции: едната води двайсет напълно различни клиентски проекта, а другата четири почти еднакви преработки. Те имат нужда от различни числа, а верното число за втората не бихме открили в нашия офис, колкото и да се стараем.
Затова настолното приложение го изчислява само. На всеки няколко минути то оценява наново фиксирана извадка от заглавията на задачите ви спрямо проектите ви и си задава два въпроса: как изглежда верният отговор тук и кой е най-добрият грешен отговор, който това работно пространство може да даде? Летвата за запис се поставя над този грешен отговор, с по-голям запас, когато примерите, от които приложението се учи, са малко.
Най-важен за нас е последният ред. Ако десетият персентил на верните отговори в едно работно пространство е под деветдесетия персентил на най-добрите грешни, думите просто не могат да различат проектите му. Тогава приложението казва това и спира да записва. Таймерът продължава да върви. Всичко става предложение с едно натискане, а ако сте включили дневника на сесията, описан по-долу, причината се записва там.
3. Общата дума се претегля, вместо да се изтрива
Една по-ранна поправка просто махаше всяка дума, която се среща в два проекта, с довода, че обща дума не помага да ги различим. Подходът се оказа твърде груб и ни отне време да разберем защо. В работно пространство с проекти Дизайн на сайт и Android приложение поправката с право махаше името на самата фирма. Но махаше и дизайн, защото думата се срещаше и в проекта за Android, и така „Дизайн на сайт“ губеше дума от собственото си име.
Сега всяка дума се оценява според това доколко сочи към един проект по-често, отколкото би се случило по чиста случайност. А случайността зависи от това колко проекта имате. При два проекта дума, разделена поравно между тях, казва толкова, колкото и хвърлена монета, а преди изглеждаше наполовина полезна. С новата оценка разпознаването на истинска работа се подобри.
Правилото, което оцеля при всяко пренаписване
Първоначалното съпоставяне четеше само заглавието на прозореца. Сега чете повече: домейна в браузъра и първата част от пътя, името на приложението, както и домейните и ключовите думи, които сте добавили към проекта. На пръв поглед това са просто още доказателства, но промяната е най-рискованата в цялата поредица. Тези сигнали показват място, а не работа. Щом сте в домейна на клиента, ясно е в кой проект сте, но не и по коя задача работите.
Мястото може да породи въпрос. Само думите в прозореца могат да доведат до запис.
Направихме това правило твърдо, защото го нарушихме два пъти и двата пъти ни струваше истински часове. Първия път проект носеше името на продукт, който го изписва в заглавието на всеки свой раздел в браузъра. Това име всъщност показваше място, но се броеше за втората „независима“ дума, нужна за уверен запис. Втория път връзка, научена от действията на един потребител (две потвърждения в github.com), започна да записва като работа времето, в което той разглеждаше личните си хранилища. Научените сигнали вече не записват нищо. Те само определят кое предложение ще видите първо, а решението пак е ваше.
Една дума не е доказателство
Деветнайсет часа реална работа показаха това по-убедително от всеки довод. За това време таймерът зададе 379 въпроса. От тях 264 бяха предизвикани от една-единствена обикновена дума: monitor на сайт за статуса на услуги, console в услуга за планиране, model в GitHub, links в конзола за търсене. Всички те предлагаха един и същ проект, който нямаше нищо общо с тях.
Логиката зад тях не беше очевидно погрешна. Дума, която се среща само в една от задачите ви, е рядка, а рядкото прилича на доказателство. Именно затова номерата на заявки вършат работа. Но една дума може да е рядка в задачите ви и да се среща навсякъде другаде. От v1.7.3 въпрос, който посочва проект, изисква две различни думи. Случаите, които работеха и преди, винаги са имали по две. Онези 264 нямаха. Запис обаче все още може да се основава на една-единствена дума, ако тя се среща само в една от задачите ви. Думата трябва да е в заглавието на прозореца, а записът пак трябва да премине летвата на работното ви пространство и двете проверки от първата промяна. При този вид запис има известен пропуск, описан в края на статията.
Когато няма обща дума
Много прозорци нямат нито една обща дума със задачите. Една страница може съвсем явно да е за вашата работа по Android и въпреки това да не съдържа нищо от списъка ви със задачи. Тогава всички механизми по-горе с право мълчат. Последната версия от поредицата добави канал точно за такъв случай.
Настолното приложение вече съдържа малък езиков модел с отворен код, който превръща текст във вектор. Моделът е с лиценз MIT и идва вграден в инсталатора. Приложението изгражда вектор за всеки ваш проект от заглавията на задачите му и още един за страницата на екрана, след което ги сравнява. Когато страницата е близо до един проект и явно по-далеч от останалите, приложението предлага този проект. Всичко това са около 17 MB таблици и едно скаларно произведение: без сървър, без графичен процесор и без нито една заявка извън компютъра.
Моделът е полезен заради ограниченията около него, а всички те бяха определени още преди да го пуснем. Той никога не записва. Никога не отменя проект, който думите вече са посочили. Обажда се най-много веднъж на час за един и същ сайт или приложение. Работи точно там, където нищо друго не може, затова нищо друго не може и да го провери. Ограничението от веднъж на час е проверката. При всичките 190 двойки от вградените проектни планове 99,9% от проектите, предложени по този начин, бяха верни, а грешно предложение имаше при 0,4% от страниците за работа, която работното пространство не съдържа.
Бележка за термините, защото другаде държим на точността им: съпоставянето по думи не е AI. То е фиксирана функция за оценка, която при едни и същи данни винаги дава един и същ резултат, и в режим „Автоматичен“, и в режим „Само правила“. Каналът за прилика е модел и работи само в режим „Автоматичен“, затова в режим „Само правила“ в съпоставянето не участва никакъв модел.
Какво още греши
- 5,6% не е нула и останалото не се решава с промяна на един праг. В теста с премахнат проект прозорците, при които все още се стига до запис, описват работа, която наистина прилича на вашата, и никаква граница не може да ги отдели, без да отхвърли и верни отговори. Следващата стъпка е по-богат речник за обясняване на прозорците.
- Записът все още не отчита мястото. В конзолата на ваш клиент записът по една дума, описан по-горе, може да запише часове към задача от друг проект, защото частта от съпоставянето, която записва, умишлено не е научена да чете адресната лента. Пропускът ни е известен и вече има тест за него, който засега не минава.
- През първата минута в прозорец нищо не се записва. За запис са нужни шейсет секунди последователни доказателства, а за въпрос стигат десет. Това е умишлено, но наистина се усеща бавно.
- Ръчно зададените сигнали са най-евтината поправка, но приложението не ви подканва да ги въведете. Най-сигурният начин таймерът да разбере в кой проект сте е да посочите в проекта кои домейни и приложения са негови. Само че повечето хора така и не откриват това поле. Пропускът е на продукта, а не на съпоставянето, и от целия списък него ни е най-трудно да оправдаем.
Ако от тази седмица можехме да запазим само един урок, той би бил този: праг, който никой не може да обясни, е догадка с десетична запетая. Нашият вече може да се обясни. Изчислява се и е документиран, а когато работното пространство не позволява праг, приложението ви го казва.