Журнал / герои

Как собрать данные для прорыва в машинном обучении

Сбор датасета рукописных текстов для создания ML-модели.

Для дипломной работы Саша Кондратенко наладила сбор изображений рукописных текстов. Она собрала датасет текстов на трех языках, который может помочь в создании новых моделей распознавания рукописей. Саша рассказала, какие проблемы сейчас есть в этой области, как она выбирала тему дипломной работы и с какими трудностями столкнулась при сборе данных.

Проблемы распознавания рукописных текстов

Зачем распознавать рукописный текст? Самое простое и близкое всем применение — распознавать фотографии собственных заметок и конспектов. Представьте, на рабочей встрече вы пишете заметки в блокнот, затем фотографируете их и получаете текст на компьютере, который можно редактировать и дополнять.

Более сложное и научное применение — распознавать исторические тексты, которые написаны от руки. Существуют проекты, которые занимаются расшифровкой старых книг. Люди вручную расшифровывают фотографии или сканы таких книг, и часто это сложный процесс. Машинное распознавание могло бы упростить эту работу.

Если копнуть еще глубже — появилась возможность распознавать старые манускрипты на древних языках. Людей, которые умеют это делать, можно пересчитать по пальцам. Если научить это делать компьютер — можно заметно ускорить процесс.

Но технологии распознавания рукописных текстов далеко не идеальны, и в этой области давно не было прорывов. Основная причина — нехватка данных. На примере того же NLP (Natural Language Processing) можно увидеть, что, как только появляется новый датасет, сразу создаются новые архитектуры, модели и подходы к обучению. Для рукописного же текста есть несколько моделей с открытым кодом, которыми может пользоваться каждый. Но возможности таких моделей сильно ограничены.

Во-первых, чаще всего модели обучены на английских текстах. Они не смогут распознать текст даже на языке с похожим алфавитом, например на испанском: они не знают слова, не знают специфические буквы и символы.

Во-вторых, данные для обучения, как правило, «академические», то есть они созданы почти в идеальных условиях. Люди заполняли специальные бланки на белой бумаге и старались писать аккуратно. Затем эти бланки сканировались в хорошем качестве, и на основе этих данных обучались модели.

В реальной жизни всё иначе. Люди могут писать как угодно: исправлять буквы, подчеркивать слова, писать по диагонали в конце строки и тому подобное. К тому же чаще всего мы фотографируем свои рукописные заметки, а не сканируем их. Добавьте к этому не идеально чистый лист бумаги, плохое освещение, и существующие модели уже не справятся с такими текстами.

Слева пример «академических» данных. Справа — жизнь.

Поэтому для того чтобы научиться распознавать такие тексты, сначала нужно собрать много реальных данных.

Как любовь к математике привела меня в машинное обучение

В старших классах школы я увлекалась математикой и информатикой. Участвовала в олимпиадах, даже дошла до всероссийской олимпиады по математике. Уже тогда я хотела поступить в МФТИ (Московский физико-технический институт). Мне кажется, что у них самая актуальная программа профильных предметов: программирования, математики и компьютерных наук. Я окончила бакалавриат в 2021 году и сейчас учусь в магистратуре Физтех-школы прикладной математики и информатики.

Для дипломной работы я решила создать датасет рукописных данных, чтобы потом его можно было использовать в моделях машинного обучения. Данные я собирала через Толоку. В Физтех-школе есть кафедра анализа данных Яндекса. Там я проходила курс по краудсорсингу: как работать с Толокой и правильно строить процессы, как следить за их ходом, контролировать исполнителей и так далее. Там я узнала, как взаимодействовать с Толокой с технической точки зрения, это мне очень помогло в дальнейшем.

В седьмом семестре я начала готовиться к диплому: формулировала концепции и инструкции, создавала интерфейс заданий для исполнителей. Еще я рассчитала бюджет. Выполнение заданий в Толоке не бесплатно: люди получают деньги за то, что переписывают для меня тексты. Я рассчитала примерную сумму, и Яндекс мне ее выделил.

В восьмом семестре я уже начала собирать данные. Мне хотелось показать, что Толока — это международная платформа. Русскоговорящих пользователей там больше, но носителей иностранных языков тоже достаточно. Поэтому я решила собирать тексты на трех языках: французском, арабском и испанском.

Первая проблема, с которой я столкнулась, — найти открытые источники художественных текстов, чтобы использовать их в заданиях для исполнителей. На многие тексты распространяются авторские права, и их нельзя просто так использовать. В итоге я остановилась на двух источниках: проект «Гутенберг» и Википедия. Я «нарезала» текст на отдельные предложения и просила исполнителей в Толоке переписать их от руки.

Следующая проблема — валидация картинок. Нужно быть уверенным, что пользователи пришлют нужный текст, а не фотографию котика. Есть много «исполнителей», которые хотят ничего не делать, но при этом получить деньги. А поскольку данных было очень много, проверять всё вручную было нереально.

Примеры того, что пользователи пытались выдать за рукописный текст

Сначала я отобрала тех, кто в настройках платформы указал знание нужных мне языков. Я хотела, чтобы тексты писали те, кто владеет конкретным языком, иначе это будут просто перерисованные буквы.

Затем я давала пользователям небольшое задание, чтобы проверить, что они знают язык. Если они присылали что-то адекватное, я открывала доступ к основным заданиям.

Результаты присланных работ я опять отправляла в Толоку на проверку другим пользователям. Они должны были подтвердить, что на фотографии именно тот текст, который нужен, и что он написан от руки. Это упростило мне работу, появилась дополнительная проверка: если исполнитель все же схалтурил, то другой человек скажет об этом.

Результаты и дальнейшая работа

Всего я собрала примерно по 8000 картинок для каждого языка: французского, испанского и арабского. Мой код есть на Гитхабе. Я не обучала свою модель, но провалидировала ту модель, которая сейчас есть для английского языка. Результат был ожидаемый: модель понимает только английский язык. Это подтвердило проблему, о которой я и заявляла в самом начале работы: имеющуюся модель нужно адаптировать к другим языкам. Надеюсь, что появление таких датасетов будет этому способствовать.

Ресурсы вроде Толоки дают доступ к большому пулу людей, которые готовы выполнять задания. Раньше для этого нужно было физически искать исполнителей, централизованно организовывать сбор данных офлайн. Поэтому я рекомендую студентам пользоваться Толокой там, где она может помочь. А чтобы отдача была еще лучше, я дам пару советов:

1. Максимально автоматизируйте процесс, чтобы не делать много ручной работы. Если бы я не знала, как технически работать с Толокой, мне пришлось бы намного дольше обрабатывать результаты.

2. Подготовьте качественные контрольные задания, по которым можно отсеять недобросовестных исполнителей.

После окончания учебы мой интерес к краудсорсингу и машинному обучению никуда не делся. Сейчас я работаю в Яндексе, наша команда занимается ASR (Automatic Speech Recognition). Мы тоже работаем с Толокой и собираем много голосовых данных для того, чтобы развивать технологии распознавания голоса.