Руководство · how-to
Как собрать оценочный набор, который не устареет
Большинство оценочных наборов собирают один раз, из того, что было легко достать, и они тихо перестают представлять работу. Как собрать набор из уже имеющихся отказов, подпитывать его из продакшена, защищать от системы, которую он измеряет, и понимать, когда он исчерпан.
О чём это и о чём нет
У большинства команд, измеряющих функцию на основе искусственного интеллекта, где-то есть набор тестовых случаев. Его собрали за неделю, из того, что было легко достать, руками человека, который с тех пор ушёл в другой проект, и он по-прежнему выдаёт число при каждом прогоне конвейера. Это число считают фактом о качестве. Обычно это факт о наборе, который перестал описывать продукт некоторое время назад.
Это не текст о том, как проводить оценку, когда у вас нет команды данных: механику и дешёвый вариант подсчёта разбирает материал о том, как оценивать качество вывода без команды данных. И не о том, как судить агента на многошаговой задаче, — этим занят материал о том, как понять, работает ли агент на самом деле. Здесь речь о самом материале: откуда берутся случаи, что держит их представительными и как понять, что набор исчерпан.
Начинайте с отказов, которые у вас уже есть
Худший способ собрать набор — сесть в комнате и придумать примеры. Придуманные случаи хорошо сформулированы, однозначны и вежливы; они измеряют версию задачи, которую никто не присылает. Лучшее сырьё — уже собранные отказы: обращения в поддержку по этой функции, ответы, на которые жаловались, случаи, которые инженер бросил в канал со словом посмотрите, всё, что человек исправлял вручную.
Возьмите их первыми и прочитайте, прежде чем что-то решать. Сотня настоящих отказов научит вас тому, что нужно набору, лучше любого планирования, а формулировки, которые вы запишете по ходу чтения, станут первым наброском категорий, по которым вы потом будете считать.
Решите про группы раньше, чем про размер
Вопрос никогда не в том, сколько случаев; вопрос в том, каких видов и сколько каждого. Выберите группы, о которых вы захотели бы принимать отдельное решение, — сегмент, язык, тип документа, длина запроса, сложность, только что найденные категории отказов — и возьмите каждой столько, чтобы её оценка что-то значила сама по себе.
Это намеренно завышает долю редких и дорогих случаев относительно трафика, что верно для поиска проблем и неверно для описания типичной работы. Поэтому записывайте состав рядом с набором, а когда нужна цифра, представляющая живое поведение, возвращайте группам их настоящие доли. Самая частая ошибка отчётности в этой области — привести невзвешенное среднее набора, который собирали трудным.
Запишите, что значит верно, и проверьте саму запись
Прежде чем что-либо размечать, напишите инструкции: что считается хорошим ответом, как поступать со случаями между категориями и что делать, когда правильный ответ действительно неясен. Затем дайте выборку двум людям независимо и сравните. Там, где они разошлись, не хватает правила, а не аккуратности; и исправление идёт в инструкцию, а не в разговор.
Неоднозначные строки сохраняйте, а не продавливайте. Случай, который двое внимательных читателей видят по-разному, — самая содержательная строка у вас на руках, и пометить его спорным честнее, чем заморозить один из двух ответов как истину.
Держите лёгкий пол и трудную вершину
Набору нужны обе половины, и они делают разную работу. Лёгкие случаи — это регрессионный пол: именно они ловят релиз, сломавший что-то базовое, и их ценность как раз в том, что они должны проходить всегда. Трудные случаи — там, где видно улучшение и где два кандидата отличаются друг от друга.
Отчитывайтесь по ним раздельно. В общей куче лёгкое большинство доминирует в среднем, и настоящий выигрыш на трудном материале растворяется в числе, которое почти не двигается. Это же и ранний признак того, что набор упёрся в потолок: проходит всё, разброс схлопнулся, а помесячные различия — шум.
Подпитывайте его из продакшена по расписанию
Быстрее всего пробел создают ваши собственные релизы. Любая новая возможность начинает жизнь вовсе без случаев, поэтому её первые недели измеряет материал, собранный до неё, и оценка остаётся успокаивающей, пока риск наиболее высок. Лекарство — не проект, а распорядок: с фиксированной частотой берите выборку недавних настоящих входов, добавляйте те, эквивалента которых в наборе нет, и размечайте их.
Тот же распорядок — место, куда добавляются отказы, найденные с прошлого раза. Жалоба, ставшая постоянным случаем, — это жалоба, которая не может тихо повториться.
Защитите его от системы, которую он измеряет
Держите материал там, откуда система читать не может. Это значит не вставлять его случаи в подсказки как примеры, не позволять коллекции, из которой система извлекает, обновляться выгрузкой, содержащей его, и проверять пересечение машинно всякий раз, когда собираются обучающие или справочные данные.
Примите и то, что набор, по которому вы много раз итерировались, частично израсходован, как бы вы ни осторожничали: подкручивать, пока оценка не устроит, — значит подгоняться под набор, а не измеряться по нему. Отложите долю, в которую заглядывают редко, чтобы всегда оставался материал, под который систему никогда не целили.
Знайте, когда он исчерпан
Стоит следить за тремя сигналами. Проходит всё, и разброс схлопнулся. Свежий срез трафика содержит категории, примеров которых в наборе нет. Или инструкции правили так часто, что старые строки размечены по правилам, которые больше не действуют. Любой из них означает, что набор описывает задачу, которую продукт уже прошёл.
Выводить материал из обращения нормально, и это должно быть рутиной, а не драмой: сохраните версию, отметьте, что изменилось, и не сравнивайте оценки через эту границу, не сказав, что набор под ними поменялся.
Как выглядит поддерживаемый набор
Небольшим. Несколько сотен случаев, сгруппированных, с записанным рядом составом, короткий документ с инструкциями, который правили не один раз, отметка о том, какие строки были спорными и почему, и дата последнего добавления материала из продакшена. Чьё-то имя напротив и повторяющийся час в календаре.
Это вся практика, и она достаточно невзрачна, чтобы обычно не быть ничьей работой. Причина отдать её кому-то в том, что каждое решение ниже по течению — помогло ли изменение, готова ли функция, лучше ли модель поставщика той, что у вас есть, — ровно настолько хорошо, насколько хорош этот материал, а набор, который никто не поддерживает, портится в сторону, которая всегда выглядит как успех.