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