Рубрики
Без рубрики

Добыча данных квитанции с OCR, Regex и AI

Дополнительное распознавание изображения (OCR) часто является опцией по умолчанию, когда речь идет о экстрагировании данных документа … Теги с Python, машинным обучением, искусственным интеллектом.

Дополнительное распознавание изображения (OCR) часто является опцией по умолчанию, когда речь идет о добыче данных документа. Тем не менее, сам сканер OCR не может дать точные достаточно результатов, поэтому мы добавили регулярные выражения (Regex) и некоторые модели искусственного интеллекта (AI) в формулу.

Эта статья записывает наше путешествие, разработающее это окончательное решение, которое сейчас находится под названием Formx Отказ

Начнем с успешного случая первой – FormX сыграл важную роль в оптимизации процесса обращения к венружению программы выплаты неправительственной организации, позволяя им оцифровать данные из изображений, форм и физических документов из 43 000 Приложения.

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

Фото Карли Джин на Бессмысленно

Предлагаемые этапы решить проблему

Глубокая проблема, которую мы хотим решить, вот как извлекать {количество}, {date} и {время} из различных квитанций.

Существуют всевозможные квитанции с различными макетами, которые делают это сложным для извлечения только сумма, даты и времени. Мы придумали решение, которое имеет четыре основных этапа:

  1. Получите текстовые данные из-за получения изображений с технологией OCR.

  2. Фильтрующие выбросы и групповые текстовые данные в горизонтальные линии.

  3. Найти кандидатов из горизонтальных линий.

  4. Классифицируйте кандидаты с моделями AI и возвращают положительные.

Обратите внимание, что, в то время как Google Vision и другие провайдеры OCR втухаются там постоянно делают отличную работу при повороте изображения документа на массив строк, точная добыча данных получения требует еще несколько шагов. Узоры Regex отфильтруйте «кандидаты», где только наиболее вероятной один из каждого целей {дата, времени, общего количества} выбираются моделями AI.

Мы провели значительное количество времени на четвертом этапе выше, экспериментируя на модели AI и настройки параметров. Однако мы хотели бы подчеркнуть, что предварительная обработка (этапы 1-3) одинаково важны. Они улучшают качество текстовых данных, которые, в свою очередь, улучшают окончательный результат классификации.

Квитанция OCR через Google Vision

Это первый этап, когда изображение квитанции преобразуется в коллекцию текста с помощью API Google Vision.

Будет ли изображение для обучения моделям AI или на самом деле является квитанцией, которая будет иметь ее информацию, которую всегда передается, она всегда передается в API обнаружения текста Google для распознавания его текста. Стоит отметить, что – для усиления точности OCR, каждое изображение проходит через процесс деформации изображения первым.

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

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

Мы использовали только два самых основных, слово и символ. Первый – это массив символов, в то время как последний представляет собой характер или знак пунктуации. Вы можете найти более подробные определения этих иерархий в официальном уровне Google Документация Отказ

Оценка ориентации линии

К этому времени у нас есть тексты из квитанций, хранящихся под словом и символьными объектами.

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

  • Информация в квитанции почти всегда напечатана горизонтально. Текстовые элементы на той же горизонтальной линии гораздо чаще связаны.

  • Это удаляет слова, которые не достаточно горизонтально. Выход из OCR иногда может содержать некоторые вертикальные элементы, которые не наши целевые данные.

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

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

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

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

Рисунок 1. Добыча данных квитанции из относительно горизонтальных линий

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

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

Группировка слов в горизонтальные линии, с RANSAC

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

Фигура 2. Векторное направление ограничительной коробки

Все слова векторы вычисляются и хранятся в виде матрицы. Теперь нам нужно определить, горизонтально они на одной линии. Расчет расстояния между вектором каждого слова и средним вектором из всех слов кажется хорошим подходом. Если расстояние находится в пределах порога, он достаточно горизонтальный; В противном случае слово выброшено. Как только все слова проверяются, действительные могут быть сгруппированы в строки, отсортированные с их вертикальными смещениями (I.E., Y).

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

К счастью, есть поговорка – когда мы видим выбросы, мы их просматриваем! Случайный образец консенсуса (RANSAC) является алгоритмом для надежной модели в присутствии выбросов, которые, когда реализуются, выйдут их (то есть слова, которые не подходят). Чтобы запустить RANSAC, мы возьмем вектор каждого слова как один элемент данных.

Скажем, есть 70% шанс получить один inlier (значение в рамках шаблона) из всех слов, выбирая случайным образом. Мы должны быть на 99,99% уверены, что только инкисайты выбираются в соответствии с этой формулой:

Рисунок 3 Формула для выбора инбриверов

На рисунке 3 формула – где:

  • C требуется 3,999%

  • R ISLIER%

  • к Количество образцов, необходимых для установки модели, которая является вектором в каждом запуске (то есть, один в каждой итерации)

  • n Количество итерации, необходимое для достижения необходимой уверенности

Чтобы лучше визуализировать формулу, поместите цифры и сделайте математику. Вы увидите, что количество итераций ( n ) Необходимо иметь необходимое доверие ( C ) в получении хулиганов раз.

На самом деле, 70% случаев устойчивости пессимистичны, поскольку большинство слов на получении горизонтально напечатаны. Установка этого ниже, чем фактическое значение, обеспечивает устранение выбросов. Плюс, так как мы собираем одно слово каждый раз, чтобы проверить, если это inlier.

