Разметка данных нужна для обучения нейронных сетей. К примеру, если мы учим сеть отличать живое лицо человека от фотографии или силиконовой маски для Face ID, то нам нужно разметить много-много фотографий человека, показать ИИ его маску и живое лицо. В этом посте расскажу, как мы это делаем в NtechLab и где берем людей для разметки большого объема данных. Также попытаюсь ответить на вопрос, стоит ли создавать собственные отделы по разметке данных внутри компании или можно ограничиться краудсорсингом или аутсорсингом, расскажу о некоторых рабочих кейсах. Приятного чтения!)
Что такое разметка данных?
Привет, Хабр! Меня зовут Надя Глебко. В NtechLab я проработала почти 4 года. Когда-то я пришла в компанию в качестве junior менеджера по разметке без особого опыта – но уже спустя полгода начала строить команду внутри компании. А уже через три года стала руководителем команды в составе 8 менеджеров и 3 валидаторов, а база наших инхаус-разметчиков составила около 100 человек. За это время был пройден невероятный путь роста и развития, проб и ошибок – и мне видится полезным поделиться этим опытом со всеми, кому интересна эта сфера. Но начнем с базы)
Что такое разметка данных простыми словами? Принято считать, что нейронные сети – это какая-то магия дата-сайентиста, который написал какой-то код, и все это каким-то чудесным образом работает. Но на самом деле в обучении нейронной сети важны не только алгоритм и данные, но и признаки, которые мы хотим предсказывать из этих данных с помощью ИИ. И разметка данных, по сути, помогает алгоритму научиться видеть эти признаки, чтобы в дальнейшем «видеть» их на новых данных уже без разметки. То есть нужно подготовить данные таким образом, чтобы каждый кусочек содержал информацию об интересующем нас признаке(-ах), распознаванием которого и будет заниматься нейронная сеть впоследствии. Это может быть самая разная информация – в зависимости от того, какую задачу нейросеть должна выполнять.
Где взять данные? Иногда данные приходят вместе с техническим заданием от заказчика, однако зачастую данные приходится искать самим. Можно поискать какие-то публичные датасеты, но их не хватает. Также можно поискать данные в открытых источниках, например, на YouTube или на релевантных задаче веб-сайтах. Либо, частая история, приходится собирать самим.
Например, если это распознавание лица, то нам нужно много-много данных, где у нас есть фотография человека в разных условиях. Здесь получается комбинация сбора и разметки данных, которую можно реализовывать через открытые датасеты с добавлением новых данных, взятых из разных источников. Но на одном распознавании лица все не заканчивается. В NtechLab мы разработали свою технологию, способную отличить живое лицо от неживого, – она получила название Liveness. По сути, без этой технологии Face ID на телефоне работало бы очень плохо, потому что можно было бы просто показать смартфону фотографию владельца, чтобы разблокировать экран. И это, конечно, очень критично для пользователей. Другой пример – это закрытые объекты, где работает система пропуска по лицу, и очень важно, чтобы мошенники не могли туда попасть под видом сотрудника.
Для обучения нейросети мы проводили самые разнообразные съемки, даже делали силиконовые маски. Я сама была тем человеком, на котором изготавливалась такая маска. Сначала тебе заклеивают волосы, накладывают специальные материалы, сверху покрывают гипсом, чтобы форма держалась. Где-то полтора часа ты сидишь в темноте. У меня даже получилось уснуть. Видимо, я была очень уставшей)
Спустя длительное время с тебя снимают получившуюся маску, еще некоторое время она подсыхает. Ее покрывают пигментами, чтобы по цвету она походила на человеческую кожу. После этого мы проводили съемки моего реального лица и меня в этой маске, чтобы впоследствии отправить эти данные в алгоритм для создания «лайвнеса».
Также бывают различные нейронные сети, работающие не только с изображением, но и с текстом, с аудио. Еще интересный пример разметки – всем известная капча, которую мы вводим на разных сайтах. Это на самом деле разметка текста. То есть мы вводим какой-то непонятный кусочек текста, который чаще всего отсканирован с какой-то бумаги или книги, чтобы впоследствии подобные тексты лучше распознавались какой-нибудь нейронной сетью.
Как организовать процесс разметки данных?
Компания NtechLab занимается видеоаналитикой, поэтому в основном рассказ будет про разметку изображений. Для того чтобы разметить данные, нужны люди, которые глазами смотрят на картинку или на видео и определяют, что на ней изображено. Например, они могут классифицировать изображение по заданному признаку (кошка или собака) или выделить интересующую нас область прямоугольником (bbox – bounding box).
Каким образом найти людей? Здесь бывают разные варианты, как можно реализовать весь процесс разметки данных. Можно просто разместить задание в интернете на какой-нибудь специальной площадке. Это называется краудсорсинг (от crowd – «толпа» – и sourcing – «использование или привлечение ресурсов»). Самая известная в мире – это Amazon Mechanical Turk. Если говорить про российский сегмент, то сейчас самой популярной платформой являются «Яндекс.Задания». Появляются еще некоторые новые площадки, но исполнители все еще отдают предпочтение преемнику «Толоки».
Краудсорсинг-площадки хороши тем, что выполнять задания на них приходит большое количество людей за относительно низкую стоимость. Но при этом сильно страдает качество разметки, поскольку там нет какой-то персональной ответственности за свою работу. И, соответственно, могут приходить недоброкачественные исполнители, которые хотят побыстрее накрутить денег. Можно, конечно, выставить определенные настройки в самом задании, чтобы обходить таких исполнителей, – например, обучение и экзамен перед допуском к основному пулу, контрольные задания, перекрытие. Но в любом случае задачи там выполняются с большей халатностью, да и очень сложные задания выставлять там нет смысла: обычно исполнители не любят долго читать инструкцию и вникать в детали. К слову, если вернуться к примеру с вводом капчи, то получается, что мы в этом случае бесплатно кому-то размечаем текст. Я когда об этом узнала, немножко загрустила. Собственно, это тоже такой пример краудсорсинга, но чуть более сложно устроенного.
Второй вариант – это аутсорсинг, то есть когда можно обратиться к специальной компании, которая занимается разметкой данных, и прислать ей ТЗ вместе с данными. И они уже своими силами все это размечают.
В нашей практике случалось такое, что такие компании также используют краудсорсинг для каких-то задач. Однако здесь все равно есть плюс в том, что появляется ответственное лицо, которое можно спросить про качество разметки. Несмотря на то, что нам уже не нужно тратить много ресурсов на своей стороне, большой минус в том, что все еще возникает много вопросов к качеству разметки. Из нашего опыта: мы по три раза отправляли туда-обратно результаты работы на доработку. И на это тоже уходили время и силы наших менеджеров. В целом это хороший вариант, но, на мой взгляд, не для каких-то не сильно сложных задач.
Третий вариант – это когда мы делаем команду внутри компании (так называемый инхаус), которая занимается исключительно решением наших задач. Из минусов – это для компании может быть дорого, потому что нужно держать людей в штате. Но при этом можно гораздо лучше контролировать качество разметки и отслеживать все процессы. Чтобы все классно работало, желательное качество разметки – это 95% или хотя бы 90%. То есть не больше 10% ошибок. На краудсорсинге достичь такого качества бывает крайне трудно даже для простых задач, а вот с конкретными обученными под задачу разметчиками добиться высокого качества уже гораздо легче. Второй минус: сложно сразу же собрать такое большое количество людей, сколько можно найти на тех же краудсорсинг-площадках. Но в целом это возможно. И это как раз инхаус – тот путь развития, который я выбрала, еще будучи руководителем с одним менеджером.
Почему у нас случился именно инхаус?
Обычно мы работаем с разметкой изображений. И нам нужна, к примеру, классификация типов транспорта или распознавание текста. Либо нужно что-то выделить на изображении. Допустим, тот же транспорт или силуэт собаки. Далее на основании разметки определенный алгоритм «смотрит» очень большое количество данных и «изучает», что обозначено в данных, – это классификация изображения целиком, или детекция информации из части изображения, или что-то еще. После обучения происходит тестирование нейронной сети, где мы «просим», по сути, разметить новые данные. После этого мы смотрим точность разметки с помощью сетки. Так мы определяем успешность обучения. И, получается, чем сложнее объект, который нам надо выделить, тем сложнее задание для разметчика и тем меньше важно допустить ошибок. Потому что каждый неверно размеченный объект может сильно повлиять на качество обучения. Особенно если данных не так много.
Попробовав небольшой внутренний инхаус и внешний аутсорс, мы решили сделать ставку именно на инхаус. Мы подумали, что проще будет найти знакомых, знакомых знакомых, которые хотят подработать. А разметка данных – это идеальная подработка в каком-то смысле, потому что тебе не надо устраиваться дополнительно куда-то в штат. И ты можешь в свободное время удаленно разметить определенный объем данных и получить за это вполне достойную оплату труда. То есть можно подрабатывать не выходя из дома, достаточно лишь быть способным работать за компьютером и анализировать свою работу, подмечать ошибки.
Ну и, собственно, так мы сначала собрали 10 человек и с ними размечали первые проекты. Потом, когда проектов стало становиться больше, мы уже начали искать людей через другие каналы. Это паблики с подработкой, вакансии на HeadHunter. Но чем больше людей стало приходить, тем больше стала наша ответственность. В первую очередь это настройка организационных процессов и создание инструментов для создания оптимальных условий исполнителям. Мы стали придумывать общую систему входа разметчиков в нашу базу, например, это обучающие материалы по работе с инструментом, тестовое задание. Также мы придумали такой инструмент, как система штрафов. Это, соответственно, чтобы разметчики не относились легкомысленно к работе, поскольку для них это всего лишь подработка и у них нет особо каких-то трудовых обязательств. Для нас критичны два момента. Это если просрочен дедлайн и если в работе больше определенного процента ошибок. При этом не могу сказать, что мы как-то часто применяем эти штрафы. Скорее, здесь важен больше психологический эффект)
За последние 3 года нам удалось создать команду, в которой уже около 10 менеджеров и большая база разметчиков из более чем 100 человек. За это время мы, конечно, прошли много самых разнообразных кейсов. Когда в качестве разметчика приходил один человек, а вместо него размечал другой, например, мама. Хотя мы все подписываем NDA и не имеем права передавать информацию (данные в этом случае) третьим лицам. Бывали ребята, которые обижались на нас за то, что мы их снимали с проекта за плохое качество разметки. И они нам за это специально портили разметку.
Так что разметка данных – это та область айтишной истории при создании нейронных сетей, где приходится работать именно с людьми. То есть это не код, это люди, с которыми надо договариваться, объяснять, как размечать те или иные вещи. Важно создавать общее понимание разметки у всех ее участников, иначе будет очень разнородная разметка, и это негативно скажется на качестве работы сетки. Это управленческая работа на стыке менеджерства и понимания технических инструментов.
В конечном итоге видится полезным использование всех способов разметки данных, поскольку все они подходят – просто для разных типов задач. И умение грамотно выбирать инструменты в совокупности с развитием внутренней экспертизы является залогом успеха качественной разметки данных – и, как следствие, качества работы нейронной сети.
Как устроен инхаус внутри?
Как я уже говорила, отличие инхауса в том, что здесь максимум контроля за ходом разметки. И, соответственно, гораздо больше точек существует, в которых можно так или иначе повлиять на качество разметки. За долгое время работы мы проработали на собственном опыте следующий пайплайн.
Все начинается с ТЗ. Иногда оно приходит в полном объеме, вместе с примерами, с подробным описанием задач. Иногда бывает, что ТЗ вообще устное – условно, надо сделать то-то и то, и тогда со своей стороны нам приходится его прояснять у заказчика.
После этого у нас идет этап подготовки данных – data preparation. Мы можем собирать данные из разных источников. Это может быть интернет, где мы ищем разные картинки, мы можем искать какие-то датасеты, купить их, самостоятельно собрать данные и так далее. Но это отдельная история. Допустим, что нам прислали данные. Мы их подготовили.
После этого мы подгружаем эти данные в наш инструмент для разметки. В основном это CVAT (Computer Vision Annotation Tool). Далее, чтобы попробовать что-то разметить, наступает момент подготовки инструкции. Если у нас абсолютно новый проект, то сам менеджер проекта обычно размечает небольшой кусочек данных, чтобы понять, что вообще в этих данных содержится, посмотреть различные примеры. Очень часто бывает, что встречаются какие-то кейсы, которые не описываются в ТЗ. Тогда это надо прояснить изначально. И также важно показать пример разметки заказчику, чтобы «получить его ок».
После такой пробной разметки менеджер составляет первую версию инструкции, вставляет туда примеры из тех данных, которые он сам разметил. Потом скидывает эту инструкцию на прочтение заказчику. После того как мы разобрались с инструкцией, мы начинаем поиск внешних исполнителей или разметчиков. У нас для этого уже есть база разметчиков. На каждого желающего у нас представлена некоторая карточка, где описано участие в публичных проектах, обратная связь от других менеджеров, контакты, занятость.
Если такая же задача у нас уже была, то мы стараемся брать тех людей, кто уже размечал, потому что этих исполнителей уже не нужно обучать. Нам так проще, а качество разметки выше. Когда приходят новые проекты, мы всегда стараемся брать новых людей, чтобы проверять их способности. И чтобы не все деньги шли в одни ворота, что называется.
На схеме видно, что потенциальные исполнители выполняют тестовое задание, которое рассылает менеджер. На выполнение тестового задания мы обычно даем пять дней. Перед тестовым заданием мы всегда проводим онлайн-встречи, на которых показываем в самом инструменте, как размечать те или иные кадры, объясняем суть задания, чтобы это не было лишь текстовым описанием. Всегда есть возможность задать нам вопросы. Если результат тестового выше среднего, то мы берем этих людей дальше и начинаем пробную первую партию разметки.
У нас есть еще такая роль в разметке, как валидатор. Это человек, который исключительно проверяет разметку. Обычно это самый душный человек (в хорошем смысле слова), который может прямо всматриваться в детали и подмечать какие-то порой даже несущественные мелочи. Но, тем не менее, для большинства сложных проектов это бывает очень важно. И валидатор позволяет разгрузить менеджера, чтобы он сам не проверял данные, что позволяет менеджеру, опять же, взять большее количество проектов. Валидаторов мы, конечно, берем в основном на длительные проекты.
В случае, если валидатор видит какое-то небольшое количество ошибок, то он сам может их поправить. Если их больше 10% разметки, то этот кусочек работы отдается обратно менеджеру. Менеджер дальше принимает решение, что с этим делать. Условно, если это первый раз, разметчика просят доработать кусок. Если же человек уже много раз неудачно разметил, то мы снимаем его с проекта, и обычно этот кусочек уходит другим разметчикам.
Если после проверки валидатора все хорошо, то партию данных финально просматривает менеджер, пролистывает рандомные кадры, оставляет какие-то свои комментарии, потому что все-таки глаз в таких делах тоже может замыливаться. Если в итоге все ок, то мы выгружаем данные. Это может быть сделано как вручную, так и автоматически, с помощью наших дата-инженерных систем. На этом, условно, для нас этап завершается. Дальше уже дата-сайентисты смотрят это на своей стороне и принимают решение о том, что, может быть, нужно вернуть что-то обратно на доработку или, может быть, что-то переразметить, потому что добавился новый класс.
Когда в первой партии все хорошо размечено, тогда мы уже начинаем размечать больший объем данных и уже меньше обращаемся к заказчику. По итогам проекта мы собираем обратную связь, анализируем, чтобы в дальнейшем улучшить какие-то рабочие моменты. Потому что бывают простые проекты, где классификация изображений может быть достаточно легкой. Но бывает, что нужно выделить что-то сложное на изображении. Например, снежные навалы или определить тип мусора. Это требует особого внимания, понимания, хорошо составленных инструкций.
Вместо послесловия
Хочу рассказать об одном из моих любимых проектов, где мы использовали вообще все способы разметки и все инструменты, которые у нас есть. Это кейс про определение породы собак. У нас была задача собрать фотографии одной собаки с разных ракурсов, чтобы уметь определять ее породу. Также нужна была разметка в виде текста, сколько ей лет и какая порода.
Мы собирали данные разными способами. Во-первых, у нас был проект на «Яндекс.Толоке», где мы просили хозяев присылать их питомцев с некоторыми текстовыми подписями. Собрали какое-то количество информации. Но нам нужно было гораздо больше данных. Плюс, как обычно, нам присылали всякие «левые» видео и фото. Конечно, на проверку всего этого тратится время.
Также нам удалось договориться с одним из приютов пофотографировать их собак во время прогулки, которая у них проходит в определенные часы. Часть ребят из нашей команды фотографировала собак. Это тоже долгий процесс, плюс был холодный период года, поэтому не особо комфортно было все это делать. Но часть данных мы тоже собрали таким образом. Еще часть данных мы просто искали в интернете, на тех же сайтах приютов.
Вот таким вот образом: данные тут, данные там. Так и насобирали необходимый объем данных. Какие-то данные – более качественные, какие-то – менее. Но, тем не менее, мне кажется, этот проект – классный пример того, как можно даже в инхаусе комбинировать разные методы сбора данных.
Еще один проект, которым я безумно горжусь, – это инклюзивный онлайн-курс по разметке данных, который мы сделали совместно с МТС и «Нетологией». То есть это образовательный продукт для людей с ограниченными возможностями здоровья, цель которого – показать новые возможности заработка денег не выходя из дома. С нашей стороны мы рассказывали ребятам про разметку изображений и видео. Коллеги из МТС рассказывали про аудио и текст.
И несмотря на то, что разметка данных часто сильно меньше оплачивается, чем Data Science, именно от разметки данных зависит на 33% как минимум, как дальше будет обучаться сетка, какого качества она получится. И поэтому работа сбора и разметки опасна и трудна, но тем не менее почетна. И приятно, что в последние годы все чаще говорят именно о том, как важно качество разметки. И все больше компаний начинают вкладываться именно в инхаус.
И если коллегам хочется развиваться куда-то дальше, то нужно чуть больше развивать технические навыки. И, например, уже сейчас наши менеджеры могут запускать полуавтоматическое обучение нейронных сетей. Понятное дело, что нам эти полуавтоматические скрипты написали датасайентисты, но в любом случае, мне кажется, это уже хороший такой уровень развития. Уже, глядишь, мы скоро сами все будем делать)