В этой конкретной статье мы рассмотрим проблему оцифровки квитанций, т.е. извлечение необходимой и важной информации в виде этикеток из бумажных квитанций, таких как медицинские счета, билеты и т. д. Такие модели могут быть очень полезны в реальной жизни и помогать пользователям, чтобы лучше понимать данные, поскольку большая часть нашей повседневной работы по-прежнему связана с бумажными квитанциями. В мире обработки естественного языка эта задача называется маркировкой последовательности, поскольку мы помечаем каждый входной объект в той или иной форме предопределенного класса, например, для обычных чеков для покупок в продуктовых магазинах, метки могут быть TOTAL_KEY, SUBTOTAL_KEY, COMPANY_NAME, COMPANY_ADDRESS, DATE, и т. д. На приведенной ниже диаграмме описан общий конвейер для этих видов работ, которые будут описаны один за другим в следующем разделе.

Мотивация использовать GNN/GCN?

Необходимость распознавать локальные закономерности в графах, подобно тому, как CNN сканирует входные данные через небольшое окно, распознавая локальные отношения между узлами в окне, GCN может начать с захвата локальных закономерностей между соседними узлами в графе [7]. . Распознавание иерархии шаблонов может быть широко использовано GCN.

Понимание конвейера

Давайте попробуем понять основной общий конвейер для таких проектов:

  • Входное изображение захватывается в форме изображения/видео, которое проходит ряд этапов обработки изображения, таких как обрезка квитанции из изображения, настройка гистограммы, настройка яркости и т. д. OpenCV является отраслевым стандартом для таких задач. Вы можете узнать о сегментации изображения, т.е. обрезать чек из изображения, из этой записной книжки [1], а также узнать о нескольких распространенных предварительных обработках здесь [2].
  • После того, как изображение обрезано и обработано соответствующим образом, мы предоставляем это изображение системам OCR [3]. Вы можете использовать облачные API Google [4], Tesseract [5] или любую систему OCR по вашему выбору в соответствии с вашим бюджетом, потребностями и точностью системы.
  • После процесса OCR у нас есть таблица, содержащая текст и его положение на входных изображениях. Обычно система OCR предоставляет координаты левой верхней точки и правой нижней точки для каждого обнаруженного текста.
  • Теперь самое интересное: выходные данные OCR, т. е. ограничивающие прямоугольники на квитанциях, используются для создания входного графа, который будет использоваться графовыми нейронными сетями. Каждая текстовая/ограничивающая рамка считается узлом, создание граничного соединения может иметь несколько способов. Один из таких методов [6] создает максимум четыре ребра для каждого узла, ребра соединяют каждую текстовую область с ее ближайшими четырьмя соседними текстовыми областями в каждом направлении (вверх, вниз, влево и вправо)[7]. Получите некоторое представление о том, как это можно закодировать отсюда [8].

  • Вывод OCR также используется для создания вложений. Для создания встраивания слов мы можем использовать перчатку или мы можем кодировать текстовые сегменты с помощью Transformer для получения встраивания текста. Вложения создаются для каждого обнаруженного текста и сохраняются в матрице признаков узла. Использование встраивания изображений является необязательным, но они продемонстрировали значительное улучшение в такой модели, как PICK [9], поскольку они могут нести полезную информацию, такую ​​​​как текст, кривизна текста и т. д. Мы можем думать об этом, как о том, что модель может предсказать, что текст относится к категории STORE_NAME. , если его размер шрифта большой, потому что обычно шрифты названия магазина крупнее, чем другой текст, присутствующий в чеках.
  • Эти два типа вложений объединяются для создания нового встраивания слияния для лучшего понимания данных и используются в качестве входных данных узла для нейронных сетей Graph. Чтобы лучше понять использование встраивания, предлагается пройтись по этой статье [9] и его реализации [10].
  • Для каждого выводимого текста у нас уже есть назначенные им выходные классы, которые будут использоваться для обучения. Вы можете искать такие наборы данных на основе квитанций, один из них [11].
  • На данный момент у нас есть матрица смежности (A), матрица признаков (x), созданная с использованием комбинации вложений слов и изображений для каждого узла, и, наконец, метки (y). Теперь мы можем относиться к этому как к обычной проблеме машинного обучения, где A и x являются независимыми функциями, а y зависит, что необходимо изучить и предсказать.
  • A, x и y будут использоваться для обучения моделей нейронных сетей на основе графа, которые научатся классифицировать каждый узел в возможных классах. GCN, нейронная сеть свертки графа, учится встраивать вектор признаков узла (комбинацию встраивания слов и структуру соединения с другими узлами), генерируя вектор действительных чисел, который представляет входной узел как точку в N-мерном пространстве и т.п. узлы будут сопоставлены с близкими соседними точками в пространстве вложения, что позволит обучить модель, способную классифицировать узлы [7]. В этой статье рассматривается теория, связанная с классификацией узлов [15].

  • Во-первых, модель обеспечивает удовлетворительные результаты набора тестов с точки зрения точности, оценки F1 и т. Д. Ее можно использовать на реальных данных для извлечения информации из печатных квитанций с точки зрения извлечения текста и прогнозирования их возможной категории.

Это просто обзор того, как работают эти системы, я могу порекомендовать узнать больше из [7], [12], [13], [16], и, возможно, это можно реализовать с помощью библиотек на основе графового обучения с открытым исходным кодом, таких как Spektral [14] или любую другую библиотеку по вашему выбору.

Использованная литература:

  1. Сегментация изображений с помощью OpenCV: https://www.kaggle.com/dmitryyemelyanov/receipt-ocr-part-1-image-segmentation-by-opencv
  2. Предобработка от OCR!!! : https://towardsdatascience.com/pre-processing-in-ocr-fc231c6035a7
  3. Оптическое распознавание символов: https://en.wikipedia.org/wiki/Optical_character_recognition
  4. API Google Vision: https://cloud.google.com/vision/docs/ocr
  5. Тессеракт: https://github.com/tesseract-ocr/tesseract
  6. Эффективное распознавание текста без лексикона с использованием глубокого обучения: https://arxiv.org/abs/1906.01969
  7. Извлечение информации из квитанций с помощью графовых сверточных сетей: https://nanonets.com/blog/information-extraction-graph-convolutional-networks/
  8. Свертка графа в структурированном документе: https://github.com/dhavalpotdar/Graph-Convolution-on-Structured-Documents/blob/master/grapher.py
  9. ВЫБОР: https://arxiv.org/abs/2004.07464
  10. ПИК-pytorch: https://github.com/wenwenyu/PICK-pytorch
  11. КОРД: https://github.com/clovaai/cord
  12. Автоматизация оцифровки чеков с помощью оптического распознавания символов и глубокого обучения: https://nanonets.com/blog/receipt-ocr/
  13. Свертка графа для извлечения мультимодельной информации для визуально насыщенных документов: https://arxiv.org/abs/1903.11279
  14. Спектрал: https://graphneural.network/
  15. Понимание GCN для классификации узлов: https://towardsdatascience.com/understanding-graph-convolutional-networks-for-node-classification-a2bfdb7aba7b
  16. Извлечение структурированных данных из счетов-фактур: https://medium.com/analytics-vidhya/extracting-structured-data-from-invoice-96cf5e548e40