На основании n значений, вычисленных с RANSAC, мы бегали 10 итераций через необработанные слова, полученные массив слов, где 99,999% из них должны были быть уровневыми. Средний вектор может быть рассчитан.

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

Шотландские кандидаты с количеством, время и дата regex.

Прежде чем пройти данные в классификатор AI, нам нужно извлечь кандидаты из горизонтальных линий, в основном с регулярными выражениями (Regex). В этом случае любой текстовый узор, который выглядит как цена, дата или время, будет считаться кандидатом. Ниже приведен пример Regex для поиска суммы и цена кандидатов:

(?=((?:[^$0-9]|^)\$?(?:[1-9]\d{2}|[1-9]\d|[1-9])(?:,?\d{3})?(?:.\d{1,2})?))

Допустим, есть два соседних слова, 12/20 и 21/01/2020, в горизонтальной линии. Ничего-космическое кандидат объединяет два 12/2021/01/2020, который выглядит как действительно запутанная дата, и никто не может сказать, какую часть – это год. Если какая-либо часть этого – дата, которую мы обращаемся, мы можем в конечном итоге пропустить ее. Версия с космической версией 12/20 21/01/2020 гарантирует, что AI получает разделенные слова, которые улучшат вероятность высадки матча.

На этом этапе мы поняли, что Regex может быть очень удобным инструментом для чистых кандидатов. Следовательно, Builder regex доступен на портале Pormx, помогая пользователям принять правильное регулярное выражение для их целевого документа.

Извлечение данных с бинарными классификаторами AI

Три модели были обучены для наших соответствующих потребностей: цена, дата и время.

Обращаясь к потоке бесполезных метаданных

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

Модель сумки слов (лук)

Модель лука используется для первых классических текстов. В модели лука словарь построен из слов, которые появляются в подготовке квитанции. Если есть N уникальные слова, модель банта будет вектором с n измерениями.

Обычно модель банта записывает возникновение слов, но мы не в нашем случае. Каждое слово в данных классификации (I.E., копия квитанции изображения) будет соответствовать модели лук. Если слово не может быть найдено в этом словаре, он будет игнорироваться.

Для ценовых данных окружающий текст на той же линии будет вычислен против словаря лука. Если текущий кандидат не имеет окружающего текста, соответствующего словарю, они будут помечены как ложные. Для остальных линий +/- 1 принимаются во внимание, поскольку данные о дате или времени могут проживать через них.

Сумма классификатора

Модель, которую мы использовали для этого, – это логистическая регрессия (изучение и описание взаимосвязи между бинарными переменными, такими как Pass/Fail, Win/Fire, и т. Д.). Это входные параметры, которые мы использовали:

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

Имеет символы. Для кандидатов мы проверяем, что символы, указывающие на данные, связанные с ценами, существуют в шаблоне, такие как «$», «». “, И”, “.

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

Дата классификатора

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

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

Имеет символы. Мы проверяем наличие символов, которые подразумевают данные, связанные с датой, такие как Slash (/) или период (.). Наличие менее двух вхождений этого улучшает вероятность того, что у кандидата будет дата. Наличие полноценного года также является преимуществом. Например, кандидат, который имеет «2019» в нем, скорее всего, будет дата, чем другой, который имеет только «19». Месяцы на английском языке также являются хорошим показателем, а полностью прописано месяц, как «сентябрь», является плюсом.

Время и дата часто печатаются на одной линии или рядом друг с другом, что мы также учитываем во внимание. Кандидаты с непоследовательными делимитрами будут наказываться, такие как 11/04-2019, более 11/04/2019. Некоторые из других факторов, на которых мы смотрим, есть:

  • 1/(текущий год – извлеченный год + 1)

  • Если кандидат времени на той же линии или +/- одна линия

  • Если используются разные сепараторы

Время классификатора

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

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

Имеет символы. Кандидаты с «:» и пустым пространством с менее чем 2 вхождения, скорее всего, будут время. Те, с умом или PM, также являются главными кандидатами. Подобно, как дата классифицируется, кандидаты со словами, которые подразумевают данные, связанные с временем, получат дополнительные оценки.

Фото Алекс на Бессмысленно

Планы на будущее для formx

Подобно всем, как все мы делаем в нашем нашем, мы всегда находимся в поисках улучшения наших решений и процессов. Некоторые уже в работах. Мы стремимся тренировать модели различными входами и параметрами для повышения точности. Мы также планируем расширить наш набор набора данных. В настоящее время мы собираем стандартные формы по всему миру, такие как страховые формы в США.

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

Мы продолжим улучшать Formx, так что Оставайтесь настроиться Для получения большего количества наших исследований в прекрасный мир AI!

Дополнение :

  • Эта статья была обновлена 23 мая 5:25 стр. HKT с ключевыми обновлениями на введении, оценке линии ориентации, AI – бинарный классификатор и планы на будущее для FormX. Обновления в соответствии с нашей презентацией этой темы в Google Developer Group Гонконг ML Series 2020 , онлайн-событие и серия учебных заседаний на машинном обучении. Вебинар был представлен как “ Как извлекать 𝓧 от квитанций? ” , который состоялся 23 мая 2020 года.

  • Эта статья была обновлена 15 октября 2020 года, 3:36 HKT с нашей официальной Бренд/именем FORMX.

Оригинал: “https://dev.to/oursky/receipt-data-extraction-with-ocr-regex-and-ai-170a”