Создайте собственный набор данных для обучения модели LayoutLMV3.

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

Если вы читаете это, вы уже знаете, что создание набора данных, правильного набора данных для проверки поездов и проверки с правильными аннотациями, — это кропотливый и трудоемкий процесс. Несмотря на то, что инструменты маркировки данных, такие как LabelStudio, Rubrix, Prodigy (и многие другие), в значительной степени решили проблему маркировки данных, они все еще ограничены классификацией текста/изображений, NER, проблемами обнаружения объектов, и не существует инструмента за исключением UBIAI (https://ubiai.tools/), который предоставляет готовое решение для аннотирования отсканированных документов для использования в моделях LayoutLMV2 или LayoutLMV3.

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

Пожалуйста, продолжайте читать и посмотрите, как можно решить эту проблему, если она у вас есть.

Примечание. Этот процесс создания обучающих данных не предназначен для больших наборов данных размером 1000–10 000 документов. Скорее, для тех, кто хочет быстро создать прототип и PoC, чтобы проверить эффективность этой модели для своего приложения, это очень простой и эффективный способ. Для более крупного набора данных создание набора данных золотого стандарта можно выполнить с помощью опции оптического распознавания символов аннотаций в label-studio.

Шаг 1. Получите все необходимые предварительные условия

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

ПРИМЕЧАНИЕ. Основное предположение состоит в том, что в вашей системе уже установлена ​​программа Anaconda или Miniconda. Если нет, перейдите по ссылкам. Все приведенные здесь коды протестированы в средах Windows и Linux, за исключением маркировки, которая выполнялась в среде Windows.

Создайте среду Python-3.9 в anaconda, используя команду ниже.

conda create -n layoutlmv3 python=3.9

Установите необходимые пакеты Python для маркировки ваших данных и извлечения текста следующим образом.

pip install -r requirements.txt

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

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

Шаг 2. Начните наклеивать этикетки с помощью label-studio (настоящая тяжелая работа)

  • Преобразуйте данные в изображения

Первая задача при создании набора аннотаций данных — сохранить документы в формате изображения. Итак, если у вас есть собственный/отсканированный PDF-файл, я бы предложил сначала преобразовать его в изображения, используя ресурс ниже.



  • Запустить LabelStudio

Откройте LabelStudio с помощью приведенной ниже команды в только что созданной среде Python.

label-studio

Откроется панель маркировки LabelStudio, как показано ниже:

  • Завершить выделение объектов

Прежде чем мы начнем разметку, нам нужно решить, какие объекты мы планируем пометить в нашем наборе данных, и в демонстрационных целях предположим, что в этом руководстве мы пометим Номер счета, Дата, Сумма в счете. документы с тегами invoice_no, date, sum соответственно. Для этого урока я собираюсь использовать очень небольшой образец из набора данных RVL-CDIP.

  • Начать разметку и экспортировать данные в JSON

Посмотрите это видео на YouTube, чтобы начать маркировать и экспортировать данные в формат JSON.

После этого шага label-studio ведет себя странно: добавляет уникальную строку для каждого изображения, загруженного в инструмент. Чтобы избежать ошибок в имени файла на следующих шагах, перейдите по указанному ниже пути и скопируйте все загруженные изображения с измененным именем файла в текущий каталог внутри папки с именем «layoutlmv3» или с любым именем папки по вашему желанию.

  • Создать набор данных «текст+ограничительная рамка»

Теперь мы создадим необходимые файлы аннотаций для обучения, используя tesseract HOCR и аннотацию JSON, созданную на последнем шаге.

Шаг 3. Используйте метки tesseract и label-studio для создания обучающих файлов

Импортировать пакеты

Разбор выходных данных LabelStudio в DataFrame

Определение пользовательских функций

Прокрутите JSON LabelStudio для создания DataFrame

Определите label2id и id2label

Извлечение текста из изображений с помощью Tesseract HOCR

Разделение данных и запись окончательных данных в файлы обучения и тестирования

Файл train.txt должен выглядеть примерно так:

ПРИМЕЧАНИЕ. Чтобы сэкономить время, я аннотировал только 4 изображения и скопировал их так же, как и несколько изображений, для представления.

Еще один необходимый файл — «class_list.txt», содержащий список всех меток в формате, разделенном запятыми. Файл будет выглядеть примерно так:

Создайте правильную структуру папок для выполнения следующих шагов

На следующих шагах мы создадим правильную структуру папок для нашего кода, которую можно будет воспроизвести в Google Colab, и обучим модель в блокноте Colab.

  • Создайте папку с именем «layoutlmv3» в вашем текущем рабочем каталоге.
  • Скопируйте все файлы изображений, как указано выше, созданные после маркировки, в указанную выше папку.
  • Скопируйте train.txt, test.txt в указанную выше папку.
  • Скопируйте созданный выше файл class_list.txt в ту же папку Layoutlmv3.

Папка должна выглядеть примерно так.

Шаг 4. Создайте сценарий загрузки набора данных (второй по важности шаг после маркировки):

Пользовательские данные, аннотированные до сих пор, необходимо загрузить в формате набора данных Huggingface, чтобы их можно было использовать для последующей задачи точной настройки модели LayoutLMv3. Для этого я отредактировал скрипт загрузки данных, вдохновленный здесь. Если вы выполнили все описанные до сих пор шаги, вам не нужно ничего редактировать в этом файле. Просто скачайте/скопируйте его и используйте в текущем рабочем каталоге.

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

Шаг 5: Загрузите набор данных как объект набора данных преобразователей:

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

Создайте новый блокнот ipynb под названием invoice_dataset_loading.ipynb. Или вы можете взять его из git repo. Откройте блокнот и выполните следующие действия:

Установите необходимые библиотеки

Загрузить набор данных

Проверить загруженный набор данных

Загруженный набор данных должен выглядеть примерно так:

Осмотрите одно из изображений с аннотациями

Если до сих пор ошибок не было, это то, что вы должны увидеть в качестве вывода.

Шаг 6: Заключение (часть 2):

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

После создания набора данных обучение и настройка гиперпараметров становятся скорее итеративным процессом. Это руководство ни в коем случае не объясняет, как улучшить производительность модели, это всего лишь руководство по настройке и обучению пользовательской модели.

Оформите заказ часть-1, чтобы узнать архитектуру модели.
Ознакомьтесь с частью 3, чтобы продолжить обучение и доработку модели LayoutLMV3.