Оптическое распознавание символов (OCR) - популярный метод, используемый для извлечения данных из отсканированных документов. Как и следовало ожидать, точность решения OCR зависит от качества изображений, используемых в качестве входных. Одной из проблем, с которыми сталкиваются практические применения решений OCR, является значительное падение точности на уровне слов в зависимости от точности на уровне символов. Решение OCR, которое достигает 98% точности на уровне символов, обнаруживает, что неправильно извлекает слова в 10–20% случаев, как показано в таблице ниже.

Один из способов повысить точность определения слов - использовать технику NLP (обработка естественного языка) для замены неправильных слов правильными. В этом блоге мы будем использовать программу проверки орфографии и BERT (предварительно обученную модель НЛП) для повышения точности распознавания текста.

BERT (двунаправленные представления кодировщика от Transformers) - это метод обработки естественного языка, разработанный Google. Модель BERT была обучена с использованием Википедии (2,5 млрд слов) + BookCorpus (800 млн слов). Модели BERT можно использовать для множества задач НЛП, включая предсказание предложений, классификацию предложений и предсказание пропущенных слов. В этом блоге мы будем использовать предварительно обученную модель BERT PyTorch для исправления слов, неправильно прочитанных OCR.

Использование BERT для повышения точности обработки OCR

Давайте рассмотрим пример с кодом. Я буду использовать python для обработки отсканированного изображения и создания текстового документа с помощью OCR и BERT.

A. Обработка отсканированного изображения с помощью OCR

Введите отсканированное изображение

Вывод OCR с некорректно проанализированными словами

Б. Обработка документа и определение нечитаемых слов

Неправильные слова выявляются функцией SpellChecker enchant. При использовании SpellChecker следует помнить о том, что он помечает необычные имена как слова с ошибками. Я могу обойти эту проблему, используя теги nltk части речи, чтобы исключить имена людей. Чтобы получить прогноз от BERT, каждое неверное слово необходимо заменить токеном [MASK]. Наконец, мы сохраним предложения замены слов из SpellChecker в нашем списке предлагаемых слов.

Документ с неправильными словами заменен на [МАСКА]

C. Загрузите модель BERT и спрогнозируйте замену слов

Модель BERT ищет токены [MASK], а затем пытается предсказать исходное значение замаскированных слов на основе контекста, предоставленного другими, немаскированными, словами в последовательности. BERT также принимает встраивание сегментов - вектор, используемый для различения нескольких предложений и помощи в предсказании слов. Например, вектор сегмента для «Том пошел в магазин. Он купил два галлона молока ». будет [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1].

D. Уточните прогнозы BERT, используя предложения SpellChecker

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

Окончательный результат с исправленными словами из BERT и SpellChecker

Теперь результат выглядит намного лучше! Некорректные слова были точно заменены благодаря предварительно обученной модели BERT.

Подведение итогов

Языковая модель BERT хорошо справляется с предсказанием жизнеспособных замен для замаскированного слова (слов). В приведенном выше примере, когда его попросили предсказать скрытое значение для «потребителя», модель предложила в качестве некоторых вариантов «налог», «правительство», «бизнес» и «потребитель». Хотя все эти предположения имеют смысл, «потребитель» не имеет наивысшей вероятности выпуска. Без SpellChecker для увеличения результатов BERT мы неправильно классифицировали бы замаскированные слова. Это может привести к проблемам при замене слов, в которых большинство символов неверно распознается OCR.

Обратите внимание, что методы, используемые в этом блоге, применимы к словам, а не к числам. Для проверки чисел, считываемых OCR, необходимо использовать другой подход (что-то вроде контрольной суммы). Я также рекомендую идентификацию ошибок / предложений для конкретных приложений, а не использовать только SpellChecker.